order.go 12 KB

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