order.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. package services
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "hongze/hongze_web_mfyx/models"
  7. "hongze/hongze_web_mfyx/models/order"
  8. "hongze/hongze_web_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("获取日卡、月卡商品配置信息失败 GetUserGoodsCardList, 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("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10MinByActivty, 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 GetHaverEquallyOrderByUser10MinByArticle(userId, sourceId int) (orderCode string, seconds int) {
  126. var err error
  127. defer func() {
  128. if err != nil {
  129. fmt.Println(err)
  130. go utils.SendAlarmMsg(fmt.Sprint("获取用户十分钟之内是否有相同的订单信息失败 GetHaverEquallyOrderByUser10MinByActivty, err:", err.Error()), 2)
  131. }
  132. }()
  133. var condition string
  134. var pars []interface{}
  135. endTime := time.Now().Add(-10 * time.Minute)
  136. condition = ` AND order_status = 1 AND source = 'article' AND user_id = ? AND source_id = ? AND create_time > ? ORDER BY order_id DESC `
  137. pars = append(pars, userId, sourceId, endTime)
  138. orderList, e := order.GetCygxOrderList(condition, pars, 0, 1)
  139. if e != nil && e.Error() != utils.ErrNoRow() {
  140. err = errors.New("GetCygxOrderList, Err: " + e.Error())
  141. return
  142. }
  143. if len(orderList) == 0 {
  144. return
  145. } else {
  146. for _, v := range orderList {
  147. orderCode = v.OrderCode
  148. duration := time.Now().Sub(v.CreateTime)
  149. // 将时间差转换为秒数
  150. seconds = 600 - int(duration.Seconds())
  151. }
  152. }
  153. return
  154. }
  155. // 处理支付订单回调
  156. func HandleOrderHandle(itemCallback *WechatPayCallback) {
  157. var err error
  158. defer func() {
  159. if err != nil {
  160. fmt.Println(err)
  161. go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2)
  162. }
  163. }()
  164. outTradeNo := itemCallback.OutTradeNo
  165. orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo)
  166. if e != nil {
  167. err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error())
  168. return
  169. }
  170. go AddCygxOrderPayment(itemCallback) // 记录支付交易信息
  171. if itemCallback.TradeState != "SUCCESS" { // 回调显示支付不成功,模版消息推送
  172. if e != nil {
  173. err = errors.New("支付失败, OrderCode: " + outTradeNo)
  174. return
  175. }
  176. }
  177. //修改过状态的不再二次处理
  178. if orderDetail.OrderStatus == 2 {
  179. return
  180. }
  181. itemOrder := new(order.CygxOrder)
  182. itemOrder.OrderCode = itemCallback.OutTradeNo
  183. itemOrder.PayTime = itemCallback.SuccessTime
  184. itemOrder.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  185. itemOrder.OrderStatus = 2
  186. itemOrder.OutTradeCode = itemCallback.TransactionID
  187. //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"`
  188. if orderDetail.OrderType == 1 {
  189. itemUserCard := new(order.CygxOrderUserCard)
  190. itemUserCard.OrderCode = orderDetail.OrderCode
  191. itemUserCard.UserId = orderDetail.UserId
  192. itemUserCard.Mobile = orderDetail.Mobile
  193. itemUserCard.Email = orderDetail.Email
  194. itemUserCard.CompanyId = orderDetail.CompanyId
  195. itemUserCard.CompanyName = orderDetail.CompanyName
  196. itemUserCard.RealName = orderDetail.RealName
  197. itemUserCard.SellerName = orderDetail.SellerName
  198. itemUserCard.CreateTime = time.Now()
  199. itemUserCard.ModifyTime = time.Now()
  200. itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform
  201. if orderDetail.GoodsId == 1 {
  202. itemUserCard.StartDate = itemOrder.PayTime
  203. itemUserCard.EndDate = itemOrder.PayTime.AddDate(0, 0, 1)
  204. itemUserCard.CardType = "日卡"
  205. } else {
  206. now := time.Now()
  207. itemUserCard.StartDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
  208. itemUserCard.EndDate = itemUserCard.StartDate.AddDate(0, 1, 0)
  209. itemUserCard.CardType = "月卡"
  210. }
  211. e = order.AddCygxOrderUserCard(itemUserCard, itemOrder)
  212. if e != nil {
  213. err = errors.New("AddCygxOrderUserCard, Err: " + e.Error())
  214. return
  215. }
  216. } else if orderDetail.OrderType == 2 {
  217. //如果是活动,把单场付费信息的活动写入 用户虚拟资产表
  218. itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
  219. itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode
  220. itemOrderVirtualAsset.UserId = orderDetail.UserId
  221. itemOrderVirtualAsset.Mobile = orderDetail.Mobile
  222. itemOrderVirtualAsset.Email = orderDetail.Email
  223. itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId
  224. itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName
  225. itemOrderVirtualAsset.RealName = orderDetail.RealName
  226. itemOrderVirtualAsset.SellerName = orderDetail.SellerName
  227. itemOrderVirtualAsset.Source = orderDetail.Source
  228. itemOrderVirtualAsset.SourceId = orderDetail.SourceId
  229. itemOrderVirtualAsset.CreateTime = time.Now()
  230. itemOrderVirtualAsset.ModifyTime = time.Now()
  231. e = order.AddCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder)
  232. if e != nil {
  233. err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error())
  234. return
  235. }
  236. }
  237. fmt.Println(orderDetail.Source)
  238. return
  239. }
  240. func AddCygxOrderPayment(itemCallback *WechatPayCallback) {
  241. var err error
  242. defer func() {
  243. if err != nil {
  244. fmt.Println(err)
  245. go utils.SendAlarmMsg(fmt.Sprint("处理订单回调信息失败 HandleOrderHandle, err:", err.Error()), 2)
  246. }
  247. }()
  248. itemPay := new(order.CygxOrderPayment)
  249. itemPay.OrderCode = itemCallback.OutTradeNo
  250. itemPay.OutTradeCode = itemCallback.TransactionID
  251. itemPay.PayBody = itemCallback.TradeStateDesc
  252. jsonData, _ := json.Marshal(itemCallback)
  253. itemPay.PayDetail = string(jsonData)
  254. itemPay.PayMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  255. itemPay.PayStatus = itemCallback.TradeState
  256. itemPay.CreateTime = time.Now()
  257. itemPay.PaymentType = 1
  258. e := order.AddCygxOrderPayment(itemPay)
  259. if e != nil {
  260. err = errors.New("AddCygxOrderPayment, Err: " + e.Error())
  261. return
  262. }
  263. return
  264. }
  265. // 处理退款订单回调
  266. func HandleOrderRefundHandle(itemCallback *WechatPayCallback) {
  267. var err error
  268. defer func() {
  269. if err != nil {
  270. fmt.Println(err)
  271. go utils.SendAlarmMsg(fmt.Sprint("处理退款订单回调信息失败 HandleOrderRefundHandle, err:", err.Error()), 2)
  272. }
  273. }()
  274. outTradeNo := itemCallback.OutTradeNo
  275. orderDetail, e := order.GetCygxOrderDetailByOrderCode(outTradeNo)
  276. if e != nil {
  277. err = errors.New("GetCygxOrderDetailByOrderCode, Err: " + e.Error())
  278. return
  279. }
  280. //go AddCygxOrderPayment(itemCallback) // 记录支付交易信息
  281. //修改过状态的不再二次处理
  282. if orderDetail.OrderStatus == 3 {
  283. return
  284. }
  285. itemOrder := new(order.CygxOrder)
  286. itemOrder.OrderCode = itemCallback.OutTradeNo
  287. itemOrder.RefundTime = itemCallback.SuccessTime
  288. itemOrder.RefundMoney = float64(float64(itemCallback.Amount.PayerTotal) / 100) // 金额分转换处理
  289. itemOrder.OrderStatus = 3
  290. //文章处理逻辑 OrderType int `comment:"订单类型,1:畅读卡订单,2:单场付费订单"`
  291. if orderDetail.OrderType == 1 {
  292. itemUserCard := new(order.CygxOrderUserCard)
  293. itemUserCard.OrderCode = orderDetail.OrderCode
  294. itemUserCard.UserId = orderDetail.UserId
  295. itemUserCard.Mobile = orderDetail.Mobile
  296. itemUserCard.Email = orderDetail.Email
  297. itemUserCard.CompanyId = orderDetail.CompanyId
  298. itemUserCard.CompanyName = orderDetail.CompanyName
  299. itemUserCard.RealName = orderDetail.RealName
  300. itemUserCard.SellerName = orderDetail.SellerName
  301. itemUserCard.CreateTime = time.Now()
  302. itemUserCard.ModifyTime = time.Now()
  303. itemUserCard.RegisterPlatform = orderDetail.RegisterPlatform
  304. if orderDetail.GoodsId == 1 {
  305. itemUserCard.CardType = "日卡"
  306. } else {
  307. itemUserCard.CardType = "月卡"
  308. }
  309. e = order.RemoveCygxOrderUserCard(itemUserCard, itemOrder) // 移除用户
  310. if e != nil {
  311. err = errors.New("RemoveCygxOrderUserCard, Err: " + e.Error())
  312. return
  313. }
  314. } else if orderDetail.OrderType == 2 {
  315. //如果是活动,把单场付费信息的活动写入 用户虚拟资产表
  316. itemOrderVirtualAsset := new(order.CygxOrderVirtualAsset)
  317. itemOrderVirtualAsset.OrderCode = orderDetail.OrderCode
  318. itemOrderVirtualAsset.UserId = orderDetail.UserId
  319. itemOrderVirtualAsset.Mobile = orderDetail.Mobile
  320. itemOrderVirtualAsset.Email = orderDetail.Email
  321. itemOrderVirtualAsset.CompanyId = orderDetail.CompanyId
  322. itemOrderVirtualAsset.CompanyName = orderDetail.CompanyName
  323. itemOrderVirtualAsset.RealName = orderDetail.RealName
  324. itemOrderVirtualAsset.SellerName = orderDetail.SellerName
  325. itemOrderVirtualAsset.Source = orderDetail.Source
  326. itemOrderVirtualAsset.SourceId = orderDetail.SourceId
  327. itemOrderVirtualAsset.CreateTime = time.Now()
  328. itemOrderVirtualAsset.ModifyTime = time.Now()
  329. e = order.RemoveCygxOrderVirtualAsset(itemOrderVirtualAsset, itemOrder)
  330. if e != nil {
  331. err = errors.New("AddCygxOrderVirtualAsset, Err: " + e.Error())
  332. return
  333. }
  334. }
  335. fmt.Println(orderDetail.Source)
  336. return
  337. }