company_approval_message.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package services
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_mobile_admin/models"
  6. "hongze/hongze_mobile_admin/models/tables/admin"
  7. "hongze/hongze_mobile_admin/models/tables/company_approval_message"
  8. "hongze/hongze_mobile_admin/models/tables/company_contract"
  9. "hongze/hongze_mobile_admin/models/tables/company_product"
  10. "hongze/hongze_mobile_admin/models/tables/cygx_config"
  11. "hongze/hongze_mobile_admin/services/alarm_msg"
  12. "hongze/hongze_mobile_admin/utils"
  13. "time"
  14. )
  15. //消息来源类型,1:客户,2:合同,3:用印,4:指标替换,5:问答社区,6:问答评论,7:视频评论,8:线上路演评论
  16. const (
  17. CompanyApprovalMessageSourceTypeByCompany = 1
  18. CompanyApprovalMessageSourceTypeByContract = 2
  19. CompanyApprovalMessageSourceTypeBySeal = 3
  20. CompanyApprovalMessageSourceTypeByEdbInfo = 4
  21. CompanyApprovalMessageSourceTypeByQuestion = 5
  22. CompanyApprovalMessageSourceTypeByQuestionComment = 6
  23. CompanyApprovalMessageSourceTypeByVideoComment = 7
  24. CompanyApprovalMessageSourceTypeByRoadVideoComment = 8
  25. )
  26. // 1:申请消息,2:审批结果,3:消息通知
  27. const (
  28. CompanyApprovalMessageMessageTypeByApply = 1
  29. CompanyApprovalMessageMessageTypeByApprovalResult = 2
  30. CompanyApprovalMessageMessageTypeByMessage = 3
  31. )
  32. //审批状态,1:待审批,2:已审批,3:已驳回
  33. const (
  34. CompanyApprovalMessageApprovalStatusByPending = 1
  35. CompanyApprovalMessageApprovalStatusByApproved = 2
  36. CompanyApprovalMessageApprovalStatusByRejected = 3
  37. )
  38. // MessageInfo 消息主要内容
  39. type MessageInfo struct {
  40. CompanyName string `json:"company_name"`
  41. ProductId int `json:"product_id"`
  42. CompanyProductStatus string `json:"company_product_status"`
  43. Title string `json:"title"`
  44. Content string `json:"content"`
  45. UserId uint64 `json:"user_id"`
  46. UserName string `json:"user_name"`
  47. CreateTime time.Time `json:"create_time"`
  48. Extra string `json:"extra" description:"附加字段"`
  49. MessageSource string `json:"message_source" description:"消息来源:问答社区/视频社区/线上路演"`
  50. }
  51. // AddCompanyApprovalMessage 添加待办消息
  52. func AddCompanyApprovalMessage(createUserId, receiveUserId, companyId, companyApprovalId, msgType, sourceType, approvalStatus int, companyName, remark, content, mobile, messageInfo string) (err error) {
  53. defer func() {
  54. if err != nil {
  55. fmt.Println("异常提醒:"+utils.RunMode, "给用户发送消息失败,ERR:"+err.Error()+"", utils.EmailSendToUsers)
  56. //go utils.SendEmail("异常提醒:"+utils.RunMode, "给用户发送消息失败,ERR:"+err.Error()+"", utils.EmailSendToUsers)
  57. go alarm_msg.SendAlarmMsg("给用户发送消息失败,ERR:"+err.Error(), 3)
  58. }
  59. }()
  60. if msgType == 2 {
  61. company_approval_message.ModifyCompanyApprovalMessage(companyApprovalId, sourceType)
  62. }
  63. msgItem := new(company_approval_message.CompanyApprovalMessage)
  64. msgItem.CreateUserId = createUserId
  65. msgItem.ReceiveUserId = receiveUserId
  66. msgItem.MessageStatus = 0 //消息状态:0未读,1:已读,2:作废
  67. msgItem.Remark = remark
  68. msgItem.Content = content
  69. msgItem.CompanyId = companyId
  70. msgItem.CompanyName = companyName
  71. msgItem.CreateTime = time.Now()
  72. msgItem.ModifyTime = time.Now()
  73. msgItem.CompanyApprovalId = companyApprovalId
  74. msgItem.OperationStatus = 1 //消息状态:1:待审批,2:已审批
  75. msgItem.MessageType = msgType //1:申请消息,2:审批结果,3:消息通知
  76. msgItem.SourceType = sourceType //消息来源,1:客户,2:合同,3:用印
  77. msgItem.ApprovalStatus = approvalStatus //审批状态,1:待审批,2:已审批,3:已驳回
  78. msgItem.MessageInfo = messageInfo //消息主要内容,json数据
  79. err = company_approval_message.AddCompanyApprovalMessage(msgItem)
  80. if mobile != "" {
  81. //跳转地址
  82. redirectUrl := ""
  83. //微信小程序路径
  84. wxAppPath := ``
  85. //微信消息map数据
  86. wxMsgMap := make(map[int]string)
  87. switch msgType {
  88. case 1:
  89. wxMsgMap[0] = "Hi,您有新的审批单待处理"
  90. case 2:
  91. wxMsgMap[0] = "Hi,您有新的审批单已处理"
  92. case 3:
  93. wxMsgMap[0] = "Hi,有新的消息待查看"
  94. wxAppPath = "pages-todomessages/list/list?type=" + fmt.Sprint(sourceType)
  95. }
  96. //审批类型
  97. switch sourceType {
  98. case 2:
  99. wxMsgMap[1] = "合同审批"
  100. case 3:
  101. wxMsgMap[1] = "用印审批"
  102. default:
  103. wxMsgMap[1] = "客户审批"
  104. }
  105. //产生时间
  106. wxMsgMap[2] = time.Now().Format(utils.FormatDateTime)
  107. //任务描述
  108. wxMsgMap[3] = content
  109. //pages-todomessages/list/list?type=1(1:客户,2:合同,3:用印)
  110. if sourceType == 1 { //目前只有客户审批才有手机端审核页面
  111. redirectUrl = utils.TemplateCompanyApplyRedirectUrl
  112. }
  113. if wxAppPath == "" {
  114. //小程序跳转路径map;下标是:来源_消息类型
  115. wxAppPathMap := map[string]string{
  116. "1_1": "pages-approve/custome/list",
  117. "1_2": "pages-approve/custome/detail?id=" + fmt.Sprint(companyApprovalId),
  118. "2_1": "pages-approve/contract/list",
  119. "2_2": "pages-approve/contract/detail?ContractApprovalId=0&ContractId=0&ContractApprovalRecordId=" + fmt.Sprint(companyApprovalId),
  120. "3_1": "pages-approve/seal/list",
  121. "3_2": "pages-approve/seal/detail?ContractApprovalId=0&SealId=0&ContractApprovalRecordId=" + fmt.Sprint(companyApprovalId),
  122. }
  123. key := fmt.Sprint(sourceType, "_", msgType)
  124. if tmpWxAppPath, ok := wxAppPathMap[key]; ok {
  125. wxAppPath = tmpWxAppPath
  126. }
  127. }
  128. go SendCompanyApplyWxTemplateMsg(mobile, redirectUrl, wxAppPath, wxMsgMap)
  129. }
  130. return
  131. }
  132. // AddCompanyApprovalMessageRai 权益销售客户申请转正后,消息群发给所有销售
  133. func AddCompanyApprovalMessageRai(companyId , companyContractId int, applyRealName, companyName string) (err error) {
  134. defer func() {
  135. if err != nil {
  136. fmt.Println("err:", err)
  137. go alarm_msg.SendAlarmMsg("权益销售客户申请转正后,消息群发给所有销售,Err:"+err.Error()+fmt.Sprint("companyId:",companyId,"companyContractId:",companyContractId,"applyRealName:",applyRealName,"companyName:",companyName), 3)
  138. }
  139. }()
  140. companyProduct, err := company_product.GetCompanyProductByCompanyIdAndProductId(companyId, 2)
  141. if err != nil {
  142. return
  143. }
  144. if companyProduct == nil {
  145. return
  146. }
  147. contractDetail, err := company_contract.GetCompanyContractDetail(companyId, 2, companyContractId)
  148. if err != nil {
  149. return
  150. }
  151. var first, keyword1, keyword2, keyword3, keyword4 string
  152. keyword1 = applyRealName + "已签约" + companyName
  153. keyword2 = time.Now().Format(utils.FormatDate)
  154. keyword3 = contractDetail.StartDate
  155. adminList, err := admin.GetSysuserRaiList()
  156. if err != nil {
  157. return
  158. }
  159. var mobiles [] string
  160. for _, v := range adminList {
  161. mobiles = append(mobiles,v.Mobile)
  162. }
  163. openIdList, err := models.GetUserRecordListByMobileArr(mobiles)
  164. if err != nil && err.Error() != utils.ErrNoRow() {
  165. return err
  166. }
  167. go SendWxMsgWithRaiSell(first, keyword1, keyword2, keyword3, keyword4, openIdList)
  168. return
  169. }
  170. // AddCompanyApprovalMessageWangYang 客户研选行业转正时(王芳审批通过),模板消息提醒汪洋
  171. func AddCompanyApprovalMessageWangYang(companyId , companyContractId int, applyRealName, companyName string) (err error) {
  172. defer func() {
  173. if err != nil {
  174. go alarm_msg.SendAlarmMsg("客户研选行业转正时(王芳审批通过),模板消息提醒汪洋,Err:"+err.Error()+fmt.Sprint("companyId:",companyId,"companyContractId:",companyContractId,"applyRealName:",applyRealName,"companyName:",companyName), 3)
  175. }
  176. }()
  177. //如果是研选的就推送给汪洋
  178. count, e := company_contract.GetCompanyContractPermissionCheckByContractId(companyId, companyContractId, utils.CHART_PERMISSION_ID_YANXUAN)
  179. if e != nil {
  180. err = errors.New("GetCompanyContractPermissionCheckByContractId, Err: " + e.Error())
  181. return
  182. }
  183. if count == 0 {
  184. return
  185. }
  186. var keyword1, keyword2, keyword3, keyword4 string
  187. keyword1 = companyName + "(" + applyRealName+")"
  188. keyword2 = "买方研选转正"
  189. cnf, e := cygx_config.GetConfigByCode(utils.TPL_MSG_WANG_YANG)
  190. if e != nil {
  191. err = errors.New("GetConfigByCode, Err: " + e.Error())
  192. return
  193. }
  194. var mobiles [] string
  195. mobiles = append(mobiles,cnf.ConfigValue)
  196. openIdList, err := models.GetUserRecordListByMobileArr(mobiles)
  197. if err != nil && err.Error() != utils.ErrNoRow() {
  198. return err
  199. }
  200. go SendWxMsgWithRaiWangYang(keyword1, keyword2, keyword3, keyword4, openIdList)
  201. return
  202. }