Browse Source

Merge branch 'master' of http://git.iamberry.com/hexiugang/iamberry-common-parent

wangxiaoming 6 years ago
parent
commit
eeb4ad3a36

+ 17 - 17
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java

@@ -32,10 +32,10 @@ public class SalesOrder implements Serializable {
     private String salesPostNum;            //快递单号
     private String salesPostFirm;           //快递公司
     private String salesAddressInfo;        //详细地址
-    private String salesAddressProvinceName;    //省
-    private String salesAddressCityName;        //市
-    private String salesAddressCountryName;    //区
-    private String salesAddressDesc;    //地址详情
+    private String salesAddressProvinceName;//省
+    private String salesAddressCityName;    //市
+    private String salesAddressCountryName; //区
+    private String salesAddressDesc;        //地址详情
     private String salesAddressTel;         //收件人电话
     private String salesAddressName;        //收件人姓名
     private Integer salesAmount;            //订单总金额
@@ -65,7 +65,7 @@ public class SalesOrder implements Serializable {
     private Integer salesIsLocked;          //是否锁定  0:否1:是
     private Integer salesIsSeparate;        //是否缺货  0:否1:是
     private Integer salesIsDownload;        //是否下载过     1 未下载 2 已下载
-    private Integer salesMainOrderId;//主订单id(拆单用)
+    private Integer salesMainOrderId;       //主订单id(拆单用)
 
     private String companyName;             //销售公司名称
     private String storeName;               //店铺名称
@@ -84,23 +84,23 @@ public class SalesOrder implements Serializable {
     private List<SalesOrderItem> salesOrderItemList = new ArrayList<SalesOrderItem>();
 
     //添加订单项属性,用于导出订单
-    private String itemProductName;     //产品名称
-    private String itemProductColor;    //产品颜色
-    private Integer itemNum;            //产品数量
-    private String itemColorBar;        //产品69码
-    private List<String> listColorBar;  //产品69码集合
+    private String itemProductName;         //产品名称
+    private String itemProductColor;        //产品颜色
+    private Integer itemNum;                //产品数量
+    private String itemColorBar;            //产品69码
+    private List<String> listColorBar;      //产品69码集合
 
-    private String[] salesIds;        //传入mybatis的订单编号
-    private String ids;        //前台传过来的订单编号
+    private String[] salesIds;              //传入mybatis的订单编号
+    private String ids;                     //前台传过来的订单编号
 
     //Efast升级新增字段 2018-6-6
-    private String styleColor;//上传订单结果颜色
+    private String styleColor;              //上传订单结果颜色
 
-    private String salesBatchId;    //批次编号
-    private Date batchCreateTime;    //批次创建时间
+    private String salesBatchId;            //批次编号
+    private Date batchCreateTime;           //批次创建时间
 
-    private Integer salesAddType;   //增加订单方式 1:手动增加 2:Excel导入
-    private Integer salesAdminId;   //录入人id
+    private Integer salesAddType;           //增加订单方式 1:手动增加 2:Excel导入
+    private Integer salesAdminId;           //录入人id
 
     public String getStyleColor() {
         return styleColor;

+ 296 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/EOrderRequestData.java

@@ -0,0 +1,296 @@
+package com.iamberry.rst.core.order;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 献
+ * @company 深圳爱贝源科技有限公司
+ * @date 2018/5/25 18:10
+ * @tel 18271840547
+ * @website www.iamberry.com
+ */
+public class EOrderRequestData implements Serializable {
+
+    // 用户自定义回调信息
+    private String CallBack;
+    // 会员标识
+    private String MemberID;
+    // 电子面单客户账号
+    private String CustomerName;
+    // 电子面单密码
+    private String CustomerPwd;
+    // 收件网点标识
+    private String SendSite;
+    // 快递公司编码
+    private String ShipperCode;
+    // 快递单号
+    private String LogisticCode;
+    // 订单编号
+    private String OrderCode;
+    // 第三方订单编号
+    private String ThrOrderCode;
+    // 月结编码
+    private String MonthCode;
+    // 邮费支付方式:1-现付,2-到付,3-月结,4-第三方支付
+    private Integer PayType;
+    // 快递类型:1-标准快件
+    private String ExpType;
+    // 是否通知快递员上门揽件:0-通知;1-不通知;不填则默认为1
+    private Integer IsNotice;
+    // 寄件费(运费)
+    private Double Cost;
+    // 其他费用
+    private Double OtherCost;
+    // 收件人信息
+    private Map<String, Object> Receiver;
+    // 发件人信息
+    private Map<String, Object> Sender;
+    // 上门取货开始时间
+    private String StartDate;
+    // 上门取货结束时间
+    private String EndDate;
+    // 物品总重(KG)
+    private Double Weight;
+    // 件数
+    private Integer Quantity;
+    // 物品总体积m3
+    private Double Volume;
+    // 备注
+    private String Remark;
+    // 增值服务
+    private Map<String, Object> AddService;
+    // 寄件产品明细
+    private List<Map<String, Object>> Commodity;
+    // 返回电子面单模板:0-不需要;1-需要
+    private Integer IsReturnPrintTemplate;
+    // 是否订阅短信:0-不需要;1-需要
+    private Integer IsSendMessage;
+    // 模板规格(默认的模板无需传值,非默认模板传对应模板尺寸)
+    private String TemplateSize;
+
+    public String getCallBack() {
+        return CallBack;
+    }
+
+    public void setCallBack(String callBack) {
+        CallBack = callBack;
+    }
+
+    public String getMemberID() {
+        return MemberID;
+    }
+
+    public void setMemberID(String memberID) {
+        MemberID = memberID;
+    }
+
+    public String getCustomerName() {
+        return CustomerName;
+    }
+
+    public void setCustomerName(String customerName) {
+        CustomerName = customerName;
+    }
+
+    public String getCustomerPwd() {
+        return CustomerPwd;
+    }
+
+    public void setCustomerPwd(String customerPwd) {
+        CustomerPwd = customerPwd;
+    }
+
+    public String getSendSite() {
+        return SendSite;
+    }
+
+    public void setSendSite(String sendSite) {
+        SendSite = sendSite;
+    }
+
+    public String getShipperCode() {
+        return ShipperCode;
+    }
+
+    public void setShipperCode(String shipperCode) {
+        ShipperCode = shipperCode;
+    }
+
+    public String getLogisticCode() {
+        return LogisticCode;
+    }
+
+    public void setLogisticCode(String logisticCode) {
+        LogisticCode = logisticCode;
+    }
+
+    public String getOrderCode() {
+        return OrderCode;
+    }
+
+    public void setOrderCode(String orderCode) {
+        OrderCode = orderCode;
+    }
+
+    public String getThrOrderCode() {
+        return ThrOrderCode;
+    }
+
+    public void setThrOrderCode(String thrOrderCode) {
+        ThrOrderCode = thrOrderCode;
+    }
+
+    public String getMonthCode() {
+        return MonthCode;
+    }
+
+    public void setMonthCode(String monthCode) {
+        MonthCode = monthCode;
+    }
+
+    public Integer getPayType() {
+        return PayType;
+    }
+
+    public void setPayType(Integer payType) {
+        PayType = payType;
+    }
+
+    public String getExpType() {
+        return ExpType;
+    }
+
+    public void setExpType(String expType) {
+        ExpType = expType;
+    }
+
+    public Integer getIsNotice() {
+        return IsNotice;
+    }
+
+    public void setIsNotice(Integer isNotice) {
+        IsNotice = isNotice;
+    }
+
+    public Double getCost() {
+        return Cost;
+    }
+
+    public void setCost(Double cost) {
+        Cost = cost;
+    }
+
+    public Double getOtherCost() {
+        return OtherCost;
+    }
+
+    public void setOtherCost(Double otherCost) {
+        OtherCost = otherCost;
+    }
+
+    public Map<String, Object> getReceiver() {
+        return Receiver;
+    }
+
+    public void setReceiver(Map<String, Object> receiver) {
+        Receiver = receiver;
+    }
+
+    public Map<String, Object> getSender() {
+        return Sender;
+    }
+
+    public void setSender(Map<String, Object> sender) {
+        Sender = sender;
+    }
+
+    public String getStartDate() {
+        return StartDate;
+    }
+
+    public void setStartDate(String startDate) {
+        StartDate = startDate;
+    }
+
+    public String getEndDate() {
+        return EndDate;
+    }
+
+    public void setEndDate(String endDate) {
+        EndDate = endDate;
+    }
+
+    public Double getWeight() {
+        return Weight;
+    }
+
+    public void setWeight(Double weight) {
+        Weight = weight;
+    }
+
+    public Integer getQuantity() {
+        return Quantity;
+    }
+
+    public void setQuantity(Integer quantity) {
+        Quantity = quantity;
+    }
+
+    public Double getVolume() {
+        return Volume;
+    }
+
+    public void setVolume(Double volume) {
+        Volume = volume;
+    }
+
+    public String getRemark() {
+        return Remark;
+    }
+
+    public void setRemark(String remark) {
+        Remark = remark;
+    }
+
+    public Map<String, Object> getAddService() {
+        return AddService;
+    }
+
+    public void setAddService(Map<String, Object> addService) {
+        AddService = addService;
+    }
+
+    public Integer getIsReturnPrintTemplate() {
+        return IsReturnPrintTemplate;
+    }
+
+    public void setIsReturnPrintTemplate(Integer isReturnPrintTemplate) {
+        IsReturnPrintTemplate = isReturnPrintTemplate;
+    }
+
+    public Integer getIsSendMessage() {
+        return IsSendMessage;
+    }
+
+    public void setIsSendMessage(Integer isSendMessage) {
+        IsSendMessage = isSendMessage;
+    }
+
+    public String getTemplateSize() {
+        return TemplateSize;
+    }
+
+    public void setTemplateSize(String templateSize) {
+        TemplateSize = templateSize;
+    }
+
+    public List<Map<String, Object>> getCommodity() {
+        return Commodity;
+    }
+
+    public void setCommodity(List<Map<String, Object>> commodity) {
+        Commodity = commodity;
+    }
+}

+ 220 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -0,0 +1,220 @@
+package com.iamberry.rst.controllers.order;
+
+import com.alibaba.fastjson.JSONObject;
+import com.iamberry.rst.core.cm.SalesOrder;
+import com.iamberry.rst.core.cm.SalesOrderItem;
+import com.iamberry.rst.core.order.EOrderRequestData;
+import com.iamberry.rst.core.page.PagedResult;
+import com.iamberry.rst.core.tools.LogisticsInfo;
+import com.iamberry.rst.faces.cm.SalesOrderService;
+import com.iamberry.rst.utils.OrderUtils;
+import com.iamberry.rst.utils.StitchAttrUtil;
+import com.iamberry.wechat.tools.ResponseJson;
+import org.apache.poi.hssf.record.cf.IconMultiStateFormatting;
+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.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+import java.util.*;
+
+/**
+ * @author 献
+ * @company 深圳爱贝源科技有限公司
+ * @date 2018/8/23 17:21
+ * @tel 18271840547
+ * @website www.iamberry.com
+ */
+@Controller
+@RequestMapping("/admin/await_send")
+public class AwaitSendController {
+
+    @Autowired
+    private SalesOrderService salesOrderService;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AwaitSendController.class);
+
+    // 仓库查询待发货订单
+    @RequestMapping("/listAwaitSendOrder")
+    @RequiresPermissions("order:listAwaitSendOrder")
+    public ModelAndView listAwaitSendOrder(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) {
+        // 分页获取订单信息
+        PagedResult<SalesOrder> pagedResult = salesOrderService.listSalesOrderPage(pageNO, pageSize, salesOrder,totalNum == 0);
+        if (totalNum != 0) {
+            pagedResult.setTotal(totalNum);
+        }
+        // 查询订单项
+        if (pagedResult != null && pagedResult.getDataList() != null && !pagedResult.getDataList().isEmpty()) {
+            for (SalesOrder temp : pagedResult.getDataList()) {
+                SalesOrderItem item = new SalesOrderItem();
+                item.setItemOrderId(temp.getSalesId());
+                temp.setSalesOrderItemList(salesOrderService.listSalesOrderItem(item));
+            }
+        }
+
+        salesOrder.setSalesOrderItemList(null);
+        ModelAndView mv = new ModelAndView("order/salesOrder/list_wait_send_order");
+        StitchAttrUtil.getSa()
+                .addDatePro("yyyy-MM-dd HH:mm:ss","startDate","endDate")
+                .setModelAndView(salesOrder, mv, "/admin/await_send/listAwaitSendOrder", pagedResult);
+        mv.addObject("req",salesOrder);
+        return mv;
+    }
+
+    // 打单发货页面
+    @RequestMapping("/printOrderUI")
+    @RequiresPermissions("order:listAwaitSendOrder")
+    public ModelAndView printOrderUI(@RequestParam(value = "orderId", required = false) String[] orders) {
+        SalesOrder salesOrder = new SalesOrder();
+        if (orders == null) {
+            salesOrder.setSalesShippingStatus(1);
+        } else {
+            salesOrder.setSalesIds(orders);
+        }
+        PagedResult<SalesOrder> pagedResult = salesOrderService.listSalesOrderPage(1, 1000, salesOrder, false);
+        // 查询订单项
+        if (pagedResult != null && pagedResult.getDataList() != null && !pagedResult.getDataList().isEmpty()) {
+            for (SalesOrder temp : pagedResult.getDataList()) {
+                SalesOrderItem item = new SalesOrderItem();
+                item.setItemOrderId(temp.getSalesId());
+                temp.setSalesOrderItemList(salesOrderService.listSalesOrderItem(item));
+            }
+        }
+        return new ModelAndView("order/salesOrder/print_order").addObject("page", pagedResult).addObject("posts", salesOrderService.getLogisticsInfo(new LogisticsInfo()));
+    }
+
+    // 打单发货
+    @ResponseBody
+    @RequestMapping("/printOrder")
+    @RequiresPermissions("order:listAwaitSendOrder")
+    public ResponseJson printOrder(@RequestParam("post") String post,
+                                   @RequestParam("orderId") String orderId,
+                                   @RequestParam("salesId") Integer salesId,
+                                   HttpServletRequest request) {
+        SalesOrder salesOrderInfo = salesOrderService.getSalesOrderById(salesId);
+
+        /*
+         * 组装数据
+         */
+        EOrderRequestData eOrderRequestData = new EOrderRequestData();
+        eOrderRequestData.setShipperCode(post);
+        eOrderRequestData.setOrderCode(orderId);
+        eOrderRequestData.setPayType(3);
+        eOrderRequestData.setExpType("1");
+        eOrderRequestData.setCost(0.00);
+        eOrderRequestData.setOtherCost(0.0);
+        if (post.equalsIgnoreCase("DBL")) {
+            eOrderRequestData.setCustomerName("testdbl");
+        }
+        // 收件人信息
+        String[] addrs = salesOrderInfo.getSalesAddressInfo().split("-");
+        if (addrs.length <= 3) {
+            addrs = salesOrderInfo.getSalesAddressInfo().split(" ");
+        }
+        Map<String, Object> Receiver = new HashMap<String, Object>();
+        Receiver.put("Name", salesOrderInfo.getSalesAddressName());
+        Receiver.put("Tel", salesOrderInfo.getSalesAddressTel());
+        Receiver.put("ProvinceName", addrs[0]);
+        Receiver.put("CityName", addrs[1]);
+        Receiver.put("Address", salesOrderInfo.getSalesAddressInfo());
+        eOrderRequestData.setReceiver(Receiver);
+        // 发件人信息
+        Map<String, Object> Sender = new HashMap<String, Object>();
+        Sender.put("Name", "爱贝源");
+        Sender.put("Tel", "13112639663");
+        Sender.put("ProvinceName", "广东省");
+        Sender.put("CityName", "东莞市");
+        Sender.put("Address", "东莞清溪三中金龙工业区徐福记对面优尼雅电子科技");
+        eOrderRequestData.setSender(Sender);
+        // 产品信息
+        List<Map<String, Object>> Commodity = new ArrayList<>();
+        SalesOrderItem item = new SalesOrderItem();
+        item.setItemOrderId(salesOrderInfo.getSalesId());
+        List<SalesOrderItem> items = salesOrderService.listSalesOrderItem(item);
+        for (SalesOrderItem temp : items) {
+            Map<String, Object> product1 = new HashMap<String, Object>();
+            product1.put("GoodsName", temp.getItemProductName() + "(" + (temp.getItemProductColor()) + ")");
+            product1.put("GoodsWeight", 10.0);
+            Commodity.add(product1);
+        }
+        eOrderRequestData.setCommodity(Commodity);
+        eOrderRequestData.setWeight(1.0);
+        eOrderRequestData.setQuantity(1);
+        eOrderRequestData.setIsReturnPrintTemplate(1);
+
+        try {
+            String json = OrderUtils.orderOnlineByJson(eOrderRequestData);
+            JSONObject jsonObject = JSONObject.parseObject(json);
+            boolean flag = jsonObject.getBoolean("Success");
+            if (flag) {
+                // 获取电子面单成功
+                String code = jsonObject.getJSONObject("Order").getString("LogisticCode");
+                // 订单发货
+                SalesOrder salesOrder = new SalesOrder();
+                salesOrder.setSalesPostFirm(post);
+                salesOrder.setSalesPostNum(code);
+                salesOrder.setSalesShippingStatus(2);
+                salesOrder.setSalesSendTime(new Date());
+                salesOrder.setSalesId(salesId);
+                salesOrderService.updateSalesOrder(salesOrder);
+                // 保存HTML
+                String filePath = request.getServletContext().getRealPath("/common/");
+                File dir = new File(filePath + File.separator + "send_order");
+                if (!dir.exists()) {
+                    dir.mkdir();
+                }
+                File file = new File(dir.getAbsolutePath() + File.separator + orderId + ".txt");
+                file.createNewFile();
+                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.info("{} 获取电子名单失败,原因{}", orderId, jsonObject.get("Reason"));
+            }
+            return ResponseJson.getSUCCESS().addResponseKeyValue("json", json);
+        } catch (Exception e) {
+            return ResponseJson.getFAILURE().addResponseKeyValue("error", e.getMessage());
+        }
+    }
+
+    // 重新打印发货
+    @ResponseBody
+    @RequestMapping("/rePrintOrder")
+    @RequiresPermissions("order:listAwaitSendOrder")
+    public ResponseJson rePrintOrder(@RequestParam("orderId") String orderId,
+                                     HttpServletRequest request) throws IOException {
+        String filePath = request.getServletContext().getRealPath("/common/send_order");
+        filePath = filePath + File.separator + orderId + ".txt";
+        // 读取文件内容
+        FileReader reader = new FileReader(filePath);
+        StringBuilder stringBuilder = new StringBuilder();
+        char[] chars = new char[1024];
+        int len = 0;
+        while((len = reader.read(chars)) != -1) {
+            stringBuilder.append(new String(chars, 0, len));
+        }
+        reader.close();
+
+        return ResponseJson.getSUCCESS().addResponseKeyValue("json", stringBuilder.toString());
+    }
+
+}

+ 155 - 0
watero-rst-web/src/main/java/com/iamberry/rst/utils/OrderUtils.java

@@ -0,0 +1,155 @@
+package com.iamberry.rst.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.iamberry.rst.core.order.EOrderRequestData;
+import com.iamberry.wechat.tools.HttpClient431Util;
+import com.sun.org.apache.xml.internal.security.utils.Base64;
+
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 献
+ * @company 深圳爱贝源科技有限公司
+ * @date 2018/5/25 17:50
+ * @tel 18271840547
+ * @website www.iamberry.com
+ */
+public class OrderUtils {
+
+    //电商ID
+    private static final String EBusinessID="1343593";
+    //电商加密私钥,快递鸟提供
+    private static final String AppKey="3597c368-9dc0-40b5-9cf2-86d9cb90e38a";
+    // 正式环境地址:http://api.kdniao.cc/api/Eorderservice
+    // 测试环境地址:http://testapi.kdniao.cc:8081/api/EOrderService
+    private static final String ReqURL="http://testapi.kdniao.cc:8081/api/Eorderservice";
+
+    public static void main(String[] args) throws Exception {
+        EOrderRequestData eOrderRequestData = new EOrderRequestData();
+        eOrderRequestData.setShipperCode("SF");
+        eOrderRequestData.setOrderCode("28230283280823");
+        eOrderRequestData.setPayType(1);
+        eOrderRequestData.setExpType("1");
+        eOrderRequestData.setCost(3680.00);
+        eOrderRequestData.setOtherCost(0.0);
+        // 收件人信息
+        Map<String, Object> Receiver = new HashMap<String, Object>();
+        Receiver.put("Name", "何秀刚");
+        Receiver.put("Tel", "18989890909");
+        Receiver.put("ProvinceName", "广东省");
+        Receiver.put("CityName", "深圳市");
+        Receiver.put("Address", "莲花街道深南大道特区报业大厦12B");
+        eOrderRequestData.setReceiver(Receiver);
+        // 发件人信息
+        Map<String, Object> Sender = new HashMap<String, Object>();
+        Sender.put("Name", "何秀刚");
+        Sender.put("Tel", "18778780808");
+        Sender.put("ProvinceName", "广东省");
+        Sender.put("CityName", "深圳市");
+        Sender.put("Address", "莲花街道深南大道特区报业大厦12B");
+        eOrderRequestData.setSender(Sender);
+        // 产品信息
+        List<Map<String, Object>> Commodity = new ArrayList<>();
+        Map<String, Object> product1 = new HashMap<String, Object>();
+        product1.put("GoodsName", "美国WaterO净饮水一体机");
+        Map<String, Object> product2 = new HashMap<String, Object>();
+        product2.put("GoodsName", "爱贝源智能冲奶机M1");
+        Commodity.add(product1);
+        // Commodity.add(product2);
+        eOrderRequestData.setCommodity(Commodity);
+        eOrderRequestData.setWeight(11.9);
+        eOrderRequestData.setQuantity(2);
+        eOrderRequestData.setIsReturnPrintTemplate(1);
+
+        // 执行
+        String json = orderOnlineByJson(eOrderRequestData);
+        System.out.println(json);
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        Object template = jsonObject.get("PrintTemplate");
+        // 写入本地磁盘
+        OutputStream outputStream = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.html");
+        outputStream.write(template.toString().getBytes("UTF-8"));
+        outputStream.flush();
+        outputStream.close();
+    }
+
+    /**
+     * Json方式 电子面单
+     * @throws Exception
+     */
+    public static String orderOnlineByJson(EOrderRequestData orderRequestData) throws Exception {
+        // 生成电子面单的请求数据
+        String requestData = JSONObject.toJSONString(orderRequestData);
+        // 生成系统级请求数据
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
+        params.put("EBusinessID", EBusinessID);
+        params.put("RequestType", "1007");
+        String dataSign=encrypt(requestData, AppKey, "UTF-8");
+        params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
+        params.put("DataType", "2");
+        // 发送请求
+        return HttpClient431Util.doPost(params, ReqURL);
+    }
+    /**
+     * MD5加密
+     * @param str 内容
+     * @param charset 编码方式
+     * @throws Exception
+     */
+    @SuppressWarnings("unused")
+    private static String MD5(String str, String charset) throws Exception {
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        md.update(str.getBytes(charset));
+        byte[] result = md.digest();
+        StringBuilder sb = new StringBuilder(32);
+        for (byte aResult : result) {
+            int val = aResult & 0xff;
+            if (val <= 0xf) {
+                sb.append("0");
+            }
+            sb.append(Integer.toHexString(val));
+        }
+        return sb.toString().toLowerCase();
+    }
+
+    /**
+     * base64编码
+     * @param str 内容
+     * @param charset 编码方式
+     * @throws UnsupportedEncodingException
+     */
+    private static String base64(String str, String charset) throws UnsupportedEncodingException {
+        return Base64.encode(str.getBytes(charset));
+    }
+
+    @SuppressWarnings("unused")
+    private static String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
+        return URLEncoder.encode(str, charset);
+    }
+
+    /**
+     * 电商Sign签名生成
+     * @param content 内容
+     * @param keyValue Appkey
+     * @param charset 编码方式
+     * @throws UnsupportedEncodingException ,Exception
+     * @return DataSign签名
+     */
+    @SuppressWarnings("unused")
+    private static String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception {
+        if (keyValue != null)
+        {
+            return base64(MD5(content + keyValue, charset), charset);
+        }
+        return base64(MD5(content, charset), charset);
+    }
+}

+ 86 - 50
watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/add_customer.ftl

@@ -14,7 +14,7 @@
     <style>
         .tit{position: relative;text-align: left;font-size: 16px;padding-left: 10px;}
         .tit:after{content: '';position: absolute;left: 0;top: 20%;height: 60%;width: 3px;background-color: #32a3d8;}
-        .tit-2{position: relative;text-align: left;font-size: 16px;padding-left: 10px;}
+        .tit-2{position: relative;text-align: left;font-size: 16px;padding-left: 10px;color: #0000FF;}
         .tit-2:after{content: '';position: absolute;left: 0;top: 20%;height: 60%;width: 3px;background-color: #32a3d8;}
         #province select{margin-right:10px; width:100px;height: 31px;-webkit-appearance:none !important;appearance:none;background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;padding-left:3px;padding-right: 25px;}
 
@@ -86,7 +86,7 @@
                 </div>
             </div>
             <div class="row cl">
-                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>跟进客服:</label>
+                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>客服:</label>
                 <div class="formControls col-4 col-sm-4"> <span class="select-box" >
                     <select name="adminId" id="adminId" class="select">
                     </select>
@@ -150,9 +150,8 @@
                     </div>
                 </div>
             </div>
-
             <div class="row cl">
-                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>产品类型:</label>
+                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>咨询产品:</label>
                 <input type="hidden" id="typeCompany" name="typeCompany" value="">
                 <div class="formControls col-10 col-sm-10 skin-minimal produce_type_html" id="produceTypeHtml">
                     <#--<div class="radio-box">
@@ -165,6 +164,13 @@
                     </div>-->
                 </div>
             </div>
+            <div class="row cl">
+                <label class="form-label col-3">
+                    <div class="tit-2">用户信息</div>
+                </label>
+                <div class="formControls col-9">
+                </div>
+            </div>
             <div class="row cl" id="salesChannelsSelect">
                 <input type="hidden" id="companyId" name="companyId" value="" >
                 <input type="hidden" id="storeId" name="storeId" value="" >
@@ -183,7 +189,7 @@
                 </div>
             </div>
             <div class="row cl">
-                <label class="form-label col-1 col-sm-1">户信息:</label>
+                <label class="form-label col-1 col-sm-1">户信息:</label>
                 <div class="formControls col-2 col-sm-2 skin-minimal">
                     <input type="text" class="input-text trim_input" placeholder="微信昵称" id="customerWechatName" name="customerWechatName" value="">
                 </div>
@@ -218,6 +224,13 @@
                     </table>
                 </div>
             </div>
+            <div class="row cl">
+                <label class="form-label col-3">
+                    <div class="tit-2">客诉问题</div>
+                </label>
+                <div class="formControls col-9">
+                </div>
+            </div>
             <div class="row cl" id="twiceSellEnd">
                 <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>二次售后:</label>
                 <div class="formControls col-10 col-sm-10 skin-minimal">
@@ -327,7 +340,7 @@
             </div>
             <div class="row cl">
                 <label class="form-label col-1 col-sm-1">
-                    <div class="tit">处理结果</div>
+                    <div class="tit-2">处理结果</div>
                 </label>
                 <div class="formControls col-10 col-sm-10">
                 </div>
@@ -490,48 +503,6 @@
 
                 </div>
             </div>
-
-            <div class="row cl" id="TDScollect" style="display: none;">
-                <label class="form-label col-1 col-sm-1">TDS收集:</label>
-                <div class="formControls col-2 col-sm-2" style="position: relative;">
-                    <#--<input type="hidden" name="arrcity_3word" id="arrcity_3word" value="" />
-                    <input style="width: 190px;" placeholder="" class="input-text my-search-input" placeholder="请输入城市名称搜索" type="text" name="arrcity" id="arrcity" />
-                    <div id="suggest" class="ac_results"></div>-->
-                    <span class="select-box">
-                        <select name="initProvinceCode" class="select" id="initProvince">
-                            <option value="">请选择省份</option>
-                        </select>
-				    </span>
-                </div>
-                <div class="formControls col-2 col-sm-2">
-                    <span class="select-box">
-                        <select name="initCityCode" class="select" id="initCity">
-                            <option value="">请选择城市</option>
-                        </select>
-                    </span>
-                </div>
-                <div class="formControls col-2 col-sm-2" style="position: relative;">
-                    <span class="select-box">
-                        <select name="initDistrictCode" class="select" id="initCountry">
-                            <option value="">请选择区/县</option>
-                        </select>
-				    </span>
-                 </div>
-                <input type="hidden" name="customerArea" id="customerArea">
-                <div class="formControls col-1 col-sm-1">
-                    <input type="text" class="input-text" value="" placeholder="进水TDS数值,最大999" id="customerInTDS" name="customerInTDS" onkeyup="TDSLinkage($(this),999)" onpaste="TDSLinkage($(this),999)">
-                </div>
-                <div class="formControls col-1 col-sm-1">
-                    <input type="text" class="input-text" value="" placeholder="出水TDS数值,最大999" id="customerOutTDS" name="customerOutTDS" onkeyup="TDSLinkage($(this),999)" onpaste="TDSLinkage($(this),999)">
-                </div>
-            </div>
-            <div class="row cl" id="TDScollectShow" style="display: none;">
-                <label class="form-label col-1 col-sm-1"></label>
-                <div class="formControls col-6 col-sm-6">
-                    <span id="DTS-address"></span>
-                    &nbsp;&nbsp;&nbsp;&nbsp;<span id="DTS-in"></span>&nbsp;&nbsp;  <span id="DTS-out"></span>
-                </div>
-            </div>
             <div class="row cl" id="customerCostsDiv" style="display: none;">
                   <label class="form-label col-1 col-sm-1">工厂报价:</label>
                   <div class="col-2 col-sm-2">
@@ -542,8 +513,15 @@
                     <input type="text" class="input-text trim_input" placeholder="客户报价" id="relationCustomerCosts" name="relationCustomerCosts" value="">
                   </div>
             </div>
+            <div class="row cl">
+                 <label class="form-label col-1 col-sm-1">
+                     <div class="tit-2">寄回信息</div>
+                 </label>
+                     <div class="formControls col-10 col-sm-10">
+                      </div>
+            </div>
             <div class="row cl" id="sendAddressInfo">
-                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>寄回信息:</label>
+                <label class="form-label col-1 col-sm-1"></label>
                 <div class="formControls col-9 col-sm-9" style="height: 240px" id="sendAddressSmsHtml">
                    <#-- <script id="sendAddressSms" type="text/plain" style="width:983px;height:200px;"></script>
                     </script>-->
@@ -562,8 +540,66 @@
                     <div id="m-msg" style="color: #e00"></div>
                 </div>
             </div>
+
+            <div class="row cl">
+                 <label class="form-label col-1 col-sm-1">
+                 <div class="tit-2">TDS收集</div>
+                 </label>
+            <div class="formControls col-10 col-sm-10">
+            </div>
+            </div>
+             <div class="row cl" id="TDScollect" style="display: none;">
+             <label class="form-label col-1 col-sm-1"></label>
+                <div class="formControls col-2 col-sm-2" style="position: relative;">
+                  <span class="select-box">
+                  <select name="initProvinceCode" class="select" id="initProvince">
+                      <option value="">请选择省份</option>
+                  </select>
+                   </span>
+                </div>
+                <div class="formControls col-2 col-sm-2">
+                <span class="select-box">
+                 <select name="initCityCode" class="select" id="initCity">
+                   <option value="">请选择城市</option>
+                 </select>
+                 </span>
+             </div>
+                <div class="formControls col-2 col-sm-2" style="position: relative;">
+                  <span class="select-box">
+                   <select name="initDistrictCode" class="select" id="initCountry">
+                       <option value="">请选择区/县</option>
+                   </select>
+                  </span>
+                </div>
+                   <input type="hidden" name="customerArea" id="customerArea">
+           </div>
+          <div class="row cl" >
+             <label class="form-label col-1 col-sm-1"></label>
+             <div class="formControls col-1 col-sm-1">
+                 <input type="text" class="input-text" value="" placeholder="进水TDS数值,最大999" id="customerInTDS" name="customerInTDS" onkeyup="TDSLinkage($(this),999)" onpaste="TDSLinkage($(this),999)">
+                 </div>
+                  <div class="formControls col-1 col-sm-1">
+                    <input type="text" class="input-text" value="" placeholder="出水TDS数值,最大999" id="customerOutTDS" name="customerOutTDS" onkeyup="TDSLinkage($(this),999)" onpaste="TDSLinkage($(this),999)">
+                 </div>
+
+           </div>
+             <div class="row cl" id="TDScollectShow" style="display: none;">
+                  <label class="form-label col-1 col-sm-1"></label>
+                  <div class="formControls col-6 col-sm-6">
+                    <span id="DTS-address"></span>
+                      &nbsp;&nbsp;&nbsp;&nbsp;<span id="DTS-in"></span>&nbsp;&nbsp;  <span id="DTS-out"></span>
+                  </div>
+              </div>
+
+            <div class="row cl">
+                <label class="form-label col-1 col-sm-1">
+                    <div class="tit-2">备注信息</div>
+                 </label>
+                 <div class="formControls col-10 col-sm-10">
+                 </div>
+            </div>
              <div class="row cl" id="customerDescDiv">
-                 <label class="form-label col-1 col-sm-1">备注信息:</label>
+                 <label class="form-label col-1 col-sm-1"></label>
                  <div class="col-9 col-sm-9">
                      <textarea type="text" placeholder="" id="customerDesc" name="customerDesc" style="width: 100%;height: 80px;"></textarea>
                  </div>

+ 3 - 3
watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/add_detect.ftl

@@ -34,7 +34,7 @@
         <div class="input-box">
             <label class="form-label col-3 col-sm-3 huanhang" style="text-align: right;margin-top: 14px;"><span class="c-red">*</span>客诉编号:</label>
             <div class="formControls col-xs-8 col-sm-8 skin-minimal" style="margin: 10px 0px;">
-                <input class="my-input" type="text"  name="customerId" id="customerId" placeholder="请输入客诉编号,如没有请留空"/>
+                <input class="my-input" type="text" style="width: 78.5%;"  name="customerId" id="customerId" placeholder="请输入客诉编号,如没有请留空"/>
             </div>
         </div>
         <div class="input-box">
@@ -56,7 +56,7 @@
         <div class="input-box">
             <label class="form-label col-3 col-sm-3 huanhang" style="text-align: right;margin-top: 14px;"><span class="c-red">*</span>检测日期:</label>
             <div class="formControls col-xs-8 col-sm-8 skin-minimal" style="margin: 10px 0px;">
-                <input class="my-input" type="text"  name="itemDate" id="itemDate" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M-%d'})" placeholder="请选择检测日期" readonly="readonly"/>
+                <input class="my-input" type="text" style="width: 78.5%;" name="itemDate" id="itemDate" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M-%d'})" placeholder="请选择检测日期" readonly="readonly"/>
             </div>
         </div>
 
@@ -76,7 +76,7 @@
         <div class="input-box" >
             <label class="col-3 col-sm-3 huanhang"  style="text-align: right;margin: 10px 0px;"></label>
             <div class="formControls col-xs-8 col-sm-8 skin-minimal" style="margin: 10px 0px;">
-                <input class="my-input" list="contentlist" type="text" onchange="inputSelect()" name="content" id="content"  placeholder="输入关键字查询,如果没有请直接在问题简述填写"/>
+                <input class="my-input" list="contentlist" type="text" style="width: 78.5%;" onchange="inputSelect()" name="content" id="content"  placeholder="输入关键字查询,如果没有请直接在问题简述填写"/>
                 <datalist id="contentlist">
                     <#if (detectionBasisList?size > 0)>
                         <#list detectionBasisList as detectionBasis>

+ 38 - 41
watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/customer_detail.ftl

@@ -30,48 +30,38 @@
             </div>
 
         </div>
-        <div id="customerDiv" style="display: none">
-        <div class="row cl">
-            <div class="formControls col-2 col-sm-2 text-r">
-                <strong>客诉时间:</strong>
-            </div>
-            <div class="formControls col-8 col-sm-8" id="customerCreateTime">
 
-            </div>
+        <div id="noCustomerDiv" style="display: none; text-align:center;">
+            <h3><strong style="color: #93da67">?没有搜索到客诉哦</strong></h3>
         </div>
-        <div class="row cl">
-            <div class="formControls col-2 col-sm-2 text-r">
-                <strong>客诉标题:</strong>
-            </div>
-            <div class="formControls col-8 col-sm-8" id="txtDescribeTitle">
-
-            </div>
-        </div>
-        <div class="row cl">
-            <div class="formControls col-2 col-sm-2 text-r">
-                <strong>客诉回复:</strong>
-            </div>
-            <div class="formControls col-8 col-sm-8" id="txtDescribeContent">
-
-            </div>
-        </div>
-        <div class="row cl">
-            <div class="formControls col-2 col-sm-2 text-r">
-                <strong>客诉备注:</strong>
-            </div>
-            <div class="formControls col-8 col-sm-8" id="txtCustomerDesc">
-
-            </div>
-        </div>
-
-        <div class="row cl">
+        <div id="customerDiv" style="display: none">
             <div class="formControls col-2 col-sm-2 text-r">
-                <strong>客诉描述:</strong>
+                <strong></strong>
             </div>
-            <div class="formControls col-8 col-sm-8" id="txtDescribeHandleDesc">
-
-            </div>
-        </div>
+            <table class="table table-border table-bg table-bordered" style="margin-top: 10px;width: 500px;">
+                <thead>
+                <tr>
+                    <th width="5" style="text-align: center">客诉标题</th>
+                    <td width="50" style="font-weight: normal;"><span id="txtDescribeTitle"></span></td>
+                </tr>
+                <tr>
+                    <th width="5" style="text-align: center">客诉回复</th>
+                    <td width="50" style="font-weight: normal;"><span id="txtDescribeContent"></span></td>
+                </tr>
+                <tr>
+                    <th width="5" style="text-align: center">客诉人姓名</th>
+                    <td width="50" style="font-weight: normal;"><span id="customerName"></span></td>
+                </tr>
+                <tr>
+                    <th width="5" style="text-align: center">客诉人手机号</th>
+                    <td width="50" style="font-weight: normal;"><span id="customerTel"></span></td>
+                </tr>
+                <tr>
+                    <th width="5" style="text-align: center">客诉时间</th>
+                    <td width="50" style="font-weight: normal;"><span id="customerCreateTime"></span></td>
+                </tr>
+                </thead>
+            </table>
         </div>
         <#--<div class="row cl">
             <div class="formControls col-2 col-sm-2">
@@ -101,12 +91,19 @@
             success: function(data){
                 if (data.returnCode == 200) {
                     var describe = data.returnMsg.describe;
-                    $('#customerCreateTime').html(formatDate(describe.customerCreateTime,"yyyy-MM-dd"));
+                    var customer = data.returnMsg.customerInfo;
+                    $('#customerCreateTime').html(formatDate(describe.customerCreateTime,"yyyy年MM月dd日"));
                     $('#txtDescribeTitle').html(describe.describeTitle);
                     $('#txtDescribeContent').html(describe.describeContent);
-                    $('#txtDescribeHandleDesc').html(describe.describeHandleDesc);
-                    $('#txtCustomerDesc').html(describe.customerDesc);
+                    $('#customerName').html(customer.customerName);
+                    $('#customerTel').html(customer.customerTel);
+                    $("#noCustomerDiv").hide();
                     $("#customerDiv").show();
+                    $("#associatedId").show();
+                }else {
+                    $("#customerDiv").hide();
+                    $("#associatedId").hide();
+                    $("#noCustomerDiv").show();
                 }
             },
             error: function(XmlHttpRequest, textStatus, errorThrown){

+ 7 - 7
watero-rst-web/src/main/webapp/WEB-INF/views/cm/inspection/detect_list.ftl

@@ -57,13 +57,13 @@
             <select id="productColorId" name="productColorId" class="my-select" style="width: 120px;">
 
             </select>
-            <input class="my-input" style="width: 70px;" type="text" name="customerId" value="${customerId!}" placeholder="客诉编号"/>
-            <input class="my-input" style="width: 70px;" type="text" name="questionTitle" value="${questionTitle!}" placeholder="客诉问题"/>
-            <input class="my-input" style="width: 70px;" type="text" name="detectItemPhenomenon" value="${detectItemPhenomenon!}" placeholder="工厂检测现象"/>
-            <input class="my-input" style="width: 70px;" type="text" name="detectItemFailureCause" value="${detectItemFailureCause!}" placeholder="故障原因"/>
-            <input class="my-input" style="width: 70px;" type="text" name="detectItemPoint" value="${detectItemPoint!}" placeholder="故障指向"/>
-            <input class="my-input" style="width: 70px;" type="text" name="detectItemNalysis" value="${detectItemNalysis!}" placeholder="原因分析"/>
-            <input class="my-input" style="width: 70px;" type="text" name="detectItemClassification" value="${detectItemClassification!}" placeholder="故障分类"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="customerId" value="${customerId!}" placeholder="客诉编号"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="questionTitle" value="${questionTitle!}" placeholder="客诉问题"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="detectItemPhenomenon" value="${detectItemPhenomenon!}" placeholder="工厂检测现象"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="detectItemFailureCause" value="${detectItemFailureCause!}" placeholder="故障原因"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="detectItemPoint" value="${detectItemPoint!}" placeholder="故障指向"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="detectItemNalysis" value="${detectItemNalysis!}" placeholder="原因分析"/>
+            <input class="my-input" style="width: 70px;height: 29px;" type="text" name="detectItemClassification" value="${detectItemClassification!}" placeholder="故障分类"/>
 
             <#--<select class="my-select" name="detectState" style="height: 30px;width: 150px">
                 <option value ="">选择状态</option>

+ 1 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/cm/signclosed/associated_customer.ftl

@@ -78,6 +78,7 @@
         </#if>
             <button type="button" class="my-btn-submit" onclick="update();">确认关联</button>
         </div>
+
     </form>
 </article>
 <script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>

+ 4 - 4
watero-rst-web/src/main/webapp/WEB-INF/views/cm/signclosed/signclosed_list.ftl

@@ -72,7 +72,7 @@
                 <th width="130">退货地区</th>
                 <th width="90">售后原因</th>
                 <th width="150">客服备注</th>
-                <th width="150">返厂日期</th>
+                <th width="150">签收日期</th>
                 <th width="100">备注</th>
                 <th width="50">操作</th>
             </tr>
@@ -130,9 +130,9 @@
                             <#if (signclosed.signclosedProductInfoList?size > 0)>
                                 <#list signclosed.signclosedProductInfoList as info>
                                     <#if info.signclosedProductType == 1 >
-                                        <span class="label label-success radius txt" title="${info.productName!''}-${info.productNumber!''}(${info.colorName!''})x ${info.productNum!''}台">${info.productName!''}-${info.productNumber!''}(${info.colorName!''})x ${info.productNum!''}台</span><br>
+                                        <span class="label label-success radius" title="${info.productName!''}-${info.productNumber!''}(${info.colorName!''})x ${info.productNum!''}台">${info.productName!''}-${info.productNumber!''}(${info.colorName!''})x ${info.productNum!''}台</span><br>
                                     <#else >
-                                        <span class="label label-success radius txt" title="${info.productName!''} x ${info.productNum!''}件">${info.productName!''} x ${info.productNum!''}件>${info.productName!''} x ${info.productNum!''}件</span><br>
+                                        <span class="label label-success radius" title="${info.productName!''} x ${info.productNum!''}件">${info.productName!''} x ${info.productNum!''}件>${info.productName!''} x ${info.productNum!''}件</span><br>
                                     </#if>
                                 </#list>
                             <#else >
@@ -151,7 +151,7 @@
                         </#if>
                     </#if></td>
                     <td class="text-c" width="100">${signclosed.signclosedAddrProvinces!}-${signclosed.signclosedAddrCity!}-${signclosed.signclosedAddrArea!}</td>
-                    <td class="text-c" width="100"><span class="label txt2" title="${signclosed.customerIdDescribe!}" >${signclosed.customerIdDescribe!}</span><br><#if signclosed.customerIdDescribe??><#if signclosed.customerIdDescribe != ""><a href="#" onclick="getDescribeInfo(${signclosed.signclosedCustomerId!});"style="color : #4149FF;">查看详情</a></#if></#if></td>
+                    <td class="text-c" width="100">${signclosed.customerIdDescribe!}</td>
                     <td class="text-c" width="100">${signclosed.signclosedCustomerDesc!}</td>
                     <td class="text-c" width="100">${(signclosed.signclosedDate?string("yyyy-MM-dd"))!''}</td>
 

File diff suppressed because it is too large
+ 164 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/list_wait_send_order.ftl


+ 161 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/print_order.ftl

@@ -0,0 +1,161 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <link rel="Bookmark" href="/favicon.ico" >
+    <link rel="Shortcut Icon" href="/favicon.ico" />
+    <#include "/base/add_base.ftl">
+    <script type="text/javascript" src="//s.iamberry.com/js/LodopFuncs.js"></script>
+    <title>打单发货</title>
+
+</head>
+<body>
+<div class="page-container">
+    <div class="order-list">
+
+        <div>
+            本次共 <span style="color: red;">${(page.dataList?size)!"0"}</span> 个订单
+        </div>
+        <div class="mt-20" style="height: 330px;overflow: auto;overflow-x: hidden;margin-bottom: 12px;border: 1px solid #ddd;">
+            <table class="table table-border table-bordered table-bg table-hover table-sort">
+                <thead>
+                <tr class="text-c">
+                    <th width="20">状态</th>
+                    <th width="70">订单编号</th>
+                    <th width="30">姓名</th>
+                    <th width="50">电话</th>
+                    <th width="100">收货地址</th>
+                    <th width="100">订单产品</th>
+                </tr>
+                </thead>
+                <tbody id="productHtml">
+                    <#if (page.dataList?size <= 0)>
+                        <tr class="text-c"><td colspan="12">暂无数据</td></tr>
+                    <#else>
+                        <#list page.dataList as o>
+                            <tr class="text-c wait-print-order" printState="1">
+                                <td>待处理</td>
+                                <td salesId="${o.salesId}">${(o.salesOrderId)!}</td>
+                                <td>${(o.salesAddressName)!}</td>
+                                <td>${(o.salesAddressTel)!}</td>
+                                <td>${(o.salesAddressInfo)!}</td>
+                                <td style="text-align: left;">
+                                    <#if o.salesOrderItemList ??>
+                                        <#list o.salesOrderItemList as d>
+                                            <span class="label label-success radius">${(d.itemProductName)!}(${(d.itemProductColor)!})*${(d.itemNum)!}</span>
+                                        </#list>
+                                    </#if>
+                                </td>
+                            </tr>
+                        </#list>
+                    </#if>
+                </tbody>
+            </table>
+        </div>
+
+        <div class="formControls col-1 col-sm-1" style="width: 100%;">
+            <select class="select" id="all-post-select" style="margin-left: -15px;height: 31px;width: 150px">
+                <#list posts as d>
+                    <option value="${(d.logisticsRstCode)!}">${(d.logisticsName)!}</option>
+                </#list>
+            </select>
+            <select class="select" id="print-machine" style="height: 31px;width: 150px">
+            </select>
+            <button type="button" class="btn btn-primary" style="background: #32a3d8;color: #fff;" id="sub-post">开始打印</button>
+        </div>
+
+        <div id="print-pageview-div" style="display: none"></div>
+    </div>
+
+</div>
+
+<tfoot>
+</tfoot>
+
+<script type="text/javascript">
+    var LODOP=getLodop();
+    $(function () {
+        // 获取系统的打印机
+        setPrintMachine();
+        function setPrintMachine() {
+            var count = LODOP.GET_PRINTER_COUNT() - 1;
+            for (var i = 0; i <= count; i++) {
+                var text = LODOP.GET_PRINTER_NAME(i+":PrinterName");
+                $("#print-machine").append("<option value='" + text + "'>" + text + "</option>")
+            }
+        }
+        // 开始打印
+        $("#sub-post").click(function() {
+            var orders = $(".wait-print-order");
+            if (orders == null || orders.length <= 0) {
+                layer.msg("未选中订单",{icon: 2,time:3000});
+                return;
+            }
+            // 指定打印设备
+            LODOP.SET_PRINTER_INDEX($("#print-machine").val());
+            // 启动打印
+            startPrint();
+        });
+
+        function nextPrintOrder() {
+            var orders = $(".wait-print-order");
+            for(var i = 0; i < orders.length; i++) {
+                if ($(orders[i]).attr("printState") == "1") {
+                    // 待打印
+                    return $(orders[i]);
+                }
+            }
+        }
+
+        function startPrint() {
+            var order = nextPrintOrder();
+            if (order == null || typeof(order) == undefined) {
+                alert("打印完成");
+                return;
+            }
+            var $td = $(order.find("td")[1]);
+            var orderId = $td.text().trim();
+            var salesId = $td.attr("salesId");
+            // 单个打印
+            $.ajax({
+                type: "POST",
+                data: {
+                    "post":$("#all-post-select").val(),
+                    "orderId":orderId,
+                    "salesId":salesId
+                },
+                async: true,
+                url: "${path}/admin/await_send/printOrder",
+                beforeSend: function () {
+                    // 请求开始
+                    order.attr("printState", "2");
+                    $(order.find("td")[0]).html("<span style='color: rgba(243, 123, 29, 1);'>处理中</span>");
+                },
+                success: function(data){
+                    // 请求成功
+                    var res = $.parseJSON(data.returnMsg.json);
+                    if (data.resultMsg && res.Success) {
+                        var html = res.PrintTemplate;
+                        LODOP.PRINT_INIT('打印订单');
+                        LODOP.SET_PRINT_PAGESIZE(0, 0, 0,"");
+                        LODOP.ADD_PRINT_HTM("2mm","2mm","100%","100%", html);
+                        var flag = LODOP.PRINT();
+                        $(order.find("td")[0]).html("<span style='color: blue'>打印完成</span>");
+                        if (flag) {
+                            startPrint();
+                        }
+                    } else {
+                        $(order.find("td")[0]).html("<span style='color: red;'>失败(" + res.Reason + ")</span>");
+                        startPrint();
+                    }
+                }
+            });
+        }
+    });
+</script>
+</body>
+</html>