package com.iamberry.rst.controllers.cm; import com.iamberry.rst.core.cm.SalesOrder; import com.iamberry.rst.core.cm.SalesOrderItem; import com.iamberry.rst.core.page.PagedResult; import com.iamberry.rst.faces.cm.SalesOrderService; import com.iamberry.rst.faces.order.EfastOrderService; import com.iamberry.rst.utils.StitchAttrUtil; import com.iamberry.wechat.tools.ResponseJson; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.*; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; /** * 订单信息 * Created by liuzhiwei on 2017/12/4. */ @Controller @RequestMapping("admin/salesOrder") public class AdminSalesOrderController { @Autowired private SalesOrderService salesOrderService; @Autowired private EfastOrderService efastOrderService; private Object lock = new Object(); /** * 分页查询订单列表信息 * @param request * @param salesOrder * @param pageSize * @param pageNO * @param totalNum * @return * @throws Exception */ @RequestMapping("/list_order_page") @RequiresPermissions("salesOrder:select:salesOrder") public ModelAndView listOrderPage(HttpServletRequest request, SalesOrder salesOrder, @RequestParam(value = "pageSize", defaultValue = "10", required = false) Integer pageSize, @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO, @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum) throws Exception { ModelAndView mv = new ModelAndView("cm/salesOrder/sales_order_list"); //分页获取订单信息 PagedResult pagedResult = salesOrderService.listSalesOrderPage(pageNO, pageSize, salesOrder, totalNum == 0); if (totalNum != 0) { pagedResult.setTotal(totalNum); } salesOrder.setSalesOrderItemList(null); StitchAttrUtil.setModelAndView(salesOrder, mv, "/admin/salesOrder/list_order_page", pagedResult); return mv; } /** * 查询订单详情 * @param request * @return * @throws Exception */ @RequestMapping("/select_sales_order") @RequiresPermissions("salesOrder:select:salesOrder") public ModelAndView selectSalesOrder(HttpServletRequest request) throws Exception { ModelAndView mv = new ModelAndView("cm/salesOrder/sales_order_detail"); String salesId = request.getParameter("salesId"); if (!StringUtils.isNotEmpty(salesId)) { return mv; } SalesOrder order = new SalesOrder(); order.setSalesId(Integer.parseInt(salesId)); //根据id查询订单数据 List orderList = salesOrderService.listSalesOrder(order); if (orderList == null || orderList.size() == 0) { return mv; } order = orderList.get(0); SalesOrderItem item = new SalesOrderItem(); item.setItemOrderId(Integer.parseInt(salesId)); //批量获取订单项信息 List itemList = salesOrderService.listSalesOrderItem(item); order.setSalesOrderItemList(itemList); mv.addObject("order",order); return mv; } /** * 导出订单 * @param request * @param res * @param salesOrder * @throws Exception */ @RequiresPermissions("salesOrder:excel:salesOrder") @RequestMapping("/sales_order_excel") public void salesOrderExcel(HttpServletRequest request,HttpServletResponse res, SalesOrder salesOrder) throws Exception{ //根据id查询订单数据 List orderList = salesOrderService.listOrderExcel(salesOrder); if (orderList == null || orderList.size() == 0) { return; } String[] cells = { "订单号","交易号","销售公司","店铺名称","产品名称", "颜色名称","数量","产品69码","是否支付","是否发货", "订单金额","支付金额","付款方式","邮费","支付时间", "发货时间","收货人姓名","收货人电话","收货地址", "物流公司","物流单号","用户备注" }; //导出订单Excel并下载 exportExcel(request,res,cells,orderList); } /** * 导出订单Excel并下载 * @param request * @param res * @param cells * @param orderList * @throws Exception */ public void exportExcel(HttpServletRequest request,HttpServletResponse res, String[] cells,List orderList) throws Exception { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //创建一个workbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); //在workbook中添加一个sheet,对应Excel中的一个sheet HSSFSheet sheet = wb.createSheet("导出订单"); //在sheet中添加表头第0行,老版本poi对excel行数列数有限制short HSSFRow row = sheet.createRow((int) 0); //创建单元格,设置值表头,设置表头居中 HSSFCellStyle style = wb.createCellStyle(); //居中格式 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置表头 if (cells == null || cells.length == 0) { return; } //循环设置表头 HSSFCell cell = null; for (int i = 0;i < cells.length;i++) { String name = cells[i]; cell = row.createCell(i); cell.setCellValue(name); cell.setCellStyle(style); } for (int i = 0; i < orderList.size(); i++) { row = sheet.createRow((int) i + 1); SalesOrder order = orderList.get(i); String payType = ""; switch (order.getSalesPayType()) { case 1:payType = "微信支付";break; case 2:payType = "现金支付";break; case 3:payType = "已支付定金¥99";break; case 4:payType = "刷卡支付";break; case 5:payType = "支付宝支付";break; } String payStatus = ""; switch (order.getSalesPayStatus()) { case 0:payStatus = "未支付";break; case 2:payStatus = "已支付";break; } String shippingStatus = ""; switch (order.getSalesShippingStatus()) { case 0:shippingStatus = "未发货";break; case 1:shippingStatus = "已发货";break; case 3:shippingStatus = "备货中";break; } //获取快递公司 String postFirm = getPostFirm(order.getSalesPostFirm()); // 创建单元格,设置值 row.createCell(0).setCellValue(order.getSalesOrderId()); row.createCell(1).setCellValue(order.getSalesDealCode()); row.createCell(2).setCellValue(order.getCompanyName()); row.createCell(3).setCellValue(order.getStoreName()); row.createCell(4).setCellValue(order.getItemProductName()); row.createCell(5).setCellValue(order.getItemProductColor()); row.createCell(6).setCellValue(order.getItemNum()); row.createCell(7).setCellValue(order.getItemColorBar()); row.createCell(8).setCellValue(payStatus); row.createCell(9).setCellValue(shippingStatus); row.createCell(10).setCellValue(order.getSalesAmount()/100); row.createCell(11).setCellValue(order.getSalesPayMoney()/100); row.createCell(12).setCellValue(payType); row.createCell(13).setCellValue(order.getSalesShippingFee()); row.createCell(14).setCellValue(order.getSalesPayTime()==null?"":format.format(order.getSalesPayTime())); row.createCell(15).setCellValue(order.getSalesSendTime()==null?"":format.format(order.getSalesSendTime())); row.createCell(16).setCellValue(order.getSalesAddressName()); row.createCell(17).setCellValue(order.getSalesAddressTel()); row.createCell(18).setCellValue(order.getSalesAddressInfo()); row.createCell(19).setCellValue(postFirm); row.createCell(20).setCellValue(order.getSalesPostNum()); row.createCell(21).setCellValue(order.getSalesUserRemark()); } //下载导出订单Excel downloadOrderExcel(res,wb); } /** * 下载导出订单Excel * @param res * @param wb * @throws Exception */ public void downloadOrderExcel(HttpServletResponse res, HSSFWorkbook wb) throws Exception{ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String fileName = format.format(new Date()) + "订单报表"; ByteArrayOutputStream os = new ByteArrayOutputStream(); wb.write(os); byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); // 设置response参数,可以打开下载页面 res.reset(); res.setContentType("application/vnd.ms-excel;charset=utf-8"); res.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1")); ServletOutputStream out = res.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(is); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; // Simple read/write loop. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); } } /** * 获取快递公司 * @param firm * @return */ public String getPostFirm(String firm) { String postFirm = ""; switch (firm) { case "sto":postFirm = "申通快递";break; case "yto":postFirm = "圆通快递";break; case "sf":postFirm = "顺丰快递";break; case "ems":postFirm = "邮政EMS";break; case "zto":postFirm = "中通快递";break; case "zjs":postFirm = "宅急送";break; case "yunda":postFirm = "韵达快递";break; case "cces":postFirm = "cces快递";break; case "pick":postFirm = "上门提货";break; case "htky":postFirm = "汇通快递";break; case "ttkdex":postFirm = "天天快递";break; case "stars":postFirm = "星晨急便";break; case "jd":postFirm = "京东快递";break; case "01":postFirm = "其他";break; case "02":postFirm = "上门送货";break; default:postFirm = "申通快递";break; } return postFirm; } /** * 同步百胜订单 * * @return * @throws Exception */ @ResponseBody @RequiresPermissions("salesOrder:sync:order") @RequestMapping("/sync_efast_order") public ResponseJson syncEfastOrder(HttpServletRequest request) throws Exception { String salesDealCode = request.getParameter("salesDealCode"); if (!StringUtils.isNotEmpty(salesDealCode)) { return new ResponseJson(500, "订单编号不能为空,请重新输入!", 500); } //根据时间排序查询订单信息 SalesOrder salesOrder = new SalesOrder(); salesOrder.setSalesOrderId(salesDealCode); int num = salesOrderService.getOrderInfoCount(salesOrder); if (num > 0) { return new ResponseJson(500, "该订单已存在,无需同步!", 500); } synchronized (lock) { //获取订单详情 JSONObject orderInfo = efastOrderService.getOrderFormEfast(salesDealCode); //添加订单和订单项 boolean flag = salesOrderService.syncEfastOrder(orderInfo); if (flag) { return new ResponseJson(200, "同步成功!", 200); } else { return new ResponseJson(500, "没有查到该订单信息!", 500); } } } }