protocolNotice.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. dataStr = time.Now().AddDate(0, 0, -dayLimit).Format(time.DateOnly)
  27. mapping = map[int][]*NoticeRow{} //销售人员待通知列表
  28. leaderMapping = map[int][]*NoticeRow{} //领导及销管
  29. mailMapping = map[int]string{} //邮箱
  30. 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)
  31. )
  32. res, err := g.DB().Query(ctx, execSql)
  33. if err != nil {
  34. g.Log().Error(ctx, err)
  35. }
  36. for _, m := range res.List() {
  37. var noticeRow NoticeRow
  38. if err := gconv.Struct(m, &noticeRow); err != nil {
  39. g.Log().Errorf(ctx, "OrderProtocolNotice range Struct err:%v", err)
  40. continue
  41. }
  42. saler := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, noticeRow.EntUserId)
  43. if saler == nil {
  44. continue
  45. }
  46. if saler.UserMail != "" {
  47. mailMapping[noticeRow.EntUserId] = saler.UserMail
  48. }
  49. noticeRow.SalerName = saler.Name
  50. mapping[noticeRow.EntUserId] = append(mapping[noticeRow.EntUserId], &noticeRow)
  51. leaderMapping[-1] = append(leaderMapping[-1], &noticeRow)
  52. var deptArr = []int{
  53. saler.DeptId, //本部门领导
  54. }
  55. //上级领导
  56. if ds := jyutil.JyDepartmentManager.GetDeptNode(saler.DeptId); ds != nil {
  57. deptArr = append(deptArr, ds.Pid)
  58. }
  59. for _, dept_id := range deptArr {
  60. if dept_id == 26819 { //最顶级部门不通知
  61. continue
  62. }
  63. for _, s := range jyutil.JyDepartmentManager.GetLeaderId(ctx, dept_id) {
  64. mailMapping[s.Id] = s.UserMail
  65. leaderMapping[s.Id] = append(leaderMapping[s.Id], &noticeRow)
  66. }
  67. }
  68. }
  69. for sid, datas := range mapping {
  70. if mail := mailMapping[sid]; mail != "" {
  71. tableHtml := ""
  72. for i, data := range datas {
  73. 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>",
  74. i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, gconv.Int64(data.ContractMoney)/100, data.CreateTime)
  75. }
  76. 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>",
  77. fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归 ,请及时将签订好的协议交由销管进行上传归档:", dayLimit), tableHtml), mail)
  78. }
  79. }
  80. for sid, datas := range leaderMapping {
  81. if sid == salerManagerId {
  82. continue
  83. }
  84. if sid == -1 {
  85. sid = salerManagerId
  86. if mailMapping[sid] == "" { //获取销管
  87. if t := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, sid); t != nil {
  88. mailMapping[sid] = t.UserMail
  89. }
  90. }
  91. }
  92. if mail := mailMapping[sid]; mail != "" {
  93. tableHtml := ""
  94. for i, data := range datas {
  95. 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>",
  96. i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, gconv.Int64(data.ContractMoney)/100, data.CreateTime)
  97. }
  98. 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>",
  99. fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归档,请及时提醒相关人员将签订好的协议交由销管进行上传归档:", dayLimit), tableHtml), mail)
  100. }
  101. }
  102. }