optimizeOrder.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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. RedType string `form:"redType"`
  23. SigningSubject string `form:"signingSubject"`
  24. })
  25. err := context.Form(param)
  26. if err != nil {
  27. return nil, err
  28. }
  29. orderData := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "", "")
  30. if orderData == nil {
  31. return nil, errors.New("未找到订单")
  32. }
  33. updateData := map[string]interface{}{}
  34. insertData := map[string]interface{}{
  35. "orderCode": param.OrderCode,
  36. "correctionReason": param.CorrectionReason,
  37. "createTime": qutil.NowFormat(qutil.Date_Full_Layout),
  38. "createPerson": context.User.Username,
  39. "redType": param.RedType,
  40. }
  41. if param.OrderMoney == 0 { //红冲金额删除,从数据库查询
  42. param.OrderMoney = qutil.IntAll((*orderData)["order_money"])
  43. }
  44. if strings.Contains(param.RedType, "签约主体") {
  45. if param.SigningSubject == "北京剑鱼信息技术有限公司" {
  46. updateData["signing_subject"] = "h01"
  47. insertData["signingSubject"] = "北京拓普丰联信息科技股份有限公司"
  48. } else {
  49. updateData["signing_subject"] = "h02"
  50. insertData["signingSubject"] = "北京剑鱼信息技术有限公司"
  51. }
  52. }
  53. if strings.Contains(param.RedType, "金额") {
  54. filterMap := map[string]interface{}{}
  55. if err := json.Unmarshal([]byte(qutil.ObjToString((*orderData)["filter"])), &filterMap); err != nil {
  56. return nil, errors.New("修正失败")
  57. }
  58. //if param.PayMoney != 0 {
  59. //ct, _ := time.Parse("2006-01-02 15:04:05", qutil.ObjToString((*orderData)["create_time"]))
  60. //if ct.Unix() > config.SysConfigs.ReleaseTime {
  61. if qutil.ObjToString((*orderData)["product_type"]) == "大会员" {
  62. filterMap["bigPayMoneyUpdate"] = param.PayMoney - qutil.IntAll((*orderData)["pay_money"])
  63. updateData["pay_money"] = param.PayMoney
  64. //insertData["payMoney"] = param.PayMoney
  65. insertData["payMoney"] = param.PayMoney - qutil.IntAll((*orderData)["pay_money"])
  66. //filterMap["bigPayMoney"] = param.PayMoney
  67. util.JysqlDB.Update("contract", map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"contract_money": param.PayMoney})
  68. } else {
  69. filterMap["payMoneyUpdate"] = param.PayMoney
  70. updateData["pay_money"] = param.PayMoney
  71. insertData["payMoney"] = param.PayMoney - qutil.IntAll((*orderData)["pay_money"])
  72. util.JysqlDB.Update("contract", map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"contract_money": param.PayMoney})
  73. }
  74. //}
  75. //}
  76. //大会员子账号金额修改
  77. //filterMap["subPayMoneyUpdate"] = param.BigSubMoney
  78. /*insertData["bigSubMoney"] = param.BigSubMoney - qutil.IntAll(filterMap["subPayMoney"])
  79. filterMap["subPayMoney"] = param.BigSubMoney
  80. filterMap["supplyPayMoneyUpdate"] = param.SupplyMoney
  81. insertData["supplyMoney"] = param.SupplyMoney - qutil.IntAll(filterMap["supplyPayMoney"])
  82. filterMap["supplyPayMoney"] = param.SupplyMoney*/
  83. //updateData["order_money"] = param.OrderMoney
  84. insertData["orderMoney"] = param.OrderMoney - qutil.IntAll((*orderData)["order_money"])
  85. filterMap["orderMoneyUpdate"] = param.OrderMoney
  86. updateData["commission"] = param.Commission
  87. insertData["commission"] = param.Commission - qutil.IntAll((*orderData)["commission"])
  88. filterMap["commissionUpdate"] = param.Commission
  89. updateData["procedures_money"] = param.ProceduresMoney
  90. insertData["proceduresMoney"] = param.ProceduresMoney - qutil.IntAll((*orderData)["procedures_money"])
  91. filterMap["proceduresMoneyUpdate"] = param.ProceduresMoney - qutil.IntAll((*orderData)["procedures_money"])
  92. filterByte, _ := json.Marshal(filterMap)
  93. updateData["filter"] = string(filterByte)
  94. 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)
  95. refundData := util.JysqlDB.SelectBySql(`select IFNULL(sum(refund_money),0) as refund_money from refund_record where order_code=?`, param.OrderCode)
  96. return_money := qutil.IntAll((*returnData)[0]["return_money"])
  97. refund_money := qutil.IntAll((*refundData)[0]["refund_money"])
  98. if param.PayMoney-param.Commission-param.ProceduresMoney == return_money-refund_money {
  99. updateData["return_status"] = 1
  100. } else if param.PayMoney-param.Commission-param.ProceduresMoney > return_money-refund_money && return_money-refund_money > 0 {
  101. updateData["return_status"] = 2
  102. }
  103. if return_money == refund_money && return_money > 0 {
  104. updateData["refund_status"] = 1
  105. } else if return_money > refund_money && refund_money > 0 {
  106. updateData["refund_status"] = 2
  107. }
  108. }
  109. util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, updateData)
  110. util.JysqlDB.Insert("moneyCorrection", insertData)
  111. return map[string]interface{}{"status": 1}, nil
  112. }
  113. func FindUserAccount(context *admin.Context) (interface{}, error) {
  114. param := new(struct {
  115. Phone string `form:"phone"`
  116. })
  117. err := context.Form(param)
  118. if err != nil {
  119. return nil, err
  120. }
  121. // var userData, ok, userId = &map[string]interface{}{}, false, ""
  122. userData, ok := util.MQFW.Find("user", map[string]interface{}{
  123. "i_appid": 2,
  124. "$or": []map[string]interface{}{
  125. {"s_phone": param.Phone},
  126. {"s_m_phone": param.Phone}},
  127. }, `{"s_phone":-1}`, `{"s_phone":1,"s_m_phone":1,"_id":1,"s_nickname":1}`, false, -1, -1)
  128. if ok && userData != nil && len(*userData) > 0 {
  129. for _, v := range *userData {
  130. s_m_phone := qutil.ObjToString(v["s_m_phone"])
  131. s_phone := qutil.ObjToString(v["s_phone"])
  132. regTypeArr := []string{}
  133. if s_phone != "" {
  134. regTypeArr = append(regTypeArr, "APP")
  135. }
  136. if s_m_phone != "" {
  137. regTypeArr = append(regTypeArr, "微信")
  138. }
  139. v["regType"] = strings.Join(regTypeArr, ",")
  140. v["_id"] = mongodb.BsonIdToSId(v["_id"])
  141. }
  142. }
  143. return map[string]interface{}{"data": userData}, nil
  144. }
  145. func HelpVipInfo(context *admin.Context) (interface{}, error) {
  146. param := new(struct {
  147. Phone string `form:"phone"`
  148. RegType string `form:"regType"`
  149. })
  150. err := context.Form(param)
  151. if err != nil {
  152. return nil, err
  153. }
  154. willEffect, regType := false, "s_phone"
  155. //先判断用户是否有即将生效的超级订阅订单
  156. if strings.Contains(param.RegType, "微信") && !strings.Contains(param.RegType, "APP") {
  157. regType = "s_m_phone"
  158. }
  159. query := map[string]interface{}{
  160. regType: param.Phone,
  161. "l_vip_starttime": map[string]interface{}{
  162. "$gt": time.Now().Unix(),
  163. },
  164. }
  165. count1 := util.MQFW.Count("user", query)
  166. if count1 > 0 {
  167. willEffect = true
  168. }
  169. // 增加如若存在订单审核状态为“待一审”、“待二审”、“已退回”的超级订阅订单的则不允许创建
  170. if ExistProcessOrder(param.Phone, SUPERSUB, "") {
  171. willEffect = true
  172. }
  173. if willEffect {
  174. return map[string]interface{}{
  175. "willEffect": true,
  176. }, nil
  177. }
  178. //判断用户购买过超级订阅并且在有效期内 i_vip_status 开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
  179. userInfo := map[string]interface{}{}
  180. 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}`)
  181. if ok && userData != nil && len(*userData) > 0 {
  182. userInfo = *userData
  183. } else {
  184. return map[string]interface{}{
  185. "willEffect": false,
  186. "userData": nil,
  187. "vipExist": false,
  188. }, nil
  189. }
  190. if userInfo != nil && len(userInfo) > 0 {
  191. userId := mongodb.BsonIdToSId(userInfo["_id"])
  192. //查询订单信息获取客户名称
  193. 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)
  194. if len(*orderInfo) == 0 {
  195. return nil, errors.New("查询订单表没有查到订单信息")
  196. }
  197. vipInfo := qutil.ObjToMap(userInfo["o_vipjy"])
  198. buySet := qutil.ObjToMap((*vipInfo)["o_buyset"])
  199. areaCount := qutil.IntAll((*buySet)["areacount"])
  200. //判断购买区域是否是全国
  201. nationwide := false
  202. if areaCount == -1 {
  203. nationwide = true
  204. }
  205. if areaCount == -1 {
  206. areaCount = 0
  207. }
  208. //area := qutil.ObjToMap((*vipInfo)["o_area"])
  209. userInfo["areaCount"] = areaCount
  210. //判断是新版超级订阅还是老版超级订阅
  211. newVip := false
  212. if qutil.IntAll((*buySet)["upgrade"]) == 1 {
  213. newVip = true
  214. }
  215. t := qutil.Int64All(userInfo["l_vip_endtime"])
  216. _t := time.Unix(t, 0)
  217. userInfo["vipStartTime"] = (_t.AddDate(0, 0, 1)).Format(qutil.Date_Short_Layout)
  218. data := map[string]interface{}{
  219. "willEffect": false,
  220. "vipExist": true,
  221. "nationwide": nationwide,
  222. "userData": userInfo,
  223. "newVip": newVip,
  224. }
  225. if len((*orderInfo)) > 0 {
  226. data["orderInfo"] = (*orderInfo)[0]
  227. }
  228. return data, nil
  229. }
  230. return map[string]interface{}{
  231. "willEffect": false,
  232. "userData": nil,
  233. "vipExist": false,
  234. "nationwide": false,
  235. "new": false,
  236. }, nil
  237. }