package com.iamberry.rst.controllers.scm; import com.alibaba.fastjson.JSONObject; import com.iamberry.rst.core.cm.StoreShip; import com.iamberry.rst.core.order.EOrderRequestData; import com.iamberry.rst.core.order.ProductColor; import com.iamberry.rst.core.page.PagedResult; import com.iamberry.rst.core.scm.ScmOrderInfo; import com.iamberry.rst.core.scm.ScmOrderItem; import com.iamberry.rst.core.sys.Admin; import com.iamberry.rst.core.tools.LogisticsInfo; import com.iamberry.rst.util.GenerateKeyUtil; import com.iamberry.rst.utils.OrderUtils; import com.iamberry.rst.faces.cm.StoreShipService; import com.iamberry.rst.faces.order.LogisticsInfoService; import com.iamberry.rst.faces.product.ProductService; import com.iamberry.rst.faces.scm.ScmOrderInfoService; import com.iamberry.rst.faces.scm.ScmOrderItemService; import com.iamberry.rst.utils.*; import com.iamberry.wechat.tools.AddrUtil; import com.iamberry.wechat.tools.DateTimeUtil; import com.iamberry.wechat.tools.ResponseJson; import com.iamberry.wechat.tools.UUIDGenerator; import net.sf.json.JSONArray; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.multipart.commons.CommonsMultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.*; /** * 上朵定制-订单列表 */ @Controller @RequestMapping("/admin/scm_order") public class AdminScmOrderController { private static final Logger LOGGER = LoggerFactory.getLogger(AdminScmOrderController.class); @Autowired private ScmOrderInfoService scmOrderInfoService; @Autowired private ScmOrderItemService scmOrderItemService; @Autowired private LogisticsInfoService logisticsInfoService; @Autowired private ProductService productService; @Autowired private GenerateKeyUtil generateKeyUtil; @Autowired private StoreShipService storeShipService; private static final String pathHead = "D"; /** * 订单列表 * @param request * @return */ @RequiresPermissions("scmOrder:order:list") @RequestMapping("/order_list") public ModelAndView orderList(HttpServletRequest request, ScmOrderItem scmOrderItem, @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) { ModelAndView mv = new ModelAndView("scm/scm_order_list"); PagedResult pagedResult = scmOrderItemService.getScmOrderItemListPage(pageNO, pageSize, scmOrderItem, totalNum == 0); if (totalNum != 0){ pagedResult.setTotal(totalNum); } StitchAttrUtil.getSa() .addDatePro("yyyy-MM-dd HH:mm:ss","startDate","endDate") .setModelAndView(scmOrderItem, mv, "/admin/scm_order/order_list", pagedResult); List logisticsInfoList = logisticsInfoService.getLogisticsInfoList(new LogisticsInfo()); mv.addObject("logisticsInfoList",logisticsInfoList); return mv; } /** * 添加订单 * @param request * @return */ @RequiresPermissions("scmOrder:order:add") @RequestMapping("/to_add_order") public ModelAndView toAddOrder(HttpServletRequest request) { ModelAndView mv = new ModelAndView("scm/scm_add_order"); List logisticsInfoList = logisticsInfoService.getLogisticsInfoList(new LogisticsInfo()); mv.addObject("logisticsInfoList",logisticsInfoList); return mv; } /** * 添加订单 * @param request * @param scmOrderInfo * @param orderItemString * @return * @throws Exception */ @ResponseBody @RequestMapping("/add_order") @RequiresPermissions("scmOrder:order:add") public ResponseJson addSalesOrder(HttpServletRequest request,ScmOrderInfo scmOrderInfo,String orderItemString) throws Exception { ResponseJson rj = new ResponseJson(); if(scmOrderInfo.getOrderAddressTel() != null && !"".equals(scmOrderInfo.getOrderAddressTel())){ scmOrderInfo.setOrderAddressTel(scmOrderInfo.getOrderAddressTel().trim()); } Admin admin = AdminUtils.getLoginAdmin(); JSONArray jsonArray = JSONArray.fromObject(orderItemString); List salesOrderItemList = (List) JSONArray.toCollection(jsonArray, ScmOrderItem.class); for (ScmOrderItem scmOrderItem:salesOrderItemList) { if(scmOrderItem.getOrderItemNum() > 0 && scmOrderItem.getOrderItemColorId() > 0){ ProductColor productColor = productService.getProduceColor(scmOrderItem.getOrderItemColorId()); if(productColor == null){ return new ResponseJson(500, "商品不存在", 500); } scmOrderItem.setOrderItemProductId(productColor.getColorProductId()); ////产品id scmOrderItem.setOrderItemProductType(productColor.getProductType()); scmOrderItem.setOrderItemProductName(productColor.getProductName()); scmOrderItem.setOrderItemProductPic(productColor.getColorPicture()); scmOrderItem.setOrderItemColorName(productColor.getColorName()); scmOrderItem.setOrderItemColorBar(productColor.getColorBar()); ///产品SKU码(百胜) scmOrderItem.setOrderItemProductPrice(productColor.getColorPrice()); scmOrderItem.setOrderItemProductDiscount(productColor.getColorDiscount()); scmOrderItem.setOrderItemCreateTime(new Date()); }else{ return new ResponseJson(500, "添加商品错误", 500); } } String orderMadeId = generateKeyUtil.getScmOrderMadeId(); //获取生产编号 String realPath = request.getSession().getServletContext().getRealPath("/common/scmOrder/qrCode/"+orderMadeId+"/"); realPath = realPath+"/"; String name = orderMadeId+".png"; QrCodeUtil.madeQrCode(realPath,name,orderMadeId,200); String url = "common/scmOrder/qrCode/"+orderMadeId+"/"+orderMadeId+".png"; scmOrderInfo.setOrderMadeId(orderMadeId); scmOrderInfo.setOrderShippingStatus(0); scmOrderInfo.setOrderStatus(1); scmOrderInfo.setOrderAdminId(admin.getAdminId()); scmOrderInfo.setOrderMadeIdPath(url); //二维码地址 scmOrderInfo.setScmOrderItemList(salesOrderItemList); Integer bl = 0; String errorMsg = ""; try { bl = scmOrderInfoService.save(scmOrderInfo); }catch (Exception e){ errorMsg = e.getMessage(); e.printStackTrace(); return new ResponseJson(500, "添加订单失败,失败原因:"+errorMsg, 500); } if(bl > 0){ rj = new ResponseJson(200, "添加订单成功", 200); rj.addResponseKeyValue("path",realPath); rj.addResponseKeyValue("orderMadeId",orderMadeId); return rj; }else{ return new ResponseJson(500, "添加订单失败,失败原因:"+errorMsg, 500); } } /** * 修改订单页面 * @param request * @return */ @RequiresPermissions("scmOrder:order:update") @RequestMapping("/to_update_order") public ModelAndView toUpdateOrder(HttpServletRequest request,Integer orderId) { ModelAndView mv = new ModelAndView("scm/scm_update_order"); List logisticsInfoList = logisticsInfoService.getLogisticsInfoList(new LogisticsInfo()); mv.addObject("logisticsInfoList",logisticsInfoList); mv.addObject("orderId",orderId); return mv; } /** * 修改订单 * @param request * @param scmOrderInfo * @param orderItemString * @return * @throws Exception */ @ResponseBody @RequestMapping("/update_order") @RequiresPermissions("scmOrder:order:update") public ResponseJson updateOrder(HttpServletRequest request,ScmOrderInfo scmOrderInfo,String orderItemString) throws Exception { ResponseJson rj = new ResponseJson(); if(scmOrderInfo.getOrderAddressTel() != null && !"".equals(scmOrderInfo.getOrderAddressTel())){ scmOrderInfo.setOrderAddressTel(scmOrderInfo.getOrderAddressTel().trim()); } Admin admin = AdminUtils.getLoginAdmin(); JSONArray jsonArray = JSONArray.fromObject(orderItemString); List salesOrderItemList = (List) JSONArray.toCollection(jsonArray, ScmOrderItem.class); for (ScmOrderItem scmOrderItem:salesOrderItemList) { if(scmOrderItem.getOrderItemNum() > 0 && scmOrderItem.getOrderItemColorId() > 0){ ProductColor productColor = productService.getProduceColor(scmOrderItem.getOrderItemColorId()); if(productColor == null){ return new ResponseJson(500, "商品不存在或商品错误", 500); } scmOrderItem.setOrderItemProductId(productColor.getColorProductId()); ////产品id scmOrderItem.setOrderItemProductType(productColor.getProductType()); scmOrderItem.setOrderItemProductName(productColor.getProductName()); scmOrderItem.setOrderItemProductPic(productColor.getColorPicture()); scmOrderItem.setOrderItemColorName(productColor.getColorName()); scmOrderItem.setOrderItemColorBar(productColor.getColorBar()); ///产品SKU码(百胜) scmOrderItem.setOrderItemProductPrice(productColor.getColorPrice()); scmOrderItem.setOrderItemProductDiscount(productColor.getColorDiscount()); scmOrderItem.setOrderItemCreateTime(new Date()); }else{ return new ResponseJson(500, "修改商品错误", 500); } } scmOrderInfo.setScmOrderItemList(salesOrderItemList); Integer bl = 0; String errorMsg = ""; try { bl = scmOrderInfoService.update(scmOrderInfo); }catch (Exception e){ errorMsg = e.getMessage(); e.printStackTrace(); return new ResponseJson(500, "修改订单失败,失败原因:"+errorMsg, 500); } if(bl > 0){ rj = new ResponseJson(200, "修改订单成功", 200); // rj.addResponseKeyValue("path",realPath); // rj.addResponseKeyValue("orderMadeId",orderMadeId); return rj; }else{ return new ResponseJson(500, "修改订单失败,失败原因:"+errorMsg, 500); } } /** * 删除订单 * @param request * @return * @throws Exception */ @ResponseBody @RequestMapping("/delete_order") @RequiresPermissions("scmOrder:order:delete") public ResponseJson deleteOrder(HttpServletRequest request,Integer orderId) throws Exception { ResponseJson rj = new ResponseJson(); ScmOrderInfo scmOrderInfo = scmOrderInfoService.getScmOrderInfoById(orderId); if(scmOrderInfo == null ){ return new ResponseJson(500, "删除失败", 500); } Integer flag = scmOrderInfoService.delete(orderId); if(flag > 0){ rj = new ResponseJson(200, "删除订单成功", 200); return rj; }else{ return new ResponseJson(500, "删除失败", 500); } } /** * 查询订单 * @param request * @param scmOrderInfo * @return * @throws Exception */ @ResponseBody @RequestMapping("/get_order") @RequiresPermissions(value = {"scmOrder:order:add", "scmOrder:update:add", "scmOrder:order:list", "scmOrder:order:send"}, logical = Logical.OR) public ResponseJson getOrder(HttpServletRequest request,ScmOrderInfo scmOrderInfo) throws Exception { if(scmOrderInfo.getOrderId() == null && (scmOrderInfo.getOrderMadeId() == null||"".equals(scmOrderInfo.getOrderMadeId())) && (scmOrderInfo.getOrderNo() == null || "".equals(scmOrderInfo.getOrderNo()))){ return new ResponseJson(500, "查询失败", 500); } ResponseJson rj = new ResponseJson(200, "查询成功", 200); List scmOrderInfoList = scmOrderInfoService.getScmOrderInfoList(scmOrderInfo); rj.addResponseKeyValue("scmOrderInfoList",scmOrderInfoList); return rj; } /** * 查询订单 -- 生产编号 * @param request * @param orderMadeId * @return * @throws Exception */ @ResponseBody @RequestMapping("/get_order_madeId") @RequiresPermissions(value = {"scmOrder:order:add", "scmOrder:update:add", "scmOrder:order:list", "scmOrder:order:send"}, logical = Logical.OR) public ResponseJson getOrderNo(HttpServletRequest request,String orderMadeId) throws Exception { ScmOrderInfo scmOrderInfo = scmOrderInfoService.getScmOrderInfoByMadeId(orderMadeId); if(scmOrderInfo == null){ ResponseJson rj = new ResponseJson(500, "查询失败", 500); return rj; } ScmOrderItem scmOrderItem = new ScmOrderItem(); scmOrderItem.setOrderId(scmOrderInfo.getOrderId()); List scmOrderItemList = scmOrderItemService.getScmOrderItemList(scmOrderItem); scmOrderInfo.setScmOrderItemList(scmOrderItemList); ResponseJson rj = new ResponseJson(200, "查询成功", 200); rj.addResponseKeyValue("scmOrderInfo",scmOrderInfo); return rj; } /** * 上传设计文件 * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象 */ @ResponseBody @RequestMapping("/fileUpload") public ResponseJson fileUpload(HttpServletRequest request, @RequestParam("file") CommonsMultipartFile file) throws IOException { ResponseJson responseJson = new ResponseJson(); System.out.println("fileName:"+file.getOriginalFilename()); String realPath = request.getSession().getServletContext().getRealPath("/"); if(file.getOriginalFilename() == null || "".equals(file.getOriginalFilename())){ responseJson.setReturnCode(500); return responseJson; } String oldName = file.getOriginalFilename(); //名称 String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().toString().lastIndexOf(".")); String name = System.currentTimeMillis()+suffix; String path = UploadFileUtils.scmUploadFile(realPath,name,file); String url = request.getScheme()+"://"+ request.getServerName(); responseJson.setReturnCode(200); responseJson.addResponseKeyValue("allImgUrl",url + "/" + path); responseJson.addResponseKeyValue("imgUrl",path); responseJson.addResponseKeyValue("oldName",oldName); responseJson.addResponseKeyValue("name",name); return responseJson; } /** * 订单发货页面 * @param request * @return */ @RequiresPermissions("scmOrder:order:send") @RequestMapping("/order_ship") public ModelAndView orderShip(HttpServletRequest request) { ModelAndView mv = new ModelAndView("scm/scm_send_order"); return mv; } /** * 订单发货 * @param request * @param scmOrderInfo * @return * @throws Exception */ @ResponseBody @RequestMapping("/send_order") @RequiresPermissions(value = {"scmOrder:order:send"}, logical = Logical.OR) public ResponseJson sendOrder(HttpServletRequest request,ScmOrderInfo scmOrderInfo) throws Exception { if(scmOrderInfo.getOrderId() == null && (scmOrderInfo.getOrderMadeId() == null||"".equals(scmOrderInfo.getOrderMadeId())) && (scmOrderInfo.getOrderNo() == null || "".equals(scmOrderInfo.getOrderNo()))){ return new ResponseJson(500, "查询失败", 500); } ResponseJson rj = new ResponseJson(200, "查询成功", 200); List scmOrderInfoList = scmOrderInfoService.getScmOrderInfoList(scmOrderInfo); rj.addResponseKeyValue("scmOrderInfoList",scmOrderInfoList); return rj; } /** * 打单发货 * @param orderMadeId * @param request * @return */ @ResponseBody @RequestMapping("/scm_print_order") @RequiresPermissions("scmOrder:order:send") public ResponseJson printOrder(@RequestParam("orderMadeId") String orderMadeId, HttpServletRequest request) { ScmOrderInfo scmOrderInfo = scmOrderInfoService.getScmOrderInfoByMadeId(orderMadeId); if(scmOrderInfo == null){ LOGGER.error("{} 获取电子面单失败,原因:{}", orderMadeId, "未查询到该订单"); return ResponseJson.getFAILURE().addResponseKeyValue("error","未查询到该订单"); } if(scmOrderInfo.getOrderShippingStatus() != 0){ LOGGER.error("{} 获取电子面单失败,原因:{}", orderMadeId, "该订单已发货"); return ResponseJson.getFAILURE().addResponseKeyValue("error","该订单已发货"); } ScmOrderItem scmOrderItem = new ScmOrderItem(); scmOrderItem.setOrderId(scmOrderInfo.getOrderId()); List scmOrderItemList = scmOrderItemService.getScmOrderItemList(scmOrderItem); scmOrderInfo.setScmOrderItemList(scmOrderItemList); StoreShip storeShip = null; if(scmOrderInfo.getOrderStoreId() != null){ storeShip = storeShipService.getStoreShipByStoreId(scmOrderInfo.getOrderStoreId()); } if(storeShip == null){ LOGGER.error("{} 获取电子面单失败,原因:{}", orderMadeId, "该订单没有绑定店铺或店铺没有发货人信息"); return ResponseJson.getFAILURE().addResponseKeyValue("error","该订单没有绑定店铺或店铺没有发货人信息"); } String post = scmOrderInfo.getOrderPostFirm(); Integer orderId = scmOrderInfo.getOrderId(); /* * 组装数据 */ EOrderRequestData eOrderRequestData = new EOrderRequestData(); eOrderRequestData.ShipperCode = (post); eOrderRequestData.OrderCode = (UUID.randomUUID().toString().replace("-", "")); eOrderRequestData.PayType = (3); eOrderRequestData.ExpType = ("1"); eOrderRequestData.Cost = (0.00); eOrderRequestData.OtherCost = (0.0); eOrderRequestData.Remark = scmOrderInfo.getOrderMadeId() + "-" + scmOrderInfo.getOrderNo(); // 不同的快递公司需要做不同的处理 if (post.equalsIgnoreCase("EMS")) { // 省内EMS eOrderRequestData.CustomerName = ("90000009971400"); eOrderRequestData.CustomerPwd = ("90000009971400"); } else if (post.equalsIgnoreCase("SF")) { // 顺丰 eOrderRequestData.MonthCode = ("7690035114"); } else if (post.equalsIgnoreCase("YZBK")) { // 省外EMS eOrderRequestData.CustomerName = ("90000009971400"); eOrderRequestData.CustomerPwd = ("90000009971400"); eOrderRequestData.ExpType = "9"; eOrderRequestData.ShipperCode = "EMS"; } else if (post.equalsIgnoreCase("STO")) { // 申通快递 eOrderRequestData.CustomerName = ("爱贝源"); /*eOrderRequestData.CustomerPwd = ("Iamberry321.");*/ eOrderRequestData.CustomerPwd = ("Sto20200211"); eOrderRequestData.SendSite = ("广东东莞公司"); } else if (post.equalsIgnoreCase("DBL")) { //德邦 (360特惠件) eOrderRequestData.CustomerName = ("651476854"); eOrderRequestData.ExpType = ("2"); } LOGGER.info( "===orderNO:" + scmOrderInfo.getOrderNo() + "快递方式:" + post+ "订单编号:"+ scmOrderInfo.getOrderId()); // 收件人信息 String[] addrs = scmOrderInfo.getOrderAddressInfo().split(" "); if (addrs.length <= 3) { addrs = scmOrderInfo.getOrderAddressInfo().split("-"); } // 获取收件人邮编 String postCode = AddrUtil.getPostCode(addrs[2]); if (postCode == null || "".equals(postCode)) { postCode = AddrUtil.getPostCode(addrs[1]); } if (postCode == null || "".equals(postCode)) { postCode = AddrUtil.getPostCode(addrs[0]); } Map receiver = new HashMap(); receiver.put("Name", scmOrderInfo.getOrderAddressName()); receiver.put("Tel", scmOrderInfo.getOrderAddressTel()); receiver.put("ProvinceName", AddrUtil.dealProvince(addrs[0])); receiver.put("CityName", addrs[1]); receiver.put("ExpAreaName", addrs[2]); receiver.put("Address", scmOrderInfo.getOrderAddressInfo()); receiver.put("PostCode", postCode); eOrderRequestData.Receiver = (receiver); // 发件人信息 Map sender = new HashMap(); sender.put("Name", storeShip.getStoreShipName()); sender.put("Tel", storeShip.getStoreShipTel()); sender.put("ProvinceName", storeShip.getStoreShipProvince()); sender.put("CityName", storeShip.getStoreShipCity()); sender.put("ExpAreaName", "清溪镇"); sender.put("Address", storeShip.getStoreShipAddress()); sender.put("PostCode", "523660"); eOrderRequestData.Sender = (sender); // 产品信息 List> commodity = new ArrayList<>(); // 整个产品的重量 Double colorIsWeight = 0.00; StringBuilder goodName = new StringBuilder(); int Goodsquantity = 0; for (ScmOrderItem temp : scmOrderItemList) { goodName.append(temp.getProductAbbreviation()) .append("(").append(temp.getColorAbbreviation()).append(")*").append(temp.getOrderItemNum()).append(";"); if(temp.getColorIsWeight() != null){ colorIsWeight += temp.getColorIsWeight(); } Goodsquantity += temp.getOrderItemNum(); } // 20181113增加需求:产品名称后面增加打印订单日期 goodName.append("【D").append(DateTimeUtil.format(new Date(), "MMdd")).append("】"); String uuid = UUIDGenerator.getUUID().substring(0, 8); // 增加产品信息 Map product1 = new HashMap(); product1.put("GoodsName", uuid); product1.put("Goodsquantity", Goodsquantity); // 计算产品重量deliver_statistics product1.put("GoodsWeight", colorIsWeight/1000); commodity.add(product1); eOrderRequestData.Commodity = (commodity); eOrderRequestData.Weight = (colorIsWeight/1000); eOrderRequestData.Quantity = (1); eOrderRequestData.IsReturnPrintTemplate = (1); try { String json = OrderUtils.orderOnlineByJson(eOrderRequestData); JSONObject jsonObject = JSONObject.parseObject(json); boolean flag = jsonObject.getBoolean("Success"); if (flag) { // 替换产品名称 json = json.replace(uuid, goodName.toString()); // 获取电子面单成功 String code = jsonObject.getJSONObject("Order").getString("LogisticCode"); // 订单发货 ScmOrderInfo soi = new ScmOrderInfo(); soi.setOrderPostFirm(eOrderRequestData.ShipperCode); soi.setOrderPostNum(code); soi.setOrderShippingStatus(1); soi.setOrderSendTime(new Date()); soi.setOrderId(orderId); Integer fl = scmOrderInfoService.updateStatus(soi); // 保存HTML String filePath = request.getServletContext().getRealPath("/common/scmOrder/"); File dir = new File(filePath + File.separator + "send_order"); if (!dir.exists()) { dir.mkdir(); } File file = new File(dir.getAbsolutePath() + File.separator + orderMadeId + ".txt"); if (!file.createNewFile()) { return ResponseJson.getFAILURE().addResponseKeyValue("error", "创建文件失败"); } FileWriter fileWriter = null; try { fileWriter = new FileWriter(file, false); fileWriter.write(json); } catch (Exception e) { LOGGER.error("", e); } finally { if (fileWriter != null) { fileWriter.close(); } } } else { // 获取电子面单失败 LOGGER.error("{} 获取电子面单失败,原因:{}", orderId, jsonObject.get("Reason")); } return ResponseJson.getSUCCESS().addResponseKeyValue("json", json); } catch (Exception e) { LOGGER.error("", e); return ResponseJson.getFAILURE().addResponseKeyValue("error", e.getMessage()); } } }