You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

278 lines
12 KiB

  1. package com.simple.controller;
  2. import com.simple.common.ErrorCode;
  3. import com.simple.domain.po.WxCUser;
  4. import com.simple.domain.po.WxCouponChannel;
  5. import com.simple.domain.vo.WxOrderCVo;
  6. import com.simple.enums.EnumCouponChannelStatus;
  7. import com.simple.enums.EnumCouponStatus;
  8. import com.simple.enums.EnumOrderStatus;
  9. import com.simple.exception.MallinkException;
  10. import com.simple.service.WxCouponChannelService;
  11. import io.swagger.annotations.Api;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.apache.log4j.Logger;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.web.bind.annotation.*;
  16. import com.github.pagehelper.PageInfo;
  17. import com.simple.common.Result;
  18. import com.simple.common.ResultData;
  19. import com.simple.domain.po.WxOrder;
  20. import com.simple.service.WxOrderService;
  21. import io.swagger.annotations.ApiImplicitParam;
  22. import io.swagger.annotations.ApiImplicitParams;
  23. import io.swagger.annotations.ApiOperation;
  24. import java.util.Map;
  25. @RestController
  26. @RequestMapping("/api/order/")
  27. @Api(description = "订单相关接口")
  28. public class WxOrderController extends BaseController {
  29. private Logger logger = Logger.getLogger(WxOrderController.class);
  30. @Autowired
  31. private WxCouponChannelService wxCouponChannelService;
  32. @Autowired
  33. private WxOrderService wxOrderService;
  34. @ApiOperation(value = "免费领取", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\"}")
  35. @PostMapping("freeCoupon")
  36. public ResultData freeCoupon(@RequestBody Map<String, String> paramMap) {
  37. //Assert.notNull(wxOrders.getName(), "角色名不能为空");
  38. //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
  39. String couponChannelIdStr = paramMap.get("couponChannelId");
  40. String couponIdStr = paramMap.get("couponId");
  41. if (StringUtils.isBlank(couponChannelIdStr)) {
  42. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空");
  43. }
  44. Long couponChannelId = 0L, couponId = 0L;
  45. try {
  46. couponChannelId = Long.valueOf(couponChannelIdStr);
  47. } catch (NumberFormatException e) {
  48. logger.error("couponChannelId convert error, " + couponChannelIdStr + ", e:" + e.getMessage());
  49. return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "couponChannelId: " + couponChannelIdStr + ", e:" + e.getMessage());
  50. }
  51. WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(couponChannelId);
  52. if (wxCouponChannel == null) {
  53. logger.error("couponChannelId convert error, " + couponChannelIdStr);
  54. return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "找不到发布的频道");
  55. }
  56. if (wxCouponChannel.getStatus() == EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) {
  57. logger.error("此券已下架:" + couponChannelIdStr);
  58. return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF.getCode(), "此券已下架");
  59. }
  60. if (StringUtils.isBlank(couponIdStr)) {
  61. couponId = wxCouponChannel.getCouponId();
  62. }
  63. WxCUser user = getUser();
  64. WxOrder order = null;
  65. try {
  66. order = wxOrderService.sendUserFreeCoupon(user.getId(), couponId);
  67. return new ResultData(order);
  68. } catch (MallinkException e) {
  69. logger.error(e.getMessage());
  70. return new ResultData(e.getErrorCode(), e.getMessage());
  71. } catch (Exception e) {
  72. logger.error(e.getMessage());
  73. return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage());
  74. }
  75. }
  76. @ApiOperation(value = "下订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\"}")
  77. @PostMapping("save")
  78. public ResultData saveOrder(@RequestBody Map<String, String> paramMap) {
  79. logger.info("OrderSave: " + paramMap.toString());
  80. //Assert.notNull(wxOrders.getName(), "角色名不能为空");
  81. //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
  82. String couponChannelIdStr = paramMap.get("couponChannelId");
  83. String couponIdStr = paramMap.get("couponId");
  84. /*
  85. // TODO 修改支持banner图,获取不到couponChannelId问题
  86. if (StringUtils.isBlank(couponChannelIdStr)) {
  87. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId不能为空");
  88. }
  89. */
  90. Long couponChannelId = 0L, couponId = 0L;
  91. if (!StringUtils.isBlank(couponChannelIdStr)) {
  92. try {
  93. couponChannelId = Long.valueOf(couponChannelIdStr);
  94. } catch (NumberFormatException e) {
  95. logger.error("couponChannelId convert error, " + couponChannelIdStr + ", e:" + e.getMessage());
  96. return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "couponChannelId: " + couponChannelIdStr + ", e:" + e.getMessage());
  97. }
  98. WxCouponChannel wxCouponChannel = wxCouponChannelService.getById(couponChannelId);
  99. if (wxCouponChannel == null) {
  100. logger.error("couponChannelId convert error, " + couponChannelIdStr);
  101. return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "找不到发布的频道");
  102. }
  103. if (wxCouponChannel.getStatus() == EnumCouponChannelStatus.STATUS_TAKE_OFFF.getCode()) {
  104. logger.error("此券已下架:" + couponChannelIdStr);
  105. return new ResultData(ErrorCode.COUPON_IS_TAKE_OFF.getCode(), "此券已下架");
  106. }
  107. if (StringUtils.isBlank(couponIdStr)) {
  108. couponId = wxCouponChannel.getCouponId();
  109. }
  110. }
  111. if (couponId <= 0 && !StringUtils.isBlank(couponIdStr)) {
  112. try {
  113. couponId = Long.valueOf(couponIdStr);
  114. } catch (NumberFormatException e) {
  115. logger.error("couponId convert error, " + couponIdStr + ", e:" + e.getMessage());
  116. return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "couponId: " + couponIdStr + ", e:" + e.getMessage());
  117. }
  118. }
  119. if (couponId <= 0) {
  120. logger.error("couponChannelId或者couponId不能为空");
  121. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "couponChannelId或者couponId不能为空");
  122. }
  123. WxCUser user = getUser();
  124. try {
  125. WxOrder order = wxOrderService.saveOrder(user, couponId);
  126. return new ResultData(order);
  127. } catch (MallinkException e) {
  128. logger.error(e.getMessage());
  129. return new ResultData(e.getErrorCode(), e.getMessage());
  130. } catch (Exception e) {
  131. logger.error(e.getMessage());
  132. return new ResultData(ErrorCode.ORDER_IS_FAIL, e.getMessage());
  133. }
  134. }
  135. @ApiOperation(value = "取消订单", notes = "{\"orderId\":\"string\"}")
  136. @PostMapping("cancel")
  137. public ResultData cancelOrder(@RequestBody Map<String, String> paramMap) {
  138. //Assert.notNull(wxOrders.getName(), "角色名不能为空");
  139. //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
  140. String orderIdStr = paramMap.get("orderId");
  141. if (StringUtils.isBlank(orderIdStr)) {
  142. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空");
  143. }
  144. Long orderId = 0L;
  145. WxCUser user = getUser();
  146. try {
  147. orderId = Long.valueOf(orderIdStr);
  148. } catch (NumberFormatException e) {
  149. logger.error(e.getMessage());
  150. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderIdStr + ", e: " + e.getMessage());
  151. }
  152. try {
  153. WxOrder order = wxOrderService.getById(orderId);
  154. if (order != null) {
  155. wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL);
  156. }
  157. } catch (Exception e) {
  158. logger.error("取消订单失败: " + e.getMessage());
  159. return new ResultData(ErrorCode.ORDER_IS_FAIL.getCode(), "取消订单失败: " + e.getMessage());
  160. }
  161. return new ResultData();
  162. }
  163. @ApiOperation(value = "订单已过期", notes = "{\"orderId\":\"string\"}")
  164. @PostMapping("expired")
  165. public ResultData expiredOrder(@RequestBody Map<String, String> paramMap) {
  166. //Assert.notNull(wxOrders.getName(), "角色名不能为空");
  167. //Assert.isTrue(!checkUnique(sysRole.getName(), null), "重复的角色名");
  168. String orderIdStr = paramMap.get("orderId");
  169. if (StringUtils.isBlank(orderIdStr)) {
  170. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "退款订单ID不能为空");
  171. }
  172. Long orderId = 0L;
  173. WxCUser user = getUser();
  174. try {
  175. orderId = Long.valueOf(orderIdStr);
  176. } catch (NumberFormatException e) {
  177. logger.error(e.getMessage());
  178. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "退款订单ID转换失败");
  179. }
  180. try {
  181. WxOrder order = wxOrderService.getById(orderId);
  182. if (order != null) {
  183. wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS);
  184. }
  185. } catch (Exception e) {
  186. logger.error("更新退款订单状态失败:" + e.getMessage());
  187. return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), "更新退款订单状态失败:" + e.getMessage());
  188. }
  189. return new ResultData();
  190. }
  191. @ApiOperation("分页订单列表接口")
  192. @GetMapping("list")
  193. @ApiImplicitParams({
  194. @ApiImplicitParam(name="pageNum",value="页数",dataType="int", paramType = "query",required=true),
  195. @ApiImplicitParam(name="pageSize",value="每页条数",dataType="int", paramType = "query",required=true),
  196. })
  197. public ResultData list(@ModelAttribute WxOrder wxOrder, Integer pageNum, Integer pageSize) {
  198. // c端用户应该只能看到自己的订单
  199. if (wxOrder == null) wxOrder = new WxOrder();
  200. wxOrder.setCUserId(getUser().getId());
  201. wxOrder.setSortColumns(WxOrder.Field.CreateDate_DESC);
  202. final PageInfo<WxOrderCVo> page = wxOrderService.listCUserVoAsPage(wxOrder, pageNum, pageSize);
  203. return new ResultData(page);
  204. }
  205. @ApiOperation("订单详情接口")
  206. @GetMapping("detail")
  207. @ApiImplicitParams({
  208. @ApiImplicitParam(name="orderId",value="订单id",dataType="String", paramType = "query",required=true)
  209. })
  210. public ResultData detail(String orderId) {
  211. // c端用户应该只能看到自己的订单细节
  212. WxOrder wxOrder = new WxOrder();
  213. Long id = 0L;
  214. try {
  215. id = Long.valueOf(orderId);
  216. } catch (NumberFormatException e) {
  217. logger.error("parse orderId failed");
  218. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常");
  219. }
  220. wxOrder.setId(id);
  221. wxOrder.setCUserId(getUser().getId());
  222. WxOrderCVo wxOrderCVo = wxOrderService.detailCUserVo(wxOrder);
  223. if (wxOrderCVo == null)
  224. return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
  225. return new ResultData(wxOrderCVo);
  226. }
  227. @ApiOperation(value = "根据orderId查询接口", notes = "{\"orderId\":\"string\"}")
  228. @GetMapping("/findById")
  229. public ResultData findById(@RequestBody Map<String, String> paramMap) {
  230. String orderIdStr = paramMap.get("orderId");
  231. if (StringUtils.isBlank(orderIdStr)) {
  232. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "orderId不能为空");
  233. }
  234. Long orderId = 0L;
  235. try {
  236. orderId = Long.valueOf(orderIdStr);
  237. } catch (NumberFormatException e) {
  238. logger.error("parse orderId failed");
  239. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "订单ID转换异常");
  240. }
  241. WxOrder order = null;
  242. try {
  243. order = wxOrderService.getById(orderId);
  244. if (order != null) {
  245. return new ResultData(Result.SUCCESS, "查询成功", order);
  246. } else {
  247. return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
  248. }
  249. } catch (Exception e) {
  250. logger.error("parse orderId failed");
  251. return new ResultData(ErrorCode.DB_FAIL.getCode(), "订单查询未成功,e:" + e.getMessage());
  252. }
  253. }
  254. }