redPunch.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package order
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/date"
  5. "context"
  6. "errors"
  7. "fmt"
  8. "github.com/gogf/gf/v2/database/gdb"
  9. "github.com/gogf/gf/v2/errors/gerror"
  10. "github.com/gogf/gf/v2/frame/g"
  11. "github.com/gogf/gf/v2/util/gconv"
  12. "jyOrderManager/internal/consts"
  13. "jyOrderManager/internal/jyutil"
  14. "jyOrderManager/internal/logic/product"
  15. "jyOrderManager/internal/model"
  16. "log"
  17. "strings"
  18. "time"
  19. )
  20. // OperateOrderRedPunch 红冲
  21. func OperateOrderRedPunch(ctx context.Context, params model.OrderRedPunchParams) error {
  22. orderData, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT user_phone,buy_subject,company_name,signing_subject,procedures_money,order_money,commission+(select IFNULL(sum(commission),0) as return_money from moneyCorrection where orderCode= '%s') as commission,pay_money+(select IFNULL(sum(payMoney),0) as return_money from moneyCorrection where orderCode='%s') as pay_money FROM dataexport_order WHERE order_code = '%s'`, params.OrderCode, params.OrderCode, params.OrderCode))
  23. if err != nil || orderData.IsEmpty() {
  24. return errors.New("未找到订单")
  25. }
  26. isSubject := true
  27. updateData := map[string]interface{}{}
  28. var (
  29. insertDataArr []map[string]interface{}
  30. commission, proceduresMoney int
  31. )
  32. for _, param := range params.RedPunch {
  33. insertData := map[string]interface{}{
  34. "orderCode": params.OrderCode,
  35. "correctionReason": param.CorrectionReason,
  36. "createTime": date.NowFormat(date.Date_Full_Layout),
  37. "createPerson": jyutil.GetUserMsgFromCtx(ctx).EntUserName,
  38. "redType": params.RedType,
  39. "detail_id": param.Id,
  40. "activity_code": param.ActiveCode,
  41. }
  42. if strings.Contains(params.RedType, "签约主体") {
  43. if param.PayMoney == 0 {
  44. param.PayMoney = common.IntAll(orderData.Map()["pay_money"])
  45. }
  46. if param.Commission == 0 {
  47. param.Commission = common.IntAll(orderData.Map()["commission"])
  48. }
  49. //if param.ProceduresMoney == 0 {
  50. // param.ProceduresMoney = common.IntAll(orderData.Map()["procedures_money"])
  51. //}
  52. oldInsertData := map[string]interface{}{
  53. "payMoney": param.PayMoney * -1,
  54. "commission": param.Commission * -1,
  55. //"orderMoney": param.OrderMoney * -1,
  56. "orderCode": params.OrderCode,
  57. "correctionReason": param.CorrectionReason,
  58. "createTime": date.NowFormat(date.Date_Full_Layout),
  59. "createPerson": jyutil.GetUserMsgFromCtx(ctx).EntUserName,
  60. "proceduresMoney": param.ProceduresMoney * -1,
  61. "redType": params.RedType,
  62. }
  63. newInsertData := map[string]interface{}{
  64. "payMoney": param.PayMoney,
  65. "commission": param.Commission,
  66. //"orderMoney": param.OrderMoney,
  67. "proceduresMoney": param.ProceduresMoney,
  68. "orderCode": params.OrderCode,
  69. "correctionReason": param.CorrectionReason,
  70. "createTime": date.NowFormat(date.Date_Full_Layout),
  71. "createPerson": jyutil.GetUserMsgFromCtx(ctx).EntUserName,
  72. "redType": params.RedType,
  73. }
  74. var signingSubject string
  75. if param.SigningSubject == "北京剑鱼信息技术有限公司" {
  76. updateData["signing_subject"] = "h01"
  77. signingSubject = "北京拓普丰联信息科技股份有限公司"
  78. } else {
  79. updateData["signing_subject"] = "h02"
  80. signingSubject = "北京剑鱼信息技术有限公司"
  81. }
  82. oldInsertData["signingSubject"] = signingSubject
  83. newInsertData["newSigningSubject"] = param.SigningSubject
  84. insertDataArr = append(insertDataArr, oldInsertData, newInsertData)
  85. } else {
  86. commission += param.Commission
  87. proceduresMoney += param.ProceduresMoney
  88. isSubject = false
  89. newEnt := common.If(orderData.Map()["signing_subject"] == "h01", "北京剑鱼信息技术有限公司", "北京拓普丰联信息科技股份有限公司").(string)
  90. newEntData, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT newSigningSubject FROM moneyCorrection WHERE orderCode = '%s' AND redType = '签约主体红冲' AND newSigningSubject is not null ORDER BY createTime DESC LIMIT 0,1 `, params.OrderCode))
  91. if err != nil && !newEntData.IsEmpty() {
  92. newEnt = common.InterfaceToStr(newEntData.Map()["newSigningSubject"])
  93. }
  94. var pMoney int
  95. if param.Id > 0 {
  96. activeData, _ := g.DB().GetOne(ctx, `SELECT final_price+(select IFNULL(sum(payMoney),0) as return_money from moneyCorrection where orderCode=? and detail_id = ?) as final_price FROM jy_order_detail WHERE id = ? and status =1`, params.OrderCode, param.Id, param.Id)
  97. if !activeData.IsEmpty() {
  98. pMoney = gconv.Int(activeData.Map()["final_price"])
  99. }
  100. insertData["payMoney"] = param.PayMoney - pMoney
  101. } else if param.ActiveCode != "" && param.PayMoney > 0 {
  102. activeData, _ := g.DB().GetOne(ctx, `SELECT sum(final_price)+(select IFNULL(sum(payMoney),0) as return_money from moneyCorrection where orderCode=? and activity_code = ?) as final_price FROM jy_order_detail WHERE activity_code = ? and order_code = ? and status =1`, params.OrderCode, param.ActiveCode, param.ActiveCode, params.OrderCode)
  103. if !activeData.IsEmpty() {
  104. pMoney = gconv.Int(activeData.Map()["final_price"])
  105. }
  106. insertData["payMoney"] = param.PayMoney - pMoney
  107. } else if param.Commission > 0 {
  108. insertData["commission"] = param.Commission - common.IntAll(orderData.Map()["commission"])
  109. }
  110. //}
  111. insertData["signingSubject"] = newEnt
  112. //insertData["orderMoney"] = param.OrderMoney - common.IntAll(orderData.Map()["order_money"])
  113. commission += param.Commission
  114. //proceduresMoney += param.ProceduresMoney
  115. //insertData["proceduresMoney"] = param.ProceduresMoney - common.IntAll(orderData.Map()["procedures_money"])
  116. insertDataArr = append(insertDataArr, insertData)
  117. }
  118. }
  119. if !isSubject {
  120. g.DB().Update(ctx, "contract", map[string]interface{}{"contract_money": params.PayMoney}, map[string]interface{}{"order_code": params.OrderCode})
  121. returnData, _ := g.DB().GetOne(ctx, fmt.Sprintf(`select IFNULL(sum(return_money),0) as return_money from return_money_record where order_code='%s' and state=1`, params.OrderCode))
  122. refundData, _ := g.DB().GetOne(ctx, fmt.Sprintf(`select IFNULL(sum(refund_money),0) as refund_money from refund_record where order_code='%s'`, params.OrderCode))
  123. return_money := common.IntAll(returnData.Map()["return_money"])
  124. refund_money := common.IntAll(refundData.Map()["refund_money"])
  125. if params.PayMoney-commission-proceduresMoney <= return_money-refund_money {
  126. updateData["return_status"] = 1
  127. } else if params.PayMoney-commission-proceduresMoney > return_money-refund_money && return_money-refund_money > 0 {
  128. updateData["return_status"] = 2
  129. }
  130. if return_money == refund_money && return_money > 0 {
  131. updateData["refund_status"] = 1
  132. } else if return_money > refund_money && refund_money > 0 {
  133. updateData["refund_status"] = 2
  134. }
  135. if refund_money >= params.PayMoney {
  136. updateData["refund_status"] = 1
  137. }
  138. if return_money >= params.PayMoney {
  139. updateData["return_status"] = 1
  140. productDetail, _ := g.DB().Ctx(ctx).Query(ctx, fmt.Sprintf(`SELECT * FROM jy_order_detail WHERE order_code ='%s' and returned_open =1 and is_service_open = 0 and status =1`, params.OrderCode))
  141. if !productDetail.IsEmpty() {
  142. uData, entId, userPositionId, err := jyutil.GetCreateUserData(gconv.String(orderData.Map()["user_phone"]), gconv.String(orderData.Map()["company_name"]), gconv.Int(orderData.Map()["buy_subject"]) == 2)
  143. if err != nil {
  144. return errors.New("用户创建失败")
  145. }
  146. //全额回款开通权益
  147. if !consts.PhoneRegex.MatchString(gconv.String(orderData["user_phone"])) {
  148. return errors.New("手机号格式异常")
  149. }
  150. if err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
  151. // 产品服务开通
  152. for _, m := range productDetail.List() {
  153. if !jyutil.IsServiceOpen(m) {
  154. continue
  155. }
  156. //参数注入
  157. m["userMap"] = map[string]interface{}{
  158. "userData": uData, "entId": entId, "userPositionId": userPositionId,
  159. }
  160. m["phone"] = orderData.Map()["user_phone"]
  161. m["order_code"] = params.OrderCode
  162. m["reqCompanyName"] = orderData.Map()["company_name"]
  163. m["amount"] = m["final_price"]
  164. m["reqSubject"] = orderData.Map()["buy_subject"]
  165. m["linked_orderId"] = m["linked_detail_id"]
  166. productCode := gconv.String(m["product_code"])
  167. pFunc, err := product.JyProFunc.GetProductInitFuncByCode(productCode)
  168. if err != nil {
  169. return err
  170. }
  171. pObj, err := pFunc(m)
  172. if err != nil {
  173. return gerror.Wrap(err, fmt.Sprintf("获取%s商品异常", productCode))
  174. }
  175. if err := pObj.OpenService(ctx, time.Now()); err != nil {
  176. return err
  177. }
  178. }
  179. if orderUserId := gconv.String(orderData.Map()["user_id"]); orderUserId == "" || orderUserId != gconv.String(uData["userId"]) {
  180. log.Printf("同步更新订单用户身份:orderUserId:%s,userId:%s,entId:%d\n", orderUserId, uData["userId"], entId)
  181. upData := g.Map{
  182. "user_id": uData["userId"],
  183. }
  184. if entId > 0 { //企业服务
  185. upData["ent_id"] = entId
  186. if personPhone := gconv.String(orderData.Map()["personPhone"]); personPhone != "" {
  187. jyutil.EndAddUser(ctx, entId, gconv.String(orderData.Map()["user_phone"]), personPhone, gconv.String(orderData.Map()["personName"]))
  188. }
  189. }
  190. //更新订单
  191. _, err = g.DB().Update(ctx, consts.OrderListTableName, upData, "order_code=?", params.OrderCode)
  192. if err != nil {
  193. return err
  194. }
  195. }
  196. return nil
  197. }); err != nil {
  198. log.Println(err)
  199. return err
  200. }
  201. }
  202. }
  203. //红冲金额新增销售业绩
  204. if err := OrderMoneyMakeRed(ctx, params.OrderCode, int64(params.PayMoney-proceduresMoney-commission)); err != nil {
  205. log.Printf("业绩红冲 %s 业绩变更异常 %v\n", params.OrderCode, err)
  206. return err
  207. }
  208. }
  209. g.DB().Update(ctx, "dataexport_order", updateData, map[string]interface{}{"order_code": params.OrderCode})
  210. for _, m := range insertDataArr {
  211. g.DB().Insert(ctx, "moneyCorrection", m)
  212. }
  213. return nil
  214. }