protocolNotice.go 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. for _, s := range jyutil.JyDepartmentManager.GetLeaderId(ctx, saler.DeptId) {
  53. leaderMapping[s.Id] = append(leaderMapping[s.Id], &noticeRow)
  54. }
  55. }
  56. for sid, datas := range mapping {
  57. if mail := mailMapping[sid]; mail != "" {
  58. tableHtml := ""
  59. for i, data := range datas {
  60. tableHtml += fmt.Sprintf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
  61. i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, data.ContractMoney, data.CreateTime)
  62. }
  63. 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>",
  64. fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归 ,请及时将签订好的协议交由销管进行上传归档:", dayLimit), tableHtml), mail)
  65. }
  66. }
  67. for sid, datas := range leaderMapping {
  68. if sid == salerManagerId {
  69. continue
  70. }
  71. if sid == -1 {
  72. sid = salerManagerId
  73. if mailMapping[sid] == "" { //获取销管
  74. if t := jyutil.JyDepartmentManager.GetSalerByEntUserId(ctx, sid); t != nil {
  75. mailMapping[sid] = t.UserMail
  76. }
  77. }
  78. }
  79. if mail := mailMapping[sid]; mail != "" {
  80. tableHtml := ""
  81. for i, data := range datas {
  82. tableHtml += fmt.Sprintf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
  83. i+1, data.SalerName, data.OrderCode, data.CompanyName, data.PersonName, data.ContractMoney, data.CreateTime)
  84. }
  85. 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>",
  86. fmt.Sprintf("以下订单协议签订状态为签协议,已超过%d天仍未归档,请及时提醒相关人员将签订好的协议交由销管进行上传归档::", dayLimit), tableHtml), mail)
  87. }
  88. }
  89. }