OrderController.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package com.caimei.controller.order;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.caimei.entity.*;
  5. import com.caimei.service.order.OrderService;
  6. import com.caimei.utils.HttpRequest;
  7. import com.caimei.utils.JsonMapper;
  8. import com.caimei.utils.SessionHelper;
  9. import com.github.pagehelper.PageHelper;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.ResponseBody;
  18. import javax.servlet.http.HttpServletRequest;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. /**
  23. * 订单
  24. */
  25. @Controller
  26. @RequestMapping("/order")
  27. public class OrderController {
  28. protected static final Logger logger = LoggerFactory.getLogger(OrderController.class);
  29. @Autowired
  30. private OrderService orderService;
  31. @Value("${miniprogram.AppId}")
  32. private String AppId;
  33. @Value("${miniprogram.AppSecret}")
  34. private String AppSecret;
  35. /**
  36. * 确认订单信息
  37. *
  38. * @return
  39. */
  40. @ResponseBody
  41. @RequestMapping("/confirm")
  42. public WxJsonModel confirmOrder(Integer userId, String classifyIDS, Integer organizeID, String productIDs, Integer count) {
  43. Map<String, Object> map = orderService.confirmOrder(userId, classifyIDS, organizeID, productIDs, count);
  44. return WxJsonModel.newInstance().success(map);
  45. }
  46. /**
  47. * 分享订单
  48. *
  49. * @return
  50. */
  51. @ResponseBody
  52. @RequestMapping("/share")
  53. public WxJsonModel shareOrder(Integer orderID) {
  54. String shareCode = orderService.shareOrder(orderID);
  55. return WxJsonModel.newInstance().success(shareCode);
  56. }
  57. /**
  58. * 分享订单,分享码验证通过
  59. */
  60. @ResponseBody
  61. @RequestMapping("/shareCode")
  62. public WxJsonModel verifyShareCode(String shareCode, String code, Integer orderID, Integer userID,
  63. Integer organizeID, HttpServletRequest request) {
  64. WxJsonModel model = WxJsonModel.newInstance();
  65. logger.info("Start get SessionKey");
  66. Map<String, Object> map = new HashMap<>();
  67. String referer = request.getHeader("Referer"); //获取当前微信小程序的环境
  68. logger.info("referer-is----:" + referer);
  69. map.put("referer", referer);
  70. String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";
  71. Map<String, String> requestUrlParam = new HashMap<String, String>();
  72. requestUrlParam.put("appid", AppId);//小程序appId
  73. requestUrlParam.put("secret", AppSecret);//小程序appsecret
  74. requestUrlParam.put("js_code", code);//小程序端返回的code
  75. requestUrlParam.put("grant_type", "authorization_code");//默认参数
  76. //发送post请求读取调用微信接口获取openid用户唯一标识
  77. String infos;
  78. try {
  79. infos = HttpRequest.sendPost(requestUrl, requestUrlParam);
  80. } catch (Exception e) {
  81. model.setData(map);
  82. return model.error("服务器内部异常");
  83. }
  84. //解析相应内容(转换成json对象)
  85. JSONObject jsonObject = JSON.parseObject(infos);
  86. String openid = jsonObject.getString("openid");
  87. logger.info("openid----->" + openid);
  88. String session_key = jsonObject.getString("session_key");
  89. String errcode = jsonObject.getString("errcode");
  90. String errmsg = jsonObject.getString("errmsg");
  91. if (!org.springframework.util.StringUtils.isEmpty(errcode) &&
  92. (errcode.equals("-1") || errcode.equals("40029") || errcode.equals("45011"))) {
  93. model.setMsg(errmsg);
  94. model.setData(map);
  95. map.put("sessionKey", session_key);
  96. model.setCode("-1");
  97. return model;
  98. }
  99. if (orderID == null || userID == null || organizeID == null) {
  100. model.error("参数异常");
  101. }
  102. WxJsonModel jsonModel = orderService.verifyShareCode(shareCode, openid, orderID, userID, organizeID);
  103. return jsonModel;
  104. }
  105. /**
  106. * 订单详情
  107. */
  108. @ResponseBody
  109. @RequestMapping("/particulars")
  110. public WxJsonModel particulars(Integer orderID) {
  111. Map<String, Object> map = orderService.particulars(orderID);
  112. return WxJsonModel.newInstance().success(map);
  113. }
  114. /**
  115. * 提交订单接口
  116. *
  117. * @return code:1000=用户账户异常,1001=数据异常
  118. * @Param params参数格式:
  119. * 参数1=userId用户ID
  120. * 参数2=organizeID组织ID,
  121. * 参数3=cartType购买类型(1购物车提交,2直接购买提交)
  122. * 参数4=ddressID订单收货地址
  123. * 参数5=orderInfo订单信息参数格式:
  124. * [
  125. * {"shopId":1001,
  126. * "note":81,
  127. * "productInfo":[{"productId":1,"productNum":80},{"productId":2,"productNum":100}]
  128. * }
  129. * ]
  130. * 参数6=balanceDeductionFlag是否使用余额抵扣(1使用,2不使用)
  131. * 参数7=orderShouldPayFee订单应付金额(商品总金额 - 余额抵扣 - 经理折扣默认为0)
  132. */
  133. @ResponseBody
  134. @RequestMapping("/submitOrder")
  135. public WxJsonModel submitOrder(String params, HttpServletRequest request) {
  136. WxJsonModel wxJsonModel = WxJsonModel.newInstance();
  137. logger.info(">>>>>>订单信息params:" + params);
  138. //检查用户是否登入
  139. CmOperationUser currentUser = SessionHelper.getCurrentUser(request);
  140. if (null == currentUser) {
  141. return wxJsonModel.error("1000", "用户账户异常");
  142. }
  143. Integer cmOperationID = currentUser.getId();//当前操作者ID
  144. if (StringUtils.isBlank(params)) {
  145. return wxJsonModel.error("1001", "数据异常");
  146. }
  147. Map<String, Object> map = new HashMap<String, Object>();
  148. try {
  149. map = (Map<String, Object>) JsonMapper.getInstance().fromJsonString(params, Map.class);
  150. if (null == map) {
  151. logger.info(">>>>>数据异常,参数不能为空");
  152. return wxJsonModel.error("1001", "数据异常");
  153. }
  154. Integer userId = (Integer) map.get("userId");
  155. Integer organizeID = (Integer) map.get("organizeID");
  156. String cartType = (String) map.get("cartType");
  157. Integer addressID = (Integer) map.get("addressID");
  158. Object orderInfo = map.get("orderInfo");
  159. String balanceDeductionFlag = (String) map.get("balanceDeductionFlag");
  160. Double orderShouldPayFee = (Double) map.get("orderShouldPayFee");//此金额为前端计算,适用于后端计算金额复查
  161. //校验传入参数的正确性
  162. if (null == userId) {
  163. return wxJsonModel.error("1001", "用户数据异常");
  164. }
  165. if (null == organizeID) {
  166. return wxJsonModel.error("1001", "组织数据异常");
  167. }
  168. if (StringUtils.isEmpty(cartType)) {
  169. return wxJsonModel.error("1001", "购买类型数据异常");
  170. }
  171. if (null == addressID) {
  172. return wxJsonModel.error("1001", "地址数据异常");
  173. }
  174. if (null == orderInfo) {
  175. return wxJsonModel.error("1001", "订单数据异常");
  176. }
  177. if (StringUtils.isEmpty(balanceDeductionFlag)) {
  178. return wxJsonModel.error("1001", "余额抵扣数据异常");
  179. }
  180. if (null == orderShouldPayFee) {
  181. return wxJsonModel.error("1001", "订单应付金额数据异常");
  182. }
  183. //保存订单信息
  184. return orderService.saveOrderInfo(wxJsonModel, userId, organizeID, cartType, addressID, orderInfo, balanceDeductionFlag, orderShouldPayFee, cmOperationID);
  185. } catch (Exception e) {
  186. logger.info(">>>>>系统异常" + e.getMessage());
  187. return wxJsonModel.error("1001", "数据异常");
  188. }
  189. }
  190. /**
  191. * 物流详情
  192. */
  193. @ResponseBody
  194. @RequestMapping("/logistics")
  195. public WxJsonModel logistics(Integer orderID) {
  196. WxJsonModel model = WxJsonModel.newInstance();
  197. Map<String, Object> map = orderService.logistics(orderID);
  198. return model.success(map);
  199. }
  200. /**
  201. * 查询我的订单
  202. *
  203. * @param orderState 订单状态
  204. * @return
  205. */
  206. @ResponseBody
  207. @RequestMapping("/myOrder")
  208. public WxJsonModel myOrder(Integer orderState, Integer userID, Integer index, Integer pageSize, Integer organizeID) {
  209. WxJsonModel model = WxJsonModel.newInstance();
  210. if (userID == null || orderState == null || organizeID == null) return model.error("参数异常");
  211. if (index == null) index = 1;
  212. if (pageSize == null) pageSize = 10;
  213. PageHelper.startPage(index, pageSize);
  214. List<CmOrder> orderList = orderService.myOrder(userID, orderState, organizeID);
  215. Page<CmOrder> page = new Page<>(orderList);
  216. return model.success(page);
  217. }
  218. /**
  219. * 常采购商品
  220. */
  221. @ResponseBody
  222. @RequestMapping("/purchase")
  223. public WxJsonModel oftenPurchase(Integer userID, Integer organizeID) {
  224. List<CmOrganizeProducts> organizeProductsList = orderService.oftenPurchase(userID, organizeID);
  225. return null;
  226. }
  227. }