protocolNotice.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package timedTask
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. "jyOrderManager/internal/jyutil"
  8. "time"
  9. )
  10. // OrderProtocolNotice
  11. // 订单审核通过后7天后(支持配置),协议状态为签协议,且协议归档状态为“未归档”,则发送邮件提醒该笔订单的销售人员、所属及上级部门的管理员、销管,
  12. func OrderProtocolNotice() {
  13. type NoticeRow struct {
  14. EntUserId int `json:"salesperson_entUserId"` //销售人员
  15. SalerName string `json:"salerName"` //销售人员名字
  16. OrderCode string `json:"order_code"` //订单号
  17. CreateTime string `json:"create_time"` //审核通过时间
  18. ContractMoney string `json:"contract_money"` //合同金额
  19. CompanyName string `json:"company_name"` //公司名称
  20. PersonName string `json:"personName"` //联系人
  21. }
  22. var (
  23. ctx = context.Background()
  24. dayLimit = g.Cfg().MustGet(ctx, "protocolNotice.dayLimit", 7).Int()
  25. salerManagerId = g.Cfg().MustGet(ctx, "protocolNotice.salerManager").Int()
  26. dataStartStr = g.Cfg().MustGet(ctx, "protocolNotice.startTime", "2025-06-19 00:00:00").String()
  27. dataEndStr = time.Now().AddDate(0, 0, -dayLimit).Format(time.DateTime)
  28. mapping = map[int][]*NoticeRow{} //销售人员待通知列表
  29. leaderMapping = map[int][]*NoticeRow{} //领导及销管
  30. mailMapping = map[int]string{} //邮箱
  31. 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' AND ar.create_time < '%s'", dataStartStr, dataEndStr)
  32. )
  33. res, err := g.DB().Query(ctx, execSql)
  34. if err != nil {
  35. g.Log().Error(ctx, err)
  36. }
  37. for _, m := range res.List() {
  38. var noticeRow NoticeRow
  39. if err := gconv.Struct(m, &noticeRow); err != nil {
  40. g.Log().Errorf(ctx, "OrderProtocolNotice range Struct err:%v", err)
  41. continue
  42. }
  43. saler := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, noticeRow.EntUserId)
  44. if saler == nil {
  45. continue
  46. }
  47. if saler.UserMail != "" {
  48. mailMapping[noticeRow.EntUserId] = saler.UserMail
  49. }
  50. noticeRow.SalerName = saler.Name
  51. mapping[noticeRow.EntUserId] = append(mapping[noticeRow.EntUserId], &noticeRow)
  52. leaderMapping[-1] = append(leaderMapping[-1], &noticeRow)
  53. var deptArr = []int{
  54. saler.DeptId, //本部门领导
  55. }
  56. //上级领导
  57. if ds := jyutil.JyDepartmentManager.GetDeptNode(saler.DeptId); ds != nil {
  58. deptArr = append(deptArr, ds.Pid)
  59. }
  60. for _, dept_id := range deptArr {
  61. if dept_id == 26819 { //最顶级部门不通知
  62. continue
  63. }
  64. for _, s := range jyutil.JyDepartmentManager.GetLeaderId(ctx, dept_id) {
  65. mailMapping[s.Id] = s.UserMail
  66. leaderMapping[s.Id] = append(leaderMapping[s.Id], &noticeRow)
  67. }
  68. }
  69. }
  70. for sid, datas := range mapping {
  71. if mail := mailMapping[sid]; mail != "" {
  72. tableHtml := ""
  73. for i, data := range datas {
  74. tableHtml += fmt.Sprintf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%v</td><td>%s</td></tr>",
  75. i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, gconv.Int64(data.ContractMoney)/100, data.CreateTime)
  76. }
  77. jyutil.SentMail(ctx, "协议归档提醒", fmt.Sprintf("<p>%s</p><table border><tr><th>序号</th><th>销售人员</th><th>订单编号</th><th>公司名称</th><th>联系人姓名</th><th>合同金额合计</th><th>订单审核通过时间</th></tr>%s</table>",
  78. fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归档,请及时将签订好的协议交由销管进行上传归档:", dayLimit), tableHtml), mail)
  79. }
  80. }
  81. for sid, datas := range leaderMapping {
  82. if sid == salerManagerId {
  83. continue
  84. }
  85. if sid == -1 {
  86. sid = salerManagerId
  87. if mailMapping[sid] == "" { //获取销管
  88. if t := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, sid); t != nil {
  89. mailMapping[sid] = t.UserMail
  90. }
  91. }
  92. }
  93. if mail := mailMapping[sid]; mail != "" {
  94. tableHtml := ""
  95. for i, data := range datas {
  96. tableHtml += fmt.Sprintf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%v</td><td>%s</td></tr>",
  97. i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, gconv.Int64(data.ContractMoney)/100, data.CreateTime)
  98. }
  99. jyutil.SentMail(ctx, "协议归档提醒", fmt.Sprintf("<p>%s</p><table border><tr><th>序号</th><th>销售人员</th><th>订单编号</th><th>公司名称</th><th>联系人姓名</th><th>合同金额合计</th><th>订单审核通过时间</th></tr>%s</table>",
  100. fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归档,请及时提醒相关人员将签订好的协议交由销管进行上传归档:", dayLimit), tableHtml), mail)
  101. }
  102. }
  103. }