AdminOrderHandlers.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. package com.iamberry.wechat.handles.admin;
  2. import java.io.IOException;
  3. import java.net.URLDecoder;
  4. import java.text.DecimalFormat;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.List;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import com.iamberry.wechat.core.entity.OrderUtil;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Controller;
  14. import org.springframework.web.bind.annotation.PathVariable;
  15. import org.springframework.web.bind.annotation.RequestMapping;
  16. import org.springframework.web.bind.annotation.RequestParam;
  17. import org.springframework.web.bind.annotation.ResponseBody;
  18. import org.springframework.web.servlet.ModelAndView;
  19. import com.iamberry.app.tool.log.RatFWLogger;
  20. import com.iamberry.wechat.core.entity.drp.PlaceInfo;
  21. import com.iamberry.wechat.core.entity.member.Member;
  22. import com.iamberry.wechat.core.entity.mq.MQMessage;
  23. import com.iamberry.wechat.core.entity.order.MessageDto;
  24. import com.iamberry.wechat.core.entity.order.Order;
  25. import com.iamberry.wechat.core.entity.order.OrderActionDto;
  26. import com.iamberry.wechat.core.entity.order.OrderItem;
  27. import com.iamberry.wechat.core.entity.reback.RebackInfo;
  28. import com.iamberry.wechat.core.entity.relationship.DealerRelation;
  29. import com.iamberry.wechat.core.entity.relationship.WdRelation;
  30. import com.iamberry.wechat.face.drp.PlaceInfoService;
  31. import com.iamberry.wechat.face.member.MemberService;
  32. import com.iamberry.wechat.face.order.AdminOrderService;
  33. import com.iamberry.wechat.face.reback.RebackServices;
  34. import com.iamberry.wechat.face.relationship.DealerRelationService;
  35. import com.iamberry.wechat.face.relationship.WdRelationService;
  36. import com.iamberry.wechat.handles.mq.MQServiceProxy;
  37. import com.iamberry.wechat.tools.DateTimeUtil;
  38. import com.iamberry.wechat.tools.NameUtils;
  39. import com.iamberry.wechat.tools.ResultInfo;
  40. import com.iamberry.wechat.tools.SendMessageUtil;
  41. @Controller
  42. @RequestMapping("/admin/order")
  43. public class AdminOrderHandlers {
  44. @Autowired
  45. private AdminOrderService adminOrderService;
  46. @Autowired
  47. private OrderUtil orderUtil;
  48. @Autowired
  49. private SendMessageUtil sendMessageUtil;
  50. @Autowired
  51. private MemberService memberService;
  52. @Autowired
  53. private WdRelationService wdRelationService;
  54. @Autowired
  55. private DealerRelationService dealerRelationService;
  56. @Autowired
  57. private PlaceInfoService placeInfoService;
  58. @Autowired
  59. private RatFWLogger logger;
  60. @Autowired
  61. private MQServiceProxy mQservice;
  62. @Autowired
  63. private RebackServices rebackServices;
  64. /**
  65. * 后台进入订单列表功能
  66. * @param request
  67. * @param pageSize
  68. * @param pageNO
  69. * @return ModelAndView
  70. * @throws Exception
  71. */
  72. @RequestMapping("/selectShopOrder")
  73. public ModelAndView selectShopOrder(HttpServletRequest request,
  74. @RequestParam(value= "pageSize",defaultValue= "6" ,required=false) Integer pageSize,
  75. @RequestParam(value = "pageNO", defaultValue = "1",required=false) Integer pageNO) throws Exception {
  76. ModelAndView mv = new ModelAndView("admin/order/orderList");
  77. String orderStatus = request.getParameter("orderStatus");
  78. if (orderStatus == null || "".equals(orderStatus)) {
  79. orderStatus = "paySuccess";
  80. }
  81. // 订单状态,数字标识
  82. int status = -1;
  83. if (!orderStatus.equals("allOrder")) {
  84. status = orderUtil.getOrderStatusByStr(orderStatus);
  85. }
  86. Order order = new Order();
  87. order.setSalesStatus(status);
  88. order.getPage().setPageSize(pageSize);
  89. order.getPage().setPageNumber(pageNO);
  90. order.getPage().initRecordBegin();
  91. List<Order> orderList = this.adminOrderService.selectShopOrder(order);
  92. // 订单是否按照状态查询的, 用于页面
  93. if (status == -1) {
  94. mv.addObject("orderListIsStatus", false);
  95. for (Order orders : orderList) {
  96. // 用户昵称编码
  97. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  98. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  99. }
  100. // 获取用户的操作权限
  101. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid()));
  102. orders.setOrderLinkStatus(orderUtil.orderStatusToString(orders.getSalesStatus())); // 订单状态描述,中文
  103. }
  104. } else {
  105. mv.addObject("orderListIsStatus", true);
  106. for (Order orders : orderList) {
  107. // 用户昵称编码
  108. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  109. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  110. }
  111. // 获取用户的操作权限
  112. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid()));
  113. }
  114. }
  115. mv.addObject("orderList", orderList);
  116. mv.addObject("pageNO", pageNO);
  117. mv.addObject("orderStatus", status);// 订单状态
  118. mv.addObject("url", "/admin/order/selectShopOrder?orderStatus=" + orderStatus + "&pageSize=" + pageSize + "&pageNO=");
  119. mv.addObject("pageSize", this.adminOrderService.selectShopOrderCount(order));
  120. mv.addObject("orderStatusStr", orderUtil.orderStatusIntToOrderStatusString(status));// 订单状态描述(用于选中订单头)
  121. mv.addObject("orderLinkStatus", orderUtil.orderStatusToString(status));// 订单状态描述,中文(显示给用户看)
  122. mv.addObject("statusUrl", "/admin/order/selectShopOrder?bid=&sid=");
  123. return mv;
  124. }
  125. /**
  126. * 订单详细信息
  127. * @param request
  128. * @param orderId
  129. * @return ModelAndView
  130. * @throws Exception
  131. */
  132. @RequestMapping("/getShopOrderByOrderId/{orderId}")
  133. public ModelAndView getShopOrderByOrderId(HttpServletRequest request,
  134. @PathVariable("orderId") String orderId) throws Exception{
  135. ModelAndView mv = new ModelAndView("admin/order/order");
  136. if (null != orderId && !"".equals(orderId)) {
  137. Order order = this.adminOrderService.getShopOrderByOrderId(orderId);
  138. List<OrderItem> orderItemList = this.adminOrderService.getShopOrderItemByOrderId(orderId);
  139. // 用户昵称编码
  140. if (order.getUserNickname() != null && !order.getUserNickname().isEmpty()) {
  141. order.setUserNickname(URLDecoder.decode(order.getUserNickname(), "UTF-8"));
  142. }
  143. // 获取用户的操作权限
  144. order.setOperations(orderUtil.orderStatusToOperation(order.getSalesStatus(), order.getSalesOrderid()));
  145. order.setOrderLinkStatus(orderUtil.orderStatusToString(order.getSalesStatus())); // 订单状态描述,中文
  146. if (order.getSalesStatus() == 2) {
  147. // 给百胜推送信息
  148. try {
  149. MQMessage message = new MQMessage();
  150. message.setServiceToMessage(orderId);
  151. message.setServiceOtherMessage("efast.trade.detail.get");
  152. message.setServiceIsSend(2); // 没有推送的信息
  153. message.setServiceStatus(1); // 推送成功
  154. message.setServiceType(1); // 添加订单信息
  155. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  156. message.setServiceHandlerMethodName("selectEfastSendOrderInfo");
  157. mQservice.insertMQMessage(message);
  158. } catch (Exception e) {
  159. // TODO: handle exception
  160. }
  161. } else if (order.getSalesStatus() == 8) {
  162. // 给百胜推送信息
  163. try {
  164. MQMessage message = new MQMessage();
  165. message.setServiceToMessage(orderId);
  166. message.setServiceOtherMessage("efast.order.return.info.fetch");
  167. message.setServiceIsSend(2); // 没有推送的信息
  168. message.setServiceStatus(1); // 推送成功
  169. message.setServiceType(1); // 添加订单信息
  170. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  171. message.setServiceHandlerMethodName("selectEfastReturnOrderInfo");
  172. mQservice.insertMQMessage(message);
  173. } catch (Exception e) {
  174. // TODO: handle exception
  175. }
  176. }
  177. mv.addObject("order",order);
  178. mv.addObject("orderItemList", orderItemList);
  179. }
  180. return mv;
  181. }
  182. @RequestMapping(value="/selectShopOrderByOrderId")
  183. public ModelAndView selectShopOrderByOrderId(HttpServletRequest request,
  184. @RequestParam(value= "pageSize",defaultValue= "6" ,required=false) Integer pageSize,
  185. @RequestParam(value = "pageNO", defaultValue = "1",required=false) Integer pageNO,
  186. OrderActionDto actionDto) throws Exception {
  187. ModelAndView mv = new ModelAndView("admin/order/orderList");
  188. String orderStatus = request.getParameter("orderStatus");
  189. // 判断是否输入数据
  190. if (!(actionDto.getText() == null || actionDto.getText().isEmpty())) {
  191. if (!request.getMethod().equalsIgnoreCase("post")) {
  192. String text = new String(actionDto.getText().getBytes("ISO-8859-1"), "UTF-8");
  193. actionDto.setText(text);
  194. }
  195. }
  196. //分页并带条件查询接收参数
  197. String beginTime = request.getParameter("beginDate");
  198. String endTime = request.getParameter("endDate");
  199. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  200. //url需要进行拼接,拼接的内容是页面上的时间条件
  201. StringBuffer url = new StringBuffer("/order/selectShopOrderByOrderId?orderStatus=" + actionDto.getOrderStatus() + "&text=" + actionDto.getText());
  202. if (null != beginTime && !"".equals(beginTime)) {
  203. if (!request.getMethod().equalsIgnoreCase("post")) {
  204. actionDto.setBeginDate(format.parse(new String(beginTime.getBytes("ISO-8859-1"), "UTF-8")));
  205. } else {
  206. actionDto.setBeginDate(format.parse(beginTime));
  207. }
  208. }
  209. if (null != endTime && !"".equals(endTime)) {
  210. if (!request.getMethod().equalsIgnoreCase("post")) {
  211. actionDto.setEndDate(format.parse(new String(endTime.getBytes("ISO-8859-1"), "UTF-8")));
  212. } else {
  213. actionDto.setEndDate(format.parse(endTime));
  214. }
  215. }
  216. if (null != actionDto.getBeginDate()) {
  217. url.append( "&beginDate=" + format.format(actionDto.getBeginDate()));
  218. mv.addObject("beginDate", format.format(actionDto.getBeginDate()));
  219. }
  220. if (null != actionDto.getEndDate()) {
  221. url.append("&endDate=" + format.format(actionDto.getEndDate()));
  222. mv.addObject("endDate", format.format(actionDto.getEndDate()));
  223. }
  224. url.append("&pageSize=" + pageSize + "&pageNO=");
  225. if (orderStatus == null || "".equals(orderStatus)) {
  226. orderStatus = "paySuccess";
  227. }
  228. // 订单状态,数字标识
  229. int status = -1;
  230. if (!orderStatus.equals("allOrder")) {
  231. status = orderUtil.getOrderStatusByStr(orderStatus);
  232. }
  233. Order order = new Order();
  234. order.setSalesStatus(status);
  235. order.setSalesOrderid(actionDto.getText());
  236. order.setBeginDate(actionDto.getBeginDate());
  237. order.setEndDate(actionDto.getEndDate());
  238. order.getPage().setPageSize(pageSize);
  239. order.getPage().setPageNumber(pageNO);
  240. order.getPage().initRecordBegin();
  241. List<Order> orderList = this.adminOrderService.selectShopOrderByOrderId(order);
  242. // 订单是否按照状态查询的, 用于页面
  243. if (status == -1) {
  244. mv.addObject("orderListIsStatus", false);
  245. for (Order orders : orderList) {
  246. // 用户昵称编码
  247. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  248. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  249. }
  250. // 获取用户的操作权限
  251. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid()));
  252. orders.setOrderLinkStatus(orderUtil.orderStatusToString(orders.getSalesStatus())); // 订单状态描述,中文
  253. }
  254. } else {
  255. mv.addObject("orderListIsStatus", true);
  256. for (Order orders : orderList) {
  257. // 用户昵称编码
  258. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  259. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  260. }
  261. // 获取用户的操作权限
  262. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid()));
  263. }
  264. }
  265. // 时间区间的处理
  266. String beginDateTime = "";
  267. SimpleDateFormat simple = null;
  268. if (actionDto.getBeginDate() != null) {
  269. simple = new SimpleDateFormat("yyyy-MM-dd");
  270. beginDateTime = simple.format(actionDto.getBeginDate());
  271. }
  272. String endDate = "";
  273. if (actionDto.getEndDate() != null) {
  274. if (simple == null) {
  275. simple = new SimpleDateFormat("yyyy-MM-dd");
  276. }
  277. endDate = simple.format(actionDto.getEndDate());
  278. }
  279. mv.addObject("orderList", orderList);
  280. mv.addObject("pageNO", pageNO);
  281. mv.addObject("orderStatus", status);// 订单状态
  282. mv.addObject("url", url.toString());
  283. mv.addObject("pageSize", this.adminOrderService.selectShopOrderCount(order));
  284. mv.addObject("orderStatusStr", orderUtil.orderStatusIntToOrderStatusString(status));// 订单状态描述(用于选中订单头)
  285. mv.addObject("orderLinkStatus", orderUtil.orderStatusToString(status));// 订单状态描述,中文(显示给用户看)
  286. mv.addObject("statusUrl", "/admin/order/selectShopOrderByOrderId?bid=&sid=");
  287. mv.addObject("beginDate", beginDateTime);
  288. mv.addObject("endDate", endDate);
  289. mv.addObject("selectInput", actionDto.getText());
  290. return mv;
  291. }
  292. /**
  293. * 操作订单
  294. * @return
  295. * @throws Exception
  296. */
  297. @RequestMapping("/{action}/{orderId}")
  298. public synchronized ModelAndView actionOrder(
  299. @PathVariable("action") String action,
  300. @PathVariable("orderId") String orderId,
  301. OrderActionDto actionDto
  302. ) throws Exception {
  303. ModelAndView mv = new ModelAndView("admin/msg/msg");
  304. Order order = new Order();
  305. order.setSalesOrderid(orderId);
  306. // 订单状态,数字标识
  307. order.setSalesPostFirm(actionDto.getPostFirm());
  308. order.setSalesPostNum(actionDto.getPostNum());
  309. // 判断当前的订单,是否支持希望进行的操作
  310. Order currentOrder = adminOrderService.selectOrderStatusByOrderId(orderId);
  311. //获取当前订单订单项
  312. List<OrderItem> itemList = adminOrderService.getShopOrderItemByOrderId(orderId);
  313. Integer orderStatus = currentOrder.getSalesStatus();
  314. order.setOldStatus(orderStatus);
  315. if (!orderUtil.orderStatusIntToOrderStatusString(orderStatus).equals(actionDto.getOrderStatus())) {
  316. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  317. return mv;
  318. }
  319. switch (orderStatus) {
  320. case 0: // 取消的订单,不支持任何修改订单状态的操作
  321. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,取消的订单不能操作!"));
  322. return mv;
  323. case 1: // 待支付(管理员存在操作权限:取消订单,如果取消订单,订单状态修改为0)
  324. if (!orderUtil.getOrderActin()[0].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  325. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  326. return mv;
  327. }
  328. if (!orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  329. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  330. return mv;
  331. }
  332. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  333. // 执行修改操作
  334. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  335. mv.addObject("msgObj", new MessageDto(true, "取消订单成功", "恭喜您!订单:" + orderId + "取消成功,本订单将不能操作!"));
  336. return mv;
  337. } else {
  338. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  339. return mv;
  340. }
  341. case 2: // 已支付、待发货(管理员的操作为:确认发货)
  342. System.out.println("orderUtil="+orderUtil);
  343. System.out.println("orderUtil.orderActin[2]="+orderUtil.getOrderActin()[2]);
  344. System.out.println("action="+action);
  345. if (!orderUtil.getOrderActin()[2].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  346. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  347. return mv;
  348. }
  349. if (!orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  350. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  351. return mv;
  352. }
  353. // 执行修改操作
  354. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  355. if (adminOrderService.deliverOrderByOrderId(order)) {
  356. mv.addObject("msgObj", new MessageDto(true, "操作成功", "请到百胜系统确认该订单是否已经确认,如果没有确认,该订单仍是待发货状态!"));
  357. logger.info("准备为用户推送模版信息!");
  358. // 给百胜推送信息
  359. try {
  360. MQMessage message = new MQMessage();
  361. message.setServiceToMessage(orderId);
  362. message.setServiceOtherMessage(actionDto.getPostFirm() + "-" + actionDto.getPostNum());
  363. message.setServiceIsSend(2); // 没有推送的信息
  364. message.setServiceStatus(1); // 推送成功
  365. message.setServiceType(1); // 添加订单信息
  366. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  367. message.setServiceHandlerMethodName("sendOrderInfoToEfast");
  368. mQservice.insertMQMessage(message);
  369. } catch (Exception e) {
  370. // TODO: handle exception
  371. }
  372. //给用户发送消息-已发货的通知
  373. //消息内容
  374. String data = ResultInfo.ORDERPACKAGETEMP;
  375. data = data.replaceFirst("firstValueOrder", ResultInfo.SHIPMENTMESSAGE)
  376. .replaceFirst("orderIdValueOrder", orderId)
  377. .replaceFirst("orderValuePackageId",SendMessageUtil.hashmap.get(actionDto.getPostFirm())+":"+actionDto.getPostNum())
  378. .replaceFirst("orderRemarkValue", ResultInfo.INTOSHOP);
  379. sendMessageUtil.sendTemplateMessageToOpenid(data, currentOrder.getSalesOpenid(), ResultInfo.PAGE_SHIPMENT+orderId, 2);
  380. return mv;
  381. } else {
  382. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  383. return mv;
  384. }
  385. case 3: // 退款申请中(管理员可以操作:确认退款)
  386. // 只有两种操作 : 确认退款、驳回退款
  387. if (orderUtil.getOrderActin()[4].equals(action)) {
  388. // 驳回退款
  389. if (!orderUtil.orderStatusIntToOrderStatusString(2).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  390. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  391. return mv;
  392. }
  393. order.setSalesStatus(2);
  394. if (adminOrderService.updateOrderStatusByOrderId(order)) {// 驳回退款
  395. mv.addObject("msgObj", new MessageDto(true, "驳回退款成功!", "驳回退款成功,订单进入待发货状态!"));
  396. DecimalFormat df=new DecimalFormat("0.00");
  397. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  398. try {
  399. sendMessageUtil.orderRefundMsg(
  400. "尊敬的用户,您的退款申请被退回",
  401. payMoney,
  402. itemList.get(0).getItemProductName(),
  403. order.getSalesOrderid(),
  404. ResultInfo.refundRejectRemark + ResultInfo.sendRemark1,
  405. currentOrder.getSalesOpenid(),
  406. ResultInfo.ORDER_DETAIL+order.getSalesOrderid()
  407. );
  408. } catch (Exception e) {
  409. logger.info("订单号:"+ orderId +"的订单驳回退款,发送微信消息失败!");
  410. }
  411. return mv;
  412. } else {
  413. mv.addObject("msgObj", new MessageDto(false, "对不起,驳回退款订单失败", "对不起,对不起,驳回退款订单失败,请稍后重试!"));
  414. return mv;
  415. }
  416. } else if (orderUtil.getOrderActin()[5].equals(action)) {
  417. // 同意退款 , 需要回滚积分
  418. if (!orderUtil.orderStatusIntToOrderStatusString(4).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  419. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  420. return mv;
  421. }
  422. order.setSalesStatus(4);
  423. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  424. //将返利表中待入账改为已入账
  425. RebackInfo rabackInfo = new RebackInfo();
  426. rabackInfo.setOrderId(order.getSalesOrderid());
  427. rabackInfo.setStatus(3);
  428. rebackServices.updateStatus(rabackInfo);
  429. mv.addObject("msgObj", new MessageDto(true, "订单退款成功", "恭喜您!订单退款成功,订单将封存!"));
  430. DecimalFormat df=new DecimalFormat("0.00");
  431. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  432. try {
  433. sendMessageUtil.orderRefundMsg(
  434. "尊敬的用户,您的退款申请已通过",
  435. payMoney,
  436. itemList.get(0).getItemProductName(),
  437. order.getSalesOrderid(),
  438. ResultInfo.refundAgreeRemark + ResultInfo.sendRemark1,
  439. currentOrder.getSalesOpenid(),
  440. ResultInfo.ORDER_DETAIL+order.getSalesOrderid()
  441. );
  442. } catch (Exception e) {
  443. logger.info("订单号:"+ orderId +"的订单同意退款,发送微信消息失败!");
  444. }
  445. return mv;
  446. } else {
  447. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  448. return mv;
  449. }
  450. } else {
  451. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  452. return mv;
  453. }
  454. case 4: // 已退款(管理员通过申请退款,此时订单任何人不能操作)
  455. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,已退款的订单不能操作!"));
  456. return mv;
  457. case 5: // 已发货(管理员不具有权限)
  458. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,已发货的订单不能操作!"));
  459. return mv;
  460. case 6: // 申请退货中(只有管理员能操作 : 确认退货)
  461. if (!orderUtil.getOrderActin()[6].equals(action) && !orderUtil.getOrderActin()[10].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  462. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  463. return mv;
  464. }
  465. if (!orderUtil.orderStatusIntToOrderStatusString(7).equals(actionDto.getToOrderStatus())
  466. && !orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  467. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  468. return mv;
  469. }
  470. // 执行修改操作
  471. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  472. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  473. if(orderUtil.orderStatusIntToOrderStatusString(7).equals(actionDto.getToOrderStatus())){
  474. mv.addObject("msgObj", new MessageDto(true, "订单申请退货成功", "恭喜您!同意订单:" + orderId + "退货,等待收到货物后确认退货!"));
  475. int productNum = 0;
  476. for (OrderItem item : itemList) {
  477. productNum += item.getItemNum();
  478. }
  479. sendMessageUtil.orderApplyReturn(
  480. "尊敬的用户,您的退货申请已通过",
  481. orderId,
  482. itemList.get(0).getItemProductName(),
  483. productNum+"件",
  484. currentOrder.getSalesReturnDes(),
  485. ResultInfo.returnAgreeRemark,
  486. currentOrder.getSalesOpenid(),
  487. ResultInfo.ORDER_DETAIL+orderId
  488. );
  489. }else{
  490. mv.addObject("msgObj", new MessageDto(true, "成功驳回订单退货", "订单:" + orderId + "退货被驳回,状态返回已发货!"));
  491. int productNum = 0;
  492. for (OrderItem item : itemList) {
  493. productNum += item.getItemNum();
  494. }
  495. sendMessageUtil.orderApplyReturn(
  496. "尊敬的用户,您的退货申请被退回",
  497. orderId,
  498. itemList.get(0).getItemProductName(),
  499. productNum+"件",
  500. currentOrder.getSalesReturnDes(),
  501. ResultInfo.returnRejectRemark,
  502. currentOrder.getSalesOpenid(),
  503. ResultInfo.ORDER_DETAIL+orderId
  504. );
  505. }
  506. return mv;
  507. } else {
  508. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  509. return mv;
  510. }
  511. case 7: // 退货中(管理员具有操作能力:确认退货)
  512. if (!orderUtil.getOrderActin()[7].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  513. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  514. return mv;
  515. }
  516. if (!orderUtil.orderStatusIntToOrderStatusString(8).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  517. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  518. return mv;
  519. }
  520. // 执行修改操作
  521. order.setSalesStatus(8);
  522. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  523. //将返利表中待入账改为已入账
  524. RebackInfo rabackInfo = new RebackInfo();
  525. rabackInfo.setOrderId(order.getSalesOrderid());
  526. rabackInfo.setStatus(3);
  527. rebackServices.updateStatus(rabackInfo);
  528. mv.addObject("msgObj", new MessageDto(true, "确认订单退货成功", "恭喜您!同意订单:" + orderId + "退货,订单关闭!"));
  529. try {
  530. MQMessage message = new MQMessage();
  531. message.setServiceToMessage(orderId);
  532. message.setServiceOtherMessage(currentOrder.getSalesPostFirm() + "-" + currentOrder.getSalesPostNum());
  533. message.setServiceIsSend(2); // 没有推送的信息
  534. message.setServiceStatus(1); // 推送成功
  535. message.setServiceType(1); // 添加订单信息
  536. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  537. message.setServiceHandlerMethodName("returnOrderInfoToEfast");
  538. mQservice.insertMQMessage(message);
  539. } catch (Exception e) {
  540. // TODO: handle exception
  541. }
  542. //推送金额变动消息
  543. Member member = memberService.getMemberByUserOpenId(currentOrder.getSalesOpenid());
  544. if(member != null || member.getUserResType() != null) {
  545. String toopenid = "";
  546. switch(member.getUserResType().intValue()){//用户来源
  547. case 2: //用户来源 微代理
  548. WdRelation wdrelation = wdRelationService.getWdRelationByOpenid(currentOrder.getSalesOpenid());
  549. Member fatherMember = memberService.getMemberByUserId(wdrelation.getWdFirst()); //微代理父节点信息
  550. if(fatherMember != null && StringUtils.isNotEmpty(fatherMember.getUserOpenid())){
  551. toopenid = fatherMember.getUserOpenid();
  552. }
  553. break;
  554. case 3: //用户来源 线下
  555. DealerRelation dealerrelation= dealerRelationService.getDealerRelationById(member.getUserDealers());
  556. int Dealerid = 0;
  557. if(dealerrelation!=null){
  558. if(dealerrelation.getDealerThird()!=null){ //第三极
  559. Dealerid = dealerrelation.getDealerThird();
  560. }else if(dealerrelation.getDealerSecond()!=null){ //第二级
  561. Dealerid = dealerrelation.getDealerSecond();
  562. }else if(dealerrelation.getDealerFifth()!=null){ //第一级
  563. Dealerid = dealerrelation.getDealerFifth();}
  564. }
  565. PlaceInfo fatherPlace = placeInfoService.getPlaceInfoById(Dealerid);//分销父节点信息
  566. if(fatherPlace!=null){
  567. toopenid = fatherPlace.getOpenid();
  568. }
  569. break;
  570. }
  571. //发送消息
  572. // String temp = ResultInfo.INCOMEREMINDTEMP;
  573. // temp = temp.replaceFirst("firstValueIamberry", ResultInfo.NEXTUSERTUIHUOMESSAGE)
  574. // .replaceFirst("accountValueIamberry",URLDecoder.decode( member.getUserNickname(), "UTF-8"))
  575. // .replaceFirst("timeValueIamberry", DateTimeUtil.format(new Date(),NameUtils.DATE_TIME_FORMAT))
  576. // .replaceFirst("typeValueIamberry", "用户退货")
  577. // .replaceFirst("remarkValueIamberry", ResultInfo.INTOSHOP);
  578. // sendMessageUtil.sendTemplateMessageToOpenid(temp, toopenid, ResultInfo.TUIHUI_SHIPMENT,3);
  579. }
  580. return mv;
  581. } else {
  582. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  583. return mv;
  584. }
  585. case 8: // 订单退货,订单关闭(管理员收到货后,确认退货,订单状态修改为此,订单不对外提供操作能力)
  586. mv.addObject("msgObj", new MessageDto(false, "对不起,操作订单失败", "对不起,订单退货,订单关闭,本订单不能操作!"));
  587. return mv;
  588. case 9: // 换货中(管理员对申请换货的订单,确认换货时,订单状态为此,此时只有管理员具有操作权限,只能确认换货,录入物流信息,并重新计算订单关闭的时间,待入账积分的时间要修改)
  589. if (!orderUtil.getOrderActin()[9].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  590. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  591. return mv;
  592. }
  593. if (!orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  594. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  595. return mv;
  596. }
  597. // 执行修改操作
  598. if ("2".equals(currentOrder.getSalesProxyReward().toString())) {
  599. order.setSalesStatus(orderUtil.getOrderStatusByStr("inFinish"));
  600. } else {
  601. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  602. }
  603. if (adminOrderService.deliverOrderByOrderId(order)) {
  604. mv.addObject("msgObj", new MessageDto(true, "订单发货成功", "恭喜您!订单:" + orderId + "订单发货成功!"));
  605. try {
  606. MQMessage message = new MQMessage();
  607. message.setServiceToMessage(orderId);
  608. message.setServiceOtherMessage("efast.trade.new.add");
  609. message.setServiceIsSend(2); // 没有推送的信息
  610. message.setServiceStatus(1); // 推送成功
  611. message.setServiceType(1); // 添加订单信息
  612. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  613. message.setServiceHandlerMethodName("exchangeOrderInfoToEfast");
  614. mQservice.insertMQMessage(message);
  615. } catch (Exception e) {
  616. System.out.println("===========pay 201 插入返利到百胜失败==============");
  617. }
  618. /*换货推送与发货一致*/
  619. Order newOrder = adminOrderService.selectOrderStatusByOrderId(orderId);
  620. try {
  621. sendMessageUtil.orderSendSuccess(
  622. "尊敬的用户,您的订单已发货,物流信息:",
  623. orderId,
  624. SendMessageUtil.hashmap.get(newOrder.getSalesPostFirm()),
  625. newOrder.getSalesPostNum(),
  626. newOrder.getSalesAddressInfo(),
  627. ResultInfo.sendRemark1,
  628. newOrder.getSalesOpenid(),
  629. ResultInfo.ORDER_DETAIL+order.getSalesOrderid()
  630. );
  631. } catch (Exception e) {
  632. logger.info("订单号:"+ order.getSalesOrderid() +"的订单已发货,发送微信消息失败!");
  633. }
  634. return mv;
  635. } else {
  636. mv.addObject("msgObj", new MessageDto(false, "对不起,订单发货失败", "对不起,订单发货失败,请稍后重试!"));
  637. return mv;
  638. }
  639. case 10: // 换货完成,当用户对换货中的订单,点击确认换货时,并录入物流信息,此订单进入已发货状态
  640. break;
  641. case 11: // 在订单为已发货时,用户具有的权限,用户申请换货
  642. if (!orderUtil.getOrderActin()[8].equals(action) && !orderUtil.getOrderActin()[11].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  643. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  644. return mv;
  645. }
  646. if (!orderUtil.orderStatusIntToOrderStatusString(9).equals(actionDto.getToOrderStatus())
  647. && !orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  648. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  649. return mv;
  650. }
  651. // 执行修改操作
  652. if (!orderUtil.orderStatusIntToOrderStatusString(9).equals(actionDto.getToOrderStatus())) {
  653. if ("2".equals(currentOrder.getSalesProxyReward().toString())) {
  654. order.setSalesStatus(orderUtil.getOrderStatusByStr("inFinish"));
  655. } else {
  656. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  657. }
  658. } else {
  659. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  660. }
  661. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  662. if(orderUtil.orderStatusIntToOrderStatusString(9).equals(actionDto.getToOrderStatus())){
  663. mv.addObject("msgObj", new MessageDto(true, "同意换货成功", "恭喜您!同意订单:" + orderId + "换货,请收货后录入物流信息并同意换货!"));
  664. try {
  665. sendMessageUtil.orderApplyBarter(
  666. "尊敬的用户,您的退货申请已通过。",
  667. orderId,
  668. itemList.get(0).getItemProductName(),
  669. ResultInfo.exchangeAgreeRemark,
  670. currentOrder.getSalesOpenid(),
  671. ResultInfo.ORDER_DETAIL+orderId
  672. );
  673. } catch (Exception e) {
  674. logger.info("订单号:"+ orderId +"的订单退货申请已通过,发送微信消息失败!");
  675. }
  676. }else{
  677. mv.addObject("msgObj", new MessageDto(true, "驳回换货成功", "您已驳回订单:" + orderId + "换货,订单状态改为已发货!"));
  678. try {
  679. sendMessageUtil.orderApplyBarter(
  680. "尊敬的用户,您的换货申请被退回。",
  681. orderId,
  682. itemList.get(0).getItemProductName(),
  683. ResultInfo.exchangeRejectRemark,
  684. currentOrder.getSalesOpenid(),
  685. ResultInfo.ORDER_DETAIL+orderId
  686. );
  687. } catch (Exception e) {
  688. logger.info("订单号:"+ orderId +"的订单换货申请被退回,发送微信消息失败!");
  689. }
  690. }
  691. return mv;
  692. } else {
  693. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  694. return mv;
  695. }
  696. default: // 报错
  697. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误!"));
  698. return mv;
  699. }
  700. return mv;
  701. }
  702. /**
  703. * 订单备注
  704. * @param actionDto
  705. * @throws IOException
  706. */
  707. @RequestMapping("/remark/{id}")
  708. @ResponseBody
  709. public String orderRemark(OrderActionDto actionDto, @PathVariable("id") String orderId, HttpServletResponse response) throws IOException {
  710. String remark = "";
  711. // 订单备注
  712. if (actionDto.getRemarkColor() == null) {
  713. actionDto.setRemarkColor(1);
  714. }
  715. if (actionDto.getRemark() == null || actionDto.getRemark().isEmpty()) {
  716. return "{\"status\":\"false\",\"info\":\"备注信息不能为空!\"}";
  717. }
  718. if (actionDto.getRemark().length() > 100) {
  719. return "{'\"status\":\"false\",\"info\":\"备注信息不能超过100个字符!\"}";
  720. }
  721. //查询该订单的状态
  722. Order order = adminOrderService.selectOrderStatusByOrderId(orderId);
  723. if (null == order) {
  724. return "{\"status\":true,\"info\":\"该订单不存在!\"}";
  725. }
  726. if (!"8".equals(order.getSalesStatus().toString())) {
  727. remark = actionDto.getRemark();
  728. }
  729. // update到数据库
  730. if (adminOrderService.updateOrderAdminRemarkByOrderId(remark, orderId, actionDto.getRemarkColor())) {
  731. return "{\"status\":true,\"info\":\"备注成功!\"}";
  732. } else {
  733. return "{\"status\":\"false\",\"info\":\"备注失败,请稍后重试!\"}";
  734. }
  735. }
  736. }