AdminSalesOrderController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. package com.iamberry.rst.controllers.cm;
  2. import com.iamberry.rst.core.cm.SalesOrder;
  3. import com.iamberry.rst.core.cm.SalesOrderItem;
  4. import com.iamberry.rst.core.page.PagedResult;
  5. import com.iamberry.rst.faces.cm.SalesOrderService;
  6. import com.iamberry.rst.faces.order.EfastOrderService;
  7. import com.iamberry.rst.utils.StitchAttrUtil;
  8. import com.iamberry.wechat.tools.ResponseJson;
  9. import net.sf.json.JSONObject;
  10. import org.apache.commons.lang.StringUtils;
  11. import org.apache.poi.hssf.usermodel.*;
  12. import org.apache.shiro.authz.annotation.RequiresPermissions;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Controller;
  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 javax.servlet.ServletOutputStream;
  20. import javax.servlet.http.HttpServletRequest;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.io.*;
  23. import java.text.SimpleDateFormat;
  24. import java.util.Date;
  25. import java.util.List;
  26. /**
  27. * 订单信息
  28. * Created by liuzhiwei on 2017/12/4.
  29. */
  30. @Controller
  31. @RequestMapping("admin/salesOrder")
  32. public class AdminSalesOrderController {
  33. @Autowired
  34. private SalesOrderService salesOrderService;
  35. @Autowired
  36. private EfastOrderService efastOrderService;
  37. private Object lock = new Object();
  38. /**
  39. * 分页查询订单列表信息
  40. * @param request
  41. * @param salesOrder
  42. * @param pageSize
  43. * @param pageNO
  44. * @param totalNum
  45. * @return
  46. * @throws Exception
  47. */
  48. @RequestMapping("/list_order_page")
  49. @RequiresPermissions("salesOrder:select:salesOrder")
  50. public ModelAndView listOrderPage(HttpServletRequest request, SalesOrder salesOrder,
  51. @RequestParam(value = "pageSize", defaultValue = "10", required = false) Integer pageSize,
  52. @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO,
  53. @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum) throws Exception {
  54. ModelAndView mv = new ModelAndView("cm/salesOrder/sales_order_list");
  55. //分页获取订单信息
  56. PagedResult<SalesOrder> pagedResult = salesOrderService.listSalesOrderPage(pageNO, pageSize, salesOrder, totalNum == 0);
  57. if (totalNum != 0) {
  58. pagedResult.setTotal(totalNum);
  59. }
  60. salesOrder.setSalesOrderItemList(null);
  61. StitchAttrUtil.setModelAndView(salesOrder, mv, "/admin/salesOrder/list_order_page", pagedResult);
  62. return mv;
  63. }
  64. /**
  65. * 查询订单详情
  66. * @param request
  67. * @return
  68. * @throws Exception
  69. */
  70. @RequestMapping("/select_sales_order")
  71. @RequiresPermissions("salesOrder:select:salesOrder")
  72. public ModelAndView selectSalesOrder(HttpServletRequest request) throws Exception {
  73. ModelAndView mv = new ModelAndView("cm/salesOrder/sales_order_detail");
  74. String salesId = request.getParameter("salesId");
  75. if (!StringUtils.isNotEmpty(salesId)) {
  76. return mv;
  77. }
  78. SalesOrder order = new SalesOrder();
  79. order.setSalesId(Integer.parseInt(salesId));
  80. //根据id查询订单数据
  81. List<SalesOrder> orderList = salesOrderService.listSalesOrder(order);
  82. if (orderList == null || orderList.size() == 0) {
  83. return mv;
  84. }
  85. order = orderList.get(0);
  86. SalesOrderItem item = new SalesOrderItem();
  87. item.setItemOrderId(Integer.parseInt(salesId));
  88. //批量获取订单项信息
  89. List<SalesOrderItem> itemList = salesOrderService.listSalesOrderItem(item);
  90. order.setSalesOrderItemList(itemList);
  91. mv.addObject("order",order);
  92. return mv;
  93. }
  94. /**
  95. * 导出订单
  96. * @param request
  97. * @param res
  98. * @param salesOrder
  99. * @throws Exception
  100. */
  101. @RequiresPermissions("salesOrder:excel:salesOrder")
  102. @RequestMapping("/sales_order_excel")
  103. public void salesOrderExcel(HttpServletRequest request,HttpServletResponse res,
  104. SalesOrder salesOrder) throws Exception{
  105. //根据id查询订单数据
  106. List<SalesOrder> orderList = salesOrderService.listOrderExcel(salesOrder);
  107. if (orderList == null || orderList.size() == 0) {
  108. return;
  109. }
  110. String[] cells = {
  111. "订单号","交易号","销售公司","店铺名称","产品名称",
  112. "颜色名称","数量","产品69码","是否支付","是否发货",
  113. "订单金额","支付金额","付款方式","邮费","支付时间",
  114. "发货时间","收货人姓名","收货人电话","收货地址",
  115. "物流公司","物流单号","用户备注"
  116. };
  117. //导出订单Excel并下载
  118. exportExcel(request,res,cells,orderList);
  119. }
  120. /**
  121. * 导出订单Excel并下载
  122. * @param request
  123. * @param res
  124. * @param cells
  125. * @param orderList
  126. * @throws Exception
  127. */
  128. public void exportExcel(HttpServletRequest request,HttpServletResponse res,
  129. String[] cells,List<SalesOrder> orderList) throws Exception {
  130. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  131. //创建一个workbook,对应一个Excel文件
  132. HSSFWorkbook wb = new HSSFWorkbook();
  133. //在workbook中添加一个sheet,对应Excel中的一个sheet
  134. HSSFSheet sheet = wb.createSheet("导出订单");
  135. //在sheet中添加表头第0行,老版本poi对excel行数列数有限制short
  136. HSSFRow row = sheet.createRow((int) 0);
  137. //创建单元格,设置值表头,设置表头居中
  138. HSSFCellStyle style = wb.createCellStyle();
  139. //居中格式
  140. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  141. //设置表头
  142. if (cells == null || cells.length == 0) {
  143. return;
  144. }
  145. //循环设置表头
  146. HSSFCell cell = null;
  147. for (int i = 0;i < cells.length;i++) {
  148. String name = cells[i];
  149. cell = row.createCell(i);
  150. cell.setCellValue(name);
  151. cell.setCellStyle(style);
  152. }
  153. for (int i = 0; i < orderList.size(); i++) {
  154. row = sheet.createRow((int) i + 1);
  155. SalesOrder order = orderList.get(i);
  156. String payType = "";
  157. switch (order.getSalesPayType()) {
  158. case 1:payType = "微信支付";break;
  159. case 2:payType = "现金支付";break;
  160. case 3:payType = "已支付定金¥99";break;
  161. case 4:payType = "刷卡支付";break;
  162. case 5:payType = "支付宝支付";break;
  163. }
  164. String payStatus = "";
  165. switch (order.getSalesPayStatus()) {
  166. case 0:payStatus = "未支付";break;
  167. case 2:payStatus = "已支付";break;
  168. }
  169. String shippingStatus = "";
  170. switch (order.getSalesShippingStatus()) {
  171. case 0:shippingStatus = "未发货";break;
  172. case 1:shippingStatus = "已发货";break;
  173. case 3:shippingStatus = "备货中";break;
  174. }
  175. //获取快递公司
  176. String postFirm = getPostFirm(order.getSalesPostFirm());
  177. // 创建单元格,设置值
  178. row.createCell(0).setCellValue(order.getSalesOrderId());
  179. row.createCell(1).setCellValue(order.getSalesDealCode());
  180. row.createCell(2).setCellValue(order.getCompanyName());
  181. row.createCell(3).setCellValue(order.getStoreName());
  182. row.createCell(4).setCellValue(order.getItemProductName());
  183. row.createCell(5).setCellValue(order.getItemProductColor());
  184. row.createCell(6).setCellValue(order.getItemNum());
  185. row.createCell(7).setCellValue(order.getItemColorBar());
  186. row.createCell(8).setCellValue(payStatus);
  187. row.createCell(9).setCellValue(shippingStatus);
  188. row.createCell(10).setCellValue(order.getSalesAmount()/100);
  189. row.createCell(11).setCellValue(order.getSalesPayMoney()/100);
  190. row.createCell(12).setCellValue(payType);
  191. row.createCell(13).setCellValue(order.getSalesShippingFee());
  192. row.createCell(14).setCellValue(order.getSalesPayTime()==null?"":format.format(order.getSalesPayTime()));
  193. row.createCell(15).setCellValue(order.getSalesSendTime()==null?"":format.format(order.getSalesSendTime()));
  194. row.createCell(16).setCellValue(order.getSalesAddressName());
  195. row.createCell(17).setCellValue(order.getSalesAddressTel());
  196. row.createCell(18).setCellValue(order.getSalesAddressInfo());
  197. row.createCell(19).setCellValue(postFirm);
  198. row.createCell(20).setCellValue(order.getSalesPostNum());
  199. row.createCell(21).setCellValue(order.getSalesUserRemark());
  200. }
  201. //下载导出订单Excel
  202. downloadOrderExcel(res,wb);
  203. }
  204. /**
  205. * 下载导出订单Excel
  206. * @param res
  207. * @param wb
  208. * @throws Exception
  209. */
  210. public void downloadOrderExcel(HttpServletResponse res, HSSFWorkbook wb) throws Exception{
  211. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  212. String fileName = format.format(new Date()) + "订单报表";
  213. ByteArrayOutputStream os = new ByteArrayOutputStream();
  214. wb.write(os);
  215. byte[] content = os.toByteArray();
  216. InputStream is = new ByteArrayInputStream(content);
  217. // 设置response参数,可以打开下载页面
  218. res.reset();
  219. res.setContentType("application/vnd.ms-excel;charset=utf-8");
  220. res.setHeader("Content-Disposition", "attachment;filename="
  221. + new String((fileName + ".xls").getBytes(), "iso-8859-1"));
  222. ServletOutputStream out = res.getOutputStream();
  223. BufferedInputStream bis = null;
  224. BufferedOutputStream bos = null;
  225. try {
  226. bis = new BufferedInputStream(is);
  227. bos = new BufferedOutputStream(out);
  228. byte[] buff = new byte[2048];
  229. int bytesRead;
  230. // Simple read/write loop.
  231. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
  232. bos.write(buff, 0, bytesRead);
  233. }
  234. } catch (Exception e) {
  235. // TODO: handle exception
  236. e.printStackTrace();
  237. } finally {
  238. if (bis != null)
  239. bis.close();
  240. if (bos != null)
  241. bos.close();
  242. }
  243. }
  244. /**
  245. * 获取快递公司
  246. * @param firm
  247. * @return
  248. */
  249. public String getPostFirm(String firm) {
  250. String postFirm = "";
  251. switch (firm) {
  252. case "sto":postFirm = "申通快递";break;
  253. case "yto":postFirm = "圆通快递";break;
  254. case "sf":postFirm = "顺丰快递";break;
  255. case "ems":postFirm = "邮政EMS";break;
  256. case "zto":postFirm = "中通快递";break;
  257. case "zjs":postFirm = "宅急送";break;
  258. case "yunda":postFirm = "韵达快递";break;
  259. case "cces":postFirm = "cces快递";break;
  260. case "pick":postFirm = "上门提货";break;
  261. case "htky":postFirm = "汇通快递";break;
  262. case "ttkdex":postFirm = "天天快递";break;
  263. case "stars":postFirm = "星晨急便";break;
  264. case "jd":postFirm = "京东快递";break;
  265. case "01":postFirm = "其他";break;
  266. case "02":postFirm = "上门送货";break;
  267. default:postFirm = "申通快递";break;
  268. }
  269. return postFirm;
  270. }
  271. /**
  272. * 同步百胜订单
  273. *
  274. * @return
  275. * @throws Exception
  276. */
  277. @ResponseBody
  278. @RequiresPermissions("salesOrder:sync:order")
  279. @RequestMapping("/sync_efast_order")
  280. public ResponseJson syncEfastOrder(HttpServletRequest request) throws Exception {
  281. String salesDealCode = request.getParameter("salesDealCode");
  282. if (!StringUtils.isNotEmpty(salesDealCode)) {
  283. return new ResponseJson(500, "订单编号不能为空,请重新输入!", 500);
  284. }
  285. //根据时间排序查询订单信息
  286. SalesOrder salesOrder = new SalesOrder();
  287. salesOrder.setSalesOrderId(salesDealCode);
  288. int num = salesOrderService.getOrderInfoCount(salesOrder);
  289. if (num > 0) {
  290. return new ResponseJson(500, "该订单已存在,无需同步!", 500);
  291. }
  292. synchronized (lock) {
  293. //获取订单详情
  294. JSONObject orderInfo = efastOrderService.getOrderFormEfast(salesDealCode);
  295. //添加订单和订单项
  296. boolean flag = salesOrderService.syncEfastOrder(orderInfo);
  297. if (flag) {
  298. return new ResponseJson(200, "同步成功!", 200);
  299. } else {
  300. return new ResponseJson(500, "没有查到该订单信息!", 500);
  301. }
  302. }
  303. }
  304. }