Przeglądaj źródła

5. 工厂生产管理

liujiankang 5 lat temu
rodzic
commit
7243e0f4f0
34 zmienionych plików z 1745 dodań i 23 usunięć
  1. 9 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/Postage.java
  2. 27 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/PostageInfo.java
  3. 10 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java
  4. 2 2
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/DownsingleRuleInfo.java
  5. 27 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/DownsingleRuleItemInfo.java
  6. 62 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/OrderTracking.java
  7. 8 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java
  8. 28 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/order/DownsingleRuleService.java
  9. 1 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/CustomerServiceImpl.java
  10. 48 3
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java
  11. 16 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java
  12. 3 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/customerInfoMapper.xml
  13. 4 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/postageMapper.xml
  14. 39 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml
  15. 155 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/order/DownsingleRuleServiceImpl.java
  16. 27 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/DownsingleRuleMapper.java
  17. 148 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/downsingleRuleMapper.xml
  18. 1 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminCustomerController.java
  19. 18 2
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminPostageController.java
  20. 1 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderBatchController.java
  21. 56 2
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java
  22. 11 1
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java
  23. 205 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/DownsingleRuleController.java
  24. 4 0
      watero-rst-web/src/main/resources/watero-rst-orm.xml
  25. 20 1
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/update_relation.ftl
  26. 108 0
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/postage/have_transfer.ftl
  27. 21 5
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/postage/postage_list.ftl
  28. 246 0
      watero-rst-web/src/main/webapp/WEB-INF/views/order/downsingle/add_downsingleRule.ftl
  29. 119 0
      watero-rst-web/src/main/webapp/WEB-INF/views/order/downsingle/downsingleRule_list.ftl
  30. 245 0
      watero-rst-web/src/main/webapp/WEB-INF/views/order/downsingle/update_downsingleRule.ftl
  31. 44 1
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/list_wait_send_order.ftl
  32. 30 0
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_detail.ftl
  33. 1 1
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_list.ftl
  34. 1 1
      watero-rst-web/src/main/webapp/common/js/customer/customer.js

+ 9 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/Postage.java

@@ -83,6 +83,7 @@ public class Postage implements Serializable {
     private String procMethodName; //处理方式名称
 
     private Integer postageIsPrint;//是否已打印1:未打印2:已打印
+    private String postagePayImg;//支付截图
 
     public Integer getPostageId() {
         return postageId;
@@ -403,4 +404,12 @@ public class Postage implements Serializable {
     public void setPostageIsPrint(Integer postageIsPrint) {
         this.postageIsPrint = postageIsPrint;
     }
+
+    public String getPostagePayImg() {
+        return postagePayImg;
+    }
+
+    public void setPostagePayImg(String postagePayImg) {
+        this.postagePayImg = postagePayImg;
+    }
 }

+ 27 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/PostageInfo.java

@@ -49,6 +49,9 @@ public class PostageInfo implements Serializable{
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
     private Date customerCreateTime;           //创建时间
+    private String postagePayImg;           //转账截图
+    private Integer postageIsPrint;           //是否已打印
+    private Integer adminId;           //当前登录人id
 
 
     public Integer getPostageId() {
@@ -234,4 +237,28 @@ public class PostageInfo implements Serializable{
     public void setPostId(Integer postId) {
         this.postId = postId;
     }
+
+    public String getPostagePayImg() {
+        return postagePayImg;
+    }
+
+    public void setPostagePayImg(String postagePayImg) {
+        this.postagePayImg = postagePayImg;
+    }
+
+    public Integer getPostageIsPrint() {
+        return postageIsPrint;
+    }
+
+    public void setPostageIsPrint(Integer postageIsPrint) {
+        this.postageIsPrint = postageIsPrint;
+    }
+
+    public Integer getAdminId() {
+        return adminId;
+    }
+
+    public void setAdminId(Integer adminId) {
+        this.adminId = adminId;
+    }
 }

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

@@ -187,6 +187,8 @@ public class SalesOrder implements Serializable {
 
     private Integer statisticalType;//导航栏搜索条件 1待确认 2待分配物流 3待发货 4待打单 5待出库 6待揽件 7揽件超时
 
+    private Integer trackingAdminId;//跟踪信息 操作人id
+
     public Integer getSalesOldOrderStatus() {
         return salesOldOrderStatus;
     }
@@ -1097,4 +1099,12 @@ public class SalesOrder implements Serializable {
     public void setStatisticalType(Integer statisticalType) {
         this.statisticalType = statisticalType;
     }
+
+    public Integer getTrackingAdminId() {
+        return trackingAdminId;
+    }
+
+    public void setTrackingAdminId(Integer trackingAdminId) {
+        this.trackingAdminId = trackingAdminId;
+    }
 }

+ 2 - 2
watero-rst-core/src/main/java/com.iamberry.rst.core/order/DownsingleRuleInfo.java

@@ -10,8 +10,8 @@ import java.util.List;
 public class DownsingleRuleInfo implements Serializable {
     private static final long serialVersionUID = 6907202311574752054L;
     private Integer downsingleId;
-    private Integer downsingleStatus;//规则排序
-    private Integer downsingleSorting;//规则状态
+    private Integer downsingleStatus;//规则状态
+    private Integer downsingleSorting;//规则排序
     private String downsingleDesc;//规则备注
     private Date downsingleCreateTime;//创建时间
     private List<DownsingleRuleItemInfo> downsingleRuleItemList;

+ 27 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/DownsingleRuleItemInfo.java

@@ -12,6 +12,9 @@ public class DownsingleRuleItemInfo implements Serializable {
     private String downsingleItemBar;//产品sku(69码)
     private Integer downsingleItemNum;//产品数量
     private Date downsingleItemCreateTime;//创建时间
+    private String colorName;//颜色名称
+    private String productName;//产品名称
+    private Integer productId;//产品id
 
     public Integer getDownsingleItemId() {
         return downsingleItemId;
@@ -52,4 +55,28 @@ public class DownsingleRuleItemInfo implements Serializable {
     public void setDownsingleItemCreateTime(Date downsingleItemCreateTime) {
         this.downsingleItemCreateTime = downsingleItemCreateTime;
     }
+
+    public String getColorName() {
+        return colorName;
+    }
+
+    public void setColorName(String colorName) {
+        this.colorName = colorName;
+    }
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public Integer getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Integer productId) {
+        this.productId = productId;
+    }
 }

+ 62 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/OrderTracking.java

@@ -0,0 +1,62 @@
+package com.iamberry.rst.core.order;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class OrderTracking implements Serializable{
+    private static final long serialVersionUID = -2448392481008379959L;
+    private Integer trackingId;
+    private Integer salesId;
+    private Integer adminId;
+    private String trackingDesc;
+    private Date trackingCreateDate;
+    private String adminName;
+
+    public Integer getTrackingId() {
+        return trackingId;
+    }
+
+    public void setTrackingId(Integer trackingId) {
+        this.trackingId = trackingId;
+    }
+
+    public Integer getSalesId() {
+        return salesId;
+    }
+
+    public void setSalesId(Integer salesId) {
+        this.salesId = salesId;
+    }
+
+    public Integer getAdminId() {
+        return adminId;
+    }
+
+    public void setAdminId(Integer adminId) {
+        this.adminId = adminId;
+    }
+
+    public String getTrackingDesc() {
+        return trackingDesc;
+    }
+
+    public void setTrackingDesc(String trackingDesc) {
+        this.trackingDesc = trackingDesc;
+    }
+
+    public Date getTrackingCreateDate() {
+        return trackingCreateDate;
+    }
+
+    public void setTrackingCreateDate(Date trackingCreateDate) {
+        this.trackingCreateDate = trackingCreateDate;
+    }
+
+    public String getAdminName() {
+        return adminName;
+    }
+
+    public void setAdminName(String adminName) {
+        this.adminName = adminName;
+    }
+}

+ 8 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java

@@ -552,4 +552,12 @@ public interface SalesOrderService {
      *查询核对单信息
      */
     List<OrderStatisticsInfo> getCheckOrders(OrderStatisticsInfo orderStatisticsInfo);
+    /**
+     *订单跟踪添加
+     */
+    Integer addTracking(OrderTracking orderTracking);
+    /**
+     *订单跟踪查询
+     */
+    List<OrderTracking> listTracking(Integer trackingId);
 }

+ 28 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/order/DownsingleRuleService.java

@@ -0,0 +1,28 @@
+package com.iamberry.rst.faces.order;
+
+import com.iamberry.rst.core.order.DeliveryStrategy;
+import com.iamberry.rst.core.order.DownsingleRuleInfo;
+import com.iamberry.rst.core.order.DownsingleRuleItemInfo;
+import com.iamberry.rst.core.order.OrderBatch;
+import com.iamberry.rst.core.page.PageRequest;
+import com.iamberry.rst.core.page.PagedResult;
+
+import java.util.List;
+
+/**
+ *  拆单规则接口
+ * @author w
+ * @Date 2018-06-26
+ */
+public interface DownsingleRuleService {
+    List<DownsingleRuleInfo> listDownsingleRule(DownsingleRuleInfo downsingleRuleInfo);
+    PagedResult<DownsingleRuleInfo> listDownsingleRule(PageRequest<DownsingleRuleInfo> pageRequest);
+    List<DownsingleRuleItemInfo> listDownsingleRuleItem(Integer downsingleId);
+    DownsingleRuleInfo getDownsingleRule(Integer downsingleId);
+    Integer saveDownsingleRule(DownsingleRuleInfo downsingleRuleInfo,String orderItemString);
+    Integer updateDownsingleRule(DownsingleRuleInfo downsingleRuleInfo,String orderItemString);
+    Integer delDownsingleRule(Integer downsingleId);
+    Integer delDownsingleRuleItem(Integer downsingleId);
+    Integer getTop();
+    Integer saveDownsingleRuleItem(DownsingleRuleItemInfo downsingleRuleItemInfo);
+}

+ 1 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/CustomerServiceImpl.java

@@ -1449,7 +1449,7 @@ public class CustomerServiceImpl implements CustomerService {
             }
             Postage postage = new Postage();
             postage.setCompanyId(customerInfo.getCompanyId());      //销售公司
-            postage.setAdminId(customerInfo.getAdminId());      //客服
+            postage.setAdminId(postageInfo.getAdminId());      //客服
             postage.setCustomerId(customerInfo.getCustomerId());        //客诉id
             postage.setPostageCustomerStatus(2);            //------考虑手动点, 直接变为申请中
             postage.setPostageManagerStatus(1);     //------考虑手动点, 直接变为申请中

+ 48 - 3
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -32,6 +32,7 @@ import com.iamberry.rst.service.order.mapper.ProvincesLogisticsMapper;
 import com.iamberry.rst.service.product.mapper.ProductMapper;
 import com.iamberry.rst.service.sys.mapper.SysConfigMapper;
 import com.iamberry.rst.util.PageUtil;
+import com.iamberry.wechat.core.entity.AdminUtils;
 import com.iamberry.wechat.tools.DateTimeUtil;
 import com.iamberry.wechat.tools.ResponseJson;
 import net.sf.json.JSONArray;
@@ -1275,7 +1276,16 @@ public class SalesOrderServiceImpl implements SalesOrderService {
 //        if (temp == null || temp.getSalesPostFirm() == null || temp.getSalesPostFirm().isEmpty()) {
 //            return 0;
 //        }
-        return salesOrderMapper.noticeDistribution(salesOrder);
+        int msg = salesOrderMapper.noticeDistribution(salesOrder);
+        if(msg > 0){
+            //添加操作跟踪信息
+            OrderTracking orderTracking = new OrderTracking();
+            orderTracking.setAdminId(salesOrder.getTrackingAdminId());
+            orderTracking.setSalesId(salesOrder.getSalesId());
+            orderTracking.setTrackingDesc("通知配货");
+            salesOrderService.addTracking(orderTracking);
+        }
+        return msg;
     }
 
     @Transactional
@@ -1330,12 +1340,37 @@ public class SalesOrderServiceImpl implements SalesOrderService {
     }
     @Override
     public Integer listSalesPostFirm(SalesOrder salesOrder) {
-        return salesOrderMapper.listSalesPostFirm(salesOrder);
+        int msg = salesOrderMapper.listSalesPostFirm(salesOrder);
+        if(msg > 0){
+            List<SalesOrder> listOrder = salesOrderMapper.listSalesOrderByBatchId(salesOrder.getSalesBatchId());
+            for(SalesOrder prder : listOrder){
+                //添加操作跟踪信息
+                OrderTracking orderTracking = new OrderTracking();
+                orderTracking.setAdminId(salesOrder.getTrackingAdminId());
+                orderTracking.setSalesId(prder.getSalesId());
+                orderTracking.setTrackingDesc("按照批次分配快递方式");
+                salesOrderService.addTracking(orderTracking);
+            }
+        }
+        return msg;
     }
 
     @Override
     public Integer listSalesPostFirmByIds(SalesOrder salesOrder) {
-        return salesOrderMapper.listSalesPostFirmByIds(salesOrder);
+        int msg = salesOrderMapper.listSalesPostFirmByIds(salesOrder);
+        if(msg > 0){
+            List<SalesOrder> listOrder = salesOrderMapper.listSalesOrderBySalesIds(salesOrder);
+            for(SalesOrder prder : listOrder) {
+                //添加操作跟踪信息
+                OrderTracking orderTracking = new OrderTracking();
+                orderTracking.setAdminId(salesOrder.getTrackingAdminId());
+                orderTracking.setSalesId(prder.getSalesId());
+                orderTracking.setTrackingDesc("根据订单id批量分配物流("+prder.getSalesPostFirm()+")");
+                salesOrderService.addTracking(orderTracking);
+            }
+        }
+
+        return msg;
     }
 
     @Override
@@ -1926,6 +1961,16 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         return salesOrderMapper.getCheckOrders(orderStatisticsInfo);
     }
 
+    @Override
+    public Integer addTracking(OrderTracking orderTracking) {
+        return salesOrderMapper.addTracking(orderTracking);
+    }
+
+    @Override
+    public List<OrderTracking> listTracking(Integer trackingId) {
+        return salesOrderMapper.listTracking(trackingId);
+    }
+
     /***
      * 计算金额
      * @param salesOrder

+ 16 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java

@@ -478,4 +478,20 @@ public interface SalesOrderMapper {
      *查询核对单信息
      */
     List<OrderStatisticsInfo> getCheckOrders(OrderStatisticsInfo orderStatisticsInfo);
+    /**
+     *订单跟踪添加
+     */
+    Integer addTracking(OrderTracking orderTracking);
+    /**
+     *订单跟踪查询
+     */
+    List<OrderTracking> listTracking(Integer trackingId);
+    /**
+     *根据批次id查询订单
+     */
+    List<SalesOrder> listSalesOrderByBatchId(String salesBatchId);
+    /**
+     *根据订单id集合查询订单
+     */
+    List<SalesOrder> listSalesOrderBySalesIds(SalesOrder salesOrder);
 }

+ 3 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/customerInfoMapper.xml

@@ -1288,7 +1288,9 @@ LEFT JOIN tb_rst_cm_proc_type cpt ON cpt.proc_type_id = cpm.proc_type_id
       pa.postage_manager_status postageManagerStatus,
       pa.postage_finance_status postageFinanceStatus,
       pa.postage_transfer_status postageTransferStatus,
-      pa.postage_id postId
+      pa.postage_id postId,
+      pa.postage_pay_img postagePayImg,
+      pa.postage_is_print postageIsPrint
        from tb_rst_postage_info p
       LEFT JOIN tb_rst_postage pa ON pa.customer_postage_id = p.postage_id
       where p.relation_id = #{relationId}

+ 4 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/postageMapper.xml

@@ -217,7 +217,10 @@
           postage_finance_time = #{postageFinanceTime,jdbcType=TIMESTAMP},
         </if>
         <if test="postageIsPrint != null" >
-          postage_is_print = #{postageIsPrint,jdbcType=INTEGER}
+          postage_is_print = #{postageIsPrint,jdbcType=INTEGER},
+        </if>
+        <if test="postagePayImg != null" >
+          postage_pay_img = #{postagePayImg,jdbcType=INTEGER}
         </if>
     </set>
     where postage_id = #{postageId,jdbcType=INTEGER}

+ 39 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -2384,7 +2384,45 @@
         AND sales_send_time > #{checkStartDate} AND  sales_send_time &lt; NOW()
         AND sales_warehouse_id = #{warehouseId}
         GROUP BY oi.sales_post_firm
-        ORDER BY num desc
+        ORDER BY num descfet
+    </select>
+
+    <!--订单跟踪添加和查询-->
+    <insert id="addTracking" parameterType="OrderTracking">
+      INSERT INTO  tb_rst_order_tracking(
+        sales_id,
+        admin_id,
+        tracking_desc,
+        tracking_create_date
+        )VALUES (
+        #{salesId},
+        #{adminId},
+        #{trackingDesc},
+        NOW()
+        )
+    </insert>
+    <select id="listTracking" parameterType="Integer" resultType="OrderTracking" >
+        SELECT tb_rst_order_tracking.*,sa.admin_name AS adminName from tb_rst_order_tracking
+        LEFT JOIN tb_rst_sys_admin sa on sa.admin_id = tb_rst_order_tracking.admin_id
+        WHERE sales_id = #{salesId}
+    </select>
+
+    <select id="listSalesOrderByBatchId" resultType="SalesOrder" parameterType="String" >
+        SELECT
+        *
+        FROM tb_rst_sales_order_info
+        where
+        sales_batch_id = #{salesBatchId}
     </select>
 
+    <select id="listSalesOrderBySalesIds" resultType="SalesOrder" parameterType="SalesOrder" >
+        SELECT
+        *
+        FROM tb_rst_sales_order_info
+        where
+        sales_id IN
+        <foreach collection="salesIds" item="node" index="index" separator="," open="(" close=")">
+            #{node}
+        </foreach >
+    </select>
 </mapper>

+ 155 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/DownsingleRuleServiceImpl.java

@@ -0,0 +1,155 @@
+package com.iamberry.rst.service.order;
+
+
+import com.github.pagehelper.PageHelper;
+import com.iamberry.rst.core.cm.SalesOrderItem;
+import com.iamberry.rst.core.fm.SignclosedProductInfo;
+import com.iamberry.rst.core.order.DeliveryStrategy;
+import com.iamberry.rst.core.order.DownsingleRuleInfo;
+import com.iamberry.rst.core.order.DownsingleRuleItemInfo;
+import com.iamberry.rst.core.order.ProductColor;
+import com.iamberry.rst.core.page.PageRequest;
+import com.iamberry.rst.core.page.PagedResult;
+import com.iamberry.rst.faces.order.DownsingleRuleService;
+import com.iamberry.rst.service.order.mapper.DownsingleRuleMapper;
+import com.iamberry.rst.service.product.mapper.ProductMapper;
+import com.iamberry.rst.util.PageUtil;
+import net.sf.json.JSONArray;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ *  拆单规则接口
+ * @author w
+ * @Date 2018-06-26
+ */
+@Service
+public class DownsingleRuleServiceImpl implements DownsingleRuleService {
+    @Autowired
+    private DownsingleRuleMapper downsingleRuleMapper;
+    @Autowired
+    private ProductMapper productMapper;
+
+
+    @Override
+    public List<DownsingleRuleInfo> listDownsingleRule(DownsingleRuleInfo downsingleRuleInfo) {
+        return downsingleRuleMapper.listDownsingleRule(downsingleRuleInfo);
+    }
+
+    @Override
+    public PagedResult<DownsingleRuleInfo> listDownsingleRule(PageRequest<DownsingleRuleInfo> pageRequest) {
+        PageHelper.startPage(pageRequest.getPageNO(), pageRequest.getPageSize(), pageRequest.isPageTotal());
+        List<DownsingleRuleInfo> downsingleRuleList = downsingleRuleMapper.listDownsingleRule(pageRequest.getData());
+        return PageUtil.getPage(downsingleRuleList);
+    }
+    @Override
+    public List<DownsingleRuleItemInfo> listDownsingleRuleItem(Integer downsingleId) {
+        return downsingleRuleMapper.listDownsingleRuleItem(downsingleId);
+    }
+
+    @Override
+    public DownsingleRuleInfo getDownsingleRule(Integer downsingleId) {
+        return downsingleRuleMapper.getDownsingleRule(downsingleId);
+    }
+
+    @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
+    @Override
+    public Integer saveDownsingleRule(DownsingleRuleInfo downsingleRuleInfo,String orderItemString) {
+        DownsingleRuleInfo dr = new DownsingleRuleInfo();
+        dr.setDownsingleSorting(downsingleRuleInfo.getDownsingleSorting());
+        updatePriority(dr);
+        if(downsingleRuleMapper.saveDownsingleRule(downsingleRuleInfo) > 0){
+            JSONArray jsonArray = JSONArray.fromObject(orderItemString);
+            List<SalesOrderItem> salesOrderItemList = (List) JSONArray.toCollection(jsonArray, SalesOrderItem.class);
+            for (SalesOrderItem salesOrderItem:salesOrderItemList) {
+                if(salesOrderItem.getItemNum() > 0 && !salesOrderItem.getItemColorBar().equals("")){
+                    //根据颜色id获取产品信息获取产品信息
+                    /*ProductColor productColor = productMapper.getProductBySku(salesOrderItem.getItemColorBar());*/
+                        if(salesOrderItem.getItemNum() != null && salesOrderItem.getItemNum() != 0){
+                            DownsingleRuleItemInfo  item = new DownsingleRuleItemInfo();
+                            item.setDownsingleId(downsingleRuleInfo.getDownsingleId());
+                            item.setDownsingleItemBar(salesOrderItem.getItemColorBar());
+                            item.setDownsingleItemNum(salesOrderItem.getItemNum());
+                            downsingleRuleMapper.saveDownsingleRuleItem(item);
+                        }
+                }
+            }
+        }
+        return 1;
+    }
+
+    @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
+    @Override
+    public Integer updateDownsingleRule(DownsingleRuleInfo downsingleRuleInfo,String orderItemString) {
+            if(downsingleRuleInfo.getDownsingleSorting() != null){
+                DownsingleRuleInfo dr = new DownsingleRuleInfo();
+                dr.setDownsingleSorting(downsingleRuleInfo.getDownsingleSorting());
+                dr.setDownsingleId(downsingleRuleInfo.getDownsingleId());
+                updatePriority(dr);
+            }
+            downsingleRuleMapper.updateDownsingleRule(downsingleRuleInfo);
+            //删除拆单规则项
+            if(downsingleRuleMapper.delDownsingleRuleItem(downsingleRuleInfo.getDownsingleId()) > 0){
+                JSONArray jsonArray = JSONArray.fromObject(orderItemString);
+                List<SalesOrderItem> salesOrderItemList = (List) JSONArray.toCollection(jsonArray, SalesOrderItem.class);
+                for (SalesOrderItem salesOrderItem:salesOrderItemList) {
+                    if(salesOrderItem.getItemNum() > 0 && !salesOrderItem.getItemColorBar().equals("")){
+                        //根据颜色id获取产品信息获取产品信息
+                        /*ProductColor productColor = productMapper.getProductBySku(salesOrderItem.getItemColorBar());*/
+                            if(salesOrderItem.getItemNum() != null && salesOrderItem.getItemNum() != 0){
+                                DownsingleRuleItemInfo  item = new DownsingleRuleItemInfo();
+                                item.setDownsingleId(downsingleRuleInfo.getDownsingleId());
+                                item.setDownsingleItemBar(salesOrderItem.getItemColorBar());
+                                item.setDownsingleItemNum(salesOrderItem.getItemNum());
+                                downsingleRuleMapper.saveDownsingleRuleItem(item);
+                            }
+                    }
+                }
+            }
+        return 1;
+    }
+
+    @Transactional
+    @Override
+    public Integer delDownsingleRule(Integer downsingleId) {
+        downsingleRuleMapper.delDownsingleRuleItem(downsingleId);
+        return downsingleRuleMapper.delDownsingleRule(downsingleId);
+    }
+
+    @Override
+    public Integer delDownsingleRuleItem(Integer downsingleId) {
+        return downsingleRuleMapper.delDownsingleRuleItem(downsingleId);
+    }
+
+    @Override
+    public Integer getTop() {
+        return downsingleRuleMapper.getTop();
+    }
+
+    @Override
+    public Integer saveDownsingleRuleItem(DownsingleRuleItemInfo downsingleRuleItemInfo) {
+        return downsingleRuleMapper.saveDownsingleRuleItem(downsingleRuleItemInfo);
+    }
+    //修改排序
+    public void updatePriority(DownsingleRuleInfo info){
+        DownsingleRuleInfo dr = new DownsingleRuleInfo();
+        dr.setDownsingleSorting(info.getDownsingleSorting());
+        dr.setDownsingleId(info.getDownsingleId());
+        if(downsingleRuleMapper.getDownsingleRuleList(dr).size() > 0){
+            List<DownsingleRuleInfo> list = downsingleRuleMapper.getDownsingleRulePriorityList(info);
+            if(list.size() > 0){
+                for(DownsingleRuleInfo ruleInfo : list){
+                    DownsingleRuleInfo downsingleRuleInfo = new DownsingleRuleInfo();
+                    downsingleRuleInfo.setDownsingleId(ruleInfo.getDownsingleId());
+                    downsingleRuleInfo.setDownsingleSorting(ruleInfo.getDownsingleSorting() + 1);
+                    downsingleRuleMapper.updateDownsingleRule(downsingleRuleInfo);
+                }
+            }
+        }
+    }
+}

+ 27 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/DownsingleRuleMapper.java

@@ -0,0 +1,27 @@
+package com.iamberry.rst.service.order.mapper;
+
+import com.iamberry.rst.core.order.DownsingleRuleInfo;
+import com.iamberry.rst.core.order.DownsingleRuleItemInfo;
+
+import java.util.List;
+
+public interface DownsingleRuleMapper {
+
+   List<DownsingleRuleInfo> listDownsingleRule(DownsingleRuleInfo downsingleRuleInfo);
+
+   List<DownsingleRuleItemInfo> listDownsingleRuleItem(Integer downsingleId);
+
+   DownsingleRuleInfo getDownsingleRule(Integer downsingleId);
+
+   Integer saveDownsingleRule(DownsingleRuleInfo downsingleRuleInfo);
+
+   Integer updateDownsingleRule(DownsingleRuleInfo downsingleRuleInfo);
+
+   Integer delDownsingleRule(Integer downsingleId);
+
+   Integer delDownsingleRuleItem(Integer downsingleId);
+   Integer getTop();
+   Integer saveDownsingleRuleItem(DownsingleRuleItemInfo downsingleRuleItemInfo);
+   List<DownsingleRuleInfo> getDownsingleRuleList(DownsingleRuleInfo downsingleRuleInfo);
+   List<DownsingleRuleInfo> getDownsingleRulePriorityList(DownsingleRuleInfo downsingleRuleInfo);
+}

+ 148 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/downsingleRuleMapper.xml

@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.iamberry.rst.service.order.mapper.DownsingleRuleMapper" >
+  <resultMap id="downsingleRuleMap" type="DownsingleRuleInfo">
+    <id column="downsingle_id" property="downsingleId"/>
+    <result column="downsingle_sorting" property="downsingleSorting"/>
+    <result column="downsingle_status" property="downsingleStatus"/>
+    <result column="downsingle_desc" property="downsingleDesc"/>
+    <result column="downsingle_create_time" property="downsingleCreateTime"/>
+    <collection property="downsingleRuleItemList" column="downsingle_id" ofType="DownsingleRuleItemInfo" select="listDownsingleRuleItem"/>
+  </resultMap>
+  <select id="listDownsingleRule" parameterType="DownsingleRuleInfo" resultMap="downsingleRuleMap">
+    SELECT
+    downsingle_id,
+    downsingle_sorting,
+    downsingle_status,
+    downsingle_desc,
+    downsingle_create_time
+    FROM tb_rst_downsingle_rule
+    WHERE downsingle_status = 1
+    order BY downsingle_sorting
+  </select>
+  <select id="listDownsingleRuleItem" parameterType="Integer" resultType="DownsingleRuleItemInfo">
+     SELECT
+       downsingle_item_id as downsingleItemId,
+       downsingle_id as downsingleId,
+       downsingle_item_bar as downsingleItemBar,
+       downsingle_item_num as downsingleItemNum,
+       downsingle_item_create_time as downsingleItemCreateTime,
+	   pc.color_name AS colorName,
+	   pi.product_name AS productName,
+	   pi.product_id AS productId
+     FROM tb_rst_downsingle_rule_item ri
+     LEFT JOIN tb_rst_product_color pc on pc.color_bar = ri.downsingle_item_bar
+     LEFT JOIN tb_rst_product_info pi on pi.product_id = pc.color_product_id
+    WHERE downsingle_id = #{downsingleId}
+  </select>
+
+  <select id="getDownsingleRule" resultMap="downsingleRuleMap" parameterType="Integer" >
+    select
+    downsingle_id,
+    downsingle_sorting,
+    downsingle_status,
+    downsingle_desc,
+    downsingle_create_time
+    FROM tb_rst_downsingle_rule
+    WHERE downsingle_status = 1
+    and downsingle_id = #{downsingleId}
+  </select>
+
+    <insert id="saveDownsingleRule" parameterType="DownsingleRuleInfo" useGeneratedKeys="true" keyProperty="downsingleId">
+    insert into tb_rst_downsingle_rule (
+    downsingle_sorting,
+    downsingle_status,
+    downsingle_desc,
+    downsingle_create_time
+    )
+    values (
+    #{downsingleSorting},
+    #{downsingleStatus},
+    #{downsingleDesc},
+    NOW()
+    )
+  </insert>
+
+
+  <update id="updateDownsingleRule" parameterType="DownsingleRuleInfo" >
+    update tb_rst_downsingle_rule
+    <set >
+      <if test="downsingleSorting != null" >
+        downsingle_sorting = #{downsingleSorting},
+      </if>
+      <if test="downsingleStatus != null" >
+        downsingle_status = #{downsingleStatus},
+      </if>
+      <if test="downsingleDesc != null" >
+        downsingle_desc = #{downsingleDesc}
+      </if>
+    </set>
+    where downsingle_id = #{downsingleId}
+  </update>
+
+  <delete id="delDownsingleRule" parameterType="java.lang.Integer" >
+    delete from tb_rst_downsingle_rule where
+      downsingle_id = #{downsingleId}
+  </delete>
+
+  <delete id="delDownsingleRuleItem" parameterType="java.lang.Integer" >
+    delete from tb_rst_downsingle_rule_item where
+      downsingle_id = #{downsingleId}
+  </delete>
+  <select id="getTop" resultType="Integer">
+    SELECT max(downsingle_sorting) from tb_rst_downsingle_rule
+  </select>
+  <insert id="saveDownsingleRuleItem" parameterType="DownsingleRuleItemInfo">
+    insert into tb_rst_downsingle_rule_item (
+    downsingle_id,
+    downsingle_item_bar,
+    downsingle_item_num,
+    downsingle_item_create_time
+    )
+    values (
+    #{downsingleId},
+    #{downsingleItemBar},
+    #{downsingleItemNum},
+    NOW()
+    )
+  </insert>
+  <select id="getDownsingleRuleList" resultType="DownsingleRuleInfo" parameterType="DownsingleRuleInfo" >
+    select
+    downsingle_id,
+    downsingle_sorting,
+    downsingle_status,
+    downsingle_desc,
+    downsingle_create_time
+    from tb_rst_downsingle_rule
+    <where>
+      <if test="downsingleStatus != null ">
+        AND downsingle_status = #{downsingleStatus}
+      </if >
+      <if test="downsingleSorting != null ">
+        AND downsingle_sorting = #{downsingleSorting}
+      </if >
+      <if test="downsingleId != null ">
+        AND downsingle_id != #{downsingleId}
+      </if >
+    </where>
+    ORDER BY downsingle_sorting
+  </select>
+
+  <select id="getDownsingleRulePriorityList" resultType="DownsingleRuleInfo" parameterType="DownsingleRuleInfo" >
+    select
+    downsingle_id,
+    downsingle_sorting,
+    downsingle_status,
+    downsingle_desc,
+    downsingle_create_time
+    from tb_rst_downsingle_rule
+    <where>
+      <if test="downsingleSorting != null ">
+        AND downsingle_sorting &gt;= #{downsingleSorting}
+      </if >
+      <if test="downsingleId != null ">
+        AND downsingle_id != #{downsingleId}
+      </if >
+    </where>
+  </select>
+</mapper>

+ 1 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminCustomerController.java

@@ -2346,6 +2346,7 @@ public class AdminCustomerController {
         if(postageInfo == null){
             return new ResponseJson(500, "添加失败,请检查参数!", 500);
         }
+        postageInfo.setAdminId(AdminUtils.getLoginAdminId());
         Integer msg = customerService.addPostageInfo(postageInfo);
         if(msg < 1){
             return new ResponseJson(500, "添加失败", 500);

+ 18 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/cm/AdminPostageController.java

@@ -54,7 +54,7 @@ public class AdminPostageController {
     private CustomerService customerService;
 
     /**
-     * 获取客诉列表
+     * 获取邮费转账列表
      *
      * @param request
      * @return
@@ -203,7 +203,7 @@ public class AdminPostageController {
     @ResponseBody
     @RequiresPermissions("postage:update:confirm")
     @RequestMapping(value = "/updateConfirmPostage")
-    public ResponseJson updateConfirmPostage(HttpServletRequest request, Integer postageId,Integer status,Integer type) throws Exception {
+    public ResponseJson updateConfirmPostage(HttpServletRequest request, Integer postageId,Integer status,Integer type,String postagePayImg) throws Exception {
         if(postageId == null || postageId == 0){
             return new ResponseJson(500, "未获取到记录id", 500);
         }
@@ -275,6 +275,7 @@ public class AdminPostageController {
                 if((post.getPostageFinanceStatus() == 2) && verificaAuthority(post.getCompanyId(),4)){
                     //转账状态 是否转账:1已转   2:未转
                     postage.setPostageTransferStatus(status);
+                    postage.setPostagePayImg(postagePayImg);
                     num = postageService.updatePostage(postage);
                     if(num > 0){        //财务打款记录
                         PostageAuthorityLog postageAuthorityLog = new PostageAuthorityLog();
@@ -385,5 +386,20 @@ public class AdminPostageController {
         }
     }
 
+    /**
+     * 跳转到已轉賬页面
+     *
+     * @return
+     */
+    @RequestMapping(value = "/to_have_transfer")
+    public ModelAndView toHaveTransfer(HttpServletRequest request) {
+        ModelAndView mv = new ModelAndView("cm/postage/have_transfer");
+        String postageId = request.getParameter("postageId");
+        if(postageId == null || postageId.equals("")){
+            return mv;
+        }
+        mv.addObject("postageId",postageId);
+        return mv;
+    }
 }
 

+ 1 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderBatchController.java

@@ -152,6 +152,7 @@ public class AdminOrderBatchController {
         if(salesOrder == null || salesOrder.getSalesPostFirm() == null){
             return ResponseJson.getFAILURE();
         }
+        salesOrder.setTrackingAdminId(AdminUtils.getLoginAdminId());
         /* 分配到该批次下的所有订单 */
         try{
             int flag = 0;

+ 56 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java

@@ -236,6 +236,10 @@ public class AdminSalesOrderController {
             List<LogisticsInfo> logis = salesOrderService.getLogisticsInfo(logisticsInfo);
             order.setSalesPostFirmName(logis.get(0).getLogisticsName());
         }
+
+        //查询操作记录
+        List<OrderTracking> listTracking = salesOrderService.listTracking(order.getSalesId());
+        mv.addObject("listTracking",listTracking);
         mv.addObject("listOrderCorrectInfo",listOrderCorrectInfo);
         mv.addObject("order",order);
         return mv;
@@ -983,6 +987,7 @@ public class AdminSalesOrderController {
             }
             salesOrder.setSalesBatchId(batchId);
         }
+
         // 修改订单
         try {
             salesOrderService.updateOrderInfo(salesOrder);
@@ -990,6 +995,12 @@ public class AdminSalesOrderController {
             logger.error("", e);
             return new ResponseJson(500, "修改订单失败,失败原因:"+e.getMessage(), 500);
         }
+        //添加操作跟踪信息
+        OrderTracking orderTracking = new OrderTracking();
+        orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+        orderTracking.setSalesId(salesOrder.getSalesId());
+        orderTracking.setTrackingDesc("修改订单");
+        salesOrderService.addTracking(orderTracking);
         return new ResponseJson(200, "修改订单成功,订单交易号为:"+ salesOrder.getSalesDealCode(), 200);
     }
 
@@ -1089,7 +1100,7 @@ public class AdminSalesOrderController {
                    /*判断主订单是否是其它订单的子订单 2019-10-08新需求     state*/
                    newOrder = suSalesOrder(newOrder);
                    /*判断主订单是否是其它订单的子订单 2019-10-08新需求     end*/
-
+                   newOrder.setTrackingAdminId(AdminUtils.getLoginAdminId());
                    flag = salesOrderService.noticeDistribution(newOrder);
                    if(flag < 1){
                        errorId.append(salesOrder.getSalesDealCode()).append(",");
@@ -1112,7 +1123,7 @@ public class AdminSalesOrderController {
                        /*判断主订单是否是其它订单的子订单 2019-10-08新需求     state*/
                        newOrder = suSalesOrder(newOrder);
                        /*判断主订单是否是其它订单的子订单 2019-10-08新需求     end*/
-
+                       newOrder.setTrackingAdminId(AdminUtils.getLoginAdminId());
                        flag = salesOrderService.noticeDistribution(newOrder);
                        if(flag < 1){
                            errorId.append(so.getSalesDealCode()).append(",");
@@ -1250,6 +1261,12 @@ public class AdminSalesOrderController {
                 if (flag < 1) {
                     errorId += salesIds + ":" + msg + ";";
                 }
+                //添加操作跟踪记录
+                OrderTracking orderTracking = new OrderTracking();
+                orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+                orderTracking.setSalesId(salesIds);
+                orderTracking.setTrackingDesc("确认订单");
+                salesOrderService.addTracking(orderTracking);
             }
             if (errorId.length() > 0) {
                 rj.addResponseKeyValue("errorId", errorId);
@@ -1274,6 +1291,15 @@ public class AdminSalesOrderController {
         so.setSalesId(salesId);
         so.setSalesStatus(3);
         Integer res = salesOrderService.updateSalesOrder(so);
+        if(res > 0){
+            //添加操作跟踪信息
+            OrderTracking orderTracking = new OrderTracking();
+            orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+            orderTracking.setSalesId(so.getSalesId());
+            orderTracking.setTrackingDesc("作废订单");
+            salesOrderService.addTracking(orderTracking);
+        }
+
         return res <= 0 ? ResponseJson.getFAILURE() : ResponseJson.getSUCCESS();
     }
 
@@ -1433,6 +1459,14 @@ public class AdminSalesOrderController {
             return ResponseJson.getFAILURE();
         }
         Integer num = salesOrderService.updateSalesOrder(salesOrder);
+        if(num > 0){
+            //添加操作跟踪信息
+            OrderTracking orderTracking = new OrderTracking();
+            orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+            orderTracking.setSalesId(salesOrder.getSalesId());
+            orderTracking.setTrackingDesc("修改订单备注");
+            salesOrderService.addTracking(orderTracking);
+        }
         return num <= 0 ? ResponseJson.getFAILURE() : ResponseJson.getSUCCESS();
     }
 
@@ -1493,6 +1527,12 @@ public class AdminSalesOrderController {
         if(!salesOrderService.addCorrectInfo(orderCorrectInfo,arrayItem,admin)){
             return ResponseJson.getFAILURE();
         }
+        //添加操作跟踪信息
+        OrderTracking orderTracking = new OrderTracking();
+        orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+        orderTracking.setSalesId(orderCorrectInfo.getItemOrderId());
+        orderTracking.setTrackingDesc("更正订单");
+        salesOrderService.addTracking(orderTracking);
         return ResponseJson.getSUCCESS();
     }
 
@@ -1663,6 +1703,13 @@ public class AdminSalesOrderController {
             if(flag < 1){
                 responseJson.setResultMsg("拆单订单失败!");
                 return responseJson;
+            }else{
+                //添加操作跟踪信息
+                OrderTracking orderTracking = new OrderTracking();
+                orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+                orderTracking.setSalesId(or.getSalesId());
+                orderTracking.setTrackingDesc("拆分订单(交易号:"+mainOrderId+")");
+                salesOrderService.addTracking(orderTracking);
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -2273,10 +2320,17 @@ public class AdminSalesOrderController {
             order.setSalesShippingStatus(0);
             order.setSalesOldOrderStatus(11);
             if(salesOrderService.update(order) > 0){
+                //添加操作跟踪信息
+                OrderTracking orderTracking = new OrderTracking();
+                orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+                orderTracking.setSalesId(Integer.valueOf(id));
+                orderTracking.setTrackingDesc("取消通知配货");
+                salesOrderService.addTracking(orderTracking);
                 rj = new ResponseJson(200, "修改成功", 200);
                 return rj;
             }
         }
+
         rj = new ResponseJson(500, "修改失败", 500);
         return rj;
     }

+ 11 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -562,7 +562,17 @@ public class AwaitSendController {
         salesOrder.setSalesSendType(2);
         /*分配到该批次下的所有订单*/
         try{
-            return salesOrderService.updateSalesOrder(salesOrder) <= 0 ? ResponseJson.getFAILURE() : ResponseJson.getSUCCESS();
+            if(salesOrderService.updateSalesOrder(salesOrder) <= 0){
+                return ResponseJson.getFAILURE();
+            }else{
+                //添加操作跟踪信息
+                OrderTracking orderTracking = new OrderTracking();
+                orderTracking.setAdminId(AdminUtils.getLoginAdminId());
+                orderTracking.setSalesId(salesOrder.getSalesId());
+                orderTracking.setTrackingDesc("手动发货");
+                salesOrderService.addTracking(orderTracking);
+                return ResponseJson.getSUCCESS();
+            }
         }catch (Exception e){
             return ResponseJson.getFAILURE().addResponseKeyValue("error", e.getMessage());
         }

+ 205 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/DownsingleRuleController.java

@@ -0,0 +1,205 @@
+package com.iamberry.rst.controllers.order;
+
+import com.iamberry.rst.controllers.sys.SysController;
+import com.iamberry.rst.core.address.Province;
+import com.iamberry.rst.core.cm.CompanyInfo;
+import com.iamberry.rst.core.cm.StoreInfo;
+import com.iamberry.rst.core.order.DeliveryStrategy;
+import com.iamberry.rst.core.order.DownsingleRuleInfo;
+import com.iamberry.rst.core.order.Product;
+import com.iamberry.rst.core.order.ProductColor;
+import com.iamberry.rst.core.page.PageRequest;
+import com.iamberry.rst.core.page.PagedResult;
+import com.iamberry.rst.core.tools.LogisticsInfo;
+import com.iamberry.rst.faces.address.AddressService;
+import com.iamberry.rst.faces.cm.CompanyInfoService;
+import com.iamberry.rst.faces.cm.StoreInfoService;
+import com.iamberry.rst.faces.order.DeliveryStrategyService;
+import com.iamberry.rst.faces.order.DownsingleRuleService;
+import com.iamberry.rst.faces.order.LogisticsInfoService;
+import com.iamberry.rst.faces.product.ProductService;
+import com.iamberry.rst.utils.StitchAttrUtil;
+import com.iamberry.wechat.tools.ResponseJson;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+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.util.List;
+
+/**
+ * 快递策略 handler
+ *
+ * @company LJK
+ * @website www.iamberry.com
+ * @date 2019122611:28:40
+ */
+@Controller
+@RequestMapping("/admin/downsingleRule")
+public class DownsingleRuleController {
+    private static Logger logger = LoggerFactory.getLogger(SysController.class);
+    @Autowired
+    private DeliveryStrategyService deliveryStrategyService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private LogisticsInfoService logisticsInfoService;
+    @Autowired
+    private DownsingleRuleService downsingleRuleService;
+    /**
+     * 查询拆单策略列表信息
+     *
+     * @param request
+     * @param pageNO
+     * @param pageTotal
+     * @param pageSize
+     * @return
+     * @throws Exception
+     */
+    @RequiresPermissions("downsingleRule:select:downsingleRule")
+    @RequestMapping("/select_downsingleRule_list")
+    public ModelAndView selectDeliveryStrategyList(HttpServletRequest request,
+                                                 @RequestParam(value = "pageNO", defaultValue = "1", required = false) int pageNO,
+                                                 @RequestParam(value = "pageTotal", required = false) Integer pageTotal,
+                                                 @RequestParam(value = "pageSize", defaultValue = "10", required = false) int pageSize,
+                                                   DownsingleRuleInfo downsingleRuleInfo
+    ) throws Exception {
+        ModelAndView mv = new ModelAndView("/order/downsingle/downsingleRule_list");
+        // 封装请求数据
+        PageRequest<DownsingleRuleInfo> pageRequest = new PageRequest<>(downsingleRuleInfo, pageNO, pageSize, pageTotal == null);
+        PagedResult<DownsingleRuleInfo> result = downsingleRuleService.listDownsingleRule(pageRequest);
+        long total = 0;
+        if (pageTotal == null) {
+            total = result.getPages();
+        } else {
+            total = pageTotal;
+            result.setPages(total);
+        }
+        StitchAttrUtil.getSa().setModelAndView(downsingleRuleInfo, mv, "/admin/downsingleRule/select_downsingleRule_list", result);
+        return mv;
+    }
+    /**
+     * 进入添加拆单策略计划
+     *
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping("/to_add_downsingleRule")
+    public ModelAndView to_add_downsingleRule() throws Exception {
+        ModelAndView mv = new ModelAndView("order/downsingle/add_downsingleRule");
+        Product product = new Product();
+        List<Product> productList = productService.listProductAndColorAndfittings(product);
+        ProductColor color = new ProductColor();
+        color.setColorProductId(productList.get(0).getProductId());
+        List<ProductColor> productColorList = productService.listProduceColor(color);
+        mv.addObject("productColorList",productColorList);
+        mv.addObject("productList",productList);
+        mv.addObject("priorityNum",downsingleRuleService.getTop() + 1);
+        return mv;
+    }
+    /**
+     * 添加拆单策略
+     *
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/addDownsingleRule")
+    public ResponseJson addDeliveryStrategy(HttpServletRequest request, DownsingleRuleInfo downsingleRuleInfo,String orderItemString) throws Exception {
+        ResponseJson msg = new ResponseJson();
+        if(downsingleRuleInfo == null ){
+            msg.setResultCode(500);
+            msg.setReturnCode(500);
+            return msg;
+        }
+        JSONArray jsonArray = JSONArray.fromObject(orderItemString);
+        JSONObject jsonArray2  = jsonArray.getJSONObject(0);
+        if(jsonArray2.get("itemNum").equals("")){
+            msg.setResultCode(200);
+            msg.setReturnCode(503);
+            return msg;
+        }
+        downsingleRuleInfo.setDownsingleStatus(1);
+        if(downsingleRuleService.saveDownsingleRule(downsingleRuleInfo,orderItemString) > 0){
+            msg.setResultCode(200);
+            msg.setReturnCode(200);
+        }else{
+            msg.setResultCode(500);
+            msg.setReturnCode(501);
+        }
+        return msg;
+    }
+    /**
+     * 进入修改拆单策略计划
+     *
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping("/to_updateDownsingleRule")
+    public ModelAndView to_updateDownsingleRule(Integer downsingleId) throws Exception {
+        ModelAndView mv = new ModelAndView("order/downsingle/update_downsingleRule");
+        DownsingleRuleInfo downsingleRuleInfo = downsingleRuleService.getDownsingleRule(downsingleId);
+        mv.addObject("downsingleRuleInfo",downsingleRuleInfo);
+        return mv;
+    }
+    /**
+     * 修改快递策略
+     *
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/updateDownsingleRule")
+    public ResponseJson updateDownsingleRule(HttpServletRequest request, DownsingleRuleInfo downsingleRuleInfo,String orderItemString) throws Exception {
+        ResponseJson msg = new ResponseJson();
+        if(downsingleRuleInfo == null ){
+            msg.setResultCode(500);
+            msg.setReturnCode(500);
+            return msg;
+        }
+        JSONArray jsonArray = JSONArray.fromObject(orderItemString);
+        JSONObject jsonArray2  = jsonArray.getJSONObject(0);
+        if(jsonArray2.get("itemNum").equals("")){
+            msg.setResultCode(200);
+            msg.setReturnCode(503);
+            return msg;
+        }
+        if(downsingleRuleService.updateDownsingleRule(downsingleRuleInfo,orderItemString) > 0){
+            msg.setResultCode(200);
+            msg.setReturnCode(200);
+        }else{
+            msg.setResultCode(500);
+            msg.setReturnCode(501);
+        }
+        return msg;
+    }
+    /**
+     * 删除拆单策略
+     *
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/deleteDownsingleRule")
+    public ResponseJson deleteDownsingleRule( Integer downsingleId) throws Exception {
+        ResponseJson msg = new ResponseJson();
+        if(downsingleId == null ){
+            msg.setResultCode(500);
+            msg.setReturnCode(500);
+            return msg;
+        }
+        if(downsingleRuleService.delDownsingleRule(downsingleId) > 0){
+            msg.setResultCode(200);
+            msg.setReturnCode(200);
+        }else{
+            msg.setResultCode(500);
+            msg.setReturnCode(501);
+        }
+        return msg;
+    }
+}

+ 4 - 0
watero-rst-web/src/main/resources/watero-rst-orm.xml

@@ -239,6 +239,8 @@
 		<typeAlias type="com.iamberry.rst.core.pts.ProductionPlan" alias="ProductionPlan"/>
 		<!-- 快递策略-->
 		<typeAlias type="com.iamberry.rst.core.order.DeliveryStrategy" alias="DeliveryStrategy"/>
+		<!-- 订单跟踪-->
+		<typeAlias type="com.iamberry.rst.core.order.OrderTracking" alias="OrderTracking"/>
 	</typeAliases>
 	<!-- PageHelper -->
 	<plugins>
@@ -368,5 +370,7 @@
 		<mapper resource="com/iamberry/rst/service/pts/mapper/productionPlanningMapper.xml"/>
 		<!--快递策略 -->
 		<mapper resource="com/iamberry/rst/service/order/mapper/deliveryStrategyMapper.xml"/>
+		<!--拆单策略 -->
+		<mapper resource="com/iamberry/rst/service/order/mapper/downsingleRuleMapper.xml"/>
 	</mappers>
 </configuration>

+ 20 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/update_relation.ftl

@@ -463,6 +463,8 @@
                         <th>付费状态</th>
                         <th>审核状态</th>
                         <th>备注</th>
+                        <th>转账截图</th>
+                        <th>打印状态</th>
                         <th>操作</th>
                     </tr>
                     </thead>
@@ -511,13 +513,25 @@
                                 </#if>
                             </#if>
                             <td>${postageInfo.postageDesc!''}</td>
+                            <td><#if postageInfo.postagePayImg??><img style="width: 50px;height: 50px;" src="${path}/${postageInfo.postagePayImg!''}"></#if></td>
+                            <td>
+                                <#if postageInfo.postageIsPrint??>
+                                    <#if postageInfo.postageIsPrint == 1>未打印</#if>
+                                    <#if postageInfo.postageIsPrint == 2>已打印</#if>
+                                </#if>
+                            </td>
                             <td><a onclick="deletePostage(${(postageInfo.postageId)!});">删除</a>
                                 &nbsp;&nbsp;<a onclick="getPostage(${(postageInfo.postageId)!});">修改</a>&nbsp;&nbsp;
                                 <#if postageInfo.postageTransferStatus??>
                                     <#if postageInfo.postageTransferStatus == 1>
                                         <#if postageInfo.postageFinanceStatus??>
                                             <#if postageInfo.postageFinanceStatus == 2>
+                                                <#if postageInfo.postageIsPrint == 1>
                                                 <a onclick="printPostage(${postageInfo.postId});">打印</a>
+                                                </#if>
+                                                <#if postageInfo.postageIsPrint == 2>
+                                                <a onclick="printPostage(${postageInfo.postId});">重新打印</a>
+                                                </#if>
                                             </#if>
                                         </#if>
                                     </#if>
@@ -1432,13 +1446,17 @@
                     <tr>
                         <td style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;width: 3.5cm;">审批编码</td>
                         <td id="postageCoding" colspan="15" style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;"></td>
-
                     </tr>
 
                     <tr>
                         <td style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;">申请人</td>
                         <td  id="applicantPeople" style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;" colspan="15"></td>
                     </tr>
+
+                    <tr>
+                        <td style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;">客诉编号</td>
+                        <td  id="postageCustomerId" style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;" colspan="15"></td>
+                    </tr>
                     <tr>
                         <td style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;h">申请人部门</td>
                         <td id="applicantDepa" style="font-size: 0.75rem;padding:0.5rem 0;text-indent: 0.5rem; color: #333;border: 1px solid #000;border-collapse: collapse;background-color: #fff;" colspan="15"></td>
@@ -3681,6 +3699,7 @@
 
                     $("#applyTime").html(postageCreateTime);
                     $("#postageCoding").html(postage.postageCoding);
+                    $("#postageCustomerId").html(postage.customerId);
                     $("#applicantPeople").html(admin.adminName);
                     $("#applicantDepa").html(admin.departName);
                     $("#postinfo1").html(salesOrder.companyName);

+ 108 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/cm/postage/have_transfer.ftl

@@ -0,0 +1,108 @@
+<!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" />
+<#include "/base/add_base.ftl">
+    <title>已转账</title>
+    <style>
+        .my-title{font-weight: 500;padding-left: 15px;position: relative;}
+        .my-title:after{content: '';position: absolute;left: 0;top:12%;width: 3px;height: 80%;background: #32a3d8;}
+        .my-input{padding: 8px 5px;width: 80%;border:1px solid rgba(0,0,0,.1);}
+        .my-input-date{padding: 8px 10px;border:1px solid rgba(0,0,0,.1);width: 80%;background: url(http://s.iamberry.com/images/rili-1.png) 98.5% center no-repeat; background-size:auto 50%;}
+        .input-box{margin: 18px 0;}
+        .input-dic{float: left;margin:5px 10px 0 0;font-size: 12px;}
+        .add-list{list-style-type: none;padding: 10px;background-color: #f5f5f5;width: 60%;float: left;margin: 0;}
+        .add-list>li{margin: 10px 0;}
+        .my-textarea{padding: 5px 10px;width: 80%;border:1px solid rgba(0,0,0,.1);}
+        .my-btn-reset{padding: 10px 20px;width: 150px; background-color: #fff;color: #32a3d8;border: 1px solid #32a3d8;cursor:pointer;margin: 10px 10px 0 10px;}
+        .my-btn-submit{padding: 10px 20px;width: 150px; background-color: #32a3d8;color: #fff;border: 1px solid #32a3d8;cursor:pointer;margin: 10px 10px 0 10px;}
+        .my-select{border: 1px solid rgba(0,0,0,.1);padding:6px 50px 6px 15px;height: 34px; -webkit-appearance:none;appearance:none;background: url(/common/images/pts/select-11.png) right center no-repeat;background-size:auto 100%;}
+        input[type=radio]{-webkit-appearance:none;appearance:none;background: url(/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        .huanhang{ float:left}
+    </style>
+    <meta name="keywords" content="${path}">
+    <meta name="description" content="H-ui.admin v3.0,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
+</head>
+<body>
+<article class="page-container">
+    <form class="form form-horizontal" id="form-admin-add">
+        <div class="row cl" id="" style="">
+            <label class="form-label col-3 col-sm-3 huanhang">支付截图:</label>
+            <div class="formControls col-5 col-sm-5 upload_color_class huanhang">
+                <input type="file" class="color_file" name="file" id="upload_color_img" style="display: none">
+                <div class="download_file"><a href="javascript:void(0)" class="del_product all_down" onclick="fileOnclick(this)">上传图片</a></div>
+                <input type="hidden" class="add_color str colorPicture " name="postagePayImg" id="postagePayImg" value="" >
+            </div>
+        </div>
+        <div style="text-align:center;">
+            <input type="hidden" value="${postageId!''}" id="postageId" name="postageId">
+           <button type="button" class="my-btn-submit" onclick="updatePostage();">确认提交</button>
+        </div>
+    </form>
+</article>
+<script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+<script type="text/javascript" src="${path}/common/lib/jquery/1.9.1/ajaxfileupload.js"></script>
+<script type="text/javascript">
+    function fileOnclick(node){
+        $(node).parents(".upload_color_class").find('.color_file').click();
+    }
+    $(function(){
+        $("#upload_color_img").change(function() {
+            fileUpload("upload_color_img");
+        });
+    });
+    function fileUpload(idValue) {
+
+        $.ajaxFileUpload({
+            url: "${path}/admin/product/fileUpload",
+            secureuri: false,
+            fileElementId: idValue,//文件选择框的id属性/名称
+            dataType: 'json',   //json
+            success: function (data) {
+                if (data.returnCode == 200) {
+                    var html = '<div><img style="width: 130px;height: 130px;" src="' + root_path + "/" + data.returnMsg.imgUrl + '"  class="del_product all_down " >&nbsp;&nbsp;<a href="javascript:void(0)" onclick="fileOnclick(this)">重新上传</a></div>';
+                    $("#" + idValue).parent().find(".download_file").html(html);
+                    $("#" + idValue).parent().find(".colorPicture").val(data.returnMsg.imgUrl);
+                    $("#upload_color_img").change(function () {
+                        fileUpload("upload_color_img");
+                    });
+                } else {
+                    layer.msg('上传失败,请重试!', {icon: 5, time: 2000});
+                }
+            }
+        });
+    }
+    /**
+     * 修改状态
+     */
+    function updatePostage() {
+        var postagePayImg = $("#postagePayImg").val();
+            $.ajax({
+                cache: true,
+                type: "POST",
+                data: {"postageId":$("#postageId").val(),"status" : 2,"type":4,"postagePayImg":postagePayImg},
+                url: "${path}" + "/admin/postage/updateConfirmPostage",
+                async: false,
+                success: function(data){
+                    if (data.returnCode == 200) {
+                        layer.msg(data.resultMsg,{icon: 1,time:2000},function () {
+                            window.parent.location.reload();
+                            var index = parent.layer.getFrameIndex(window.name);
+                            parent.layer.close(index)
+                        });
+                    } else {
+                        layer.msg(data.resultMsg,{icon: 5,time:3000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                }
+            })
+    }
+</script>
+</body>
+</html>

+ 21 - 5
watero-rst-web/src/main/webapp/WEB-INF/views/cm/postage/postage_list.ftl

@@ -22,9 +22,13 @@
         .my-btn-search{border: 1px solid #32a3d8;padding: 1px 25px;height: 32px;background-color: #32a3d8;color: #fff;}
         .table-bg thead th{background-color: #e2f6ff;}
         .update-parts>span{margin-right: 10px;padding: 3px 4px;background-color: #effaff;border: 1px solid #32a3d8;}
-        /*input[type=radio]{-webkit-appearance:none;appearance:none;background: url(/rst/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
-        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(/rst/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}*/
-        .txt2{width:60px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
+        .iconfont {
+            font-family:"iconfont" !important;
+            font-size:22px;
+            font-style:normal;
+            -webkit-font-smoothing: antialiased;
+            -moz-osx-font-smoothing: grayscale;
+        }
     </style>
 </head>
 <body>
@@ -89,6 +93,7 @@
                 <th width="80">账户姓名</th>
                 <th width="80">开户行</th>
                 <th width="80">快递单号图片</th>
+                <th width="80">支付截图</th>
                 <th width="100">操作</th>
             </tr>
             </thead>
@@ -179,6 +184,14 @@
                                 -
                             </#if>
                         </#if>
+                    </td><td>
+                        <#if (postage.postagePayImg) ??>
+                            <#if (postage.postagePayImg) != "">
+                               <img class="example-image" src="${path}${postage.postagePayImg!''}" style="width: 50px;" alt="image-1" />
+                            <#else>
+                                -
+                            </#if>
+                        </#if>
                     </td>
                     <td>
                         <#if postage.postageCustomerStatus == 1 && postage.customerConfirm == 1 >
@@ -205,7 +218,7 @@
                         </#if>
 
                         <#if postage.postageTransferStatus?? && postage.postageTransferStatus == 1 &&  postage.financePay==1 >
-                            <a style="text-decoration:none" href="javascript:;" title="已转账" onclick="updatePostage(${postage.postageId},2,4);">
+                            <a style="text-decoration:none" href="javascript:;" title="已转账" onclick="add_remark('修改已转账','${path}/admin/postage/to_have_transfer?postageId=${postage.postageId}','570','450');">
                                 <i class="iconfont icon-zhuanzhang"></i>
                             </a>
                             &nbsp;
@@ -213,7 +226,7 @@
 
                         <#if postage.postageTransferStatus?? && (postage.postageTransferStatus == 1 ||  postage.postageTransferStatus == 2) >
                             <a style="text-decoration:none" href="javascript:;" title="打印" onclick="printPostage(${postage.postageId});">
-                                <i class="Hui-iconfont">&#xe652;</i>
+                                <i class="Hui-iconfont" style="font-size:22px;">&#xe652;</i>
                             </a>
                         </#if>
 
@@ -236,6 +249,9 @@
 <script type="text/javascript" src="${path}/common/lib/jquery.PrintArea/jquery.PrintArea.js"></script>
 </tfoot>
 <script type="text/javascript">
+    function add_remark(title,url,w,h){
+        layer_show(title,url,w,h);
+    }
     /**
      * 修改状态
      */

+ 246 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/downsingle/add_downsingleRule.ftl

@@ -0,0 +1,246 @@
+<!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" />
+<#include "/base/add_base.ftl">
+    <title>添加拆单策略 - H-ui.filter v2.4</title>
+    <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;font-size: 16px;padding-left: 10px;color: #50a2ea;display: inline-block;}
+        .tit-2:after{content: '';position: absolute;left: 0;top: 50%;height: 6px;width: 6px;border-radius: 6px;margin-top: -3px; background-color: #32a3d8;}
+        .my-title{font-weight: 500;padding-left: 15px;position: relative;}
+        .my-title:after{content: '';position: absolute;left: 0;top:12%;width: 3px;height: 80%;background: #32a3d8;}
+        .my-input{padding: 8px 5px;width: 80%;border:1px solid rgba(0,0,0,.1);}
+        .my-input-date{padding: 8px 10px;border:1px solid rgba(0,0,0,.1);width: 80%;background: url(http://s.iamberry.com/images/rili-1.png) 98.5% center no-repeat; background-size:auto 50%;}
+        .input-box{margin: 18px 0;}
+        .input-dic{float: left;margin:5px 10px 0 0;font-size: 14px;}
+        .add-list{list-style-type: none;padding: 10px;background-color: #f5f5f5;width: 60%;float: left;margin: 0;}
+        .add-list>li{margin: 10px 0;}
+        .my-textarea{padding: 5px 10px;width: 77%;border:1px solid rgba(0,0,0,.1);margin-left: 12.5%;}
+        .my-btn-reset{padding: 10px 20px;width: 150px; background-color: #fff;color: #32a3d8;border: 1px solid #32a3d8;cursor:pointer;margin: 10px 10px 0 10px;}
+        .my-btn-submit{padding: 10px 20px;width: 158px; background-color: #50a2ea;color: #fff;border: 1px solid #50a2ea;cursor:pointer;margin: 10px 10px 0 10px;}
+        .my-select {
+            border: 1px solid rgba(0,0,0,.1);
+            padding: 6px 50px 6px 15px;
+            height: 34px;
+            -webkit-appearance: none;
+            appearance: none;
+            background: url(/common/images/pts/select-11.png) right center no-repeat;
+            background-size: auto 100%;
+        }
+        .check-box, .radio-box{padding-left: 0;}
+        input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        .huanhang{ float:left}
+        input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+    </style>
+    <meta name="keywords" content="${path}">
+    <meta name="description" content="H-ui.admin v3.0,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
+</head>
+<body>
+<article class="page-container">
+    <form class="form form-horizontal" id="form-admin-add">
+        <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">
+            <label class="form-label col-3 col-sm-3"><span class="c-red">*</span>添加产品:</label>
+            <div class="formControls col-8 col-sm-8">
+                <input type="button" class="btn btn-primary add-order-button" onclick="add_product()" value="添加产品" >
+                <table class="table table-border table-bg table-bordered" style="margin-top: 10px;display: none;" id="all_add_product">
+                    <thead>
+                    <tr class="text-c" id="table1">
+                        <th style="text-align: center;" width="30" >产品名称</th>
+                        <th style="text-align: center;" width="25" >产品颜色</th>
+                    <#--<th style="text-align: center;" width="10">售价</th>-->
+                        <th style="text-align: center;" width="10">数量</th>
+                        <th style="text-align: center;" width="10">操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="add_product">
+                    <#--<tr><td id="noMachineTr" colspan="4" class="td-manage text-c noMachineTr" >暂时没有产品,请添加!</td></tr>-->
+                            <#--<#if complaintSignclosedInfo.signclosedProductInfoList??>
+                                <#if (complaintSignclosedInfo.signclosedProductInfoList?size > 0)>
+                                    <#list complaintSignclosedInfo.signclosedProductInfoList as info>
+                                    <tr class="text-c">
+                                        <input type="hidden" class="color_id" id="" value="${info.signclosedProductColor!''}" >
+                                        <td>${info.productName!''}</td>
+                                        <td>${info.colorName!''}</td>
+                                    &lt;#&ndash;<td>${info.colorPrice!''}</td>&ndash;&gt;
+                                        <td><input type="text" class="input-text input-number item-num"  style="width: 100%;border: none;text-align: center;" name="" id="" placeholder="产品数量" value="${info.productNum!''}" onkeyup="keyFun($(this),999,1)" onpaste="keyFun($(this),999,1)"></td>
+                                        <td><a href="javascript:void(0)" class="del_product all_down" onclick="delProduct($(this))" >删除</a></td>
+                                    </tr>
+                                    </#list>
+                                </#if>
+                            </#if>-->
+                    </tbody>
+                </table>
+
+                <input type="hidden" id="orderItemString" name="orderItemString" value="" >
+
+            </div>
+        </div>
+
+        <div class="row cl">
+            <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-5 col-sm-5 huanhang" style="margin: 10px 0px 10px 0;">
+                <input class="my-input" type="text" value="${priorityNum!""}"  name="downsingleSorting" id="downsingleSorting" placeholder="请输入优先级" style="width: 78%;"/>
+            </div>
+        </div>
+        <div class="row cl">
+            <label class="form-label col-3 col-sm-3 huanhang" style="text-align: right;margin-top: 14px;">备注信息:</label>
+            <div class="formControls col-5 col-sm-5 huanhang" style="margin: 10px 0px 10px 0;">
+                <textarea type="text" placeholder="" id="downsingleDesc" name="downsingleDesc" style="width: 80%;height: 80px;"></textarea>
+            </div>
+        </div>
+        <div class="row cl">
+            <label class="form-label col-3 col-sm-3 huanhang" style="text-align: right;margin-top: 14px;"></label>
+            <div class="formControls col-9 col-sm-9 huanhang" style="margin: 10px 0px 10px 0;padding-left: 0;">
+                <button type="button" class="my-btn-submit" onclick="addDownsingleRuleInfo();" style="margin-top: 20px;">确认新建</button>
+            </div>
+        </div>
+    </form>
+</article>
+<script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+<script type="text/javascript">
+
+
+
+    /**
+     *  删除商品
+     */
+    function delProduct($this){
+        $this.parents("tr").remove();
+    }
+    /**
+     * 添加产品
+     */
+    function add_product() {
+        layer_show("商品列表", "${path}/admin/salesOrder/to_add_product","1000","500");
+    }
+
+    /**
+     * 添加
+     */
+    function addDownsingleRuleInfo() {
+
+        var downsingleSorting = $("#downsingleSorting").val();
+        if(downsingleSorting == null || downsingleSorting == ""){
+            layer.msg("优先级不能为空!", {icon: 5, time: 2000});
+            return;
+        }
+        //选择产品
+        var flag = false;
+        /*封装订单项*/
+        var orderItemArray = new Array();
+        $("#add_product").find("tr").each(function(){
+            var orderItem = new Object();
+            orderItem.itemColorBar = $(this).find(".color_bar").val();
+            orderItem.itemNum = $(this).find(".item-num").val();
+            orderItemArray.push(orderItem);
+            flag = true;
+        })
+        if(!flag){
+            vailErrorMsg($(".add-order-button"),"必须要有一个产品");
+            return false;
+        }
+
+        $("#orderItemString").val(JSON.stringify(orderItemArray));
+
+            $.ajax({
+                cache: true,
+                type: "POST",
+                data: $('#form-admin-add').serialize(),
+                url: "${path}/admin/downsingleRule/addDownsingleRule",
+                async: false,
+                success: function(data){
+                    if (data.returnCode == 200) {
+                        layer.msg("添加成功!", {icon: 1, time: 1000},function () {
+                            window.location.href= '${path}/admin/downsingleRule/select_downsingleRule_list';
+                        });
+                        /*layer.msg("添加成功!", {icon: 1, time: 2000});*/
+                    } else {
+                        layer.msg("添加失败!", {icon: 5, time: 5000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                    layer.msg("添加失败!", {icon: 5, time: 2000});
+                }
+            });
+
+    }
+
+
+    /**
+     * 选择商品回调
+     * @param colorIds
+     */
+    function setSelectProduct(colorIds){
+        var index = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
+
+        $("#all_add_product").show();
+
+        var colorIdArray = colorIds.split("_");
+        for(var i=0;i<colorIdArray.length;i++){
+            var colorId = colorIdArray[i];
+            if(colorId == ""){
+                break;
+            }
+
+            var flag = true;
+            $("#add_product").find("tr").each(function (){
+                var colId = $(this).find(".color_id").eq(0).val();
+                if(colId == colorId){
+                    flag  = false;
+                }
+            })
+            if(!flag){
+                continue;
+            }
+            $.ajax({
+                type: "POST",
+                data: { colorId : colorId},
+                url: "${path}/admin/product/get_product",
+                success: function(data){
+                    var html = "";
+                    if (data.returnCode == 200 && data.returnMsg.productColorList.length > 0 ) {
+                        $("#all_add_product").show();
+                        for(var i=0;i<data.returnMsg.productColorList.length;i++){
+                            var productColor = data.returnMsg.productColorList[i];
+                            html += '<tr class="text-c">' +
+                                    '<input type="hidden" class="color_bar" id="" value="'+ productColor.colorBar +'" >' +
+                                    ' <td>'+ cufte(productColor.productName) +'</td>' +
+                                    ' <td>'+ cufte(productColor.colorName) +'</td>' +
+                                    /*' <td>'+ cufte(productColor.colorPrice)/100 +'</td>' +*/
+                                    ' <td><input type="text" class="input-text input-number item-num"  style="width: 100%;border: none;text-align: center;" name="" id="" placeholder="产品数量" value="1" onkeyup="keyFun($(this),999,1)" onpaste="keyFun($(this),999,1)"></td>' +
+                                    ' <td><a href="javascript:void(0)" class="del_product all_down" onclick="delProduct($(this))" >删除</a></td>' +
+                                    ' </tr>';
+                        }
+                    }else{
+                        html = '<tr class="text-c"><td colspan="12">没有搜索到商品,请重试!</td></tr>';
+                    }
+                    $("#add_product").append(html);
+                    /*计算价格*/
+                    calculatePrice();
+                }
+            });
+        }
+        layer.close(index);
+    }
+</script>
+</body>
+</html>

+ 119 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/downsingle/downsingleRule_list.ftl

@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="UTF-8">
+		<title></title>
+        <#include "/base/list_base.ftl">
+		<style>
+			*{padding: 0;margin: 0;}
+			.my-input{border: 1px solid rgba(0,0,0,.1);padding: 1px 5px;height: 32px;margin-right: 10px;}
+			/*.my-input::-webkit-input-placeholder,.my-select{color: #dcdcdc;}*/
+            .my-select{border: 1px solid rgba(0,0,0,.1);padding:6px 50px 6px 15px;height: 34px; -webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/select-11.png) right center no-repeat;background-size:auto 100%;}
+            .my-btn-search{border: 1px solid #50a2ea;padding: 1px 25px;height: 32px;background-color: #fff;color: #50a2ea;}
+            .barcodeImg{margin:10px 0px}
+            .table-bg thead th{background-color: #e2f6ff;}
+            input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+            input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+		</style>
+	</head>
+	<body>
+    <nav class="breadcrumb"><i class="Hui-iconfont">&#xe67f;</i> 首页
+        <span class="c-gray en">/</span> PST管理
+        <span class="c-gray en">/</span> 拆单策略列表
+        <a class="btn radius r" href="javascript:location.replace(location.href);" title="刷新" ><i class="Hui-iconfont">&#xe68f;</i></a>
+    </nav>
+		<div class="text-c" style="margin-top: 20px;">
+			<form action="${path}/admin/downsingleRule/select_downsingleRule_list" method="post">
+                <button type="button" class="my-btn-search" onclick="add_employee('${path}/admin/downsingleRule/to_add_downsingleRule');" style="cursor:pointer; margin-right: 50px;">添加拆单策略</button>
+			</form>
+		</div>
+		<div class="mt-20" style="margin: 20px;">
+			<table class="table table-border table-bordered table-bg table-hover table-sort">
+				<thead>
+				<tr class="text-c">
+                    <th width="100">优先级</th>
+					<th width="100">状态</th>
+					<th width="100">备注</th>
+					<th width="100">产品</th>
+					<th width="100">创建时间</th>
+					<th width="100">操作</th>
+				</tr>
+				</thead>
+				<tbody id="listid">
+                <#if page.dataList?? &&  (page.dataList?size > 0) >
+					<#list page.dataList as list>
+						<tr>
+                            <td class="text-c" width="140">${list.downsingleSorting!''}</td>
+							<td class="text-c" width="100">
+                                <#if list.downsingleStatus == 1>
+                                    正在使用
+                                </#if>
+                                <#if list.downsingleStatus == 2>
+                                    停止使用
+                                </#if>
+                            </td>
+							<td class="text-c" width="100">
+                                ${list.downsingleDesc!''}
+                            </td>
+
+							<td class="text-c" width="100">
+                            <#if list.downsingleRuleItemList?? &&  (list.downsingleRuleItemList?size > 0) >
+                                <#list list.downsingleRuleItemList as Item>
+                                    ${Item.productName!''}-${Item.colorName!''}*${Item.downsingleItemNum!''}
+                                </#list>
+                            </#if>
+                            </td>
+							<td class="text-c" width="100">${list.downsingleCreateTime?string("yyyy-MM-dd HH:mm:ss")}</td>
+							<!-- 遍历操作 -->
+							<td class="td-manage text-c">
+                                <a onclick="add_employee('${path}/admin/downsingleRule/to_updateDownsingleRule?downsingleId='+${list.downsingleId!''});" title="修改" href="javascript:;"  class="ml-5" style="text-decoration:none">修改</a>
+                                <a onclick="del(${list.downsingleId!''});" title="删除" href="javascript:;"  class="ml-5" style="text-decoration:none">删除</a>
+                                </td>
+						</tr>
+					</#list>
+                <#else>
+                <tr><td id="noMachineTr" colspan="7" class="td-manage text-c" >暂时没有拆单策略,请添加!</td></tr>
+                </#if>
+				</tbody>
+			</table>
+			<div  style="display:none;" >
+				<div id="printlist">
+                </div>
+			</div>
+		</div>
+		<#include "/base/page_util.ftl">
+
+        <#--jquery.PrintArea 2.4-->
+
+		<script type="text/javascript">
+            function add_employee(url) {
+                window.location.href= url;
+            }
+
+            /*删除*/
+            function del(downsingleId){
+                layer.confirm('是否确认删除,删除后无法恢复?',function(index) {
+                    if (downsingleId != null) {
+                        $.ajax({
+                            type: "POST",
+                            url: "${path}/admin/downsingleRule/deleteDownsingleRule",
+                            async: false,
+                            data: {downsingleId: downsingleId},
+                            success: function (data) {
+                                if (data.returnCode == 200) {
+                                    layer.msg("删除成功!", {icon: 1, time: 2000});
+                                    location.reload();
+                                } else {
+                                    layer.msg("删除失败!", {icon: 5, time: 2000});
+                                }
+                            },
+                            error: function () {
+                                console.log("删除失败!");
+                            }
+                        });
+                    }
+                })
+            }
+        </script>
+	</body>
+</html>

+ 245 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/downsingle/update_downsingleRule.ftl

@@ -0,0 +1,245 @@
+<!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" />
+<#include "/base/add_base.ftl">
+    <title>修改拆单策略 - H-ui.filter v2.4</title>
+    <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;font-size: 16px;padding-left: 10px;color: #50a2ea;display: inline-block;}
+        .tit-2:after{content: '';position: absolute;left: 0;top: 50%;height: 6px;width: 6px;border-radius: 6px;margin-top: -3px; background-color: #32a3d8;}
+        .my-title{font-weight: 500;padding-left: 15px;position: relative;}
+        .my-title:after{content: '';position: absolute;left: 0;top:12%;width: 3px;height: 80%;background: #32a3d8;}
+        .my-input{padding: 8px 5px;width: 80%;border:1px solid rgba(0,0,0,.1);}
+        .my-input-date{padding: 8px 10px;border:1px solid rgba(0,0,0,.1);width: 80%;background: url(http://s.iamberry.com/images/rili-1.png) 98.5% center no-repeat; background-size:auto 50%;}
+        .input-box{margin: 18px 0;}
+        .input-dic{float: left;margin:5px 10px 0 0;font-size: 14px;}
+        .add-list{list-style-type: none;padding: 10px;background-color: #f5f5f5;width: 60%;float: left;margin: 0;}
+        .add-list>li{margin: 10px 0;}
+        .my-textarea{padding: 5px 10px;width: 77%;border:1px solid rgba(0,0,0,.1);margin-left: 12.5%;}
+        .my-btn-reset{padding: 10px 20px;width: 150px; background-color: #fff;color: #32a3d8;border: 1px solid #32a3d8;cursor:pointer;margin: 10px 10px 0 10px;}
+        .my-btn-submit{padding: 10px 20px;width: 158px; background-color: #50a2ea;color: #fff;border: 1px solid #50a2ea;cursor:pointer;margin: 10px 10px 0 10px;}
+        .my-select {
+            border: 1px solid rgba(0,0,0,.1);
+            padding: 6px 50px 6px 15px;
+            height: 34px;
+            -webkit-appearance: none;
+            appearance: none;
+            background: url(/common/images/pts/select-11.png) right center no-repeat;
+            background-size: auto 100%;
+        }
+        .check-box, .radio-box{padding-left: 0;}
+        input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        .huanhang{ float:left}
+        input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+        input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
+    </style>
+    <meta name="keywords" content="${path}">
+    <meta name="description" content="H-ui.admin v3.0,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
+</head>
+<body>
+<article class="page-container">
+    <form class="form form-horizontal" id="form-admin-add">
+        <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">
+            <label class="form-label col-3 col-sm-3"><span class="c-red">*</span>添加产品:</label>
+            <div class="formControls col-8 col-sm-8">
+                <input type="button" class="btn btn-primary add-order-button" onclick="add_product()" value="添加产品" >
+                <table class="table table-border table-bg table-bordered" style="margin-top: 10px;" id="all_add_product">
+                    <thead>
+                    <tr class="text-c" id="table1">
+                        <th style="text-align: center;" width="30" >产品名称</th>
+                        <th style="text-align: center;" width="25" >产品颜色</th>
+                    <#--<th style="text-align: center;" width="10">售价</th>-->
+                        <th style="text-align: center;" width="10">数量</th>
+                        <th style="text-align: center;" width="10">操作</th>
+                    </tr>
+                    </thead>
+                    <tbody id="add_product">
+                            <#if downsingleRuleInfo.downsingleRuleItemList??>
+                                <#if (downsingleRuleInfo.downsingleRuleItemList?size > 0)>
+                                    <#list downsingleRuleInfo.downsingleRuleItemList as info>
+                                    <tr class="text-c">
+                                        <input type="hidden" class="color_bar" id="" value="${info.downsingleItemBar!''}" >
+                                        <td>${info.productName!''}</td>
+                                        <td>${info.colorName!''}</td>
+                                    <#--<td>${info.colorPrice!''}</td>-->
+                                        <td><input type="text" class="input-text input-number item-num"  style="width: 100%;border: none;text-align: center;" name="" id="" placeholder="产品数量" value="${info.downsingleItemNum!''}" onkeyup="keyFun($(this),999,1)" onpaste="keyFun($(this),999,1)"></td>
+                                        <td><a href="javascript:void(0)" class="del_product all_down" onclick="delProduct($(this))" >删除</a></td>
+                                    </tr>
+                                    </#list>
+                                </#if>
+                            </#if>
+                    </tbody>
+                </table>
+
+                <input type="hidden" id="orderItemString" name="orderItemString" value="" >
+
+            </div>
+        </div>
+
+        <div class="row cl">
+            <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-9 col-sm-9 huanhang" style="margin: 10px 0px 10px 0;">
+                <input class="my-input" type="text" value="${downsingleRuleInfo.downsingleSorting!""}"  name="downsingleSorting" id="downsingleSorting" placeholder="请输入优先级" style="width: 78%;"/>
+            </div>
+        </div>
+        <div class="row cl">
+            <label class="form-label col-3 col-sm-3 huanhang" style="text-align: right;margin-top: 14px;">备注信息:</label>
+            <div class="formControls col-5 col-sm-5 huanhang" style="margin: 10px 0px 10px 0;">
+                <textarea type="text" placeholder="" id="downsingleDesc" name="downsingleDesc" style="width: 80%;height: 80px;">${downsingleRuleInfo.downsingleDesc!""}</textarea>
+            </div>
+        </div>
+        <div class="row cl">
+            <label class="form-label col-3 col-sm-3 huanhang" style="text-align: right;margin-top: 14px;"></label>
+            <div class="formControls col-9 col-sm-9 huanhang" style="margin: 10px 0px 10px 0;padding-left: 0;">
+                <input type="hidden" name="downsingleId" value="${downsingleRuleInfo.downsingleId!""}">
+                <button type="button" class="my-btn-submit" onclick="updateDownsingleRuleInfo();" style="margin-top: 20px;">确认新建</button>
+            </div>
+        </div>
+    </form>
+</article>
+<script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+<script type="text/javascript">
+
+
+
+    /**
+     *  删除商品
+     */
+    function delProduct($this){
+        $this.parents("tr").remove();
+    }
+    /**
+     * 添加产品
+     */
+    function add_product() {
+        layer_show("商品列表", "${path}/admin/salesOrder/to_add_product","1000","500");
+    }
+
+    /**
+     * 添加
+     */
+    function updateDownsingleRuleInfo() {
+
+        var downsingleSorting = $("#downsingleSorting").val();
+        if(downsingleSorting == null || downsingleSorting == ""){
+            layer.msg("优先级不能为空!", {icon: 5, time: 2000});
+            return;
+        }
+        //选择产品
+        var flag = false;
+        /*封装订单项*/
+        var orderItemArray = new Array();
+        $("#add_product").find("tr").each(function(){
+            var orderItem = new Object();
+            orderItem.itemColorBar = $(this).find(".color_bar").val();
+            orderItem.itemNum = $(this).find(".item-num").val();
+            orderItemArray.push(orderItem);
+            flag = true;
+        })
+        if(!flag){
+            vailErrorMsg($(".add-order-button"),"必须要有一个产品");
+            return false;
+        }
+
+        $("#orderItemString").val(JSON.stringify(orderItemArray));
+
+            $.ajax({
+                cache: true,
+                type: "POST",
+                data: $('#form-admin-add').serialize(),
+                url: "${path}/admin/downsingleRule/updateDownsingleRule",
+                async: false,
+                success: function(data){
+                    if (data.returnCode == 200) {
+                        layer.msg("修改成功!", {icon: 1, time: 1000},function () {
+                            window.location.href= '${path}/admin/downsingleRule/select_downsingleRule_list';
+                        });
+                        /*layer.msg("添加成功!", {icon: 1, time: 2000});*/
+                    } else {
+                        layer.msg("修改失败!", {icon: 5, time: 5000});
+                    }
+                },
+                error: function(XmlHttpRequest, textStatus, errorThrown){
+                    layer.msg("修改失败!", {icon: 5, time: 2000});
+                }
+            });
+
+    }
+
+
+    /**
+     * 选择商品回调
+     * @param colorIds
+     */
+    function setSelectProduct(colorIds){
+        var index = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
+
+        $("#all_add_product").show();
+
+        var colorIdArray = colorIds.split("_");
+        for(var i=0;i<colorIdArray.length;i++){
+            var colorId = colorIdArray[i];
+            if(colorId == ""){
+                break;
+            }
+
+            var flag = true;
+            $("#add_product").find("tr").each(function (){
+                var colId = $(this).find(".color_id").eq(0).val();
+                if(colId == colorId){
+                    flag  = false;
+                }
+            })
+            if(!flag){
+                continue;
+            }
+            $.ajax({
+                type: "POST",
+                data: { colorId : colorId},
+                url: "${path}/admin/product/get_product",
+                success: function(data){
+                    var html = "";
+                    if (data.returnCode == 200 && data.returnMsg.productColorList.length > 0 ) {
+                        for(var i=0;i<data.returnMsg.productColorList.length;i++){
+                            var productColor = data.returnMsg.productColorList[i];
+                            html += '<tr class="text-c">' +
+                                    '<input type="hidden" class="color_bar" id="" value="'+ productColor.colorBar +'" >' +
+                                    ' <td>'+ cufte(productColor.productName) +'</td>' +
+                                    ' <td>'+ cufte(productColor.colorName) +'</td>' +
+                                    /*' <td>'+ cufte(productColor.colorPrice)/100 +'</td>' +*/
+                                    ' <td><input type="text" class="input-text input-number item-num"  style="width: 100%;border: none;text-align: center;" name="" id="" placeholder="产品数量" value="1" onkeyup="keyFun($(this),999,1)" onpaste="keyFun($(this),999,1)"></td>' +
+                                    ' <td><a href="javascript:void(0)" class="del_product all_down" onclick="delProduct($(this))" >删除</a></td>' +
+                                    ' </tr>';
+                        }
+                    }else{
+                        html = '<tr class="text-c"><td colspan="12">没有搜索到商品,请重试!</td></tr>';
+                    }
+                    $("#add_product").append(html);
+                    /*计算价格*/
+                    calculatePrice();
+                }
+            });
+        }
+        layer.close(index);
+    }
+</script>
+</body>
+</html>

+ 44 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/list_wait_send_order.ftl

@@ -320,6 +320,25 @@
                                 $(spans[i]).parent().next()[0].onclick = function () {
                                     CLODOP.SelectBox.clickOK(false);
                                     layer.msg("打印成功",{icon: 6,time:3000});
+
+
+
+                                    //打印子订单
+                                    var SubPrintTemplates = res.SubPrintTemplates;
+                                    var SubOrders = res.SubOrders;
+                                    if(SubPrintTemplates != null){
+                                        SubPrintTemplates.map(function (item,index,ary ) {
+                                            console.log(item);
+                                            $("#temp-print-order").html(item);
+                                            var subPrintTemplate = $("#temp-print-order").html();
+                                            var orderid = SubOrders[i];
+
+                                            suPrint(subPrintTemplate);
+                                        });
+                                    }
+
+
+
                                 };
                             }
                         }
@@ -352,6 +371,25 @@
                             var flag = LODOP.PRINT();
                             if (flag) {
                                 layer.msg("打印成功",{icon: 6,time:3000});
+
+
+
+                                //打印子订单
+                                var SubPrintTemplates = res.SubPrintTemplates;
+                                var SubOrders = res.SubOrders;
+                                if(SubPrintTemplates != null){
+                                    SubPrintTemplates.map(function (item,index,ary ) {
+                                        console.log(item);
+                                        $("#temp-print-order").html(item);
+                                        var subPrintTemplate = $("#temp-print-order").html();
+                                        var orderid = SubOrders[i];
+
+                                        suPrint(subPrintTemplate);
+                                    });
+                                }
+
+
+
                             }
                         } else {
                             layer.msg(res.Reason,{icon: 2,time:3000});
@@ -370,7 +408,12 @@
     function distribution_postFirm(title,url,w,h){
         layer_show(title,url,w,h);
     }
-
+    //子单打印调用
+    function suPrint(subPrintTemplate) {
+        console.log(subPrintTemplate);
+        LODOP.ADD_PRINT_HTM("0mm", "0mm", "100%", "100%", subPrintTemplate);
+        return LODOP.PRINT();
+    }
     /**
      * 跳转到下载页面
      */

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

@@ -449,6 +449,36 @@
                 </tbody>
             </table>
         </#if>
+
+        <#if listTracking?? &&  (listTracking?size > 0) >
+            <div class="row cl">
+                <label class="form-label col-3">
+                    <div class="tit-2">
+                        跟踪记录
+                    </div>
+                </label>
+                <div class="formControls col-10 col-sm-10">
+                </div>
+            </div>
+
+            <table class="table table-border table-bg table-bordered" style="margin-top: 10px;">
+                <tr class="text-c">
+                    <th>操作人</th>
+                    <th>操作时间</th>
+                    <th>操作内容</th>
+                </tr>
+            <#if listTracking?? &&  (listTracking?size > 0) >
+                <#list listTracking as info>
+                    <tr class="text-c">
+                        <td>${info.adminName!''}</td>
+                        <td>${(info.trackingCreateDate?string("yyyy-MM-dd HH:mm:ss"))!''}</td>
+                        <td>${info.trackingDesc!''}</td>
+                    </tr>
+                </#list>
+            </#if>
+            </table>
+        </#if>
+
          <#--<button type="button" style="cursor:pointer;height: 35px;margin-top: 10px;"onClick="" class="my-btn-search"><<返回</button>-->
     </form>
     </div>

+ 1 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_list.ftl

@@ -336,7 +336,7 @@
         <#if identity != 2>
             <div style="float: left;margin-top: 20px;">
                 <button type="button" class="btn" style="border: 1px solid #50a2ea;background-color: #fff;color: #50a2ea;-webkit-transform:translateY(-5%);height: 35px;" id="" onclick="confirmOrder()">确认订单</button>
-                <#--<button type="button" class="btn" style="border: 1px solid #50a2ea;background-color: #fff;color: #50a2ea;-webkit-transform:translateY(-5%);height: 35px;" id="" onclick="distribution_express(null)">分配物流</button>-->
+                <button type="button" class="btn" style="border: 1px solid #50a2ea;background-color: #fff;color: #50a2ea;-webkit-transform:translateY(-5%);height: 35px;" id="" onclick="distribution_express(null)">分配物流</button>
                 <button type="button" class="btn" style="border: 1px solid #50a2ea;background-color: #fff;color: #50a2ea;-webkit-transform:translateY(-5%);height: 35px;" id="" onclick="chooseWarehouse(null)">通知配货</button>
                 <button type="button" onClick="upFiles2();"  class="btn" style="border: 1px solid #50a2ea;background-color: #fff;color: #50a2ea;-webkit-transform:translateY(-5%);height: 35px;">上传发货信息</button>
                 <button onClick="downloadOrderPage();" class="btn" style="border: 1px solid #50a2ea;background-color: #fff;color: #50a2ea;-webkit-transform:translateY(-5%);height: 35px;" type="button" title="下载订单">下载订单</button>

+ 1 - 1
watero-rst-web/src/main/webapp/common/js/customer/customer.js

@@ -1218,7 +1218,7 @@ function addCustomerReady(){
     $(".associated-phone").each(function () {
         var phone = $(this).val();
         if(phone != null && phone != "" && typeof (phone) != "undefined"){
-            if(phone.length != 11){
+            if(phone.length > 15){
                 vailErrorMsg($(this),"手机号码格式不正确");
                 phoneFlag = false;
             }