OrderController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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.service.user.LoginService;
  7. import com.caimei.utils.HttpRequest;
  8. import com.caimei.utils.JsonMapper;
  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.core.env.Environment;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.ResponseBody;
  19. import javax.servlet.http.HttpServletRequest;
  20. import javax.servlet.http.HttpSession;
  21. import java.util.HashMap;
  22. import java.util.List;
  23. import java.util.Map;
  24. /**
  25. * 订单
  26. */
  27. @Controller
  28. @RequestMapping("/order")
  29. public class OrderController {
  30. protected static final Logger logger = LoggerFactory.getLogger(OrderController.class);
  31. @Autowired
  32. private OrderService orderService;
  33. @Autowired
  34. private LoginService loginService;
  35. @Autowired
  36. private Environment env;
  37. /**
  38. * 确认订单信息
  39. *
  40. * @return
  41. */
  42. @ResponseBody
  43. @RequestMapping("/confirm")
  44. public CmWxJsonModel confirmOrder(Integer userId, String classifyIDS, Integer organizeID, String productIDs, Integer count) {
  45. Map<String, Object> map = orderService.confirmOrder(userId, classifyIDS, organizeID, productIDs, count);
  46. return CmWxJsonModel.newInstance().success(map);
  47. }
  48. /**
  49. * 分享订单
  50. *
  51. * @return
  52. */
  53. @ResponseBody
  54. @RequestMapping("/share")
  55. public CmWxJsonModel shareOrder(Integer orderID) {
  56. CmWxJsonModel model = CmWxJsonModel.newInstance();
  57. String shareCode = null;
  58. try {
  59. shareCode = orderService.shareOrder(orderID);
  60. } catch (Exception e) {
  61. return model.error("" + e.getMessage());
  62. }
  63. return model.success(shareCode);
  64. }
  65. /**
  66. * 分享订单,分享码验证通过
  67. */
  68. @ResponseBody
  69. @RequestMapping("/shareCode")
  70. public CmWxJsonModel verifyShareCode(String shareCode, String code, Integer orderID, Integer userID,
  71. Integer organizeID, HttpServletRequest request) {
  72. CmWxJsonModel model = CmWxJsonModel.newInstance();
  73. logger.info("Start get SessionKey");
  74. Map<String, Object> map = new HashMap<>();
  75. String referer = request.getHeader("Referer"); //获取当前微信小程序的环境
  76. logger.info("referer-is----:" + referer);
  77. map.put("referer", referer);
  78. String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";
  79. Map<String, String> requestUrlParam = new HashMap<String, String>();
  80. requestUrlParam.put("appid", env.getProperty("miniprogram.AppId" + organizeID));//小程序appId
  81. requestUrlParam.put("secret", env.getProperty("miniprogram.AppSecret" + organizeID));//小程序appsecret
  82. requestUrlParam.put("js_code", code);//小程序端返回的code
  83. requestUrlParam.put("grant_type", "authorization_code");//默认参数
  84. //发送post请求读取调用微信接口获取openid用户唯一标识
  85. String infos;
  86. try {
  87. infos = HttpRequest.sendPost(requestUrl, requestUrlParam);
  88. } catch (Exception e) {
  89. model.setData(map);
  90. return model.error("服务器内部异常");
  91. }
  92. //解析相应内容(转换成json对象)
  93. JSONObject jsonObject = JSON.parseObject(infos);
  94. String openid = jsonObject.getString("openid");
  95. logger.info("openid----->" + openid);
  96. String session_key = jsonObject.getString("session_key");
  97. String errcode = jsonObject.getString("errcode");
  98. String errmsg = jsonObject.getString("errmsg");
  99. if (!org.springframework.util.StringUtils.isEmpty(errcode) &&
  100. (errcode.equals("-1") || errcode.equals("40029") || errcode.equals("45011"))) {
  101. model.setMsg(errmsg);
  102. model.setData(map);
  103. map.put("sessionKey", session_key);
  104. model.setCode("-1");
  105. return model;
  106. }
  107. if (orderID == null || userID == null || organizeID == null) {
  108. model.error("参数异常");
  109. }
  110. CmWxJsonModel jsonModel = orderService.verifyShareCode(shareCode, openid, orderID, userID, organizeID);
  111. return jsonModel;
  112. }
  113. /**
  114. * 订单详情
  115. */
  116. @ResponseBody
  117. @RequestMapping("/particulars")
  118. public CmWxJsonModel particulars(Integer orderID) {
  119. CmWxJsonModel model = CmWxJsonModel.newInstance();
  120. Map<String, Object> map = null;
  121. try {
  122. map = orderService.particulars(orderID);
  123. } catch (Exception e) {
  124. return model.error("" + e.getMessage());
  125. }
  126. return model.success(map);
  127. }
  128. /**
  129. * 提交订单接口
  130. *
  131. * @return code:-1=(用户账户异常,数据异常,操作异常等),1提交成功(支付完成),2提交成功(未支付),code为1和2的情况下出现 data{orderNo:订单号,orderID:订单ID,payTotalFee:订单金额,orderMark:订单标识}
  132. * @Param params参数格式:
  133. * 参数1=userId用户ID
  134. * 参数2=organizeID组织ID,
  135. * 参数3=cartType购买类型(1购物车提交,2直接购买提交)
  136. * 参数4=ddressID订单收货地址
  137. * 参数5=orderInfo订单信息参数格式:
  138. * [
  139. * {"shopId":1001,
  140. * "note":81,
  141. * "productInfo":[{"productId":1,"productNum":80},{"productId":2,"productNum":100}]
  142. * }
  143. * ]
  144. * 参数6=balanceDeductionFlag是否使用余额抵扣(1使用,2不使用)
  145. * 参数7=orderShouldPayFee订单应付金额(商品总金额 - 余额抵扣 - 经理折扣默认为0)
  146. */
  147. @Transactional
  148. @ResponseBody
  149. @RequestMapping("/submitOrder")
  150. public synchronized CmWxJsonModel submitOrder(String params, HttpServletRequest request) {
  151. CmWxJsonModel cmWxJsonModel = CmWxJsonModel.newInstance();
  152. logger.info(">>>>>>订单信息params:" + params);
  153. //检查用户是否登入
  154. // CmMallOperationUser currentUser = SessionHelper.getCurrentUser(request);
  155. HttpSession session = request.getSession();
  156. String openid = (String) session.getAttribute("openid");
  157. Integer organizeID1 = (Integer) session.getAttribute("organizeID");
  158. CmMallOperationUser currentUser = loginService.doLogin(openid, organizeID1);
  159. if (null == currentUser) {
  160. return cmWxJsonModel.error("-1", "用户账户异常");
  161. }
  162. Integer cmOperationID = currentUser.getId();//当前操作者ID
  163. if (StringUtils.isBlank(params)) {
  164. return cmWxJsonModel.error("-1", "数据异常");
  165. }
  166. Map<String, Object> map = new HashMap<String, Object>();
  167. try {
  168. map = (Map<String, Object>) JsonMapper.getInstance().fromJsonString(params, Map.class);
  169. if (null == map) {
  170. logger.info(">>>>>数据异常,参数不能为空");
  171. return cmWxJsonModel.error("-1", "数据异常");
  172. }
  173. Integer userId = (Integer) map.get("userId");
  174. Integer organizeID = (Integer) map.get("organizeID");
  175. String cartType = String.valueOf(map.get("cartType"));
  176. Integer addressID = (Integer) map.get("addressID");
  177. Object orderInfo = map.get("orderInfo");
  178. String balanceDeductionFlag = String.valueOf(map.get("balanceDeductionFlag"));
  179. Double orderShouldPayFee = Double.parseDouble(String.valueOf(map.get("orderShouldPayFee")));//此金额为前端计算,适用于后端计算金额复查
  180. //校验传入参数的正确性
  181. if (null == userId) {
  182. return cmWxJsonModel.error("-1", "用户数据异常");
  183. }
  184. if (null == organizeID) {
  185. return cmWxJsonModel.error("-1", "组织数据异常");
  186. }
  187. if (StringUtils.isEmpty(cartType)) {
  188. return cmWxJsonModel.error("-1", "购买类型数据异常");
  189. }
  190. if (null == addressID) {
  191. return cmWxJsonModel.error("-1", "地址数据异常");
  192. }
  193. if (null == orderInfo) {
  194. return cmWxJsonModel.error("-1", "订单数据异常");
  195. }
  196. if (StringUtils.isEmpty(balanceDeductionFlag)) {
  197. return cmWxJsonModel.error("-1", "余额抵扣数据异常");
  198. }
  199. if (null == orderShouldPayFee) {
  200. return cmWxJsonModel.error("-1", "订单应付金额数据异常");
  201. }
  202. //保存订单信息
  203. return orderService.saveOrderInfo(cmWxJsonModel, userId, organizeID, cartType, addressID, orderInfo, balanceDeductionFlag, orderShouldPayFee, cmOperationID);
  204. } catch (Exception e) {
  205. logger.info(">>>>>系统异常" + e.getMessage());
  206. return cmWxJsonModel.error("-1", "数据异常");
  207. }
  208. }
  209. /**
  210. * 物流详情
  211. */
  212. @ResponseBody
  213. @RequestMapping("/logistics")
  214. public CmWxJsonModel logistics(Integer orderID) {
  215. CmWxJsonModel model = CmWxJsonModel.newInstance();
  216. List<CmMallLogisticsBatch> logistics = null;
  217. try {
  218. logistics = orderService.logistics(orderID);
  219. } catch (Exception e) {
  220. e.printStackTrace();
  221. }
  222. return model.success(logistics);
  223. }
  224. /**
  225. * 查询我的订单
  226. *
  227. * @param orderState 订单状态
  228. * @return
  229. */
  230. @ResponseBody
  231. @RequestMapping("/myOrder")
  232. public CmWxJsonModel myOrder(Integer orderState, Integer userID, Integer index, Integer pageSize, Integer organizeID) {
  233. CmWxJsonModel model = CmWxJsonModel.newInstance();
  234. if (userID == null || orderState == null || organizeID == null) return model.error("参数异常");
  235. if (index == null) index = 1;
  236. if (pageSize == null) pageSize = 10;
  237. PageHelper.startPage(index, pageSize);
  238. List<CmMallOrder> orderList = orderService.myOrder(userID, orderState, organizeID);
  239. CmMallPage<CmMallOrder> page = new CmMallPage<>(orderList);
  240. return model.success(page);
  241. }
  242. /**
  243. * 常采购商品
  244. */
  245. @ResponseBody
  246. @RequestMapping("/purchase")
  247. public CmWxJsonModel oftenPurchase(Integer userID, Integer organizeID, Integer index, Integer pageSize) {
  248. CmWxJsonModel model = CmWxJsonModel.newInstance();
  249. if (userID == null || organizeID == null) return model.error("参数异常");
  250. Map<String, Object> map = orderService.oftenPurchase(userID, organizeID, index, pageSize);
  251. return model.success(map);
  252. }
  253. /**
  254. * 删除订单
  255. */
  256. @ResponseBody
  257. @RequestMapping("/delete")
  258. public CmWxJsonModel deleteOrder(Integer orderID) {
  259. CmWxJsonModel model = null;
  260. try {
  261. model = orderService.deleteOrder(orderID);
  262. } catch (Exception e) {
  263. return model.error("删除订单失败," + e.getMessage());
  264. }
  265. return model;
  266. }
  267. /**
  268. * 取消订单
  269. */
  270. @ResponseBody
  271. @RequestMapping("/cancel")
  272. public CmWxJsonModel cancelOrder(Integer orderID) {
  273. CmWxJsonModel model = CmWxJsonModel.newInstance();
  274. try {
  275. orderService.cancelOrder(orderID);
  276. } catch (Exception e) {
  277. return model.error("" + e.getMessage());
  278. }
  279. return model.success("取消订单成功", "");
  280. }
  281. /**
  282. * 确认收货
  283. */
  284. @ResponseBody
  285. @RequestMapping("/affirm")
  286. public CmWxJsonModel affirmCargo(Integer orderID) {
  287. CmWxJsonModel model = CmWxJsonModel.newInstance();
  288. try {
  289. orderService.affirmCargo(orderID);
  290. } catch (Exception e) {
  291. return model.error("" + e.getMessage());
  292. }
  293. return model.success("确认收货成功", "");
  294. }
  295. }