order.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_mfyx/models"
  7. "hongze/hongze_mfyx/models/order"
  8. "hongze/hongze_mfyx/utils"
  9. "time"
  10. )
  11. // 获取日卡、月卡商品配置信息
  12. func GetUserGoodsCardList() (goodsListResp []*order.CygxGoodsResp) {
  13. var err error
  14. defer func() {
  15. if err != nil {
  16. fmt.Println(err)
  17. go utils.SendAlarmMsg(fmt.Sprint("判断用户是否开通了个人研选权限失败 GetCygxGoodsList, err:", err.Error()), 2)
  18. }
  19. }()
  20. var condition string
  21. var pars []interface{}
  22. condition = ` AND goods_id IN (1,2) `
  23. goodsList, e := order.GetCygxGoodsList(condition, pars)
  24. if e != nil {
  25. err = errors.New("GetCygxGoodsList, Err: " + e.Error())
  26. return
  27. }
  28. goodsListResp = goodsList
  29. return
  30. }
  31. // 获取单场活动关联的商品配置信息
  32. func GetGoodsInfoByActivity(item *models.ActivityDetail) (goodsListResp []*order.CygxGoodsResp) {
  33. var err error
  34. defer func() {
  35. if err != nil {
  36. fmt.Println(err)
  37. go utils.SendAlarmMsg(fmt.Sprint("获取单场活动关联的商品配置信息 GetGoodsInfoByActivity, err:", err.Error()), 2)
  38. }
  39. }()
  40. //var goodsList []*order.CygxGoodsResp
  41. //var e error
  42. var condition string
  43. var pars []interface{}
  44. if item.ActivityTypeId == 1 && item.IsLimitPeople == 1 { //专家电话会。限制人数,
  45. condition = ` AND goods_id IN (3) `
  46. } else if (item.ActivityTypeId == 5 || item.ActivityTypeId == 8) && item.IsResearchPoints { //买方线下交流/专家线下沙龙。参会人扣点,
  47. condition = ` AND goods_id IN (4) `
  48. } else if (item.ActivityTypeId == 5 || item.ActivityTypeId == 8) && !item.IsResearchPoints { //买方线下交流/专家线下沙龙。参会人扣点,
  49. condition = ` AND goods_id IN (5) `
  50. } else if item.ActivityTypeId == 3 && item.IsResearchPoints { //非易董。公司调研电话会参会人扣点
  51. condition = ` AND goods_id IN (6) `
  52. } else if item.ActivityTypeId == 3 && !item.IsResearchPoints { //非易董。公司调研电话会参会人扣点
  53. condition = ` AND goods_id IN (7) `
  54. } else if item.ActivityTypeId == 1 && item.IsResearchPoints { //专家电话会,不限制人数,研选扣点(1299元)
  55. condition = ` AND goods_id IN (8) `
  56. }
  57. goodsList, e := order.GetCygxGoodsList(condition, pars)
  58. if e != nil {
  59. err = errors.New("GetCygxGoodsList, Err: " + e.Error())
  60. return
  61. }
  62. goodsListResp = goodsList
  63. return
  64. }
  65. // 获取用户十分钟之内是否有相同的订单信息
  66. func GetHaverEquallyOrderByUser10Min(userId, goodsId int) (orderCode string) {
  67. var err error
  68. defer func() {
  69. if err != nil {
  70. fmt.Println(err)
  71. go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10Min, err:", err.Error()), 2)
  72. }
  73. }()
  74. var condition string
  75. var pars []interface{}
  76. endTime := time.Now().Add(-10 * time.Minute)
  77. condition = ` AND order_status = 1 AND user_id = ? AND goods_id = ? AND create_time > ? ORDER BY order_id DESC `
  78. pars = append(pars, userId, goodsId, endTime)
  79. orderList, e := order.GetCygxOrderList(condition, pars, 0, 1)
  80. if e != nil && e.Error() != utils.ErrNoRow() {
  81. err = errors.New("GetCygxOrderList, Err: " + e.Error())
  82. return
  83. }
  84. if len(orderList) == 0 {
  85. return
  86. } else {
  87. for _, v := range orderList {
  88. orderCode = v.OrderCode
  89. }
  90. }
  91. return
  92. }
  93. // 获取用户十分钟之内是否有相同的订单信息
  94. func GetHaverEquallyOrderByUser10MinByActivty(userId, sourceId int) (orderCode string, seconds int) {
  95. var err error
  96. defer func() {
  97. if err != nil {
  98. fmt.Println(err)
  99. go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10Min, err:", err.Error()), 2)
  100. }
  101. }()
  102. var condition string
  103. var pars []interface{}
  104. endTime := time.Now().Add(-10 * time.Minute)
  105. condition = ` AND order_status = 1 AND source = 'activity' AND user_id = ? AND source_id = ? AND create_time > ? ORDER BY order_id DESC `
  106. pars = append(pars, userId, sourceId, endTime)
  107. orderList, e := order.GetCygxOrderList(condition, pars, 0, 1)
  108. if e != nil && e.Error() != utils.ErrNoRow() {
  109. err = errors.New("GetCygxOrderList, Err: " + e.Error())
  110. return
  111. }
  112. if len(orderList) == 0 {
  113. return
  114. } else {
  115. for _, v := range orderList {
  116. orderCode = v.OrderCode
  117. duration := time.Now().Sub(v.CreateTime)
  118. // 将时间差转换为秒数
  119. seconds = 600 - int(duration.Seconds())
  120. }
  121. }
  122. return
  123. }
  124. // 处理支付订单回调
  125. func HandleOrderHandle(itemCallback *WechatPayCallback) {
  126. var err error
  127. defer func() {
  128. if err != nil {
  129. fmt.Println(err)
  130. go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2)
  131. }
  132. }()
  133. outTradeNo := itemCallback.OutTradeNo
  134. orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo)
  135. if e != nil {
  136. err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error())
  137. return
  138. }
  139. go AddCygxOrderPayment(itemCallback) // 记录支付交易信息
  140. if itemCallback.TradeState != "SUCCESS" { // 回调显示支付不成功,模版消息推送
  141. if e != nil {
  142. err = errors.New("支付失败, OrderCode: " + outTradeNo)
  143. return
  144. }
  145. }
  146. //修改过状态的不再二次处理
  147. if orderDetail.OrderStatus == 2 {
  148. return
  149. }
  150. itemOrder := new(order.CygxOrder)
  151. itemOrder.OrderCode = itemCallback.OutTradeNo
  152. itemOrder.PayTime = itemCallback.SuccessTime
  153. itemOrder.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  154. itemOrder.OrderStatus = 2
  155. itemOrder.OutTradeCode = itemCallback.TransactionID
  156. //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"`
  157. if orderDetail.OrderType == 1 {
  158. itemUserCard := new(order.CygxOrderUserCard)
  159. itemUserCard.OrderCode = orderDetail.OrderCode
  160. itemUserCard.UserId = orderDetail.UserId
  161. itemUserCard.Mobile = orderDetail.Mobile
  162. itemUserCard.Email = orderDetail.Email
  163. itemUserCard.CompanyId = orderDetail.CompanyId
  164. itemUserCard.CompanyName = orderDetail.CompanyName
  165. itemUserCard.RealName = orderDetail.RealName
  166. itemUserCard.SellerName = orderDetail.SellerName
  167. itemUserCard.CreateTime = time.Now()
  168. itemUserCard.ModifyTime = time.Now()
  169. itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform
  170. if orderDetail.GoodsId == 1 {
  171. itemUserCard.StartDate = itemOrder.PayTime
  172. itemUserCard.EndDate = itemOrder.PayTime.AddDate(0, 0, 1)
  173. itemUserCard.CardType = "日卡"
  174. } else {
  175. now := time.Now()
  176. itemUserCard.StartDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
  177. itemUserCard.EndDate = itemUserCard.StartDate.AddDate(0, 1, 0)
  178. itemUserCard.CardType = "月卡"
  179. }
  180. e = order.AddCygxOrderUserCard(itemUserCard, itemOrder)
  181. if e != nil {
  182. err = errors.New("AddCygxOrderUserCard, Err: " + e.Error())
  183. return
  184. }
  185. } else if orderDetail.OrderType == 2 {
  186. //如果是活动,把单场付费信息的活动写入 用户虚拟资产表
  187. itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
  188. itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode
  189. itemOrderVirtualAsset.UserId = orderDetail.UserId
  190. itemOrderVirtualAsset.Mobile = orderDetail.Mobile
  191. itemOrderVirtualAsset.Email = orderDetail.Email
  192. itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId
  193. itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName
  194. itemOrderVirtualAsset.RealName = orderDetail.RealName
  195. itemOrderVirtualAsset.SellerName = orderDetail.SellerName
  196. itemOrderVirtualAsset.Source = orderDetail.Source
  197. itemOrderVirtualAsset.SourceId = orderDetail.SourceId
  198. itemOrderVirtualAsset.CreateTime = time.Now()
  199. itemOrderVirtualAsset.ModifyTime = time.Now()
  200. e = order.AddCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder)
  201. if e != nil {
  202. err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error())
  203. return
  204. }
  205. }
  206. fmt.Println(orderDetail.Source)
  207. return
  208. }
  209. func AddCygxOrderPayment(itemCallback *WechatPayCallback) {
  210. var err error
  211. defer func() {
  212. if err != nil {
  213. fmt.Println(err)
  214. go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2)
  215. }
  216. }()
  217. itemPay := new(order.CygxOrderPayment)
  218. itemPay.OrderCode = itemCallback.OutTradeNo
  219. itemPay.OutTradeCode = itemCallback.TransactionID
  220. itemPay.PayBody = itemCallback.TradeStateDesc
  221. jsonData, _ := json.Marshal(itemCallback)
  222. itemPay.PayDetail = string(jsonData)
  223. itemPay.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  224. itemPay.PayStatus = itemCallback.TradeState
  225. itemPay.CreateTime = time.Now()
  226. itemPay.PaymentType = 1
  227. e := order.AddCygxOrderPayment(itemPay)
  228. if e != nil {
  229. err = errors.New("AddCygxOrderPayment, Err: " + e.Error())
  230. return
  231. }
  232. return
  233. }
  234. // 处理退款订单回调
  235. func HandleOrderRefundHandle(itemCallback *WechatPayCallback) {
  236. var err error
  237. defer func() {
  238. if err != nil {
  239. fmt.Println(err)
  240. go utils.SendAlarmMsg(fmt.Sprint("处理退款订单回调信息失败 HandleOrderRefundHandle, err:", err.Error()), 2)
  241. }
  242. }()
  243. outTradeNo := itemCallback.OutTradeNo
  244. orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo)
  245. if e != nil {
  246. err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error())
  247. return
  248. }
  249. //go AddCygxOrderPayment(itemCallback) // 记录支付交易信息
  250. //修改过状态的不再二次处理
  251. if orderDetail.OrderStatus == 3 {
  252. return
  253. }
  254. itemOrder := new(order.CygxOrder)
  255. itemOrder.OrderCode = itemCallback.OutTradeNo
  256. itemOrder.RefundTime = itemCallback.SuccessTime
  257. itemOrder.RefundMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  258. itemOrder.OrderStatus = 3
  259. //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"`
  260. if orderDetail.OrderType == 1 {
  261. itemUserCard := new(order.CygxOrderUserCard)
  262. itemUserCard.OrderCode = orderDetail.OrderCode
  263. itemUserCard.UserId = orderDetail.UserId
  264. itemUserCard.Mobile = orderDetail.Mobile
  265. itemUserCard.Email = orderDetail.Email
  266. itemUserCard.CompanyId = orderDetail.CompanyId
  267. itemUserCard.CompanyName = orderDetail.CompanyName
  268. itemUserCard.RealName = orderDetail.RealName
  269. itemUserCard.SellerName = orderDetail.SellerName
  270. itemUserCard.CreateTime = time.Now()
  271. itemUserCard.ModifyTime = time.Now()
  272. itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform
  273. if orderDetail.GoodsId == 1 {
  274. itemUserCard.CardType = "日卡"
  275. } else {
  276. itemUserCard.CardType = "月卡"
  277. }
  278. e = order.RemoveCygxOrderUserCard(itemUserCard, itemOrder) // 移除用户
  279. if e != nil {
  280. err = errors.New("RemoveCygxOrderUserCard, Err: " + e.Error())
  281. return
  282. }
  283. } else if orderDetail.OrderType == 2 {
  284. //如果是活动,把单场付费信息的活动写入 用户虚拟资产表
  285. itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
  286. itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode
  287. itemOrderVirtualAsset.UserId = orderDetail.UserId
  288. itemOrderVirtualAsset.Mobile = orderDetail.Mobile
  289. itemOrderVirtualAsset.Email = orderDetail.Email
  290. itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId
  291. itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName
  292. itemOrderVirtualAsset.RealName = orderDetail.RealName
  293. itemOrderVirtualAsset.SellerName = orderDetail.SellerName
  294. itemOrderVirtualAsset.Source = orderDetail.Source
  295. itemOrderVirtualAsset.SourceId = orderDetail.SourceId
  296. itemOrderVirtualAsset.CreateTime = time.Now()
  297. itemOrderVirtualAsset.ModifyTime = time.Now()
  298. e = order.RemoveCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder)
  299. if e != nil {
  300. err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error())
  301. return
  302. }
  303. }
  304. fmt.Println(orderDetail.Source)
  305. return
  306. }