order.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  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.OutTradeNo = "TRADE" + item.OrderCode
  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.ShareName, item.ShareId = services.GetAdminByInviteShareCode(req.InviteShareCode) // 分享人信息
  82. item.CreateTime = time.Now()
  83. item.ModifyTime = time.Now()
  84. item.RegisterPlatform = utils.REGISTER_PLATFORM
  85. item.OrderType = 1
  86. //如果十分钟之内有相同的订单就修改,没有就新增
  87. if oldOrderCode == "" {
  88. err = order.AddCygxOrder(item)
  89. } else {
  90. item.OrderCode = oldOrderCode
  91. err = order.UpdateCygxOrder(item, oldOrderCode)
  92. }
  93. if err != nil {
  94. br.Msg = "创建订单信息失败"
  95. br.ErrMsg = "创建订单信息失败,Err:" + err.Error()
  96. return
  97. }
  98. JsapiApiResp, err := services.ExampleJsapiApiServicePrepay(item, user.UnionId)
  99. if err != nil {
  100. br.Msg = "创建订单信息失败"
  101. br.ErrMsg = "创建订单信息失败,ExampleJsapiApiServicePrepayErr:" + err.Error()
  102. return
  103. }
  104. resp := new(order.WxJsapiApiResp)
  105. resp.Detail = JsapiApiResp
  106. resp.OrderCode = item.OrderCode
  107. br.Data = resp
  108. br.Ret = 200
  109. br.Success = true
  110. br.Msg = "操作成功"
  111. }
  112. // @Title 通过活动创建订单
  113. // @Description 通过活动创建订单接口
  114. // @Param request body models.ActivitySingnupRep true "type json string"
  115. // @Success Ret=200 {object} models.SignupStatus
  116. // @router /addByActivity [post]
  117. func (this *OrderController) AddByActivity() {
  118. br := new(models.BaseResponse).Init()
  119. defer func() {
  120. this.Data["json"] = br
  121. this.ServeJSON()
  122. }()
  123. user := this.User
  124. if user == nil {
  125. br.Msg = "请登录"
  126. br.ErrMsg = "请登录,用户信息为空"
  127. br.Ret = 408
  128. return
  129. }
  130. var req order.CygxOrderAddReq
  131. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  132. if err != nil {
  133. br.Msg = "参数解析异常!"
  134. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  135. return
  136. }
  137. uid := user.UserId
  138. goodsId := req.GoodsId
  139. sourceId := req.SourceId
  140. if goodsId == 0 {
  141. br.Msg = "支付失败"
  142. br.ErrMsg = "支付失败,goodsId 信息错误Err:" + err.Error()
  143. return
  144. }
  145. goodsDetail, err := order.GetCygxGoodsDetailByGoodsId(goodsId)
  146. if err != nil {
  147. br.Msg = "获取信息失败"
  148. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  149. return
  150. }
  151. activityDetail, err := models.GetAddActivityInfoById(sourceId)
  152. if err != nil {
  153. br.Msg = "获取信息失败"
  154. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  155. return
  156. }
  157. var title string
  158. var oldOrderCode string
  159. //var _ int
  160. item := new(order.CygxOrder)
  161. if (!activityDetail.IsResearchPoints && activityDetail.IsLimitPeople == 0) || activityDetail.YidongActivityId != "" { //易董的活动 或者(不扣点且不限制人数)走月卡日卡逻辑
  162. oldOrderCode = services.GetHaverEquallyOrderByUser10Min(uid, goodsId) //获取用户十分钟之内是否有相同的订单信息
  163. item.OrderType = 1
  164. } else {
  165. oldOrderCode, _ = services.GetHaverEquallyOrderByUser10MinByActivty(uid, sourceId)
  166. item.OrderType = 2
  167. }
  168. title = activityDetail.ActivityName
  169. item.OrderCode = utils.GetOrdernum()
  170. item.OutTradeNo = "TRADE" + item.OrderCode
  171. if activityDetail.ActivityTypeName == "买方线下交流" {
  172. item.GoodsName = "买方交流"
  173. }
  174. if activityDetail.ActivityTypeName == "专家电话会" || activityDetail.ActivityTypeName == "专家线下沙龙" {
  175. item.GoodsName = "专家调研"
  176. }
  177. if activityDetail.ActivityTypeName == "公司调研电话会" {
  178. item.GoodsName = "上市公司小范围"
  179. }
  180. switch goodsId {
  181. case 1:
  182. item.GoodsName = "日卡"
  183. case 2:
  184. item.GoodsName = "月卡"
  185. }
  186. //如果活动有自定义的价格就优先按照自定义的价格来
  187. if activityDetail.ActivityPrice > 0 {
  188. goodsDetail.CurrentPrice = activityDetail.ActivityPrice
  189. }
  190. //return
  191. item.GoodsId = goodsId
  192. item.GoodsMoney = goodsDetail.Price
  193. item.OrderMoney = goodsDetail.CurrentPrice
  194. item.SourceId = sourceId
  195. item.Source = utils.CYGX_OBJ_ACTIVITY
  196. item.SourceTitle = title
  197. item.UserId = user.UserId
  198. item.Mobile = user.Mobile
  199. item.Email = user.Email
  200. item.CompanyId = user.CompanyId
  201. item.CompanyName = user.CompanyName
  202. item.RealName = user.RealName
  203. item.SellerName, item.SellerId = services.GetSellerName(user) // 销售姓名
  204. item.ShareName, item.ShareId = services.GetAdminByInviteShareCode(req.InviteShareCode) // 分享人信息
  205. item.CreateTime = time.Now()
  206. item.ModifyTime = time.Now()
  207. item.RegisterPlatform = utils.REGISTER_PLATFORM
  208. //如果十分钟之内有相同的订单就修改,没有就新增
  209. if oldOrderCode == "" {
  210. err = order.AddCygxOrder(item)
  211. } else {
  212. item.OrderCode = oldOrderCode
  213. err = order.UpdateCygxOrder(item, oldOrderCode)
  214. }
  215. JsapiApiResp, err := services.ExampleJsapiApiServicePrepay(item, user.UnionId)
  216. if err != nil {
  217. br.Msg = "创建订单信息失败"
  218. br.ErrMsg = "创建订单信息失败,ExampleJsapiApiServicePrepayErr:" + err.Error()
  219. return
  220. }
  221. resp := new(order.WxJsapiApiResp)
  222. resp.Detail = JsapiApiResp
  223. resp.OrderCode = item.OrderCode
  224. if err != nil {
  225. br.Msg = "创建订单信息失败"
  226. br.ErrMsg = "创建订单信息失败,Err:" + err.Error()
  227. return
  228. }
  229. br.Data = resp
  230. br.Ret = 200
  231. br.Success = true
  232. br.Msg = "操作成功"
  233. }
  234. // @Title 通过研选专栏创建订单
  235. // @Description 通过文章创建订单接口
  236. // @Param request body models.ActivitySingnupRep true "type json string"
  237. // @Success Ret=200 {object} models.SignupStatus
  238. // @router /addByYanxuanspecial [post]
  239. func (this *OrderController) AddByYanxuanspecial() {
  240. br := new(models.BaseResponse).Init()
  241. defer func() {
  242. this.Data["json"] = br
  243. this.ServeJSON()
  244. }()
  245. user := this.User
  246. if user == nil {
  247. br.Msg = "请登录"
  248. br.ErrMsg = "请登录,用户信息为空"
  249. br.Ret = 408
  250. return
  251. }
  252. var req order.CygxOrderAddReq
  253. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  254. if err != nil {
  255. br.Msg = "参数解析异常!"
  256. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  257. return
  258. }
  259. uid := user.UserId
  260. goodsId := req.GoodsId
  261. sourceId := req.SourceId
  262. if goodsId == 0 {
  263. br.Msg = "支付失败"
  264. br.ErrMsg = "支付失败,goodsId 信息错误Err:" + err.Error()
  265. return
  266. }
  267. goodsDetail, err := order.GetCygxGoodsDetailByGoodsId(goodsId)
  268. if err != nil {
  269. br.Msg = "获取信息失败"
  270. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  271. return
  272. }
  273. var title string
  274. oldOrderCode := services.GetHaverEquallyOrderByUser10Min(uid, goodsId) //获取用户十分钟之内是否有相同的订单信息
  275. // 研选专栏
  276. yanxuanSpecialBySpeciaDetail, err := models.GetYanxuanSpecialBySpecialId(sourceId)
  277. if err != nil {
  278. br.Msg = "获取信息失败"
  279. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  280. return
  281. }
  282. title = yanxuanSpecialBySpeciaDetail.Title
  283. item := new(order.CygxOrder)
  284. item.OrderCode = utils.GetOrdernum()
  285. item.OutTradeNo = "TRADE" + item.OrderCode
  286. item.GoodsName = goodsDetail.GoodsName
  287. item.GoodsId = goodsId
  288. item.GoodsMoney = goodsDetail.Price
  289. item.OrderMoney = goodsDetail.CurrentPrice
  290. item.SourceId = sourceId
  291. item.Source = utils.CYGX_OBJ_YANXUANSPECIAL
  292. item.SourceTitle = title
  293. item.UserId = user.UserId
  294. item.Mobile = user.Mobile
  295. item.Email = user.Email
  296. item.CompanyId = user.CompanyId
  297. item.CompanyName = user.CompanyName
  298. item.RealName = user.RealName
  299. item.SellerName, item.SellerId = services.GetSellerName(user) // 销售姓名
  300. item.ShareName, item.ShareId = services.GetAdminByInviteShareCode(req.InviteShareCode) // 分享人信息
  301. item.CreateTime = time.Now()
  302. item.ModifyTime = time.Now()
  303. item.RegisterPlatform = utils.REGISTER_PLATFORM
  304. item.OrderType = 1
  305. //如果十分钟之内有相同的订单就修改,没有就新增
  306. if oldOrderCode == "" {
  307. err = order.AddCygxOrder(item)
  308. } else {
  309. item.OrderCode = oldOrderCode
  310. err = order.UpdateCygxOrder(item, oldOrderCode)
  311. }
  312. if err != nil {
  313. br.Msg = "创建订单信息失败"
  314. br.ErrMsg = "创建订单信息失败,Err:" + err.Error()
  315. return
  316. }
  317. JsapiApiResp, err := services.ExampleJsapiApiServicePrepay(item, user.UnionId)
  318. if err != nil {
  319. br.Msg = "创建订单信息失败"
  320. br.ErrMsg = "创建订单信息失败,ExampleJsapiApiServicePrepayErr:" + err.Error()
  321. return
  322. }
  323. resp := new(order.WxJsapiApiResp)
  324. resp.Detail = JsapiApiResp
  325. resp.OrderCode = item.OrderCode
  326. br.Data = resp
  327. br.Data = resp
  328. br.Ret = 200
  329. br.Success = true
  330. br.Msg = "操作成功"
  331. }
  332. // @Title 用户订单列表
  333. // @Description 用户订单列表接口
  334. // @Param PageSize query int true "每页数据条数"
  335. // @Param CurrentIndex query int true "当前页页码,从1开始"
  336. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  337. // @Success 200 {object} models.SpecialListResp
  338. // @router /user/orderList [get]
  339. func (this *OrderController) UserOrderList() {
  340. br := new(models.BaseResponse).Init()
  341. defer func() {
  342. this.Data["json"] = br
  343. this.ServeJSON()
  344. }()
  345. user := this.User
  346. if user == nil {
  347. br.Msg = "请登录"
  348. br.ErrMsg = "请登录,用户信息为空"
  349. br.Ret = 408
  350. return
  351. }
  352. pageSize, _ := this.GetInt("PageSize")
  353. currentIndex, _ := this.GetInt("CurrentIndex")
  354. orderType, _ := this.GetInt("OrderType", 1)
  355. var startSize int
  356. if pageSize <= 0 {
  357. pageSize = utils.PageSize20
  358. }
  359. if currentIndex <= 0 {
  360. currentIndex = 1
  361. }
  362. startSize = utils.StartIndex(currentIndex, pageSize)
  363. resp := new(order.UserOrderListResp)
  364. var condition string
  365. var pars []interface{}
  366. userId := user.UserId
  367. if orderType > 0 {
  368. condition += ` AND order_type = ? `
  369. pars = append(pars, orderType)
  370. }
  371. condition += ` AND user_id = ? `
  372. pars = append(pars, userId)
  373. total, err := order.GetCygxOrderCount(condition, pars)
  374. if err != nil {
  375. br.Msg = "获取失败"
  376. br.ErrMsg = "获取失败, Err:" + err.Error()
  377. return
  378. }
  379. condition += ` ORDER BY order_id DESC `
  380. list, err := order.GetCygxOrderList(condition, pars, startSize, pageSize)
  381. if err != nil {
  382. br.Msg = "获取失败"
  383. br.ErrMsg = "获取失败, Err:" + err.Error()
  384. return
  385. }
  386. for _, v := range list {
  387. item := new(order.OrderListResp)
  388. item.OrderCode = v.OrderCode
  389. item.OrderMoney = v.OrderMoney
  390. item.SourceId = v.SourceId
  391. item.Source = v.Source
  392. item.SourceTitle = v.SourceTitle
  393. item.OrderStatus = v.OrderStatus
  394. switch item.OrderStatus {
  395. case 0:
  396. item.OrderStatusText = "已取消"
  397. case 1:
  398. item.OrderStatusText = "待支付"
  399. case 2:
  400. item.OrderStatusText = "支付成功"
  401. case 3:
  402. item.OrderStatusText = "转入退款"
  403. case 4:
  404. item.OrderStatusText = "退款处理中"
  405. case 5:
  406. item.OrderStatusText = "退款异常"
  407. case 6:
  408. item.OrderStatusText = "退款关闭"
  409. }
  410. if orderType == 1 {
  411. if v.GoodsId == 1 {
  412. item.LabelKeywordImgLink = utils.LABEL_ICO_7 //日卡图标
  413. item.StartDate = v.StartDate.Format(utils.FormatDateTime)
  414. item.EndDate = v.EndDate.Format(utils.FormatDateTime)
  415. } else if v.GoodsId == 2 {
  416. item.LabelKeywordImgLink = utils.LABEL_ICO_8 // 月卡图标
  417. item.StartDate = v.StartDate.Format(utils.FormatDate)
  418. item.EndDate = v.EndDate.Format(utils.FormatDate)
  419. }
  420. } else {
  421. item.LabelKeywordImgLink = utils.LABEL_ICO_3
  422. }
  423. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  424. resp.List = append(resp.List, item)
  425. }
  426. page := paging.GetPaging(currentIndex, pageSize, total)
  427. resp.Paging = page
  428. br.Data = resp
  429. br.Ret = 200
  430. br.Success = true
  431. br.Msg = "获取成功"
  432. }
  433. // @Title 订单支付详情
  434. // @Description 订单支付详情接口
  435. // @Param OrderCode query string false "订单号"
  436. // @Success 200 {object} models.SpecialListResp
  437. // @router /orderPay/detail [get]
  438. func (this *OrderController) OrderDetail() {
  439. br := new(models.BaseResponse).Init()
  440. defer func() {
  441. this.Data["json"] = br
  442. this.ServeJSON()
  443. }()
  444. user := this.User
  445. if user == nil {
  446. br.Msg = "请登录"
  447. br.ErrMsg = "请登录,用户信息为空"
  448. br.Ret = 408
  449. return
  450. }
  451. resp := new(order.PayEdOrderDetailResp)
  452. orderCode := this.GetString("OrderCode")
  453. orderDetail, err := order.GetCygxOrderDetailByOrderCode(orderCode)
  454. if err != nil {
  455. br.Msg = "获取失败"
  456. br.ErrMsg = "获取失败, Err:" + err.Error()
  457. return
  458. }
  459. if orderDetail.OrderType == 1 && orderDetail.OrderStatus == 2 {
  460. cardDetail, err := order.GetCygxOrderUserCardDetailByOrderCode(orderCode)
  461. if err != nil {
  462. br.Msg = "获取失败"
  463. br.ErrMsg = "获取失败, Err:" + err.Error()
  464. return
  465. }
  466. resp.EndDate = strings.Replace(cardDetail.EndDate.Format(utils.FormatDateTime), "00:00:00", "", -1)
  467. }
  468. resp.OrderCode = orderDetail.OrderCode
  469. resp.OrderType = orderDetail.OrderType
  470. resp.OrderStatus = orderDetail.OrderStatus
  471. resp.Source = orderDetail.Source
  472. resp.SourceId = orderDetail.SourceId
  473. if orderDetail.Source == utils.CYGX_OBJ_ACTIVITY {
  474. resp.IsPublicActivitie, resp.IsSignUp = services.GetActivityWechatPayMsg(orderDetail.SourceId) //如果是活动就要判断是否是公开活动,是否需要自动报名
  475. }
  476. br.Data = resp
  477. br.Ret = 200
  478. br.Success = true
  479. br.Msg = "获取成功"
  480. }
  481. // @Title 取消订单
  482. // @Description 取消订单接口
  483. // @Param request body models.CygxOrderCancelReq true "type json string"
  484. // @router /cancel [post]
  485. func (this *OrderController) Cancel() {
  486. br := new(models.BaseResponse).Init()
  487. defer func() {
  488. this.Data["json"] = br
  489. this.ServeJSON()
  490. }()
  491. user := this.User
  492. if user == nil {
  493. br.Msg = "请登录"
  494. br.ErrMsg = "请登录,用户信息为空"
  495. br.Ret = 408
  496. return
  497. }
  498. var req order.CygxOrderCancelReq
  499. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  500. if err != nil {
  501. br.Msg = "参数解析异常!"
  502. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  503. return
  504. }
  505. orderCode := req.OrderCode
  506. orderDetail, err := order.GetCygxOrderDetailByOrderCode(orderCode)
  507. if err != nil {
  508. br.Msg = "获取失败"
  509. br.ErrMsg = "获取失败, Err:" + err.Error()
  510. return
  511. }
  512. err = order.CancelCygxOrder(orderDetail)
  513. if err != nil {
  514. br.Msg = "取消订单失败"
  515. br.ErrMsg = "获取失败, Err:" + err.Error()
  516. return
  517. }
  518. br.Ret = 200
  519. br.Success = true
  520. br.Msg = "操作成功"
  521. }