company_product.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "hongze/hongze_task/models"
  6. "hongze/hongze_task/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. //客户自动冻结->试用两个月结束后,进入冻结
  12. func CompanyFreeze(cont context.Context) (err error) {
  13. defer func() {
  14. if err != nil {
  15. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "试用两个月结束后,进入冻结 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  16. }
  17. }()
  18. endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  19. items, err := models.GetCompanyNeedFreeze(endDate)
  20. if err != nil {
  21. fmt.Println("GetCompanyNeedFreeze Err:" + err.Error())
  22. utils.FileLog.Info("GetCompanyNeedFreeze Err:%s" + err.Error())
  23. return
  24. }
  25. for k, v := range items {
  26. fmt.Println(k, v.CompanyId)
  27. count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
  28. if err != nil {
  29. return err
  30. }
  31. if count > 0 {
  32. continue
  33. }
  34. //试用转冻结
  35. companyReportPermissionList, err := models.CompanyFreeze(v.CompanyId, v.ProductId)
  36. if err != nil {
  37. utils.FileLog.Info("CompanyFreeze Err:%s" + err.Error())
  38. return err
  39. }
  40. //新增操作记录
  41. {
  42. remark := "试用转冻结"
  43. operation := "freeze"
  44. approveContent := ""
  45. go AddCompanyOperationRecord(v.CompanyId, utils.AdminId, v.ProductId, utils.AdminId, v.CompanyName,
  46. v.ProductName, utils.RealName, remark, operation, approveContent, approveContent, "", v.Status)
  47. //新增 客户产品权限 试用 转 冻结 的日志
  48. for _, v := range companyReportPermissionList {
  49. _ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, remark, operation, v.Status)
  50. }
  51. }
  52. }
  53. return
  54. }
  55. //客户自动流失->冻结超3个月未处理
  56. func CompanyLoss(cont context.Context) (err error) {
  57. defer func() {
  58. if err != nil {
  59. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "自动流失->冻结超3个月未处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  60. }
  61. }()
  62. endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  63. items, err := models.GetCompanyNeedLoss(endDate)
  64. if err != nil {
  65. fmt.Println("GetCompanyNeedLoss Err:" + err.Error())
  66. utils.FileLog.Info("GetCompanyNeedLoss Err:%s" + err.Error())
  67. return
  68. }
  69. for k, v := range items {
  70. fmt.Println(k, v.CompanyId)
  71. count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
  72. if err != nil {
  73. return err
  74. }
  75. if count > 0 {
  76. continue
  77. }
  78. err = models.CompanyLoss(v.CompanyId, v.ProductId)
  79. if err != nil {
  80. utils.FileLog.Info("CompanyLoss Err:%s" + err.Error())
  81. return err
  82. }
  83. //新增操作记录
  84. {
  85. remark := "冻结转流失"
  86. operation := "loss"
  87. approveContent := "流失"
  88. AddCompanyOperationRecord(v.CompanyId, utils.AdminId, v.ProductId, utils.AdminId, v.CompanyName,
  89. v.ProductName, utils.RealName, remark, operation, approveContent, approveContent, "", v.Status)
  90. }
  91. }
  92. return
  93. }
  94. //正式客户自动试用->合同到期未续约转试用
  95. func CompanyTryOut(cont context.Context) (err error) {
  96. defer func() {
  97. if err != nil {
  98. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "正式客户自动试用->合同到期未续约转试用 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
  99. }
  100. }()
  101. endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  102. items, err := models.GetCompanyNeedTryOut(endDate)
  103. if err != nil {
  104. fmt.Println("GetCompanyNeedTryOut Err:" + err.Error())
  105. utils.FileLog.Info("GetCompanyNeedTryOut Err:%s" + err.Error())
  106. return
  107. }
  108. for k, v := range items {
  109. count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
  110. if err != nil {
  111. return err
  112. }
  113. if count > 0 {
  114. continue
  115. }
  116. fmt.Println(k, v.CompanyId)
  117. //客户正式转试用
  118. companyReportPermissionList, err := models.CompanyTryOut(v.CompanyId, v.ProductId)
  119. if err != nil {
  120. utils.FileLog.Info("CompanyLoss Err:%s" + err.Error())
  121. return err
  122. }
  123. //新增操作记录
  124. {
  125. remark := "正式转试用"
  126. operation := "try_out"
  127. approveContent := "试用"
  128. AddCompanyOperationRecord(v.CompanyId, utils.AdminId, v.ProductId, utils.AdminId, v.CompanyName,
  129. v.ProductName, utils.RealName, remark, operation, approveContent, approveContent, "", v.Status)
  130. //新增 客户产品权限 正式 转 试用 的日志
  131. for _, v := range companyReportPermissionList {
  132. _ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, remark, operation, v.Status)
  133. }
  134. }
  135. }
  136. return
  137. }
  138. func AddCompanyOperationRecord(companyId, sysUserId, productId, approveAdminId int, companyName, productName, sysUserRealName, remark, operation, approveContent, approveUserRealName, approveRemark, status string) (err error) {
  139. defer func() {
  140. if err != nil {
  141. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "services:AddCompanyOperationRecord;Err"+err.Error(), utils.EmailSendToUsers)
  142. }
  143. }()
  144. record := new(models.CompanyOperationRecord)
  145. record.CompanyId = companyId
  146. record.CompanyName = companyName
  147. record.SysUserId = sysUserId
  148. record.SysRealName = sysUserRealName
  149. record.Remark = remark
  150. record.Operation = operation
  151. record.CreateTime = time.Now()
  152. record.ProductId = productId
  153. record.ProductName = productName
  154. record.ApproveUserId = approveAdminId
  155. record.ApproveRealName = approveUserRealName
  156. record.ApproveContent = approveContent
  157. record.ApproveRemark = approveRemark
  158. record.Status = status
  159. _, err = models.AddCompanyOperationRecord(record)
  160. return
  161. }
  162. //客户老数据同步
  163. func CompanyOldDataSync() {
  164. companyItems, err := models.GetCompanyOldDataSync()
  165. if err != nil {
  166. fmt.Println("GetCompanyOldDataSync Err:" + err.Error())
  167. return
  168. }
  169. productId := 1
  170. productName := "ficc"
  171. for k, v := range companyItems {
  172. fmt.Println(k, v.CompanyName, v.CompanyId)
  173. productItem := new(models.CompanyProduct)
  174. productItem.CompanyId = v.CompanyId
  175. productItem.ProductId = productId
  176. productItem.ProductName = productName
  177. productItem.CompanyName = v.CompanyName
  178. //客户标签,1:付费客户,2:试用客户,3:流失客户,4:潜在客户,5:永续
  179. //'试用','永续','冻结','流失','正式','潜在'
  180. status := ""
  181. if v.CompanyType == 1 {
  182. status = "正式"
  183. } else if v.CompanyType == 2 {
  184. status = "试用"
  185. } else if v.CompanyType == 3 {
  186. status = "流失"
  187. } else if v.CompanyType == 4 {
  188. status = "潜在"
  189. } else if v.CompanyType == 5 {
  190. status = "永续"
  191. } else {
  192. fmt.Println("无效的客户状态:"+status, v.CompanyType)
  193. return
  194. }
  195. if status == "" {
  196. fmt.Println("无效的客户状态:"+status, v.CompanyType)
  197. return
  198. }
  199. productItem.Status = status
  200. //获取销售
  201. seller, err := models.GetAdminByAdminId(v.SellsId)
  202. if err != nil && err.Error() != utils.ErrNoRow() {
  203. fmt.Println("获取销售失败,Err:"+err.Error(), v.SellsId)
  204. return
  205. }
  206. var adminId, groupId, departmentId int
  207. var sellerRealName string
  208. if seller == nil {
  209. fmt.Println("销售不存在:", v.SellsId)
  210. //return
  211. } else {
  212. adminId = seller.AdminId
  213. sellerRealName = seller.RealName
  214. groupId = seller.GroupId
  215. departmentId = seller.DepartmentId
  216. }
  217. productItem.SellerId = adminId
  218. productItem.SellerName = sellerRealName
  219. productItem.GroupId = groupId
  220. productItem.DepartmentId = departmentId
  221. productItem.CreateTime = time.Now()
  222. productItem.ModifyTime = time.Now()
  223. productItem.StartDate = v.StartDate
  224. productItem.EndDate = v.EndDate
  225. productItem.LoseReason = v.LoseReason
  226. productItem.LossTime = v.LossTime
  227. _, err = models.AddCompanyProduct(productItem)
  228. if err != nil {
  229. fmt.Println("新增客户产品失败,Err:" + err.Error())
  230. return
  231. }
  232. //权限处理
  233. err = models.ModifyCompanyOldPermission(v.StartDate, v.EndDate, productName, v.CompanyId, productId)
  234. if err != nil {
  235. fmt.Println("客户权限处理失败,Err:" + err.Error())
  236. return
  237. }
  238. if k > 500 {
  239. return
  240. }
  241. }
  242. }
  243. //正式/试用客户--到期提醒
  244. func CompanyRemind(cont context.Context) (err error) {
  245. defer func() {
  246. if err != nil {
  247. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "到期提醒失败:CompanyRemind;Err"+err.Error(), utils.EmailSendToUsers)
  248. }
  249. }()
  250. //获取销售
  251. sellers, err := models.GetSellersOpenId()
  252. for k, v := range sellers {
  253. fmt.Println(k, v.AdminId, v.Mobile)
  254. CompanyRemind30Day(v)
  255. time.Sleep(5 * time.Second)
  256. CompanyRemind15Day(v)
  257. time.Sleep(5 * time.Second)
  258. CompanyRemind7Day(v)
  259. time.Sleep(5 * time.Second)
  260. CompanyRemind1Day(v)
  261. time.Sleep(5 * time.Second)
  262. }
  263. return
  264. }
  265. //30天后到期客户
  266. func CompanyRemind30Day(seller *models.Sellers) {
  267. var err error
  268. defer func() {
  269. if err != nil {
  270. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "到期提醒失败:CompanyRemind;Err"+err.Error(), utils.EmailSendToUsers)
  271. }
  272. }()
  273. remindEndDate := time.Now().AddDate(0, 0, 30).Format(utils.FormatDate)
  274. //remindEndDate := "2020-12-31" //time.Now().AddDate(0, 0, 30).Format(utils.FormatDate)
  275. companyItems, err := models.GetRemindCompany(seller.AdminId, remindEndDate)
  276. if err != nil {
  277. return
  278. }
  279. emailContents := "<div><p>您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于30天后到期,请注意查看</p>"
  280. emailContents += "<table border='1'><tr><td width='200'>30天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>"
  281. var isSend bool
  282. msgContent := ``
  283. for _, v := range companyItems {
  284. endTime := v.EndDate
  285. if v.Status == "正式" {
  286. endTime = v.ContractEndDate
  287. }
  288. emailContents += `<tr><td>` + v.CompanyName + `</td><td>` + endTime + `</td><td>` + seller.RealName + `</td><td>` + v.Status + `</td></tr>`
  289. msgContent += `客户:` + v.CompanyName + ";状态:" + v.Status + "\n"
  290. isSend = true
  291. }
  292. emailContents += "</table></br>"
  293. if isSend {
  294. if seller.Email != "" {
  295. utils.SendEmailByHongze("到期前30天提醒", emailContents, seller.Email, "", "")
  296. }
  297. if seller.OpenId != "" {
  298. first := "您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于30天后到期,请注意查看"
  299. keyword1 := "到期前30天提醒"
  300. keyword2 := remindEndDate
  301. remark := msgContent
  302. openIdList := make([]*models.OpenIdList, 0)
  303. openIdItem := new(models.OpenIdList)
  304. openIdItem.OpenId = seller.OpenId
  305. openIdList = append(openIdList, openIdItem)
  306. SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark, openIdList)
  307. }
  308. }
  309. }
  310. //15天后到期客户
  311. func CompanyRemind15Day(seller *models.Sellers) {
  312. var err error
  313. defer func() {
  314. if err != nil {
  315. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "到期提醒失败:CompanyRemind;Err"+err.Error(), utils.EmailSendToUsers)
  316. }
  317. }()
  318. remindEndDate := time.Now().AddDate(0, 0, 15).Format(utils.FormatDate)
  319. companyItems, err := models.GetRemindCompany(seller.AdminId, remindEndDate)
  320. if err != nil {
  321. return
  322. }
  323. var isSend bool
  324. msgContent := ``
  325. emailContents := "<div><p>您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于15天后到期,请注意查看</p>"
  326. emailContents += "<table border='1'><tr><td width='200'>15天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>"
  327. for _, v := range companyItems {
  328. endTime := v.EndDate
  329. if v.Status == "正式" {
  330. endTime = v.ContractEndDate
  331. }
  332. emailContents += `<tr><td>` + v.CompanyName + `</td><td>` + endTime + `</td><td>` + seller.RealName + `</td><td>` + v.Status + `</td></tr>`
  333. msgContent += `客户:` + v.CompanyName + ";状态:" + v.Status + "\n"
  334. isSend = true
  335. }
  336. emailContents += "</table></br>"
  337. if isSend {
  338. if seller.Email != "" {
  339. utils.SendEmailByHongze("到期前15天提醒", emailContents, seller.Email, "", "")
  340. }
  341. if seller.OpenId != "" {
  342. first := "您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于15天后到期,请注意查看"
  343. keyword1 := "到期前15天提醒"
  344. keyword2 := remindEndDate
  345. remark := msgContent
  346. openIdList := make([]*models.OpenIdList, 0)
  347. openIdItem := new(models.OpenIdList)
  348. openIdItem.OpenId = seller.OpenId
  349. openIdList = append(openIdList, openIdItem)
  350. SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark, openIdList)
  351. }
  352. }
  353. }
  354. //7天后到期客户名称
  355. func CompanyRemind7Day(seller *models.Sellers) {
  356. var err error
  357. defer func() {
  358. if err != nil {
  359. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "到期提醒失败:CompanyRemind;Err"+err.Error(), utils.EmailSendToUsers)
  360. }
  361. }()
  362. remindEndDate := time.Now().AddDate(0, 0, 7).Format(utils.FormatDate)
  363. companyItems, err := models.GetRemindCompany(seller.AdminId, remindEndDate)
  364. if err != nil {
  365. return
  366. }
  367. var isSend bool
  368. msgContent := ``
  369. emailContents := "<div><p>您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于7天后到期,请注意查看</p>"
  370. emailContents += "<table border='1'><tr><td width='200'>7天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>"
  371. for _, v := range companyItems {
  372. endTime := v.EndDate
  373. if v.Status == "正式" {
  374. endTime = v.ContractEndDate
  375. }
  376. emailContents += `<tr><td>` + v.CompanyName + `</td><td>` + endTime + `</td><td>` + seller.RealName + `</td><td>` + v.Status + `</td></tr>`
  377. msgContent += `客户:` + v.CompanyName + ";状态:" + v.Status + "\n"
  378. isSend = true
  379. }
  380. emailContents += "</table></br>"
  381. if isSend {
  382. if seller.Email != "" {
  383. utils.SendEmailByHongze("到期前7天提醒", emailContents, seller.Email, "", "")
  384. }
  385. if seller.OpenId != "" {
  386. first := "您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于7天后到期,请注意查看"
  387. keyword1 := "到期前7天提醒"
  388. keyword2 := remindEndDate
  389. remark := msgContent
  390. openIdList := make([]*models.OpenIdList, 0)
  391. openIdItem := new(models.OpenIdList)
  392. openIdItem.OpenId = seller.OpenId
  393. openIdList = append(openIdList, openIdItem)
  394. SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark, openIdList)
  395. }
  396. }
  397. }
  398. //到期当天提醒
  399. func CompanyRemind1Day(seller *models.Sellers) {
  400. var err error
  401. defer func() {
  402. if err != nil {
  403. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "到期提醒失败:CompanyRemind;Err"+err.Error(), utils.EmailSendToUsers)
  404. }
  405. }()
  406. remindEndDate := time.Now().AddDate(0, 0, 0).Format(utils.FormatDate)
  407. companyItems, err := models.GetRemindCompany(seller.AdminId, remindEndDate)
  408. if err != nil {
  409. return
  410. }
  411. var isSend bool
  412. msgContent := ``
  413. emailContents := "<div><p>您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于今天后到期,请注意查看</p>"
  414. emailContents += "<table border='1'><tr><td width='200'>1天后到期客户名称</td><td width='200'>到期日期</td><td width='200'>销售人员</td><td>客户类型</td></tr>"
  415. for _, v := range companyItems {
  416. endTime := v.EndDate
  417. if v.Status == "正式" {
  418. endTime = v.ContractEndDate
  419. }
  420. emailContents += `<tr><td>` + v.CompanyName + `</td><td>` + endTime + `</td><td>` + seller.RealName + `</td><td>` + v.Status + `</td></tr>`
  421. msgContent += `客户:` + v.CompanyName + ";状态:" + v.Status + "\n"
  422. isSend = true
  423. }
  424. emailContents += "</table></br>"
  425. if isSend {
  426. if seller.Email != "" {
  427. utils.SendEmailByHongze("到期前1天提醒", emailContents, seller.Email, "", "")
  428. }
  429. if seller.OpenId != "" {
  430. first := "您有【" + strconv.Itoa(len(companyItems)) + "】 客户将于1天后到期,请注意查看"
  431. keyword1 := "到期前1天提醒"
  432. keyword2 := remindEndDate
  433. remark := msgContent
  434. openIdList := make([]*models.OpenIdList, 0)
  435. openIdItem := new(models.OpenIdList)
  436. openIdItem.OpenId = seller.OpenId
  437. openIdList = append(openIdList, openIdItem)
  438. SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark, openIdList)
  439. }
  440. }
  441. }
  442. // StaticCompanyTryDay 定时任务每天更新客户试用总天数
  443. func StaticCompanyTryDay(cont context.Context) (err error) {
  444. errList := make([]string, 0)
  445. defer func() {
  446. if len(errList) > 0 {
  447. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "定时任务每天更新客户试用总天数 ErrMsg:"+strings.Join(errList, "\n"), utils.EmailSendToUsers)
  448. }
  449. }()
  450. list, err := models.GetCompanyProductTryOutUpdateNoStopGroup()
  451. if err != nil {
  452. fmt.Println("获取客户变更数据失败:", err)
  453. return
  454. }
  455. for _, v := range list {
  456. isAdd := false //是否要增加一天,默认不加
  457. permissionList, tmpErr := models.GetCompanyReportPermissionByStatus(v.CompanyId, v.ProductId, "试用")
  458. if tmpErr != nil {
  459. errList = append(errList, fmt.Sprint("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";寻找对应的试用品种失败,Err:", tmpErr))
  460. continue
  461. }
  462. currPermissionIdList := make([]int, 0) //当前试用的品种
  463. for _, permission := range permissionList {
  464. currPermissionIdList = append(currPermissionIdList, permission.ChartPermissionId)
  465. }
  466. //获取所有未停止的记录列表
  467. logList, tmpErr := models.GetCompanyProductTryOutUpdateNoStopListByEndDate(v.CompanyId, v.ProductId)
  468. if tmpErr != nil {
  469. errList = append(errList, fmt.Sprint("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";寻找客户的试用日志失败,Err:", tmpErr))
  470. continue
  471. }
  472. logPermissionIdList := make([]int, 0) //当前日志中的试用的品种
  473. for _, log := range logList {
  474. //获取所有未停止的品种试用记录列表
  475. logPermissionList, tmpErr := models.GetCompanyProductTryOutPermissionUpdateNoStopListByEndDate(log.Id)
  476. if tmpErr != nil {
  477. errList = append(errList, fmt.Sprint("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";logId:", v.Id, ";寻找客户的试用品种日志失败,Err:", tmpErr))
  478. continue
  479. }
  480. lenLogPermissionList := len(logPermissionList) //当前日志存在试用的品种数量
  481. stopPermission := 0 //当前日志需要停止的品种数量
  482. currTime := time.Now() //当前时间
  483. for _, logPermission := range logPermissionList {
  484. if utils.InArrayByInt(logPermissionIdList, logPermission.ChartPermissionId) {
  485. // 如果已经被其他记录使用了,那么就将当前记录给标记停止
  486. logPermission.IsStop = 1
  487. // 如果当前时间晚于结束日期,那么实际结束日期就是今天之前一天,否则就是当天
  488. if currTime.After(logPermission.EndDate) {
  489. logPermission.RealEndDate = currTime.AddDate(0, 0, -1)
  490. } else {
  491. logPermission.RealEndDate = time.Now()
  492. }
  493. logPermission.Update([]string{"IsStop", "RealEndDate"})
  494. stopPermission++
  495. continue
  496. } else if !utils.InArrayByInt(currPermissionIdList, logPermission.ChartPermissionId) {
  497. // 如果该品种不在当前客户的品种里面,那么也要将当前记录给标记停止
  498. logPermission.IsStop = 1
  499. // 如果当前时间晚于结束日期,那么实际结束日期就是今天之前一天,否则就是当天
  500. if currTime.After(logPermission.EndDate) {
  501. logPermission.RealEndDate = currTime.AddDate(0, 0, -1)
  502. } else {
  503. logPermission.RealEndDate = time.Now()
  504. }
  505. logPermission.Update([]string{"IsStop", "RealEndDate"})
  506. stopPermission++
  507. continue
  508. }
  509. // 说明当天还是试用状态,需要变更实际结束日期
  510. logPermission.RealEndDate = currTime
  511. logPermission.Update([]string{"RealEndDate"})
  512. // 剩下的说明还处于试用状态,需要添加1天试用期,且需要把该品种加入到当前日志中的试用的品种列表
  513. isAdd = true
  514. logPermissionIdList = append(logPermissionIdList, logPermission.ChartPermissionId)
  515. }
  516. //如果当前日志存在试用的品种数量 == 当前日志需要停止的品种数量
  517. // 那么当前日志也是处于停用状态
  518. if lenLogPermissionList == stopPermission {
  519. log.IsStop = 1
  520. // 如果当前时间晚于结束日期,那么实际结束日期就是今天之前一天,否则就是当天
  521. if currTime.After(log.EndDate) {
  522. log.RealEndDate = currTime.AddDate(0, 0, -1)
  523. } else {
  524. log.RealEndDate = time.Now()
  525. }
  526. log.Update([]string{"IsStop", "RealEndDate"})
  527. }
  528. }
  529. // 如果需要添加,那么将该客户品种添加1天
  530. if isAdd {
  531. }
  532. // 更新客户产品的试用天数
  533. tmpErr = models.AddCompanyProductTryOutDayTotal(v.CompanyId, v.ProductId)
  534. if tmpErr != nil {
  535. errList = append(errList, fmt.Sprint("company_id:", v.CompanyId, ";product_id:", v.ProductId, ";logId:", v.Id, ";更新客户产品的试用天数,Err:", tmpErr))
  536. continue
  537. }
  538. }
  539. return
  540. }