order.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hongze_mfyx/models"
  6. "hongze/hongze_mfyx/models/order"
  7. "hongze/hongze_mfyx/services"
  8. "hongze/hongze_mfyx/utils"
  9. "strings"
  10. "time"
  11. )
  12. // 订单
  13. type OrderController struct {
  14. BaseAuthController
  15. }
  16. // @Title 通过文章创建订单
  17. // @Description 通过文章创建订单接口
  18. // @Param request body models.ActivitySingnupRep true "type json string"
  19. // @Success Ret=200 {object} models.SignupStatus
  20. // @router /addByArticle [post]
  21. func (this *OrderController) AddByArticle() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. user := this.User
  28. if user == nil {
  29. br.Msg = "请登录"
  30. br.ErrMsg = "请登录,用户信息为空"
  31. br.Ret = 408
  32. return
  33. }
  34. var req order.CygxOrderAddReq
  35. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  36. if err != nil {
  37. br.Msg = "参数解析异常!"
  38. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  39. return
  40. }
  41. uid := user.UserId
  42. goodsId := req.GoodsId
  43. sourceId := req.SourceId
  44. if goodsId == 0 {
  45. br.Msg = "支付失败"
  46. br.ErrMsg = "支付失败,goodsId 信息错误Err:" + err.Error()
  47. return
  48. }
  49. goodsDetail, err := order.GetCygxGoodsDetailByGoodsId(goodsId)
  50. if err != nil {
  51. br.Msg = "获取信息失败"
  52. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  53. return
  54. }
  55. var title string
  56. oldOrderCode := services.GetHaverEquallyOrderByUser10Min(uid, goodsId) //获取用户十分钟之内是否有相同的订单信息
  57. articleDetail, err := models.GetArticleDetailById(sourceId)
  58. if err != nil {
  59. br.Msg = "获取信息失败"
  60. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  61. return
  62. }
  63. title = articleDetail.Title
  64. item := new(order.CygxOrder)
  65. item.OrderCode = utils.GetOrdernum()
  66. item.GoodsName = goodsDetail.GoodsName
  67. item.GoodsId = goodsId
  68. item.GoodsMoney = goodsDetail.Price
  69. item.OrderMoney = goodsDetail.CurrentPrice
  70. item.SourceId = sourceId
  71. item.Source = utils.CYGX_OBJ_ARTICLE
  72. item.SourceTitle = title
  73. item.UserId = user.UserId
  74. item.Mobile = user.Mobile
  75. item.Email = user.Email
  76. item.CompanyId = user.CompanyId
  77. item.CompanyName = user.CompanyName
  78. item.RealName = user.RealName
  79. item.SellerName, item.SellerId = services.GetSellerName(user) // 销售姓名
  80. item.CreateTime = time.Now()
  81. item.ModifyTime = time.Now()
  82. item.RegisterPlatform = utils.REGISTER_PLATFORM
  83. item.OrderType = 1
  84. //如果十分钟之内有相同的订单就修改,没有就新增
  85. if oldOrderCode == "" {
  86. err = order.AddCygxOrder(item)
  87. } else {
  88. item.OrderCode = oldOrderCode
  89. err = order.UpdateCygxOrder(item, oldOrderCode)
  90. }
  91. if err != nil {
  92. br.Msg = "创建订单信息失败"
  93. br.ErrMsg = "创建订单信息失败,Err:" + err.Error()
  94. return
  95. }
  96. JsapiApiResp, err := services.ExampleJsapiApiServicePrepay(item, user.UnionId)
  97. if err != nil {
  98. br.Msg = "创建订单信息失败"
  99. br.ErrMsg = "创建订单信息失败,ExampleJsapiApiServicePrepayErr:" + err.Error()
  100. return
  101. }
  102. resp := new(order.WxJsapiApiResp)
  103. resp.Detail = JsapiApiResp
  104. resp.OrderCode = item.OrderCode
  105. br.Data = resp
  106. br.Ret = 200
  107. br.Success = true
  108. br.Msg = "操作成功"
  109. }
  110. // @Title 通过活动创建订单
  111. // @Description 通过活动创建订单接口
  112. // @Param request body models.ActivitySingnupRep true "type json string"
  113. // @Success Ret=200 {object} models.SignupStatus
  114. // @router /addByActivity [post]
  115. func (this *OrderController) AddByActivity() {
  116. br := new(models.BaseResponse).Init()
  117. defer func() {
  118. this.Data["json"] = br
  119. this.ServeJSON()
  120. }()
  121. user := this.User
  122. if user == nil {
  123. br.Msg = "请登录"
  124. br.ErrMsg = "请登录,用户信息为空"
  125. br.Ret = 408
  126. return
  127. }
  128. var req order.CygxOrderAddReq
  129. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  130. if err != nil {
  131. br.Msg = "参数解析异常!"
  132. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  133. return
  134. }
  135. uid := user.UserId
  136. goodsId := req.GoodsId
  137. sourceId := req.SourceId
  138. if goodsId == 0 {
  139. br.Msg = "支付失败"
  140. br.ErrMsg = "支付失败,goodsId 信息错误Err:" + err.Error()
  141. return
  142. }
  143. goodsDetail, err := order.GetCygxGoodsDetailByGoodsId(goodsId)
  144. if err != nil {
  145. br.Msg = "获取信息失败"
  146. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  147. return
  148. }
  149. activityDetail, err := models.GetAddActivityInfoById(sourceId)
  150. if err != nil {
  151. br.Msg = "获取信息失败"
  152. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  153. return
  154. }
  155. var title string
  156. var oldOrderCode string
  157. //var _ int
  158. item := new(order.CygxOrder)
  159. if (!activityDetail.IsResearchPoints && activityDetail.IsLimitPeople == 0) || activityDetail.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
  160. oldOrderCode = services.GetHaverEquallyOrderByUser10Min(uid, goodsId) //获取用户十分钟之内是否有相同的订单信息
  161. item.OrderType = 1
  162. } else {
  163. oldOrderCode, _ = services.GetHaverEquallyOrderByUser10MinByActivty(uid, sourceId)
  164. item.OrderType = 2
  165. }
  166. title = activityDetail.ActivityName
  167. item.OrderCode = utils.GetOrdernum()
  168. if activityDetail.ActivityTypeName == "买方线下交流" {
  169. item.GoodsName = "买方交流"
  170. }
  171. if activityDetail.ActivityTypeName == "专家电话会" || activityDetail.ActivityTypeName == "专家线下沙龙" {
  172. item.GoodsName = "专家调研"
  173. }
  174. if activityDetail.ActivityTypeName == "公司调研电话会" {
  175. item.GoodsName = "买方交流"
  176. }
  177. //如果活动有自定义的价格就优先按照自定义的价格来
  178. if activityDetail.ActivityPrice > 0 {
  179. goodsDetail.CurrentPrice = activityDetail.ActivityPrice
  180. }
  181. //return
  182. item.GoodsId = goodsId
  183. item.GoodsMoney = goodsDetail.Price
  184. item.OrderMoney = goodsDetail.CurrentPrice
  185. item.SourceId = sourceId
  186. item.Source = utils.CYGX_OBJ_ACTIVITY
  187. item.SourceTitle = title
  188. item.UserId = user.UserId
  189. item.Mobile = user.Mobile
  190. item.Email = user.Email
  191. item.CompanyId = user.CompanyId
  192. item.CompanyName = user.CompanyName
  193. item.RealName = user.RealName
  194. item.SellerName, item.SellerId = services.GetSellerName(user) // 销售姓名
  195. item.CreateTime = time.Now()
  196. item.ModifyTime = time.Now()
  197. item.RegisterPlatform = utils.REGISTER_PLATFORM
  198. //如果十分钟之内有相同的订单就修改,没有就新增
  199. if oldOrderCode == "" {
  200. err = order.AddCygxOrder(item)
  201. } else {
  202. item.OrderCode = oldOrderCode
  203. err = order.UpdateCygxOrder(item, oldOrderCode)
  204. }
  205. JsapiApiResp, err := services.ExampleJsapiApiServicePrepay(item, user.UnionId)
  206. if err != nil {
  207. br.Msg = "创建订单信息失败"
  208. br.ErrMsg = "创建订单信息失败,ExampleJsapiApiServicePrepayErr:" + err.Error()
  209. return
  210. }
  211. resp := new(order.WxJsapiApiResp)
  212. resp.Detail = JsapiApiResp
  213. resp.OrderCode = item.OrderCode
  214. if err != nil {
  215. br.Msg = "创建订单信息失败"
  216. br.ErrMsg = "创建订单信息失败,Err:" + err.Error()
  217. return
  218. }
  219. br.Data = resp
  220. br.Ret = 200
  221. br.Success = true
  222. br.Msg = "操作成功"
  223. }
  224. // @Title 用户订单列表
  225. // @Description 用户订单列表接口
  226. // @Param PageSize query int true "每页数据条数"
  227. // @Param CurrentIndex query int true "当前页页码,从1开始"
  228. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  229. // @Success 200 {object} models.SpecialListResp
  230. // @router /user/orderList [get]
  231. func (this *OrderController) UserOrderList() {
  232. br := new(models.BaseResponse).Init()
  233. defer func() {
  234. this.Data["json"] = br
  235. this.ServeJSON()
  236. }()
  237. user := this.User
  238. if user == nil {
  239. br.Msg = "请登录"
  240. br.ErrMsg = "请登录,用户信息为空"
  241. br.Ret = 408
  242. return
  243. }
  244. pageSize, _ := this.GetInt("PageSize")
  245. currentIndex, _ := this.GetInt("CurrentIndex")
  246. orderType, _ := this.GetInt("OrderType", 1)
  247. var startSize int
  248. if pageSize <= 0 {
  249. pageSize = utils.PageSize20
  250. }
  251. if currentIndex <= 0 {
  252. currentIndex = 1
  253. }
  254. startSize = utils.StartIndex(currentIndex, pageSize)
  255. resp := new(order.UserOrderListResp)
  256. var condition string
  257. var pars []interface{}
  258. userId := user.UserId
  259. if orderType > 0 {
  260. condition += ` AND order_type = ? `
  261. pars = append(pars, orderType)
  262. }
  263. condition += ` AND user_id = ? `
  264. pars = append(pars, userId)
  265. total, err := order.GetCygxOrderCount(condition, pars)
  266. if err != nil {
  267. br.Msg = "获取失败"
  268. br.ErrMsg = "获取失败, Err:" + err.Error()
  269. return
  270. }
  271. condition += ` ORDER BY order_id DESC `
  272. list, err := order.GetCygxOrderList(condition, pars, startSize, pageSize)
  273. if err != nil {
  274. br.Msg = "获取失败"
  275. br.ErrMsg = "获取失败, Err:" + err.Error()
  276. return
  277. }
  278. for _, v := range list {
  279. item := new(order.OrderListResp)
  280. item.OrderCode = v.OrderCode
  281. item.OrderMoney = v.OrderMoney
  282. item.SourceId = v.SourceId
  283. item.Source = v.Source
  284. item.SourceTitle = v.SourceTitle
  285. item.OrderStatus = v.OrderStatus
  286. switch item.OrderStatus {
  287. case 0:
  288. item.OrderStatusText = "已取消"
  289. case 1:
  290. item.OrderStatusText = "待支付"
  291. case 2:
  292. item.OrderStatusText = "已支付"
  293. case 3:
  294. item.OrderStatusText = "退款成功"
  295. case 4:
  296. item.OrderStatusText = "退款处理中"
  297. case 5:
  298. item.OrderStatusText = "退款异常"
  299. case 6:
  300. item.OrderStatusText = "退款关闭"
  301. }
  302. if orderType == 1 {
  303. if v.GoodsId == 1 {
  304. item.LabelKeywordImgLink = utils.LABEL_ICO_7 //日卡图标
  305. item.StartDate = v.StartDate.Format(utils.FormatDateTime)
  306. item.EndDate = v.EndDate.Format(utils.FormatDateTime)
  307. } else if v.GoodsId == 2 {
  308. item.LabelKeywordImgLink = utils.LABEL_ICO_8 // 月卡图标
  309. item.StartDate = v.StartDate.Format(utils.FormatDate)
  310. item.EndDate = v.EndDate.Format(utils.FormatDate)
  311. }
  312. } else {
  313. item.LabelKeywordImgLink = utils.LABEL_ICO_3
  314. }
  315. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  316. resp.List = append(resp.List, item)
  317. }
  318. page := paging.GetPaging(currentIndex, pageSize, total)
  319. resp.Paging = page
  320. br.Data = resp
  321. br.Ret = 200
  322. br.Success = true
  323. br.Msg = "获取成功"
  324. }
  325. // @Title 订单支付详情
  326. // @Description 订单支付详情接口
  327. // @Param OrderCode query string false "订单号"
  328. // @Success 200 {object} models.SpecialListResp
  329. // @router /orderPay/detail [get]
  330. func (this *OrderController) OrderDetail() {
  331. br := new(models.BaseResponse).Init()
  332. defer func() {
  333. this.Data["json"] = br
  334. this.ServeJSON()
  335. }()
  336. user := this.User
  337. if user == nil {
  338. br.Msg = "请登录"
  339. br.ErrMsg = "请登录,用户信息为空"
  340. br.Ret = 408
  341. return
  342. }
  343. resp := new(order.PayEdOrderDetailResp)
  344. orderCode := this.GetString("OrderCode")
  345. orderDetail, err := order.GetCygxOrderDetailByOrderCode(orderCode)
  346. if err != nil {
  347. br.Msg = "获取失败"
  348. br.ErrMsg = "获取失败, Err:" + err.Error()
  349. return
  350. }
  351. if orderDetail.OrderType == 1 && orderDetail.OrderStatus == 2 {
  352. cardDetail, err := order.GetCygxOrderUserCardDetailByOrderCode(orderCode)
  353. if err != nil {
  354. br.Msg = "获取失败"
  355. br.ErrMsg = "获取失败, Err:" + err.Error()
  356. return
  357. }
  358. resp.EndDate = strings.Replace(cardDetail.EndDate.Format(utils.FormatDateTime), "00:00:00", "", -1)
  359. }
  360. resp.OrderCode = orderDetail.OrderCode
  361. resp.OrderType = orderDetail.OrderType
  362. resp.OrderStatus = orderDetail.OrderStatus
  363. resp.Source = orderDetail.Source
  364. resp.SourceId = orderDetail.SourceId
  365. br.Data = resp
  366. br.Ret = 200
  367. br.Success = true
  368. br.Msg = "获取成功"
  369. }
  370. // @Title 取消订单
  371. // @Description 取消订单接口
  372. // @Param request body models.CygxOrderCancelReq true "type json string"
  373. // @router /cancel [post]
  374. func (this *OrderController) Cancel() {
  375. br := new(models.BaseResponse).Init()
  376. defer func() {
  377. this.Data["json"] = br
  378. this.ServeJSON()
  379. }()
  380. user := this.User
  381. if user == nil {
  382. br.Msg = "请登录"
  383. br.ErrMsg = "请登录,用户信息为空"
  384. br.Ret = 408
  385. return
  386. }
  387. var req order.CygxOrderCancelReq
  388. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  389. if err != nil {
  390. br.Msg = "参数解析异常!"
  391. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  392. return
  393. }
  394. orderCode := req.OrderCode
  395. orderDetail, err := order.GetCygxOrderDetailByOrderCode(orderCode)
  396. if err != nil {
  397. br.Msg = "获取失败"
  398. br.ErrMsg = "获取失败, Err:" + err.Error()
  399. return
  400. }
  401. err = order.CancelCygxOrder(orderDetail)
  402. if err != nil {
  403. br.Msg = "取消订单失败"
  404. br.ErrMsg = "获取失败, Err:" + err.Error()
  405. return
  406. }
  407. br.Ret = 200
  408. br.Success = true
  409. br.Msg = "操作成功"
  410. }