optimizeOrder.go 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package order
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "mongodb"
  6. qutil "qfw/util"
  7. "strings"
  8. "time"
  9. "util"
  10. "github.com/baiy/Cadmin-server-go/admin"
  11. )
  12. func AddUpdateRecord(context *admin.Context) (interface{}, error) {
  13. param := new(struct {
  14. OrderCode string `form:"orderCode"`
  15. OrderMoney int `form:"orderMoney"`
  16. PayMoney int `form:"payMoney"`
  17. BigSubMoney int `form:"bigSubMoney"`
  18. SupplyMoney int `form:"supplyMoney"`
  19. Commission int `form:"commission"`
  20. ProceduresMoney int `form:"proceduresMoney"`
  21. CorrectionReason string `form:"correctionReason"`
  22. })
  23. err := context.Form(param)
  24. if err != nil {
  25. return nil, err
  26. }
  27. orderData := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "", "")
  28. if orderData == nil {
  29. return nil, errors.New("未找到订单")
  30. }
  31. filterMap := map[string]interface{}{}
  32. if err := json.Unmarshal([]byte(qutil.ObjToString((*orderData)["filter"])), &filterMap); err != nil {
  33. return nil, errors.New("修正失败")
  34. }
  35. updateData := map[string]interface{}{}
  36. insertData := map[string]interface{}{
  37. "orderCode": param.OrderCode,
  38. "correctionReason": param.CorrectionReason,
  39. "createTime": qutil.NowFormat(qutil.Date_Full_Layout),
  40. "createPerson": context.User.Username,
  41. }
  42. if param.PayMoney != 0 {
  43. if qutil.ObjToString((*orderData)["product_type"]) == "大会员" {
  44. filterMap["bigPayMoneyUpdate"] = param.PayMoney
  45. updateData["pay_money"] = param.PayMoney + param.BigSubMoney + param.SupplyMoney
  46. insertData["payMoney"] = param.PayMoney - qutil.IntAll(filterMap["bigPayMoney"])
  47. filterMap["bigPayMoney"] = param.PayMoney
  48. } else {
  49. filterMap["payMoneyUpdate"] = param.PayMoney
  50. updateData["pay_money"] = param.PayMoney
  51. insertData["payMoney"] = param.PayMoney - qutil.IntAll((*orderData)["pay_money"])
  52. }
  53. }
  54. if param.BigSubMoney != 0 {
  55. filterMap["subPayMoneyUpdate"] = param.BigSubMoney
  56. insertData["bigSubMoney"] = param.BigSubMoney - qutil.IntAll(filterMap["subPayMoney"])
  57. filterMap["subPayMoney"] = param.BigSubMoney
  58. }
  59. if param.SupplyMoney != 0 {
  60. filterMap["supplyPayMoneyUpdate"] = param.SupplyMoney
  61. insertData["supplyMoney"] = param.SupplyMoney - qutil.IntAll(filterMap["supplyPayMoney"])
  62. filterMap["supplyPayMoney"] = param.SupplyMoney
  63. }
  64. if param.OrderMoney != 0 {
  65. updateData["order_money"] = param.OrderMoney
  66. insertData["orderMoney"] = param.OrderMoney - qutil.IntAll((*orderData)["order_money"])
  67. filterMap["orderMoneyUpdate"] = param.OrderMoney
  68. }
  69. if param.Commission != 0 {
  70. updateData["commission"] = param.Commission
  71. insertData["commission"] = param.Commission - qutil.IntAll((*orderData)["commission"])
  72. filterMap["commissionUpdate"] = param.Commission
  73. }
  74. if param.ProceduresMoney != 0 {
  75. updateData["procedures_money"] = param.ProceduresMoney
  76. insertData["proceduresMoney"] = param.ProceduresMoney - qutil.IntAll((*orderData)["procedures_money"])
  77. filterMap["proceduresMoneyUpdate"] = param.ProceduresMoney - qutil.IntAll((*orderData)["procedures_money"])
  78. }
  79. filterByte, _ := json.Marshal(filterMap)
  80. updateData["filter"] = string(filterByte)
  81. returnData := util.JysqlDB.SelectBySql(`select IFNULL(sum(return_money),0) as return_money from return_money_record where order_code=? and state=1`, param.OrderCode)
  82. refundData := util.JysqlDB.SelectBySql(`select IFNULL(sum(refund_money),0) as refund_money from refund_record where order_code=?`, param.OrderCode)
  83. return_money := qutil.IntAll((*returnData)[0]["return_money"])
  84. refund_money := qutil.IntAll((*refundData)[0]["refund_money"])
  85. if param.PayMoney+param.BigSubMoney+param.SupplyMoney-param.Commission-param.ProceduresMoney == return_money-refund_money {
  86. updateData["return_status"] = 1
  87. } else if param.PayMoney+param.BigSubMoney+param.SupplyMoney-param.Commission-param.ProceduresMoney > return_money-refund_money && return_money-refund_money > 0 {
  88. updateData["return_status"] = 2
  89. }
  90. if return_money == refund_money && return_money > 0 {
  91. updateData["refund_status"] = 1
  92. } else if return_money > refund_money && refund_money > 0 {
  93. updateData["refund_status"] = 2
  94. }
  95. util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, updateData)
  96. util.JysqlDB.Insert("moneyCorrection", insertData)
  97. return map[string]interface{}{"status": 1}, nil
  98. }
  99. func FindUserAccount(context *admin.Context) (interface{}, error) {
  100. param := new(struct {
  101. Phone string `form:"phone"`
  102. })
  103. err := context.Form(param)
  104. if err != nil {
  105. return nil, err
  106. }
  107. // var userData, ok, userId = &map[string]interface{}{}, false, ""
  108. userData, ok := util.MQFW.Find("user", map[string]interface{}{
  109. "i_appid": 2,
  110. "$or": []map[string]interface{}{
  111. {"s_phone": param.Phone},
  112. {"s_m_phone": param.Phone}},
  113. }, `{"s_phone":-1}`, `{"s_phone":1,"s_m_phone":1,"_id":1,"s_nickname":1}`, false, -1, -1)
  114. if userData != nil && len(*userData) > 0 && ok {
  115. for _, v := range *userData {
  116. s_m_phone := qutil.ObjToString(v["s_m_phone"])
  117. s_phone := qutil.ObjToString(v["s_phone"])
  118. regTypeArr := []string{}
  119. if s_phone != "" {
  120. regTypeArr = append(regTypeArr, "APP")
  121. }
  122. if s_m_phone != "" {
  123. regTypeArr = append(regTypeArr, "微信")
  124. }
  125. v["regType"] = strings.Join(regTypeArr, ",")
  126. v["_id"] = mongodb.BsonIdToSId(v["_id"])
  127. }
  128. }
  129. return map[string]interface{}{"data": userData}, nil
  130. }
  131. func HelpVipInfo(context *admin.Context) (interface{}, error) {
  132. param := new(struct {
  133. Phone string `form:"phone"`
  134. RegType string `form:"regType"`
  135. })
  136. err := context.Form(param)
  137. if err != nil {
  138. return nil, err
  139. }
  140. willEffect, regType := false, "s_phone"
  141. //先判断用户是否有即将生效的超级订阅订单
  142. if strings.Contains(param.RegType, "微信") && !strings.Contains(param.RegType, "APP") {
  143. regType = "s_m_phone"
  144. }
  145. query := map[string]interface{}{
  146. regType: param.Phone,
  147. "l_vip_starttime": map[string]interface{}{
  148. "$gt": time.Now().Unix(),
  149. },
  150. }
  151. count1 := util.MQFW.Count("user", query)
  152. if count1 > 0 {
  153. willEffect = true
  154. }
  155. // 增加如若存在订单审核状态为“待一审”、“待二审”、“已退回”的超级订阅订单的则不允许创建
  156. if ExistProcessOrder(param.Phone, SUPERSUB, "") {
  157. willEffect = true
  158. }
  159. if willEffect {
  160. return map[string]interface{}{
  161. "willEffect": true,
  162. }, nil
  163. }
  164. //判断用户购买过超级订阅并且在有效期内 i_vip_status 开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
  165. userInfo := map[string]interface{}{}
  166. userData, ok := util.MQFW.FindOneByField("user", map[string]interface{}{regType: param.Phone, "i_vip_status": 2}, `{"_id":1,"i_vip_expire_tip":1,"i_vip_status":1,"l_vip_endtime":1,"l_vip_starttime":1,"o_vipjy":1}`)
  167. if ok && userData != nil && len(*userData) > 0 {
  168. userInfo = *userData
  169. } else {
  170. return map[string]interface{}{
  171. "willEffect": false,
  172. "userData": nil,
  173. "vipExist": false,
  174. }, nil
  175. }
  176. if userInfo != nil && len(userInfo) > 0 {
  177. userId := mongodb.BsonIdToSId(userInfo["_id"])
  178. //查询订单信息获取客户名称
  179. orderInfo := util.JysqlDB.SelectBySql("SELECT c.customer_name,d.company_name FROM dataexport_order d LEFT JOIN contract c ON c.order_code = d.order_code WHERE product_type = 'VIP订阅' and user_id = ? ORDER BY d.id DESC", userId)
  180. if len(*orderInfo) == 0 {
  181. return nil, errors.New("查询订单表没有查到订单信息")
  182. }
  183. vipInfo := qutil.ObjToMap(userInfo["o_vipjy"])
  184. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  185. areaCount := qutil.IntAll((*buySet)["areacount"])
  186. //判断购买区域是否是全国
  187. nationwide := false
  188. if areaCount == -1 {
  189. nationwide = true
  190. }
  191. if areaCount == -1 {
  192. areaCount = 0
  193. }
  194. //area := qutil.ObjToMap((*vipInfo)["o_area"])
  195. userInfo["areaCount"] = areaCount
  196. //判断是新版超级订阅还是老版超级订阅
  197. newVip := false
  198. if qutil.IntAll((*buySet)["upgrade"]) == 1 {
  199. newVip = true
  200. }
  201. t := qutil.Int64All(userInfo["l_vip_endtime"])
  202. _t := time.Unix(t, 0)
  203. userInfo["vipStartTime"] = (_t.AddDate(0, 0, 1)).Format(qutil.Date_Short_Layout)
  204. data := map[string]interface{}{
  205. "willEffect": false,
  206. "vipExist": true,
  207. "nationwide": nationwide,
  208. "userData": userInfo,
  209. "newVip": newVip,
  210. }
  211. if len((*orderInfo)) > 0 {
  212. data["orderInfo"] = (*orderInfo)[0]
  213. }
  214. return data, nil
  215. }
  216. return map[string]interface{}{
  217. "willEffect": false,
  218. "userData": nil,
  219. "vipExist": false,
  220. "nationwide": false,
  221. "new": false,
  222. }, nil
  223. }