saveUpdate.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package otherProduct
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/gogf/gf/v2/frame/g"
  8. "github.com/gogf/gf/v2/util/gconv"
  9. "github.com/pkg/errors"
  10. "jyOrderManager/internal/consts"
  11. "jyOrderManager/internal/logic/product"
  12. "jyOrderManager/internal/model"
  13. "jyOrderManager/utility"
  14. "time"
  15. )
  16. func (p jyOtherProduct) SaveUpdate(ctx context.Context, masterKey string) error { //保存更新
  17. var (
  18. orderMap = g.Map{}
  19. err error
  20. orderDetailId int64
  21. )
  22. switch p.ProductName {
  23. case "历史数据", "结构化数据":
  24. if p.PackClassOrderDetail.ServiceType == 0 {
  25. return errors.New("付费类型异常")
  26. }
  27. orderDetailId = p.PackClassOrderDetail.Id
  28. orderMap = g.Map{
  29. "status": 1,
  30. "order_code": p.PackClassOrderDetail.OrderCode,
  31. "phone": p.PackClassOrderDetail.Phone,
  32. "original_price": p.PackClassOrderDetail.OriginalPrice,
  33. "final_price": p.PackClassOrderDetail.Amount,
  34. "product_code": p.PackClassOrderDetail.ProductCode,
  35. "activity_code": p.PackClassOrderDetail.ActivityCode,
  36. "tactics": p.PackClassOrderDetail.Tactics,
  37. "filter": gconv.String(p.PackClassOrderDetail.Filter),
  38. "service_starttime": p.PackClassOrderDetail.Service_start_time,
  39. "service_type": p.PackClassOrderDetail.ServiceType,
  40. "service_endtime": p.PackClassOrderDetail.Service_end_time,
  41. "is_master": common.If(fmt.Sprintf("%s_%d", p.PackClassOrderDetail.ProductCode, p.PackClassOrderDetail.Amount) == masterKey, 1, 0),
  42. }
  43. case "阳光采购", "医械通", "人脉管理", "物业数字化营销", "运营商专版", "企业商机管理":
  44. if p.CycleClassOrderDetail.ServiceType == 0 {
  45. return errors.New("付费类型异常")
  46. }
  47. orderDetailId = p.CycleClassOrderDetail.Id
  48. orderMap = g.Map{
  49. "status": 1,
  50. "order_code": p.CycleClassOrderDetail.OrderCode,
  51. "phone": p.CycleClassOrderDetail.Phone,
  52. "original_price": p.CycleClassOrderDetail.OriginalPrice,
  53. "final_price": p.CycleClassOrderDetail.Amount,
  54. "product_code": p.CycleClassOrderDetail.ProductCode,
  55. "activity_code": p.CycleClassOrderDetail.ActivityCode,
  56. "tactics": p.CycleClassOrderDetail.Tactics,
  57. "linked_detail_id": p.CycleClassOrderDetail.LinkedOrderId,
  58. "service_type": p.CycleClassOrderDetail.ServiceType,
  59. "filter": gconv.String(p.CycleClassOrderDetail.Filter),
  60. "is_master": common.If(fmt.Sprintf("%s_%d", p.CycleClassOrderDetail.ProductCode, p.CycleClassOrderDetail.Amount) == masterKey, 1, 0),
  61. }
  62. var filter = p.CycleClassOrderDetail.Filter
  63. if p.CycleClassOrderDetail.ServiceType == 1 || p.CycleClassOrderDetail.ServiceType == 4 {
  64. filter.FinalAccountCount = 1 + filter.BuyAccountCount + filter.GiftAccountCount
  65. } else if p.CycleClassOrderDetail.ServiceType == 2 || p.CycleClassOrderDetail.ServiceType == 3 { //获取
  66. var (
  67. startTime, endTime time.Time
  68. oldFilter *model.VipCycleFilter
  69. )
  70. oldFilter, startTime, endTime, err = product.GetLinkVipCycleFilter(ctx, p.CycleClassOrderDetail.LinkedOrderId)
  71. if err != nil {
  72. return err
  73. }
  74. if p.CycleClassOrderDetail.ServiceType == 2 { //续费需要重新计算开始时间结束时间,升级即原来关联订单的时间
  75. var newStartTime time.Time
  76. if endTime.Unix() < time.Now().Unix() { //原服务已过期
  77. newStartTime = time.Now()
  78. } else { //原服务未过期
  79. //开始时间为:原服务结束日期+1天
  80. newStartTime = endTime.AddDate(0, 0, 1)
  81. }
  82. startTime, endTime = utility.GetStartAndEndTime(newStartTime, utility.DateComp{
  83. Num: filter.BuyCycle,
  84. Unit: filter.BuyType,
  85. }, utility.DateComp{
  86. Num: filter.GiftCycle,
  87. Unit: filter.GiftType,
  88. })
  89. } else {
  90. filter.FinalAccountCount += oldFilter.FinalAccountCount + filter.BuyAccountCount + filter.GiftAccountCount
  91. }
  92. orderMap["service_starttime"] = startTime.Format("2006-01-02 15:04:05")
  93. orderMap["service_endtime"] = endTime.Format("2006-01-02 15:04:05")
  94. }
  95. orderMap["filter"] = gconv.String(filter)
  96. if gconv.Int(orderMap["is_master"]) == 1 {
  97. filterMap := map[string]interface{}{
  98. "free_sub_num": p.CycleClassOrderDetail.Filter.GiftAccountCount,
  99. "pay_sub_num": p.CycleClassOrderDetail.Filter.BuyAccountCount,
  100. }
  101. filterStr, _ := json.Marshal(filterMap)
  102. g.DB().Update(ctx, "dataexport_order", map[string]interface{}{
  103. "filter": gconv.String(filterStr),
  104. }, map[string]interface{}{
  105. "order_code": p.CycleClassOrderDetail.OrderCode,
  106. })
  107. }
  108. case "3A信用认证", "ISO体系认证", "广告", "打赏", "数据文件", "权益码", "标书制作", "线下课程培训", "课程分销", "虚拟赠品", "实物赠品", "销售费用":
  109. if p.SimpleProduct.ServiceType == 0 {
  110. return errors.New("付费类型异常")
  111. }
  112. orderDetailId = p.SimpleProduct.Id
  113. orderMap = g.Map{
  114. "status": 1,
  115. "order_code": p.SimpleProduct.OrderCode,
  116. "phone": p.SimpleProduct.Phone,
  117. "original_price": p.SimpleProduct.OriginalPrice,
  118. "final_price": p.SimpleProduct.Amount,
  119. "product_code": p.SimpleProduct.ProductCode,
  120. "activity_code": p.SimpleProduct.ActivityCode,
  121. "service_type": p.SimpleProduct.ServiceType,
  122. "tactics": p.SimpleProduct.Tactics,
  123. "filter": gconv.String(p.SimpleProduct.Filter),
  124. "is_master": common.If(fmt.Sprintf("%s_%d", p.SimpleProduct.ProductCode, p.SimpleProduct.Amount) == masterKey, 1, 0),
  125. }
  126. //广告开始时间结束时间
  127. if p.ProductName == "广告" {
  128. orderMap["service_starttime"] = p.SimpleProduct.Service_start_time
  129. orderMap["service_endtime"] = p.SimpleProduct.Service_end_time
  130. }
  131. }
  132. orderMap["product_type"] = p.ProductName
  133. if orderDetailId > 0 {
  134. _, err := g.DB().Ctx(ctx).Update(ctx, consts.OrderDetailTableName, orderMap, " id = ? ", orderDetailId)
  135. if err != nil {
  136. return errors.Wrapf(err, "%s明细更新异常", p.ProductName)
  137. }
  138. } else {
  139. _, err := g.DB().Ctx(ctx).Insert(ctx, consts.OrderDetailTableName, orderMap)
  140. if err != nil {
  141. return errors.Wrapf(err, "%s插入订单明细异常", p.ProductName)
  142. }
  143. }
  144. return nil
  145. }