protocolNotice.go 4.6 KB

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