package timedTask import ( "context" "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" "jyOrderManager/internal/jyutil" "time" ) // OrderProtocolNotice // 订单审核通过后7天后(支持配置),协议状态为签协议,且协议归档状态为“未归档”,则发送邮件提醒该笔订单的销售人员、所属及上级部门的管理员、销管, func OrderProtocolNotice() { type NoticeRow struct { EntUserId int `json:"salesperson_entUserId"` //销售人员 SalerName string `json:"salerName"` //销售人员名字 OrderCode string `json:"order_code"` //订单号 CreateTime string `json:"create_time"` //审核通过时间 ContractMoney string `json:"contract_money"` //合同金额 CompanyName string `json:"company_name"` //公司名称 PersonName string `json:"personName"` //联系人 } var ( ctx = context.Background() dayLimit = g.Cfg().MustGet(ctx, "protocolNotice.dayLimit", 7).Int() salerManagerId = g.Cfg().MustGet(ctx, "protocolNotice.salerManager").Int() dataStr = time.Now().AddDate(0, 0, -dayLimit).Format(time.DateOnly) mapping = map[int][]*NoticeRow{} //销售人员待通知列表 leaderMapping = map[int][]*NoticeRow{} //领导及销管 mailMapping = map[int]string{} //邮箱 execSql = fmt.Sprintf("SELECT do.salesperson_entUserId,do.order_code,ar.create_time,c.contract_money,do.company_name,do.personName,do.create_person FROM jianyu.audit_records ar inner join jianyu.dataexport_order do on ar.order_code=do.order_code INNER JOIN jianyu.contract c on ar.order_code=c.order_code WHERE ar.operator_type =5 AND c.contract_archive_status=0 and c.contract_status=1 and do.salesperson_entUserId!='' AND ar.create_time > '%s 00:00:00'AND ar.create_time < '%s 23:59:59'", dataStr, dataStr) ) res, err := g.DB().Query(ctx, execSql) if err != nil { g.Log().Error(ctx, err) } for _, m := range res.List() { var noticeRow NoticeRow if err := gconv.Struct(m, ¬iceRow); err != nil { g.Log().Errorf(ctx, "OrderProtocolNotice range Struct err:%v", err) continue } saler := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, noticeRow.EntUserId) if saler == nil { continue } if saler.UserMail != "" { mailMapping[noticeRow.EntUserId] = saler.UserMail } noticeRow.SalerName = saler.Name mapping[noticeRow.EntUserId] = append(mapping[noticeRow.EntUserId], ¬iceRow) leaderMapping[-1] = append(leaderMapping[-1], ¬iceRow) for _, s := range jyutil.JyDepartmentManager.GetLeaderId(ctx, saler.DeptId) { leaderMapping[s.Id] = append(leaderMapping[s.Id], ¬iceRow) } } for sid, datas := range mapping { if mail := mailMapping[sid]; mail != "" { tableHtml := "" for i, data := range datas { tableHtml += fmt.Sprintf("%d%s%s%s%s%s%s", i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, data.ContractMoney, data.CreateTime) } jyutil.SentMail(ctx, "协议归档提醒", fmt.Sprintf("

%s

%s
序号销售人员订单编号公司名称联系人姓名合同金额合计订单审核通过时间
", fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归 ,请及时将签订好的协议交由销管进行上传归档:", dayLimit), tableHtml), mail) } } for sid, datas := range leaderMapping { if sid == salerManagerId { continue } if sid == -1 { sid = salerManagerId if mailMapping[sid] == "" { //获取销管 if t := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, sid); t != nil { mailMapping[sid] = t.UserMail } } } if mail := mailMapping[sid]; mail != "" { tableHtml := "" for i, data := range datas { tableHtml += fmt.Sprintf("%d%s%s%s%s%s%s", i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, data.ContractMoney, data.CreateTime) } jyutil.SentMail(ctx, "协议归档提醒", fmt.Sprintf("

%s

%s
序号销售人员订单编号公司名称联系人姓名合同金额合计订单审核通过时间
", fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归档,请及时提醒相关人员将签订好的协议交由销管进行上传归档::", dayLimit), tableHtml), mail) } } }