ApiOrderController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. package com.kmall.api.api;
  2. import com.alibaba.druid.util.StringUtils;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.google.common.collect.Maps;
  5. import com.kmall.api.annotation.IgnoreAuth;
  6. import com.kmall.api.annotation.LoginUser;
  7. import com.kmall.api.contants.Dict;
  8. import com.kmall.api.dao.ApiOrderRefundMapper;
  9. import com.kmall.api.entity.*;
  10. import com.kmall.api.service.*;
  11. import com.kmall.api.service.express.kdn.ApiKdniaoService;
  12. import com.kmall.api.util.ApiBaseAction;
  13. import com.kmall.api.util.ApiPageUtils;
  14. import com.kmall.common.utils.Query;
  15. import com.kmall.common.utils.wechat.WechatRefundApiResult;
  16. import com.kmall.common.utils.wechat.WechatUtil;
  17. import org.apache.commons.collections.MapUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.*;
  20. import java.math.BigDecimal;
  21. import java.text.SimpleDateFormat;
  22. import java.util.*;
  23. /**
  24. * 作者: @author Scott <br>
  25. * 时间: 2017-08-11 08:32<br>
  26. * 描述: ApiIndexController <br>
  27. */
  28. @RestController
  29. @RequestMapping("/api/order")
  30. public class ApiOrderController extends ApiBaseAction {
  31. @Autowired
  32. private ApiOrderService orderService;
  33. @Autowired
  34. private ApiOrderGoodsService orderGoodsService;
  35. @Autowired
  36. private ApiKD100Service apiKD100Service;
  37. @Autowired
  38. private ApiKdniaoService apiKdniaoService;
  39. @Autowired
  40. private ApiAddressService apiAddressService;
  41. @Autowired
  42. private ApiCommentService apiCommentService;
  43. @Autowired
  44. private ApiOrderProcessRecordService orderProcessRecordService;
  45. @Autowired
  46. private ApiOrderRefundService apiOrderRefundService;
  47. /**
  48. */
  49. @IgnoreAuth
  50. @GetMapping("index")
  51. public Object index(@LoginUser UserVo loginUser) {
  52. //
  53. return toResponsSuccess("");
  54. }
  55. /**
  56. * 获取订单列表
  57. */
  58. @GetMapping("list")
  59. public Object list(@LoginUser UserVo loginUser,
  60. @RequestParam(value = "page", defaultValue = "1") Integer page,
  61. @RequestParam(value = "size", defaultValue = "10") Integer size,
  62. Integer evaluate_status, Integer order_status) {
  63. //
  64. Map params = new HashMap();
  65. params.put("user_id", loginUser.getId());
  66. params.put("page", page);
  67. params.put("order_status", order_status);
  68. params.put("evaluate_status", evaluate_status);
  69. params.put("limit", size);
  70. params.put("sidx", "add_time");
  71. params.put("order", "desc");
  72. params.put("size", "desc");
  73. //查询列表数据
  74. Query query = new Query(params);
  75. List<OrderVo> orderEntityList = orderService.queryList(query);
  76. int total = orderService.queryTotal(query);
  77. ApiPageUtils pageUtil = new ApiPageUtils(orderEntityList, total, query.getLimit(), query.getPage());
  78. //
  79. for (OrderVo item : orderEntityList) {
  80. Map orderGoodsParam = new HashMap();
  81. orderGoodsParam.put("order_id", item.getId());
  82. if(item.getRefundStatus() !=null){
  83. if(item.getRefundStatus().equalsIgnoreCase(Dict.RefundStatus.item_1.getItem()) ||
  84. item.getRefundStatus().equalsIgnoreCase(Dict.RefundStatus.item_2.getItem())){
  85. item.setIsRefundStatus(true);
  86. }else{
  87. item.setIsRefundStatus(false);
  88. }
  89. }else{
  90. item.setIsRefundStatus(false);
  91. }
  92. //订单的商品
  93. List<OrderGoodsVo> goodsList = orderGoodsService.queryList(orderGoodsParam);
  94. Integer goodsCount = 0;
  95. for (OrderGoodsVo orderGoodsEntity : goodsList) {
  96. goodsCount += orderGoodsEntity.getNumber();
  97. item.setGoodsCount(goodsCount);
  98. }
  99. item.setGoodsList(goodsList);
  100. }
  101. return toResponsSuccess(pageUtil);
  102. }
  103. /**
  104. * 获取订单详情
  105. */
  106. @GetMapping("detail")
  107. public Object detail(@LoginUser UserVo loginUser, Long orderId) {
  108. Map resultObj = new HashMap();
  109. //
  110. OrderVo orderInfo = orderService.queryObject(orderId);
  111. if (null == orderInfo) {
  112. return toResponsObject(400, "订单不存在", "");
  113. }
  114. Map orderGoodsParam = new HashMap();
  115. orderGoodsParam.put("order_id", orderId);
  116. //订单的商品
  117. List<OrderGoodsVo> orderGoods = orderGoodsService.queryList(orderGoodsParam);
  118. //订单可操作的选择,删除,支付,收货,评论,退换货
  119. Map handleOption = orderInfo.getHandleOption();
  120. resultObj.put("orderInfo", orderInfo);
  121. resultObj.put("orderGoods", orderGoods);
  122. resultObj.put("handleOption", handleOption);
  123. //查询物流轨迹
  124. List<Map> mapList = new ArrayList<>();
  125. if(orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())
  126. && orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_301.getItem())){
  127. Map map = new HashMap();
  128. map.put("AcceptStation", "交易完成,用户已提走");
  129. mapList.add(map);
  130. }
  131. OrderProcessRecordEntity entity = orderProcessRecordService.queryObjectByOrderSn(orderInfo.getOrder_sn());
  132. if (entity != null) {
  133. if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend())) {
  134. Map map = new HashMap();
  135. map.put("AcceptTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getCustomsSuccTime()));
  136. map.put("AcceptStation", "订单清关完成,等待仓库发货");
  137. mapList.add(map);
  138. }
  139. if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsPaymentSend())) {
  140. Map map = new HashMap();
  141. map.put("AcceptTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getPaySuccTime()));
  142. map.put("AcceptStation", "订单支付成功,等待海关清关");
  143. mapList.add(map);
  144. }
  145. if (Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsAddOrderSend())) {
  146. Map map = new HashMap();
  147. map.put("AcceptTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getAddOrderSuccTime()));
  148. map.put("AcceptStation", "订单提交成功");
  149. mapList.add(map);
  150. }
  151. }
  152. if(!orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())){
  153. if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no())) {
  154. JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
  155. if (Traces != null) {
  156. mapList = (List<Map>) Traces.get("Traces");
  157. String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
  158. if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
  159. Map noDataMap = new HashMap();
  160. noDataMap.put("AcceptTime", "");
  161. noDataMap.put("AcceptStation", Traces.get("Reason"));
  162. mapList.add(noDataMap);
  163. }
  164. }
  165. }
  166. }
  167. resultObj.put("wuliu", mapList != null && mapList.size() > 0 ? mapList.get(0) : null);
  168. if(orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_401.getItem()) || orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_402.getItem()) ) {
  169. MallOrderRefund refundInfo = apiOrderRefundService.queryObjectByOrderId(String.valueOf(orderInfo.getId()));
  170. resultObj.put("refundInfo", refundInfo);
  171. }
  172. return toResponsSuccess(resultObj);
  173. }
  174. @GetMapping("detailList")
  175. public Object detailList(@LoginUser UserVo loginUser, Long[] orderIds) {
  176. List<Long> orderIdList=new ArrayList<>();
  177. for(int i=0;i<orderIds.length;i++){
  178. orderIdList.add(orderIds[i]);
  179. }
  180. Map resultObj = new HashMap();
  181. List<OrderVo> orderVoList = orderService.queryObjectByIdList(orderIdList);
  182. BigDecimal actualPrice = new BigDecimal(0);
  183. for (OrderVo orderInfo:orderVoList) {
  184. if (null == orderInfo) {
  185. return toResponsObject(400, "订单号为"+orderInfo.getOrder_sn()+"的订单不存在", "");
  186. }
  187. actualPrice = actualPrice.add(orderInfo.getActual_price());
  188. }
  189. //订单的商品
  190. List<OrderGoodsVo> orderGoods = orderGoodsService.queryListByIds(orderIdList);
  191. resultObj.put("actualPrice", actualPrice);
  192. resultObj.put("orderGoods", orderGoods);
  193. return toResponsSuccess(resultObj);
  194. }
  195. /**
  196. * 获取订单列表
  197. */
  198. @PostMapping("submit")
  199. public Object submit(@LoginUser UserVo loginUser) {
  200. Map resultObj = null;
  201. try {
  202. resultObj = orderService.submit(getJsonRequest(), loginUser, getStoreId());
  203. if (null != resultObj) {
  204. return toResponsObject(MapUtils.getInteger(resultObj, "errno"), MapUtils.getString(resultObj, "errmsg"), resultObj.get("data"));
  205. }
  206. } catch (Exception e) {
  207. e.printStackTrace();
  208. }
  209. return toResponsFail("提交失败");
  210. }
  211. /**
  212. * 取消订单
  213. */
  214. @GetMapping("cancelOrder")
  215. public Object cancelOrder(@LoginUser UserVo loginUser, Long orderId) {
  216. try {
  217. OrderVo orderVo = orderService.queryObject(orderId);
  218. if (orderVo.getOrder_status() == 300) {
  219. return toResponsFail("已发货,不能取消");
  220. } else if (orderVo.getOrder_status() == 301) {
  221. return toResponsFail("已收货,不能取消");
  222. } else if (orderVo.getOrder_status() == 101 || orderVo.getOrder_status() == 401 || orderVo.getOrder_status() == 402) {
  223. return toResponsFail("当前订单不能取消");
  224. }
  225. // 需要退款
  226. if (orderVo.getPay_status() == 2) {
  227. WechatRefundApiResult result = WechatUtil.wxRefund(orderVo.getMerchOrderSn().toString(),
  228. 0.01, 0.01);
  229. if (result.getResult_code().equals("SUCCESS")) {
  230. if (orderVo.getOrder_status() == 201) {
  231. orderVo.setOrder_status(401);
  232. } else if (orderVo.getOrder_status() == 300) {
  233. orderVo.setOrder_status(402);
  234. }
  235. orderVo.setPay_status(4);
  236. orderService.cancelOrder(orderVo);
  237. return toResponsMsgSuccess("取消成功");
  238. } else {
  239. return toResponsObject(400, "取消失败", "");
  240. }
  241. } else {
  242. orderVo.setOrder_status(101);
  243. orderService.cancelOrder(orderVo);
  244. return toResponsSuccess("取消成功");
  245. }
  246. } catch (Exception e) {
  247. e.printStackTrace();
  248. }
  249. return toResponsFail("提交失败");
  250. }
  251. /**
  252. * 确认收货
  253. */
  254. @GetMapping("confirmOrder")
  255. public Object confirmOrder(@LoginUser UserVo loginUser, Long orderId) {
  256. try {
  257. if (null == orderId) {
  258. JSONObject params = getJsonRequest();
  259. orderId = params.getLong("orderId");
  260. }
  261. orderService.confirmOrder(orderId);
  262. return toResponsSuccess("取消成功");
  263. } catch (Exception e) {
  264. e.printStackTrace();
  265. }
  266. return toResponsFail("提交失败");
  267. }
  268. /**
  269. * 跟踪快递轨迹
  270. */
  271. @GetMapping("getLogistics")
  272. public Object getLogistics(Long orderId) {
  273. Map resultObj = new HashMap();
  274. Map map = new HashMap();
  275. OrderVo orderInfo = orderService.queryObject(orderId);
  276. if (null == orderInfo) {
  277. return toResponsObject(400, "订单不存在", "");
  278. }
  279. List<WuliuVo> wuliuList = new ArrayList<WuliuVo>();
  280. if(orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())
  281. && orderInfo.getOrder_status() == Integer.parseInt(Dict.orderStatus.item_301.getItem())){
  282. WuliuVo vo = new WuliuVo();
  283. vo.setAcceptStation("交易完成,用户已提走");
  284. wuliuList.add(vo);
  285. }
  286. if(!orderInfo.getOrderBizType().equalsIgnoreCase(Dict.orderBizType.item_10.getItem())) {
  287. if (!StringUtils.isEmpty(orderInfo.getShipping_code()) && !StringUtils.isEmpty(orderInfo.getShipping_no())) {
  288. // 快递
  289. JSONObject Traces = apiKdniaoService.getOrderTracesByJson(orderInfo.getShipping_code(), orderInfo.getShipping_no());
  290. List<Map> mapList = (List<Map>) Traces.get("Traces");
  291. for (int i = 0; i < mapList.size(); i++) {
  292. WuliuVo vo = new WuliuVo();
  293. vo.setAcceptTime((String) mapList.get(i).get("AcceptTime"));
  294. vo.setAcceptStation((String) mapList.get(i).get("AcceptStation"));
  295. wuliuList.add(vo);
  296. }
  297. String State = (String) Traces.get("State"); //物流状态:2-在途中,3-签收,4-问题件
  298. String Reason = (String) Traces.get("Reason");
  299. if (Dict.logisticsStatus.item_0.getItem().equalsIgnoreCase(State)) {
  300. WuliuVo wuliuVo = new WuliuVo();
  301. wuliuVo.setAcceptStation(Reason);
  302. wuliuList.add(wuliuVo);
  303. }
  304. map.put("State", Traces.get("State")); //物流状态:2-在途中,3-签收,4-问题件
  305. map.put("Reason", Traces.get("Reason"));
  306. }
  307. }
  308. OrderProcessRecordEntity entity = orderProcessRecordService.queryObjectByOrderSn(orderInfo.getOrder_sn());
  309. if(entity !=null){
  310. if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsCustomsSend())){
  311. WuliuVo wuliuVo = new WuliuVo();
  312. wuliuVo.setAcceptStation("订单清关完成,等待仓库发货");
  313. wuliuVo.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getCustomsSuccTime()));
  314. wuliuList.add(wuliuVo);
  315. }
  316. if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsPaymentSend())){
  317. WuliuVo wuliuVo = new WuliuVo();
  318. wuliuVo.setAcceptStation("订单支付成功,等待海关清关");
  319. wuliuVo.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getPaySuccTime()));
  320. wuliuList.add(wuliuVo);
  321. }
  322. if(Dict.isSend.item_1.getItem().equalsIgnoreCase(entity.getIsAddOrderSend())){
  323. WuliuVo wuliuVo = new WuliuVo();
  324. wuliuVo.setAcceptStation("订单提交成功");
  325. wuliuVo.setAcceptTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(entity.getAddOrderSuccTime()));
  326. wuliuList.add(wuliuVo);
  327. }
  328. }
  329. map.put("TracesList",wuliuList);
  330. map.put("LogisticCode", orderInfo.getShipping_no());
  331. map.put("ShipperCode", orderInfo.getShipping_code());
  332. resultObj.put("wuliu", map);
  333. return toResponsSuccess(resultObj);
  334. }
  335. /**
  336. * 申请退款
  337. * @param loginUser
  338. * @return
  339. */
  340. @PostMapping("saveApplyRefund")
  341. public Object saveApplyRefund(@LoginUser UserVo loginUser) {
  342. try {
  343. JSONObject json = getJsonRequest();
  344. String orderId = json.getString("orderId");
  345. String refundReason = json.getString("refundReason");
  346. OrderVo orderInfo = orderService.queryObject(Long.valueOf(orderId));
  347. if (null == orderInfo) {
  348. return toResponsObject(400, "订单不存在", "");
  349. }
  350. // OrderVo orderVo = new OrderVo();
  351. // orderVo.setOrder_status(Integer.parseInt(Dict.orderStatus.item_400.getItem()));
  352. // orderVo.setId(orderInfo.getId());
  353. // orderService.update(orderVo);//修改状态为维权申请中
  354. MallOrderRefund mallOrderRefund = apiOrderRefundService.queryObjectByOrderId(orderInfo.getId()+"");
  355. MallOrderRefund orderRefund = new MallOrderRefund();
  356. orderRefund.setOrderId(Integer.parseInt(orderId));
  357. orderRefund.setUserId(Integer.parseInt(orderInfo.getUser_id()+""));
  358. orderRefund.setRefundType(Integer.parseInt(Dict.RefundType.item_1.getItem()));
  359. orderRefund.setRefundStatus(Integer.parseInt(Dict.RefundStatus.item_1.getItem()));
  360. orderRefund.setRefundReason(refundReason);
  361. orderRefund.setModTime(new Date());
  362. if(mallOrderRefund !=null){
  363. orderRefund.setId(mallOrderRefund.getId());
  364. apiOrderRefundService.update(orderRefund);
  365. }else{
  366. orderRefund.setCreateTime(new Date());
  367. apiOrderRefundService.save(orderRefund);
  368. }
  369. return toResponsMsgSuccess("退款申请成功");
  370. } catch (Exception e) {
  371. e.printStackTrace();
  372. }
  373. return toResponsFail("提交失败");
  374. }
  375. }