AdminOrderHandlers.java 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336
  1. package com.iamberry.wechat.handles.admin;
  2. import com.iamberry.app.tool.log.RatFWLogger;
  3. import com.iamberry.wechat.core.entity.OrderUtil;
  4. import com.iamberry.wechat.core.entity.ResultMsg;
  5. import com.iamberry.wechat.core.entity.drp.PlaceInfo;
  6. import com.iamberry.wechat.core.entity.member.CashLog;
  7. import com.iamberry.wechat.core.entity.member.Member;
  8. import com.iamberry.wechat.core.entity.mq.MQMessage;
  9. import com.iamberry.wechat.core.entity.order.*;
  10. import com.iamberry.wechat.core.entity.reback.RebackInfo;
  11. import com.iamberry.wechat.core.entity.relationship.DealerRelation;
  12. import com.iamberry.wechat.core.entity.relationship.WdRelation;
  13. import com.iamberry.wechat.face.drp.PlaceInfoService;
  14. import com.iamberry.wechat.face.efast.EfastRentService;
  15. import com.iamberry.wechat.face.member.MemberService;
  16. import com.iamberry.wechat.face.order.AdminOrderService;
  17. import com.iamberry.wechat.face.order.CodeService;
  18. import com.iamberry.wechat.face.porduct.ProductColorService;
  19. import com.iamberry.wechat.face.reback.LoadRewardTaskService;
  20. import com.iamberry.wechat.face.reback.RebackServices;
  21. import com.iamberry.wechat.face.relationship.DealerRelationService;
  22. import com.iamberry.wechat.face.relationship.WdRelationService;
  23. import com.iamberry.wechat.handles.mq.MQServiceProxy;
  24. import com.iamberry.wechat.tools.NameUtils;
  25. import com.iamberry.wechat.tools.ObjectExcelView;
  26. import com.iamberry.wechat.tools.ResultInfo;
  27. import com.iamberry.wechat.tools.SendMessageUtil;
  28. import org.apache.commons.collections.map.HashedMap;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Controller;
  32. import org.springframework.web.bind.annotation.PathVariable;
  33. import org.springframework.web.bind.annotation.RequestMapping;
  34. import org.springframework.web.bind.annotation.RequestParam;
  35. import org.springframework.web.bind.annotation.ResponseBody;
  36. import org.springframework.web.servlet.ModelAndView;
  37. import javax.servlet.http.HttpServletRequest;
  38. import javax.servlet.http.HttpServletResponse;
  39. import java.io.IOException;
  40. import java.net.URLDecoder;
  41. import java.text.DecimalFormat;
  42. import java.text.SimpleDateFormat;
  43. import java.util.*;
  44. import static com.iamberry.wechat.service.ImberryConfig.INFORM_SHIPPING;
  45. //import cn.jpush.api.common.connection.IHttpClient.RequestMethod;
  46. @Controller
  47. @RequestMapping("/admin/order")
  48. public class AdminOrderHandlers {
  49. @Autowired
  50. private AdminOrderService adminOrderService;
  51. @Autowired
  52. private OrderUtil orderUtil;
  53. @Autowired
  54. private SendMessageUtil sendMessageUtil;
  55. @Autowired
  56. private MemberService memberService;
  57. @Autowired
  58. private WdRelationService wdRelationService;
  59. @Autowired
  60. private DealerRelationService dealerRelationService;
  61. @Autowired
  62. private PlaceInfoService placeInfoService;
  63. @Autowired
  64. private RatFWLogger logger;
  65. @Autowired
  66. private MQServiceProxy mQservice;
  67. @Autowired
  68. private RebackServices rebackServices;
  69. @Autowired
  70. private EfastRentService efastRentService;
  71. @Autowired
  72. private CodeService codeService;
  73. @Autowired
  74. private ProductColorService productColorService;
  75. /**
  76. * 后台进入订单列表功能
  77. *
  78. * @param request
  79. * @param pageSize
  80. * @param pageNO
  81. * @return ModelAndView
  82. * @throws Exception
  83. */
  84. @RequestMapping("/selectShopOrder")
  85. public ModelAndView selectShopOrder(HttpServletRequest request,
  86. @RequestParam(value = "pageSize", defaultValue = "20", required = false) Integer pageSize,
  87. @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO) throws Exception {
  88. ModelAndView mv = new ModelAndView("admin/order/orderList");
  89. String orderStatus = request.getParameter("orderStatus");
  90. if (orderStatus == null || "".equals(orderStatus)) {
  91. orderStatus = "paySuccess";
  92. }
  93. // 订单状态,数字标识
  94. int status = -1;
  95. if (!orderStatus.equals("allOrder")) {
  96. status = orderUtil.getOrderStatusByStr(orderStatus);
  97. }
  98. Order order = new Order();
  99. order.setSalesStatus(status);
  100. order.getPage().setPageSize(pageSize);
  101. order.getPage().setPageNumber(pageNO);
  102. order.getPage().initRecordBegin();
  103. List<Order> orderList = this.adminOrderService.selectShopOrder(order);
  104. // 订单是否按照状态查询的, 用于页面
  105. if (status == -1) {
  106. mv.addObject("orderListIsStatus", false);
  107. for (Order orders : orderList) {
  108. // 用户昵称编码
  109. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  110. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  111. }
  112. // 获取用户的操作权限
  113. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid(), orders.getSalesIsRfund()));
  114. orders.setOrderLinkStatus(orderUtil.orderStatusToString(orders.getSalesStatus())); // 订单状态描述,中文
  115. // 遍历订单, 判断用户角色
  116. if (orders.getPlaceOpenID() != null && orders.getPlaceOpenID().equals(orders.getSalesOrderid())) {
  117. // 金牌会员
  118. orders.setUserResource("金牌会员");
  119. } else if (orders.getVipRole() != null && orders.getVipRole().equals("52") && orders.getUserResource().equals("3")) {
  120. // 金牌会员直属下线
  121. orders.setUserResource("金牌会员直属下线");
  122. } else {
  123. // 会员
  124. String role = "会员";
  125. switch (Integer.parseInt(orders.getUserResource())) {
  126. case 47:
  127. role = "合伙人下线";
  128. break;
  129. case 48:
  130. role = "门店下线";
  131. break;
  132. case 49:
  133. role = "微代理下线";
  134. break;
  135. case 51:
  136. role = "VIP会员下线";
  137. break;
  138. case 52:
  139. role = "金牌会员下线";
  140. break;
  141. case 53:
  142. role = "钻石下线";
  143. break;
  144. default:
  145. break;
  146. }
  147. orders.setUserResource(role);
  148. }
  149. }
  150. } else {
  151. mv.addObject("orderListIsStatus", true);
  152. for (Order orders : orderList) {
  153. // 用户昵称编码
  154. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  155. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  156. }
  157. // 获取用户的操作权限
  158. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid(), orders.getSalesIsRfund()));
  159. // 遍历订单, 判断用户角色
  160. if (orders.getPlaceOpenID() != null && orders.getPlaceOpenID().equals(orders.getSalesOrderid())) {
  161. // 金牌会员
  162. orders.setUserResource("金牌会员");
  163. } else if (orders.getVipRole() != null && orders.getVipRole().equals("52") && orders.getUserResource().equals("3")) {
  164. // 金牌会员直属下线
  165. orders.setUserResource("金牌会员直属下线");
  166. } else {
  167. // 会员
  168. String role = "会员";
  169. switch (Integer.parseInt(orders.getUserResource())) {
  170. case 47:
  171. role = "合伙人下线";
  172. break;
  173. case 48:
  174. role = "门店下线";
  175. break;
  176. case 49:
  177. role = "微代理下线";
  178. break;
  179. case 51:
  180. role = "VIP会员下线";
  181. break;
  182. case 52:
  183. role = "金牌会员下线";
  184. break;
  185. case 53:
  186. role = "钻石下线";
  187. break;
  188. default:
  189. break;
  190. }
  191. orders.setUserResource(role);
  192. }
  193. }
  194. }
  195. mv.addObject("orderList", orderList);
  196. mv.addObject("pageNO", pageNO);
  197. mv.addObject("orderStatus", status);// 订单状态
  198. mv.addObject("url", "/admin/order/selectShopOrder?orderStatus=" + orderStatus + "&pageSize=" + pageSize + "&pageNO=");
  199. mv.addObject("pageSize", this.adminOrderService.selectShopOrderCount(order));
  200. mv.addObject("orderStatusStr", orderUtil.orderStatusIntToOrderStatusString(status));// 订单状态描述(用于选中订单头)
  201. mv.addObject("orderLinkStatus", orderUtil.orderStatusToString(status));// 订单状态描述,中文(显示给用户看)
  202. mv.addObject("statusUrl", "/admin/order/selectShopOrder?bid=&sid=");
  203. return mv;
  204. }
  205. /**
  206. * 同步订单状态
  207. * @param request
  208. * @param orderId
  209. * @param type 1:销售订单,2:代理商采购订单
  210. * @throws Exception
  211. */
  212. @ResponseBody
  213. @RequestMapping("/select_efast_order/{orderId}/{type}")
  214. public ResultMsg selectEfastOrder(HttpServletRequest request,
  215. @PathVariable("orderId") String orderId,
  216. @PathVariable("type") Integer type) throws Exception {
  217. //efast的订单编号
  218. String efastOrderId = request.getParameter("efastOrderId");
  219. ResultMsg msg = new ResultMsg();
  220. if (!cn.jpush.api.utils.StringUtils.isNotEmpty(orderId) || type == null) {
  221. msg.setMessage("订单号或类型为空!");
  222. msg.setResultCode(ResultInfo.ERRORCODE);
  223. msg.setStatus(false);
  224. return msg;
  225. }
  226. //获取队列中的map集合
  227. Map<String, Object> queuesMap = new HashedMap();
  228. String id = efastOrderId;
  229. String EsastType = "1";
  230. //查询efast系统该订单的状态
  231. Map<String, Object> map = efastRentService.getEfastSendOrderInfo(id,EsastType);
  232. if (!(boolean) map.get("status")) {
  233. msg.setData("");
  234. msg.setMessage(map.get("result").toString());
  235. msg.setResultCode(ResultInfo.ERRORCODE);
  236. msg.setStatus(false);
  237. return msg;
  238. }
  239. //获取订单信息
  240. Order or = adminOrderService.getShopOrderByOrderId(orderId);
  241. Order order = new Order();
  242. order.setSalesOrderid(orderId);
  243. order.setSalesStatus(5);
  244. order.setSalesPostFirm((String) map.get("postFirm"));
  245. order.setSalesPostNum((String) map.get("postNum"));
  246. order.setOldStatus(2);
  247. order.setSalesOpenid(or.getSalesOpenid());
  248. //order.set
  249. int flag = adminOrderService.updateOrderDeliver(order);
  250. if (flag < 1){
  251. msg.setMessage("修改订单状态失败");
  252. msg.setResultCode(ResultInfo.ERRORCODE);
  253. msg.setStatus(false);
  254. return msg;
  255. }
  256. Member member = memberService.getMemberByUserOpenId(or.getSalesOpenid());
  257. if (member == null || 1 == member.getUserStatus() || 0 == member.getUserStatus()){ //未关注或者取消关注的,将发送手机短信
  258. logger.info("短信通知:"+ or.getSalesOpenid() +" 用户的订单已发货");
  259. String phone = or.getSalesAddressTel();
  260. codeService.informShipping(phone,INFORM_SHIPPING);
  261. }else if(2 == member.getUserStatus()){ //已关注的用户推送信息到公众号
  262. logger.info("公众号推送物流信息: "+ or.getSalesOpenid() +" 用户的订单已发货");
  263. //消息内容
  264. String data = ResultInfo.ORDERPACKAGETEMP;
  265. data = data.replaceFirst("firstValueOrder", ResultInfo.SHIPMENTMESSAGE)
  266. .replaceFirst("orderIdValueOrder", orderId)
  267. .replaceFirst("orderValuePackageId", SendMessageUtil.hashmap.get(map.get("postFirm")) + ":" + map.get("postNum"))
  268. .replaceFirst("orderRemarkValue", ResultInfo.INTOSHOP);
  269. sendMessageUtil.sendTemplateMessageToOpenid(data, or.getSalesOpenid(), ResultInfo.PAGE_SHIPMENT + orderId, 2);
  270. }
  271. msg.setMessage(NameUtils.getConfig("SUCCESSINFO"));
  272. msg.setResultCode(ResultInfo.SUCCESSCODE);
  273. msg.setStatus(true);
  274. return msg;
  275. }
  276. /**
  277. * 订单详细信息
  278. *
  279. * @param request
  280. * @param orderId
  281. * @return ModelAndView
  282. * @throws Exception
  283. */
  284. @RequestMapping("/getShopOrderByOrderId/{orderId}")
  285. public ModelAndView getShopOrderByOrderId(HttpServletRequest request,
  286. @PathVariable("orderId") String orderId) throws Exception {
  287. ModelAndView mv = new ModelAndView("admin/order/order");
  288. if (null != orderId && !"".equals(orderId)) {
  289. Order order = this.adminOrderService.getShopOrderByOrderId(orderId);
  290. List<OrderItem> orderItemList = this.adminOrderService.getShopOrderItemByOrderId(orderId);
  291. // 用户昵称编码
  292. if (order.getUserNickname() != null && !order.getUserNickname().isEmpty()) {
  293. order.setUserNickname(URLDecoder.decode(order.getUserNickname(), "UTF-8"));
  294. }
  295. // 获取用户的操作权限
  296. order.setOperations(orderUtil.orderStatusToOperation(order.getSalesStatus(), order.getSalesOrderid(), order.getSalesIsRfund()));
  297. order.setOrderLinkStatus(orderUtil.orderStatusToString(order.getSalesStatus())); // 订单状态描述,中文
  298. if (order.getSalesStatus() == 2) {
  299. // 给百胜推送信息
  300. // try {
  301. // MQMessage message = new MQMessage();
  302. // message.setServiceToMessage(orderId);
  303. // message.setServiceOtherMessage("efast.trade.detail.get");
  304. // message.setServiceIsSend(2); // 没有推送的信息
  305. // message.setServiceStatus(1); // 推送成功
  306. // message.setServiceType(1); // 添加订单信息
  307. // message.setServiceHandlerObjectName("efastOrderServiceImpl");
  308. // message.setServiceHandlerMethodName("selectEfastSendOrderInfo");
  309. // mQservice.insertMQMessage(message);
  310. // } catch (Exception e) {
  311. // // TODO: handle exception
  312. // }
  313. } else if (order.getSalesStatus() == 8) {
  314. // 给百胜推送信息
  315. // try {
  316. // MQMessage message = new MQMessage();
  317. // message.setServiceToMessage(orderId);
  318. // message.setServiceOtherMessage("efast.order.return.info.fetch");
  319. // message.setServiceIsSend(2); // 没有推送的信息
  320. // message.setServiceStatus(1); // 推送成功
  321. // message.setServiceType(1); // 添加订单信息
  322. // message.setServiceHandlerObjectName("efastOrderServiceImpl");
  323. // message.setServiceHandlerMethodName("selectEfastReturnOrderInfo");
  324. // mQservice.insertMQMessage(message);
  325. // } catch (Exception e) {
  326. // // TODO: handle exception
  327. // }
  328. }
  329. mv.addObject("order", order);
  330. mv.addObject("orderItemList", orderItemList);
  331. }
  332. return mv;
  333. }
  334. @RequestMapping(value = "/selectShopOrderByOrderId")
  335. public ModelAndView selectShopOrderByOrderId(HttpServletRequest request,
  336. @RequestParam(value = "pageSize", defaultValue = "20", required = false) Integer pageSize,
  337. @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO,
  338. OrderActionDto actionDto) throws Exception {
  339. ModelAndView mv = new ModelAndView("admin/order/orderList");
  340. Order order = new Order();
  341. String orderStatus = request.getParameter("orderStatus");
  342. //url需要进行拼接,拼接的内容是页面上的时间条件
  343. StringBuffer url = new StringBuffer("/admin/order/selectShopOrderByOrderId?orderStatus=" + actionDto.getOrderStatus());
  344. // 判断是否输入数据
  345. if (!(actionDto.getText() == null || actionDto.getText().isEmpty())) {
  346. url.append("&text=" + actionDto.getText());
  347. }
  348. //分页并带条件查询接收参数
  349. String beginTime = request.getParameter("beginDate");
  350. String endTime = request.getParameter("endDate");
  351. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  352. String salesAddressTel = request.getParameter("salesAddressTel");
  353. String salesAddressName = request.getParameter("salesAddressName");
  354. String salesAddressInfo = request.getParameter("salesAddressInfo");
  355. String userNickname = request.getParameter("userNickname");
  356. if (salesAddressTel != null && !"".equals(salesAddressTel)) {
  357. order.setSalesAddressTel(salesAddressTel);
  358. mv.addObject("salesAddressTel", salesAddressTel);
  359. url.append("&salesAddressTel=" + salesAddressTel);
  360. }
  361. if (salesAddressName != null && !"".equals(salesAddressName)) {
  362. order.setSalesAddressName(salesAddressName);
  363. mv.addObject("salesAddressName", salesAddressName);
  364. url.append("&salesAddressName=" + salesAddressName);
  365. }
  366. if (salesAddressInfo != null && !"".equals(salesAddressInfo)) {
  367. order.setSalesAddressInfo(salesAddressInfo);
  368. mv.addObject("salesAddressInfo", salesAddressInfo);
  369. url.append("&salesAddressInfo=" + salesAddressInfo);
  370. }
  371. if (userNickname != null && !"".equals(userNickname)) {
  372. order.setUserNickname(userNickname);
  373. mv.addObject("userNickname", userNickname);
  374. url.append("&userNickname=" + userNickname);
  375. }
  376. if (null != beginTime && !"".equals(beginTime)) {
  377. if (!request.getMethod().equalsIgnoreCase("post")) {
  378. actionDto.setBeginDate(format.parse(new String(beginTime.getBytes("ISO-8859-1"), "UTF-8")));
  379. } else {
  380. actionDto.setBeginDate(format.parse(beginTime));
  381. }
  382. }
  383. if (null != endTime && !"".equals(endTime)) {
  384. if (!request.getMethod().equalsIgnoreCase("post")) {
  385. actionDto.setEndDate(format.parse(new String(endTime.getBytes("ISO-8859-1"), "UTF-8")));
  386. } else {
  387. actionDto.setEndDate(format.parse(endTime));
  388. }
  389. }
  390. if (null != actionDto.getBeginDate()) {
  391. url.append("&beginDate=" + format.format(actionDto.getBeginDate()));
  392. mv.addObject("beginDate", format.format(actionDto.getBeginDate()));
  393. }
  394. if (null != actionDto.getEndDate()) {
  395. url.append("&endDate=" + format.format(actionDto.getEndDate()));
  396. mv.addObject("endDate", format.format(actionDto.getEndDate()));
  397. }
  398. url.append("&pageSize=" + pageSize + "&pageNO=");
  399. if (orderStatus == null || "".equals(orderStatus)) {
  400. orderStatus = "paySuccess";
  401. }
  402. // 订单状态,数字标识
  403. int status = -1;
  404. if (!orderStatus.equals("allOrder")) {
  405. status = orderUtil.getOrderStatusByStr(orderStatus);
  406. }
  407. order.setSalesStatus(status);
  408. order.setSalesOrderid(actionDto.getText());
  409. order.setBeginDate(actionDto.getBeginDate());
  410. order.setEndDate(actionDto.getEndDate());
  411. order.getPage().setPageSize(pageSize);
  412. order.getPage().setPageNumber(pageNO);
  413. order.getPage().initRecordBegin();
  414. List<Order> orderList = this.adminOrderService.selectShopOrderByOrderId(order);
  415. // 订单是否按照状态查询的, 用于页面
  416. if (status == -1) {
  417. mv.addObject("orderListIsStatus", false);
  418. for (Order orders : orderList) {
  419. // 用户昵称编码
  420. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  421. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  422. }
  423. // 获取用户的操作权限
  424. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid(), orders.getSalesIsRfund()));
  425. orders.setOrderLinkStatus(orderUtil.orderStatusToString(orders.getSalesStatus())); // 订单状态描述,中文
  426. }
  427. } else {
  428. mv.addObject("orderListIsStatus", true);
  429. for (Order orders : orderList) {
  430. // 用户昵称编码
  431. if (orders.getUserNickname() != null && !orders.getUserNickname().isEmpty()) {
  432. orders.setUserNickname(URLDecoder.decode(orders.getUserNickname(), "UTF-8"));
  433. }
  434. // 获取用户的操作权限
  435. orders.setOperations(orderUtil.orderStatusToOperation(orders.getSalesStatus(), orders.getSalesOrderid(), orders.getSalesIsRfund()));
  436. }
  437. }
  438. // 时间区间的处理
  439. String beginDateTime = "";
  440. SimpleDateFormat simple = null;
  441. if (actionDto.getBeginDate() != null) {
  442. simple = new SimpleDateFormat("yyyy-MM-dd");
  443. beginDateTime = simple.format(actionDto.getBeginDate());
  444. }
  445. String endDate = "";
  446. if (actionDto.getEndDate() != null) {
  447. if (simple == null) {
  448. simple = new SimpleDateFormat("yyyy-MM-dd");
  449. }
  450. endDate = simple.format(actionDto.getEndDate());
  451. }
  452. mv.addObject("orderList", orderList);
  453. mv.addObject("pageNO", pageNO);
  454. mv.addObject("orderStatus", status);// 订单状态
  455. mv.addObject("url", url.toString());
  456. mv.addObject("pageSize", this.adminOrderService.selectShopOrderCount(order));
  457. mv.addObject("orderStatusStr", orderUtil.orderStatusIntToOrderStatusString(status));// 订单状态描述(用于选中订单头)
  458. mv.addObject("orderLinkStatus", orderUtil.orderStatusToString(status));// 订单状态描述,中文(显示给用户看)
  459. mv.addObject("statusUrl", "/admin/order/selectShopOrderByOrderId?bid=&sid=");
  460. mv.addObject("beginDate", beginDateTime);
  461. mv.addObject("endDate", endDate);
  462. mv.addObject("selectInput", actionDto.getText());
  463. return mv;
  464. }
  465. /**
  466. * 操作订单
  467. *
  468. * @return
  469. * @throws Exception
  470. */
  471. @RequestMapping("/{action}/{orderId}")
  472. public synchronized ModelAndView actionOrder(
  473. @PathVariable("action") String action,
  474. @PathVariable("orderId") String orderId,
  475. OrderActionDto actionDto
  476. ) throws Exception {
  477. ModelAndView mv = new ModelAndView("admin/msg/msg");
  478. DecimalFormat df=new DecimalFormat("0.00");
  479. Order order = new Order();
  480. order.setSalesOrderid(orderId);
  481. // 订单状态,数字标识
  482. order.setSalesPostFirm(actionDto.getPostFirm());
  483. order.setSalesPostNum(actionDto.getPostNum());
  484. // 判断当前的订单,是否支持希望进行的操作
  485. Order currentOrder = adminOrderService.selectOrderStatusByOrderId(orderId);
  486. //获取当前订单订单项
  487. List<OrderItem> itemList = adminOrderService.getShopOrderItemByOrderId(orderId);
  488. Integer orderStatus = currentOrder.getSalesStatus();
  489. order.setOldStatus(orderStatus);
  490. order.setSalesOpenid(currentOrder.getSalesOpenid());
  491. if (!orderUtil.orderStatusIntToOrderStatusString(orderStatus).equals(actionDto.getOrderStatus())) {
  492. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  493. return mv;
  494. }
  495. switch (orderStatus) {
  496. case 0: // 取消的订单,不支持任何修改订单状态的操作
  497. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,取消的订单不能操作!"));
  498. return mv;
  499. case 1: // 待支付(管理员存在操作权限:取消订单,如果取消订单,订单状态修改为0)
  500. if (!orderUtil.getOrderActin()[0].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  501. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  502. return mv;
  503. }
  504. if (!orderUtil.orderStatusIntToOrderStatusString(0).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  505. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  506. return mv;
  507. }
  508. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  509. // 执行修改操作
  510. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  511. mv.addObject("msgObj", new MessageDto(true, "取消订单成功", "恭喜您!订单:" + orderId + "取消成功,本订单将不能操作!"));
  512. return mv;
  513. } else {
  514. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  515. return mv;
  516. }
  517. case 2: // 已支付、待发货(管理员的操作为:确认发货)
  518. if (!orderUtil.getOrderActin()[2].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  519. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  520. return mv;
  521. }
  522. if (!orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  523. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  524. return mv;
  525. }
  526. // 执行修改操作
  527. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  528. if (adminOrderService.deliverOrderByOrderId(order)) {
  529. mv.addObject("msgObj", new MessageDto(true, "操作成功", "订单已发货"));
  530. //logger.info("准备为用户推送模版信息!");
  531. // 给百胜推送信息
  532. /* try {
  533. MQMessage message = new MQMessage();
  534. message.setServiceToMessage(orderId);
  535. message.setServiceOtherMessage(actionDto.getPostFirm() + "-" + actionDto.getPostNum());
  536. message.setServiceIsSend(2); // 没有推送的信息
  537. message.setServiceStatus(1); // 推送成功
  538. message.setServiceType(1); // 添加订单信息
  539. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  540. message.setServiceHandlerMethodName("sendOrderInfoToEfast");
  541. mQservice.insertMQMessage(message);
  542. } catch (Exception e) {
  543. // TODO: handle exception
  544. }*/
  545. //给用户发送消息-已发货的通知
  546. try {
  547. sendMessageUtil.orderSendSuccess("尊敬的朵粉,您的订单已发货,物流信息:",orderId,SendMessageUtil.hashmap.get(actionDto.getPostFirm()),
  548. actionDto.getPostNum(),currentOrder.getSalesAddressInfo(),"如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",currentOrder.getSalesOpenid(),null);
  549. } catch (Exception e) {
  550. logger.info("订单号:"+ orderId +"的订单驳回退款,发送微信消息失败!");
  551. }
  552. /*//消息内容
  553. String data = ResultInfo.ORDERPACKAGETEMP;
  554. data = data.replaceFirst("firstValueOrder", ResultInfo.SHIPMENTMESSAGE)
  555. .replaceFirst("orderIdValueOrder", orderId)
  556. .replaceFirst("orderValuePackageId", SendMessageUtil.hashmap.get(actionDto.getPostFirm()) + ":" + actionDto.getPostNum())
  557. .replaceFirst("orderRemarkValue", ResultInfo.INTOSHOP);
  558. sendMessageUtil.sendTemplateMessageToOpenid(data, currentOrder.getSalesOpenid(), ResultInfo.PAGE_SHIPMENT + orderId, 2);*/
  559. return mv;
  560. } else {
  561. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  562. return mv;
  563. }
  564. case 3: // 退款申请中(管理员可以操作:确认退款、驳回退款)
  565. order.setSalesAuditRemark(actionDto.getSalesAuditRemark());
  566. // 只有两种操作 : 确认退款、驳回退款
  567. if (orderUtil.getOrderActin()[4].equals(action)) {
  568. // 驳回退款
  569. if (!orderUtil.orderStatusIntToOrderStatusString(2).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  570. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  571. return mv;
  572. }
  573. order.setSalesStatus(2);
  574. if (adminOrderService.updateOrderStatusByOrderId(order)) {// 驳回退款
  575. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  576. try {
  577. //sendMessageUtil.orderApplyRefund("尊敬的朵粉,您的退款申请被退回。",payMoney,itemList.get(0).getItemProductName(),orderId,
  578. // "请确认您的退款申请信息填写无误。如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  579. sendMessageUtil.refundToDismiss("尊敬的朵粉,您的退款申请被退回。",payMoney,itemList.get(0).getItemProductName(),orderId,
  580. "请确认您的退款申请信息填写无误。 如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  581. } catch (Exception e) {
  582. logger.info("订单号:"+ orderId +"的订单驳回退款,发送微信消息失败!");
  583. }
  584. mv.addObject("msgObj", new MessageDto(true, "驳回退款成功!", "驳回退款成功,订单进入待发货状态!"));
  585. return mv;
  586. } else {
  587. mv.addObject("msgObj", new MessageDto(false, "对不起,驳回退款订单失败", "对不起,对不起,驳回退款订单失败,请稍后重试!"));
  588. return mv;
  589. }
  590. } else if (orderUtil.getOrderActin()[5].equals(action)) {
  591. // 同意退款 , 需要回滚积分
  592. if (!orderUtil.orderStatusIntToOrderStatusString(4).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  593. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  594. return mv;
  595. }
  596. order.setSalesStatus(4);
  597. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  598. List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(order.getSalesOrderid());
  599. /*调整库存 - 同意退款,库存返回*/
  600. for (int i = 0; i < orderItemList.size(); i++) {
  601. Integer fl = productColorService.updateMinusSoldNum(orderItemList.get(i).getItemColorId(),orderItemList.get(i).getItemNum());
  602. if (fl < 1) {
  603. logger.info("退款修改数量失败,订单号为:" +orderItemList.get(i).getItemSalesOrderid() );
  604. }else{
  605. logger.info("退款修改数量成功,订单号为:" +orderItemList.get(i).getItemSalesOrderid()
  606. +";颜色id为:"+orderItemList.get(i).getItemColorId()+"的数量加上"+orderItemList.get(i).getItemNum());
  607. }
  608. }
  609. /*调整库存*/
  610. //将返利表中待入账改为已入账
  611. RebackInfo rabackInfo = new RebackInfo();
  612. rabackInfo.setOrderId(order.getSalesOrderid());
  613. rabackInfo.setStatus(3);
  614. //根据orderId查询订单所有信息
  615. Order orderInfo = adminOrderService.getShopOrderByOrderId(orderId);
  616. Member member = new Member();
  617. //判断该订单是否用过余额支付,如果有,则退款后该支付的余额会退回到用户余额中
  618. if (orderInfo != null && orderInfo.getBalancePayAmount() != null) {
  619. member.setUserOpenid(orderInfo.getSalesOpenid());
  620. member.setUserIncome(orderInfo.getBalancePayAmount());
  621. adminOrderService.updateUserByUserId(member);
  622. //将数据存入日志中
  623. CashLog cashLog = new CashLog();
  624. cashLog.setCashLogsOpenid(orderInfo.getSalesOpenid());
  625. cashLog.setCashLogsOrderid(orderId);
  626. cashLog.setCashLogsNum(orderInfo.getBalancePayAmount());
  627. cashLog.setCashLogsType(1);
  628. cashLog.setCashLogsIntroduction("退款");
  629. cashLog.setCashLogsResType(5);
  630. cashLog.setCashLogsCreateDate(new Date());
  631. adminOrderService.addCashLog(cashLog);
  632. }
  633. rebackServices.updateStatus(rabackInfo);
  634. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  635. try {
  636. sendMessageUtil.orderApplyRefund("尊敬的朵粉,您的退款申请已通过。",payMoney,itemList.get(0).getItemProductName(),orderId,
  637. "退款金额将在三个工作日内退款到您的支付账户。如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  638. } catch (Exception e) {
  639. logger.info("订单号:"+ orderId +"的订单同意退款,发送微信消息失败!");
  640. }
  641. mv.addObject("msgObj", new MessageDto(true, "订单退款成功", "请联系财务部门,将此订单退款!"));
  642. updateRebate(order, 3);
  643. return mv;
  644. } else {
  645. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  646. return mv;
  647. }
  648. } else {
  649. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  650. return mv;
  651. }
  652. case 4: // 已退款(管理员通过申请退款,此时订单任何人不能操作)
  653. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,已退款的订单不能操作!"));
  654. return mv;
  655. case 5: // 已发货(管理员不具有权限)
  656. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,已发货的订单不能操作!"));
  657. return mv;
  658. case 6: // 申请退货中(只有管理员能操作 : 确认退货)
  659. order.setSalesAuditRemark(actionDto.getSalesAuditRemark());
  660. if (!orderUtil.getOrderActin()[6].equals(action) && !orderUtil.getOrderActin()[10].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  661. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  662. return mv;
  663. }
  664. if (!orderUtil.orderStatusIntToOrderStatusString(7).equals(actionDto.getToOrderStatus())
  665. && !orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  666. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  667. return mv;
  668. }
  669. // 执行修改操作
  670. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  671. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  672. if (orderUtil.orderStatusIntToOrderStatusString(7).equals(actionDto.getToOrderStatus())) {
  673. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  674. int productNum = 0;
  675. for (OrderItem item : itemList) {
  676. productNum += item.getItemNum();
  677. }
  678. try {
  679. sendMessageUtil.orderApplyReturn("尊敬的朵粉,soodo上朵已通过您的【退货申请】",orderId,payMoney,productNum+"件",currentOrder.getSalesReturnDes(),
  680. "请您尽快联系客服人员处理,根据客服人员指引将机器寄回。对此结果,soodo上朵深表歉意,我们会继续提升,期待下一次相遇!",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  681. } catch (Exception e) {
  682. logger.info("订单号:"+ orderId +"的订单同意退货,发送微信消息失败!");
  683. }
  684. mv.addObject("msgObj", new MessageDto(true, "订单申请退货成功", "恭喜您!同意订单:" + orderId + "退货,等待收到货物后确认退货!"));
  685. } else {
  686. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  687. int productNum = 0;
  688. for (OrderItem item : itemList) {
  689. productNum += item.getItemNum();
  690. }
  691. try {
  692. sendMessageUtil.orderApplyReturn("尊敬的朵粉,您的【退货申请】没有通过。",orderId,payMoney,productNum+"件",currentOrder.getSalesReturnDes(),
  693. "请确认您的退货申请信息填写无误。如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  694. } catch (Exception e) {
  695. logger.info("订单号:"+ orderId +"的订单驳回退货,发送微信消息失败!");
  696. }
  697. mv.addObject("msgObj", new MessageDto(true, "成功驳回订单退货", "订单:" + orderId + "退货被驳回,状态返回已发货!"));
  698. }
  699. return mv;
  700. } else {
  701. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  702. return mv;
  703. }
  704. case 7: // 退货中(管理员具有操作能力:确认退货)
  705. if (!orderUtil.getOrderActin()[7].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  706. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  707. return mv;
  708. }
  709. if (!orderUtil.orderStatusIntToOrderStatusString(8).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  710. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  711. return mv;
  712. }
  713. // 执行修改操作
  714. order.setSalesStatus(8);
  715. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  716. //将返利表中待入账改为已入账
  717. RebackInfo rabackInfo = new RebackInfo();
  718. rabackInfo.setOrderId(order.getSalesOrderid());
  719. rabackInfo.setStatus(3);
  720. rebackServices.updateStatus(rabackInfo);
  721. //根据orderId查询订单所有信息
  722. Order orderInfo = adminOrderService.getShopOrderByOrderId(orderId);
  723. Member memberInfo = new Member();
  724. //判断该订单是否用过余额支付,如果有,则退款后该支付的余额会退回到用户余额中
  725. if (orderInfo != null && orderInfo.getBalancePayAmount() != null) {
  726. memberInfo.setUserOpenid(orderInfo.getSalesOpenid());
  727. memberInfo.setUserIncome(orderInfo.getBalancePayAmount());
  728. adminOrderService.updateUserByUserId(memberInfo);
  729. //将数据存入日志中
  730. CashLog cashLog = new CashLog();
  731. cashLog.setCashLogsOpenid(orderInfo.getSalesOpenid());
  732. cashLog.setCashLogsOrderid(orderId);
  733. cashLog.setCashLogsNum(orderInfo.getBalancePayAmount());
  734. cashLog.setCashLogsType(1);
  735. cashLog.setCashLogsIntroduction("退货");
  736. cashLog.setCashLogsResType(5);
  737. cashLog.setCashLogsCreateDate(new Date());
  738. adminOrderService.addCashLog(cashLog);
  739. }
  740. mv.addObject("msgObj", new MessageDto(true, "确认订单退货成功", "恭喜您!同意订单:" + orderId + "退货,订单关闭!"));
  741. updateRebate(order, 3);
  742. // try {
  743. // MQMessage message = new MQMessage();
  744. // message.setServiceToMessage(orderId);
  745. // message.setServiceOtherMessage(currentOrder.getSalesPostFirm() + "-" + currentOrder.getSalesPostNum());
  746. // message.setServiceIsSend(2); // 没有推送的信息
  747. // message.setServiceStatus(1); // 推送成功
  748. // message.setServiceType(1); // 添加订单信息
  749. // message.setServiceHandlerObjectName("efastOrderServiceImpl");
  750. // message.setServiceHandlerMethodName("returnOrderInfoToEfast");
  751. // mQservice.insertMQMessage(message);
  752. // } catch (Exception e) {
  753. // // TODO: handle exception
  754. // }
  755. //推送金额变动消息
  756. Member member = memberService.getMemberByUserOpenId(currentOrder.getSalesOpenid());
  757. if (member != null || member.getUserResType() != null) {
  758. String toopenid = "";
  759. switch (member.getUserResType().intValue()) {//用户来源
  760. case 2: //用户来源 微代理
  761. WdRelation wdrelation = wdRelationService.getWdRelationByOpenid(currentOrder.getSalesOpenid());
  762. Member fatherMember = memberService.getMemberByUserId(wdrelation.getWdFirst()); //微代理父节点信息
  763. if (fatherMember != null && StringUtils.isNotEmpty(fatherMember.getUserOpenid())) {
  764. toopenid = fatherMember.getUserOpenid();
  765. }
  766. break;
  767. case 3: //用户来源 线下
  768. DealerRelation dealerrelation = dealerRelationService.getDealerRelationById(member.getUserDealers());
  769. int Dealerid = 0;
  770. if (dealerrelation != null) {
  771. if (dealerrelation.getDealerThird() != null) { //第三极
  772. Dealerid = dealerrelation.getDealerThird();
  773. } else if (dealerrelation.getDealerSecond() != null) { //第二级
  774. Dealerid = dealerrelation.getDealerSecond();
  775. } else if (dealerrelation.getDealerFifth() != null) { //第一级
  776. Dealerid = dealerrelation.getDealerFifth();
  777. }
  778. }
  779. PlaceInfo fatherPlace = placeInfoService.getPlaceInfoById(Dealerid);//分销父节点信息
  780. if (fatherPlace != null) {
  781. toopenid = fatherPlace.getOpenid();
  782. }
  783. break;
  784. }
  785. String payMoney = df.format((float)currentOrder.getSalesYetAmount()/100) + "元";
  786. int productNum = 0;
  787. for (OrderItem item : itemList) {
  788. productNum += item.getItemNum();
  789. }
  790. try {
  791. sendMessageUtil.orderApplyReturn("尊敬的朵粉,soodo上朵已收到您寄回的产品",orderId,payMoney,productNum+"件",currentOrder.getSalesReturnDes(),
  792. "退款金额将在三个工作日内退款到您的支付账户。对此结果,soodo上朵深表歉意,我们会继续提升,期待下一次相遇!",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  793. } catch (Exception e) {
  794. logger.info("订单号:"+ orderId +"的订单退货,后台确认收货,发送微信消息失败!");
  795. }
  796. }
  797. return mv;
  798. } else {
  799. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  800. return mv;
  801. }
  802. case 8: // 订单退货,订单关闭(管理员收到货后,确认退货,订单状态修改为此,订单不对外提供操作能力)
  803. mv.addObject("msgObj", new MessageDto(false, "对不起,操作订单失败", "对不起,订单退货,订单关闭,本订单不能操作!"));
  804. return mv;
  805. case 9: // 换货中(管理员对申请换货的订单,确认换货时,订单状态为此,此时只有管理员具有操作权限,只能确认换货,录入物流信息,并重新计算订单关闭的时间,待入账积分的时间要修改)
  806. if (!orderUtil.getOrderActin()[9].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  807. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  808. return mv;
  809. }
  810. if (!orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  811. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  812. return mv;
  813. }
  814. // 执行修改操作
  815. if ("2".equals(currentOrder.getSalesProxyReward().toString())) {
  816. order.setSalesStatus(orderUtil.getOrderStatusByStr("inFinish"));
  817. } else {
  818. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  819. }
  820. if (adminOrderService.deliverOrderByOrderId(order)) {
  821. mv.addObject("msgObj", new MessageDto(true, "订单发货成功", "恭喜您!订单:" + orderId + "订单发货成功!"));
  822. // try {
  823. // MQMessage message = new MQMessage();
  824. // message.setServiceToMessage(orderId);
  825. // message.setServiceOtherMessage("efast.trade.new.add");
  826. // message.setServiceIsSend(2); // 没有推送的信息
  827. // message.setServiceStatus(1); // 推送成功
  828. // message.setServiceType(1); // 添加订单信息
  829. // message.setServiceHandlerObjectName("efastOrderServiceImpl");
  830. // message.setServiceHandlerMethodName("exchangeOrderInfoToEfast");
  831. // mQservice.insertMQMessage(message);
  832. // } catch (Exception e) {
  833. // System.out.println("===========pay 201 插入返利到百胜失败==============");
  834. // }
  835. return mv;
  836. } else {
  837. mv.addObject("msgObj", new MessageDto(false, "对不起,订单发货失败", "对不起,订单发货失败,请稍后重试!"));
  838. return mv;
  839. }
  840. case 10: // 换货完成,当用户对换货中的订单,点击确认换货时,并录入物流信息,此订单进入已发货状态
  841. break;
  842. case 11: // 在订单为已发货时,用户具有的权限,用户申请换货
  843. if (!orderUtil.getOrderActin()[8].equals(action) && !orderUtil.getOrderActin()[11].equals(action)) {// 判断当前请求操作是否相符, 否则提示不成功
  844. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  845. return mv;
  846. }
  847. if (!orderUtil.orderStatusIntToOrderStatusString(9).equals(actionDto.getToOrderStatus())
  848. && !orderUtil.orderStatusIntToOrderStatusString(5).equals(actionDto.getToOrderStatus())) {// 判断请求修改的订单状态是否相符,否则提示不成功
  849. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误,请按照系统流程操作!"));
  850. return mv;
  851. }
  852. // 执行修改操作
  853. if (!orderUtil.orderStatusIntToOrderStatusString(9).equals(actionDto.getToOrderStatus())) {
  854. if ("2".equals(currentOrder.getSalesProxyReward().toString())) {
  855. order.setSalesStatus(orderUtil.getOrderStatusByStr("inFinish"));
  856. } else {
  857. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  858. }
  859. } else {
  860. order.setSalesStatus(orderUtil.getOrderStatusByStr(actionDto.getToOrderStatus()));
  861. }
  862. if (adminOrderService.updateOrderStatusByOrderId(order)) {
  863. if (orderUtil.orderStatusIntToOrderStatusString(9).equals(actionDto.getToOrderStatus())) {
  864. try {
  865. sendMessageUtil.orderApplyBarter("尊敬的朵粉,您的【换货申请】通过。",orderId,itemList.get(0).getItemProductName(),
  866. "如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  867. } catch (Exception e) {
  868. logger.info("订单号:"+ orderId +"的订单同意换货,发送微信消息失败!");
  869. }
  870. mv.addObject("msgObj", new MessageDto(true, "同意换货成功", "恭喜您!同意订单:" + orderId + "换货,请收货后录入物流信息并同意换货!"));
  871. } else {
  872. try {
  873. sendMessageUtil.orderApplyBarter("尊敬的朵粉,您的【换货申请】没有通过。",orderId,itemList.get(0).getItemProductName(),
  874. "请确认您的换货申请信息填写无误。如有问题请致电400-678-1860或直接在微信留言,soodo上朵将第一时间为您服务!(点击查看订单详情)",currentOrder.getSalesOpenid(),ResultInfo.ORDER_DETAIL + orderId);
  875. } catch (Exception e) {
  876. logger.info("订单号:"+ orderId +"的订单驳回换货,发送微信消息失败!");
  877. }
  878. mv.addObject("msgObj", new MessageDto(true, "驳回换货成功", "您已驳回订单:" + orderId + "换货,订单状态改为已发货!"));
  879. }
  880. return mv;
  881. } else {
  882. mv.addObject("msgObj", new MessageDto(false, "对不起,取消订单失败", "对不起,取消订单失败,请稍后重试!"));
  883. return mv;
  884. }
  885. default: // 报错
  886. mv.addObject("msgObj", new MessageDto(false, "对不起,操作有误", "对不起,您刚才的操作流程有误!"));
  887. return mv;
  888. }
  889. return mv;
  890. }
  891. /**
  892. * 修改返利表的返现状态
  893. *
  894. * @param order
  895. * @param status
  896. */
  897. public void updateRebate(Order order, int status) {
  898. RebackInfo rabackInfo = new RebackInfo();
  899. rabackInfo.setOrderId(order.getSalesOrderid());
  900. rabackInfo.setStatus(status);
  901. LoadRewardTaskService.updateStatus(rabackInfo);
  902. }
  903. @ResponseBody
  904. @RequestMapping("/markRefund/{orderId}")
  905. public ResultMsg markRefund(HttpServletRequest request,
  906. @PathVariable("orderId") String orderId) throws Exception {
  907. ResultMsg msg = new ResultMsg();
  908. //查询该订单的状态
  909. Order order = adminOrderService.selectOrderStatusByOrderId(orderId);
  910. if (order == null) {
  911. msg.setResultCode(ResultInfo.ERRORCODE);
  912. msg.setStatus(false);
  913. msg.setMessage("该订单不存在,请重新操作!");
  914. return msg;
  915. }
  916. //4:已退款,8:订单退货,订单关闭
  917. if (order.getSalesStatus() != 4 && order.getSalesStatus() != 8) {
  918. msg.setResultCode(ResultInfo.ERRORCODE);
  919. msg.setStatus(false);
  920. msg.setMessage("该订单不支持标记已退款!");
  921. return msg;
  922. }
  923. if (order.getSalesIsRfund() != null && order.getSalesIsRfund() == 2) {
  924. msg.setResultCode(ResultInfo.ERRORCODE);
  925. msg.setStatus(false);
  926. msg.setMessage("该订单已标记退款,不能重复标记!");
  927. return msg;
  928. }
  929. Order orderInfo = new Order();
  930. orderInfo.setSalesOrderid(orderId);
  931. orderInfo.setSalesIsRfund(2);
  932. //修改订单退款状态
  933. int num = adminOrderService.updateOrderRfund(orderInfo);
  934. if (num > 0) {
  935. msg.setResultCode(ResultInfo.SUCCESSCODE);
  936. msg.setStatus(true);
  937. } else {
  938. msg.setResultCode(ResultInfo.ERRORCODE);
  939. msg.setStatus(false);
  940. msg.setMessage("标记退款失败,请重新标记!");
  941. }
  942. return msg;
  943. }
  944. /**
  945. * 订单备注
  946. *
  947. * @throws IOException
  948. */
  949. @RequestMapping(value = "/remark/{id}", produces = {"application/json;charset=UTF-8"})
  950. @ResponseBody
  951. public String orderRemark(OrderActionDto actionDto, @PathVariable("id") String orderId, HttpServletResponse response) throws IOException {
  952. String remark = "";
  953. // 订单备注
  954. if (actionDto.getRemarkColor() == null) {
  955. actionDto.setRemarkColor(1);
  956. }
  957. if (actionDto.getRemark() == null || actionDto.getRemark().isEmpty()) {
  958. return "{\"status\":\"false\",\"info\":\"备注信息不能为空!\"}";
  959. }
  960. if (actionDto.getRemark().length() > 100) {
  961. return "{'\"status\":\"false\",\"info\":\"备注信息不能超过100个字符!\"}";
  962. }
  963. //查询该订单的状态
  964. Order order = adminOrderService.selectOrderStatusByOrderId(orderId);
  965. if (null == order) {
  966. return "{\"status\":true,\"info\":\"该订单不存在!\"}";
  967. }
  968. if (!"8".equals(order.getSalesStatus().toString())) {
  969. remark = actionDto.getRemark();
  970. }
  971. // update到数据库
  972. if (adminOrderService.updateOrderAdminRemarkByOrderId(remark, orderId, actionDto.getRemarkColor())) {
  973. return "{\"status\":true,\"info\":\"备注成功!\"}";
  974. } else {
  975. return "{\"status\":\"false\",\"info\":\"备注失败,请稍后重试!\"}";
  976. }
  977. }
  978. /**
  979. * 查询待发货事项、申请退款订单、申请退货订单、申请换货订单数量
  980. */
  981. @ResponseBody
  982. @RequestMapping(value = "/selectTodo")
  983. public ResultMsg selectTodo(HttpServletRequest request){
  984. ResultMsg msg = new ResultMsg();
  985. //查询待发货事项、申请退款订单、申请退货订单、申请换货订单 的数量
  986. NumberBacklogDto numberBacklogDto = adminOrderService.selectNumberBacklog();
  987. msg.setResultCode(ResultInfo.SUCCESSCODE);
  988. msg.setStatus(true);
  989. msg.setData(numberBacklogDto);
  990. return msg;
  991. }
  992. /**
  993. * 下载导出订单
  994. */
  995. @ResponseBody
  996. @RequestMapping(value = "/download_order")
  997. public ModelAndView downloadOrder(HttpServletRequest request,Order order){
  998. List<Order> orderList = adminOrderService.getOrderListToExcel(order);
  999. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1000. // 准备model
  1001. Map<String, Object> model = new HashMap<String, Object>();
  1002. model.put("fileName", "上朵销售数据"); // 下载文件名称
  1003. // 标题
  1004. List<String> titles = new ArrayList<String>();
  1005. titles.add("时间");
  1006. titles.add("产品类型");
  1007. titles.add("产品名称");
  1008. titles.add("产品颜色");
  1009. titles.add("数量");
  1010. titles.add("订单金额");
  1011. titles.add("支付金额");
  1012. titles.add("订单状态");
  1013. titles.add("优惠券使用");
  1014. titles.add("订单编号");
  1015. titles.add("收货人");
  1016. titles.add("昵称");
  1017. titles.add("手机号码");
  1018. titles.add("地址");
  1019. titles.add("邮寄方式");
  1020. titles.add("渠道层级");
  1021. titles.add("渠道名称");
  1022. model.put("titles", titles);
  1023. List<List<Object>> countexts = new ArrayList<List<Object>>();
  1024. for (Order info : orderList) {
  1025. Integer num=0;
  1026. for (int i=0; i<info.getOrderItemList().size(); i++) {
  1027. num += info.getOrderItemList().get(i).getItemNum();
  1028. }
  1029. Integer offerAmount = info.getSalesAmount() - info.getSalesYetAmount(); //优惠金额
  1030. Integer oneOfferAmount = offerAmount/num; //单个优惠金额
  1031. for (OrderItem item:info.getOrderItemList()) {
  1032. List<Object> row = new ArrayList<Object>();
  1033. row.add(info.getSalesCreateDate() == null ? "":formatter.format(info.getSalesCreateDate()));
  1034. row.add(item.getProductTypeName() == null ? "":item.getProductTypeName());
  1035. row.add(item.getItemProductName() == null ? "":item.getItemProductName());
  1036. row.add(item.getProductColor() == null ? "":item.getProductColor());
  1037. row.add(item.getItemNum() == null ? "":item.getItemNum());
  1038. row.add(item.getItemTotal() == null ? "":item.getItemTotal()/100); //订单金额
  1039. if(info.getCouponId() != null){ //支付金额
  1040. row.add((item.getItemTotal() - (oneOfferAmount*item.getItemNum()))/100);
  1041. }else{
  1042. row.add(item.getItemTotal() == null ? "":item.getItemTotal()/100);
  1043. }
  1044. String statusString = "";
  1045. switch (info.getSalesStatus()){
  1046. case 0:
  1047. statusString = "取消订单";
  1048. break;
  1049. case 1:
  1050. statusString = "待支付";
  1051. break;
  1052. case 2:
  1053. statusString = "已支付、待发货";
  1054. break;
  1055. case 3:
  1056. statusString = "退款申请中";
  1057. break;
  1058. case 4:
  1059. statusString = "已退款";
  1060. break;
  1061. case 5:
  1062. statusString = "已发货";
  1063. break;
  1064. case 6:
  1065. statusString = "申请退货中";
  1066. break;
  1067. case 7:
  1068. statusString = "退货中";
  1069. break;
  1070. case 8:
  1071. statusString = "订单退货";
  1072. break;
  1073. case 9:
  1074. statusString = "换货中";
  1075. break;
  1076. case 10:
  1077. statusString = "换货完成";
  1078. break;
  1079. case 11:
  1080. statusString = "申请换货中";
  1081. break;
  1082. case 12:
  1083. statusString = "订单完成";
  1084. break;
  1085. }
  1086. row.add(statusString); //订单状态
  1087. if(info.getCouponId() != null){
  1088. row.add("是");
  1089. }else{
  1090. row.add("否");
  1091. }
  1092. row.add(info.getSalesOrderid() == null ? "":info.getSalesOrderid());
  1093. row.add(info.getSalesAddressName() == null ? "":info.getSalesAddressName());
  1094. row.add(info.getUserNickname() == null ? "":info.getUserNickname());
  1095. row.add(info.getSalesAddressTel() == null ? "":info.getSalesAddressTel());
  1096. row.add(info.getSalesAddressInfo() == null ? "":info.getSalesAddressInfo());
  1097. if(info.getSalesTransportationType() == 2){ // 1:邮寄 2:自提
  1098. row.add("自提");
  1099. }else{
  1100. row.add("邮寄");
  1101. }
  1102. if(info.getSalesChannelType() != null) { //1:主渠道 2:子渠道
  1103. if (info.getSalesChannelType() == 1) {
  1104. row.add("主渠道");
  1105. }else if (info.getSalesChannelType() == 2){
  1106. row.add("子渠道");
  1107. }else{
  1108. row.add("");
  1109. }
  1110. }else{
  1111. row.add("");
  1112. }
  1113. row.add(info.getSalesChannelName() == null ? "":info.getSalesChannelName());
  1114. countexts.add(row);
  1115. }
  1116. }
  1117. model.put("varList", countexts);
  1118. ObjectExcelView erv = new ObjectExcelView();
  1119. SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
  1120. String name = "";
  1121. if(order.getBeginDate() != null){
  1122. name += sd.format(order.getBeginDate());
  1123. }else{
  1124. name += "2018-01-01";
  1125. }
  1126. name += "-";
  1127. if( order.getEndDate() != null){
  1128. name += sd.format(order.getEndDate());
  1129. }else{
  1130. name += sd.format(new Date());
  1131. }
  1132. erv.setName(name);
  1133. ModelAndView mv = new ModelAndView(erv, model);
  1134. return mv;
  1135. }
  1136. /**
  1137. * 下载导出订单
  1138. */
  1139. @ResponseBody
  1140. @RequestMapping(value = "/download_order2")
  1141. public ModelAndView downloadOrder2(HttpServletRequest request,Order order){
  1142. List<Order> orderList = adminOrderService.getPaySuccessOrderByOrderId(order);
  1143. for (Order or: orderList) {
  1144. List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
  1145. or.setOrderItemList(orderItemList);
  1146. }
  1147. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1148. // 准备model
  1149. Map<String, Object> model = new HashMap<String, Object>();
  1150. model.put("fileName", "上朵销售数据"); // 下载文件名称
  1151. // 标题
  1152. List<String> titles = new ArrayList<String>();
  1153. titles.add("订单编号");
  1154. titles.add("日期");
  1155. titles.add("姓名");
  1156. titles.add("电话号码");
  1157. titles.add("地址");
  1158. titles.add("产品");
  1159. titles.add("颜色");
  1160. titles.add("数量");
  1161. titles.add("支付金额");
  1162. titles.add("订单状态");
  1163. titles.add("快递单号");
  1164. titles.add("物流公司");
  1165. model.put("titles", titles);
  1166. List<List<Object>> countexts = new ArrayList<List<Object>>();
  1167. for (Order info : orderList) {
  1168. Integer salesYetAmount = info.getSalesYetAmount(); //付款金额
  1169. for (int i=0; i<info.getOrderItemList().size(); i++) {
  1170. OrderItem item = info.getOrderItemList().get(i);
  1171. List<Object> row = new ArrayList<Object>();
  1172. row.add(info.getSalesOrderid() == null ? "":info.getSalesOrderid());
  1173. row.add(info.getSalesCreateDate() == null ? "":formatter.format(info.getSalesCreateDate()));
  1174. row.add(info.getSalesAddressName() == null ? "":info.getSalesAddressName());
  1175. row.add(info.getSalesAddressTel() == null ? "":info.getSalesAddressTel());
  1176. row.add(info.getSalesAddressInfo() == null ? "":info.getSalesAddressInfo());
  1177. row.add(item.getItemProductName() == null ? "":item.getItemProductName());
  1178. row.add(item.getProductColor() == null ? "":item.getProductColor());
  1179. row.add(item.getItemNum() == null ? "":item.getItemNum());
  1180. if(salesYetAmount >= item.getItemTotal()){
  1181. salesYetAmount = salesYetAmount - item.getItemTotal();
  1182. row.add(item.getItemTotal()/100); //订单金额
  1183. }else{
  1184. row.add(salesYetAmount/100); //订单金额
  1185. salesYetAmount = 0;
  1186. }
  1187. String statusString = "";
  1188. switch (info.getSalesStatus()){
  1189. case 0:
  1190. statusString = "取消订单";
  1191. break;
  1192. case 1:
  1193. statusString = "待支付";
  1194. break;
  1195. case 2:
  1196. statusString = "已支付、待发货";
  1197. break;
  1198. case 3:
  1199. statusString = "退款申请中";
  1200. break;
  1201. case 4:
  1202. statusString = "已退款";
  1203. break;
  1204. case 5:
  1205. statusString = "已发货";
  1206. break;
  1207. case 6:
  1208. statusString = "申请退货中";
  1209. break;
  1210. case 7:
  1211. statusString = "退货中";
  1212. break;
  1213. case 8:
  1214. statusString = "订单退货";
  1215. break;
  1216. case 9:
  1217. statusString = "换货中";
  1218. break;
  1219. case 10:
  1220. statusString = "换货完成";
  1221. break;
  1222. case 11:
  1223. statusString = "申请换货中";
  1224. break;
  1225. case 12:
  1226. statusString = "订单完成";
  1227. break;
  1228. }
  1229. row.add(statusString); //订单状态
  1230. row.add(info.getSalesPostFirm() == null ? "":info.getSalesPostFirm());
  1231. row.add(info.getSalesPostNum() == null ? "":info.getSalesPostNum());
  1232. countexts.add(row);
  1233. }
  1234. }
  1235. model.put("varList", countexts);
  1236. ObjectExcelView erv = new ObjectExcelView();
  1237. ModelAndView mv = new ModelAndView(erv, model);
  1238. return mv;
  1239. }
  1240. }