|
|
@@ -0,0 +1,72 @@
|
|
|
+package work
|
|
|
+
|
|
|
+import (
|
|
|
+ "dashoo.cn/micro/app/service"
|
|
|
+ "database/sql"
|
|
|
+ "fmt"
|
|
|
+ "github.com/gogf/gf/frame/g"
|
|
|
+ "github.com/gogf/gf/os/glog"
|
|
|
+ "github.com/gogf/gf/os/gtime"
|
|
|
+ "github.com/gogf/gf/util/gconv"
|
|
|
+ "github.com/robfig/cron"
|
|
|
+)
|
|
|
+
|
|
|
+// 初始化,创建每10分钟执行一次的定时任务
|
|
|
+func init() {
|
|
|
+ // 定时任务
|
|
|
+ c := cron.New()
|
|
|
+ spec := "1 0/10 * * * ?" // 每天10分钟执行一次
|
|
|
+
|
|
|
+ if err := c.AddJob(spec, deliverOrderProgressCron{}); err != nil {
|
|
|
+ glog.Error(err)
|
|
|
+ }
|
|
|
+ c.Start()
|
|
|
+}
|
|
|
+
|
|
|
+// 交接任务单定时任务定义
|
|
|
+type deliverOrderProgressCron struct {
|
|
|
+}
|
|
|
+
|
|
|
+// Run 交接任务单定时任务逻辑
|
|
|
+func (c deliverOrderProgressCron) Run() {
|
|
|
+ tenant := g.Config().GetString("micro_srv.tenant")
|
|
|
+ if tenant == "" {
|
|
|
+ glog.Error("交接任务单定时任务租户码未设置,请前往配置")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 当前时间
|
|
|
+ now := gtime.Now()
|
|
|
+ // 获取发货任务单中的预计到货时间
|
|
|
+ progress, err := g.DB(tenant).Model("deliver_order o").InnerJoin("deliver_order_imp_progress p", "o.id=p.deliver_order_id").InnerJoin("proj_business b", "b.id=o.project_id").Where(fmt.Sprintf("p.progress_type='10' AND p.progress_status='20' AND p.estimated_arrival_time<='%v'", now.Format("Y-m-d H:i:s"))).Group("p.id").Fields("p.*,b.sale_id").FindAll()
|
|
|
+ if err != nil && err != sql.ErrNoRows {
|
|
|
+ glog.Error(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, p := range progress {
|
|
|
+ // 校验当前时间
|
|
|
+ remindTime := p["estimated_arrival_time"].GTime()
|
|
|
+ // 10分钟一次定时循环,两者相差在10分钟之内(纳秒转换1e9)
|
|
|
+ if (now.Nanosecond()-remindTime.Nanosecond())/(1*60*1e9) <= 10 {
|
|
|
+ ids := gconv.String(p["principal_person_id"])
|
|
|
+ if gconv.String(p["sale_id"]) != gconv.String(p["principal_person_id"]) {
|
|
|
+ ids += "," + gconv.String(p["sale_id"])
|
|
|
+ }
|
|
|
+ notifyMessage(ids, "您的产品已经到达,请尽快进行产品验收")
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// notifyMessage 发送消息通知
|
|
|
+func notifyMessage(ids, message string) {
|
|
|
+ msg := g.MapStrStr{
|
|
|
+ "msgTitle": "到货验收提醒",
|
|
|
+ "msgContent": fmt.Sprintf("<p>%v</p>", message),
|
|
|
+ "msgType": "20",
|
|
|
+ "recvUserIds": ids,
|
|
|
+ "msgStatus": "10",
|
|
|
+ "sendType": "10",
|
|
|
+ }
|
|
|
+ if err := service.CreateSystemMessage(msg); err != nil {
|
|
|
+ glog.Error("消息提醒异常:", err)
|
|
|
+ }
|
|
|
+}
|