company_contract.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package company_contract
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_task/models"
  7. "hongze/hongze_task/models/company"
  8. "hongze/hongze_task/models/company_approval"
  9. "hongze/hongze_task/models/company_contract"
  10. "hongze/hongze_task/services/alarm_msg"
  11. "hongze/hongze_task/services/cygx"
  12. "hongze/hongze_task/utils"
  13. "strings"
  14. "time"
  15. )
  16. // 合同处理
  17. func HandleCompanyContract(cont context.Context) (err error) {
  18. defer func() {
  19. if err != nil {
  20. //fmt.Println("合同处理 ErrMsg:"+err.Error())
  21. //go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  22. go alarm_msg.SendAlarmMsg("合同处理 ErrMsg:"+err.Error(), 3)
  23. }
  24. }()
  25. today := utils.GetToday(utils.FormatDate)
  26. total, list, err := company_contract.GetStartContractListByStartDate(today)
  27. if err != nil {
  28. fmt.Println("HandleCompanyContract Err:" + err.Error())
  29. utils.FileLog.Info("HandleCompanyContract Err:%s" + err.Error())
  30. return
  31. }
  32. fmt.Sprintln("总共d%条数据待处理", total)
  33. errorList := make([]string, 0)
  34. for _, v := range list {
  35. //fmt.Println(k, v.CompanyId)
  36. //fmt.Println(v)
  37. companyApproval, err := company_approval.GetCompanyApprovalByCompanyContractId(v.CompanyContractId)
  38. if err != nil {
  39. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";err:", err))
  40. continue
  41. }
  42. if companyApproval == nil {
  43. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";找不到对应的审批单"))
  44. continue
  45. }
  46. //客户产品信息
  47. companyProduct, err := models.GetCompanyProduct(v.CompanyId, v.ProductId)
  48. if err != nil {
  49. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";寻找客户产品时异常", ";Err:"+err.Error()))
  50. continue
  51. }
  52. if companyProduct == nil {
  53. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";寻找客户产品时异常2", ";Err:"+err.Error()))
  54. continue
  55. }
  56. //companyProduct.EndDate
  57. //格式化客户当前产品结束日期
  58. //companyProductEndDate, err := time.Parse(utils.FormatDate, companyProduct.EndDate)
  59. //if err != nil {
  60. // errorList = append(errorList,fmt.Sprint("合同id:",v.CompanyContractId,";格式化客户当前产品结束时间时异常 err:",err))
  61. // continue
  62. //}
  63. //格式化合同结束日期
  64. //contractEndDate, err := time.Parse(utils.FormatDate, v.EndDate)
  65. //if err != nil {
  66. // errorList = append(errorList,fmt.Sprint("合同id:",v.CompanyContractId,";格式化合同结束日期时异常 err:",err))
  67. // continue
  68. //}
  69. //如果 合同结束日期 小于 客户当前产品结束日期,那么不执行合同内容
  70. //if contractEndDate.Before(companyProductEndDate) {
  71. // errorList = append(errorList,fmt.Sprint("合同id:",v.CompanyContractId,";合同结束日期 小于 客户当前产品结束日期,不执行该合同内容"))
  72. // continue
  73. //}
  74. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新
  75. switch companyApproval.ApplyMethod {
  76. case 1:
  77. e := company.TryOutToFormal(v.CompanyId, v.ProductId, utils.AdminId, v.CompanyContractId, v.StartDate, v.EndDate, utils.RealName, v.ProductName, v.PackageType, v.RaiPackageType)
  78. if e != nil {
  79. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";TryOutToFormal Err: ", e.Error()))
  80. }
  81. case 5, 6:
  82. e := company.ApplyServiceUpdate(v.CompanyId, v.ProductId, utils.AdminId, v.CompanyContractId, v.StartDate, v.EndDate, utils.RealName, v.ProductName, v.PackageType, v.RaiPackageType)
  83. if e != nil {
  84. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";ApplyServiceUpdate Err: ", e.Error()))
  85. }
  86. default:
  87. errorList = append(errorList, fmt.Sprint("合同id:", v.CompanyContractId, ";审批单类型异常"))
  88. continue
  89. }
  90. {
  91. updateSource := ``
  92. switch companyApproval.ApplyMethod {
  93. case 1: //试用转正式
  94. updateSource = `turn_positive`
  95. case 2: //冻结->试用
  96. updateSource = "thaw"
  97. case 3: //试用延期
  98. updateSource = "delay"
  99. case 4: //原销售申请领取流失客户
  100. updateSource = "apply_receive"
  101. case 5: //正式客户申请续约
  102. updateSource = "service_update"
  103. case 6: //正式客户新增补充协议
  104. updateSource = "add_agreement"
  105. }
  106. tmpStartDate, _ := time.ParseInLocation(utils.FormatDate, v.StartDate, time.Local)
  107. tmpEndDate, _ := time.ParseInLocation(utils.FormatDate, v.EndDate, time.Local)
  108. companyProductUpdateLog := &models.CompanyProductUpdateLog{
  109. Id: 0,
  110. CompanyId: companyProduct.CompanyId,
  111. ProductId: companyProduct.ProductId,
  112. Status: companyProduct.Status,
  113. SellerId: companyProduct.SellerId,
  114. SellerName: companyProduct.SellerName,
  115. Source: updateSource,
  116. IsFormal: companyProduct.IsFormal, //是否已经转正式,0是没有转正式,1是已经转过正式
  117. StartDate: tmpStartDate,
  118. EndDate: tmpEndDate,
  119. CreateTime: time.Now(),
  120. }
  121. go models.AddCompanyProductUpdateLog(companyProductUpdateLog)
  122. }
  123. //研选审批通过的时候研选扣点更新
  124. {
  125. cygx.YanXuanCompanyApproval(v.CompanyId)
  126. }
  127. }
  128. //错误信息,批量返回错误信息
  129. if len(errorList) > 0 {
  130. err = errors.New(strings.Join(errorList, ";"))
  131. }
  132. return
  133. }