瀏覽代碼

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

wangxiaoming 5 年之前
父節點
當前提交
38074c9f8c
共有 29 個文件被更改,包括 1097 次插入167 次删除
  1. 9 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/cm/CustomerInfo.java
  2. 19 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/Product.java
  3. 80 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/order/ProductCombinatInfo.java
  4. 34 0
      watero-rst-core/src/main/java/com.iamberry.rst.core/tools/LogisticsInfo.java
  5. 4 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/cm/SalesOrderService.java
  6. 13 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/product/ProductService.java
  7. 54 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/InventoryServiceImpl.java
  8. 144 80
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java
  9. 5 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/SalesOrderMapper.java
  10. 3 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/customerInfoMapper.xml
  11. 11 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml
  12. 37 4
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/ProductServiceImpl.java
  13. 19 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/ProductMapper.java
  14. 36 3
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/productMapper.xml
  15. 18 18
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java
  16. 50 2
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java
  17. 14 3
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/product/AdminProductController.java
  18. 73 0
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminMachineController.java
  19. 3 0
      watero-rst-web/src/main/resources/watero-rst-orm.xml
  20. 1 0
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/custome_list.ftl
  21. 189 0
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/dayDeliveryNum_list.ftl
  22. 25 23
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/print_order.ftl
  23. 19 19
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_list.ftl
  24. 42 3
      watero-rst-web/src/main/webapp/WEB-INF/views/product/add_product.ftl
  25. 52 1
      watero-rst-web/src/main/webapp/WEB-INF/views/product/update_product.ftl
  26. 27 7
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/machine/machine_print_List.ftl
  27. 2 1
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/produce/save_produce.ftl
  28. 2 1
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/produce/update_produce.ftl
  29. 112 1
      watero-rst-web/src/main/webapp/common/js/product/product.js

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

@@ -201,6 +201,7 @@ public class CustomerInfo  implements Serializable {
         this.complaintDetectList = complaintDetectList;
     }
 
+    private String salesOrderId;//订单号
     public Date getVisitDate() {
         return visitDate;
     }
@@ -1074,4 +1075,12 @@ public class CustomerInfo  implements Serializable {
     public void setBeenOrderedNum(Integer beenOrderedNum) {
         this.beenOrderedNum = beenOrderedNum;
     }
+
+    public String getSalesOrderId() {
+        return salesOrderId;
+    }
+
+    public void setSalesOrderId(String salesOrderId) {
+        this.salesOrderId = salesOrderId;
+    }
 }

+ 19 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/Product.java

@@ -59,6 +59,10 @@ public class Product implements Serializable {
 
     private List<ProductAreaRela> productAreaRelaList = new ArrayList<>();  //区域
 
+
+    private Integer productIsCombination;//是否组合产品 1.否。2是
+    private List<ProductCombinatInfo> productCombinatList = new ArrayList<ProductCombinatInfo>();   //组合产品集合
+
     public Integer getProductId() {
         return productId;
     }
@@ -202,4 +206,19 @@ public class Product implements Serializable {
         this.colorBar = colorBar;
     }
 
+    public Integer getProductIsCombination() {
+        return productIsCombination;
+    }
+
+    public void setProductIsCombination(Integer productIsCombination) {
+        this.productIsCombination = productIsCombination;
+    }
+
+    public List<ProductCombinatInfo> getProductCombinatList() {
+        return productCombinatList;
+    }
+
+    public void setProductCombinatList(List<ProductCombinatInfo> productCombinatList) {
+        this.productCombinatList = productCombinatList;
+    }
 }

+ 80 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/ProductCombinatInfo.java

@@ -0,0 +1,80 @@
+package com.iamberry.rst.core.order;
+
+import java.io.Serializable;
+
+public class ProductCombinatInfo implements Serializable {
+    private static final long serialVersionUID = 8396437227116909749L;
+    private Integer combinatItemId;
+    private Integer productId;//组合产品id
+    private Integer combinatItemColorId;//产品项颜色id
+    private Integer combinatItemNum;//数量
+    private Integer combinatItemCretaeTime;//创建时间
+
+    private String productName;//产品名称
+    private String colorName;//产品颜色名称
+    private String colorBar;//产品bar
+
+    public Integer getCombinatItemId() {
+        return combinatItemId;
+    }
+
+    public void setCombinatItemId(Integer combinatItemId) {
+        this.combinatItemId = combinatItemId;
+    }
+
+    public Integer getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Integer productId) {
+        this.productId = productId;
+    }
+
+    public Integer getCombinatItemColorId() {
+        return combinatItemColorId;
+    }
+
+    public void setCombinatItemColorId(Integer combinatItemColorId) {
+        this.combinatItemColorId = combinatItemColorId;
+    }
+
+    public Integer getCombinatItemNum() {
+        return combinatItemNum;
+    }
+
+    public void setCombinatItemNum(Integer combinatItemNum) {
+        this.combinatItemNum = combinatItemNum;
+    }
+
+    public Integer getCombinatItemCretaeTime() {
+        return combinatItemCretaeTime;
+    }
+
+    public void setCombinatItemCretaeTime(Integer combinatItemCretaeTime) {
+        this.combinatItemCretaeTime = combinatItemCretaeTime;
+    }
+
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    public String getColorName() {
+        return colorName;
+    }
+
+    public void setColorName(String colorName) {
+        this.colorName = colorName;
+    }
+
+    public String getColorBar() {
+        return colorBar;
+    }
+
+    public void setColorBar(String colorBar) {
+        this.colorBar = colorBar;
+    }
+}

+ 34 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/tools/LogisticsInfo.java

@@ -1,5 +1,8 @@
 package com.iamberry.rst.core.tools;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -17,6 +20,13 @@ public class LogisticsInfo implements Serializable {
     private String logisticsReamk;
     private Date createDate;//创建时间
     private Integer logisticsIsLashSingle;//是否支持子母单 1是 2否
+    private Integer deliveryNum;//发货总数
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date startDate;                 //开始时间
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
+    private Date endDate;                   //结束时间
 
     public Integer getLogisticsId() {
         return logisticsId;
@@ -81,4 +91,28 @@ public class LogisticsInfo implements Serializable {
     public void setLogisticsIsLashSingle(Integer logisticsIsLashSingle) {
         this.logisticsIsLashSingle = logisticsIsLashSingle;
     }
+
+    public Integer getDeliveryNum() {
+        return deliveryNum;
+    }
+
+    public void setDeliveryNum(Integer deliveryNum) {
+        this.deliveryNum = deliveryNum;
+    }
+
+    public Date getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(Date startDate) {
+        this.startDate = startDate;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
 }

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

@@ -488,4 +488,8 @@ public interface SalesOrderService {
      *查询子订单数量
      */
     List<SalesOrder> listSublistCount(Integer salesId);
+    /**
+     *查询一天的发货总数
+     */
+    List<LogisticsInfo> dayDeliveryNum(LogisticsInfo logisticsInfo);
 }

+ 13 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/product/ProductService.java

@@ -2,6 +2,7 @@ package com.iamberry.rst.faces.product;
 
 import com.iamberry.rst.core.order.Product;
 import com.iamberry.rst.core.order.ProductColor;
+import com.iamberry.rst.core.order.ProductCombinatInfo;
 import com.iamberry.rst.core.order.ProductType;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.product.Gift;
@@ -142,4 +143,16 @@ public interface ProductService {
      * @return Integer
      */
     Integer  delete(Integer  id);
+    /**
+     * 添加组合项
+     *
+     * @return Integer
+     */
+    Integer  saveCombinat(ProductCombinatInfo productCombinatInfo);
+    /**
+     * 查询组合项数据
+     * @param
+     * @return Integer
+     */
+    List<ProductCombinatInfo>  combinatList(Integer  productId);
 }

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

@@ -7,6 +7,7 @@ import com.iamberry.rst.core.fm.InventoryInfo;
 import com.iamberry.rst.core.fm.InventoryLog;
 import com.iamberry.rst.core.order.OrderWarehouse;
 import com.iamberry.rst.core.order.ProductColor;
+import com.iamberry.rst.core.order.ProductCombinatInfo;
 import com.iamberry.rst.core.page.PageRequest;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.faces.cm.InventoryService;
@@ -14,6 +15,7 @@ import com.iamberry.rst.service.fm.mapper.InventoryLogMapper;
 import com.iamberry.rst.service.fm.mapper.InventoryMapper;
 import com.iamberry.rst.service.order.mapper.OrderWarehouseMapper;
 import com.iamberry.rst.service.product.mapper.ProductColorMapper;
+import com.iamberry.rst.service.product.mapper.ProductMapper;
 import com.iamberry.rst.util.PageUtil;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +42,8 @@ public class InventoryServiceImpl implements InventoryService {
     private OrderWarehouseMapper orderWarehouseMapper;
     @Autowired
     private ProductColorMapper productColorMapper;
+    @Autowired
+    private ProductMapper productMapper;
 
     @Override
     public InventoryInfo getByInventoryId(Integer inventoryId) {
@@ -73,6 +77,30 @@ public class InventoryServiceImpl implements InventoryService {
     @Override
     public synchronized Integer addInventory(InventoryInfo invent) {
         Integer flag = 0;
+        //查询是否是组合产品
+        if(invent != null && invent.getInventoryProductColorId() != null){
+            List<ProductCombinatInfo> listproduct = productMapper.combinatList(productColorMapper.getProductColorById(invent.getInventoryProductColorId()).getColorProductId());
+            if(listproduct.size() > 0){
+                for(ProductCombinatInfo info : listproduct){
+                    invent.setInventoryProductColorId(info.getCombinatItemColorId());
+                    if(invent.getInventoryGoodProductNum() != null && invent.getInventoryGoodProductNum() != 0 ){
+                        invent.setInventoryGoodProductNum(invent.getInventoryGoodProductNum() * info.getCombinatItemNum());
+                    }else if(invent.getInventoryDefectiveProductNum() != null && invent.getInventoryDefectiveProductNum() != 0 ){
+                        invent.setInventoryDefectiveProductNum(invent.getInventoryDefectiveProductNum() * info.getCombinatItemNum());
+                    }
+                    flag = addInv(invent);
+                }
+            }else{
+                flag = addInv(invent);
+            }
+        }else{
+            flag = addInv(invent);
+        }
+        return flag;
+    }
+
+    public Integer addInv(InventoryInfo invent){
+        Integer flag = 0;
         if(invent.getWarehouseId() == null){
             throw new RuntimeException("【出库】更新库存失败,出库仓库ID。");
         }
@@ -172,6 +200,32 @@ public class InventoryServiceImpl implements InventoryService {
     @Override
     public synchronized Integer minusInventory(InventoryInfo invent) {
         Integer flag = 0;
+        //查询是否是组合产品
+        if(invent != null && invent.getInventoryProductColorId() != null){
+            List<ProductCombinatInfo> listproduct = productMapper.combinatList(productColorMapper.getProductColorById(invent.getInventoryProductColorId()).getColorProductId());
+            if(listproduct.size() > 0){
+                for(ProductCombinatInfo info : listproduct){
+                    invent.setInventoryProductColorId(info.getCombinatItemColorId());
+                    if(invent.getInventoryGoodProductNum() != null && invent.getInventoryGoodProductNum() != 0 ){
+                        invent.setInventoryGoodProductNum(invent.getInventoryGoodProductNum() * info.getCombinatItemNum());
+                    }else if(invent.getInventoryDefectiveProductNum() != null && invent.getInventoryDefectiveProductNum() != 0 ){
+                        invent.setInventoryDefectiveProductNum(invent.getInventoryDefectiveProductNum() * info.getCombinatItemNum());
+                    }
+                    flag = minus(invent);
+                }
+            }else{
+                flag = minus(invent);
+            }
+        }else{
+            flag = minus(invent);
+        }
+
+        return flag;
+    }
+
+
+    public Integer minus(InventoryInfo invent) {
+        Integer flag = 0;
         if(invent.getWarehouseId() == null){
             throw new RuntimeException("【出库】更新库存失败,出库仓库ID。");
         }
@@ -279,5 +333,4 @@ public class InventoryServiceImpl implements InventoryService {
         }
         return flag;
     }
-
 }

+ 144 - 80
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -1290,7 +1290,6 @@ public class SalesOrderServiceImpl implements SalesOrderService {
                 isMachineRetuen = true;
             }
         }
-
         if(isMachineRetuen){
             //减去售后仓库不良品
             ComplaintDetectInfo cdinfo = complaintDetectInfoList.get(0);
@@ -1331,40 +1330,60 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         SalesOrderItem salesOrderItem = new SalesOrderItem();
         salesOrderItem.setItemOrderId(salesId);
         List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
         for(SalesOrderItem item : listOrderitem){
-            InventoryInfo info = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),salesWarehouseId);
-            if(info != null){
-                if(info.getInventoryGoodProductNum() >= item.getItemNum()){
-                    info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() - item.getItemNum());
-                    info.setInventoryRecentRecord(sdf.format(new Date())+"出库"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
-                    Integer flag =  inventoryMapper.updateById(info);
-                    if(flag < 1){
-                        throw new RuntimeException("【出库】更新库存失败,库存修改失败。");
-                    }
-                    //添加日志
-                    InventoryLog inventoryLog = new InventoryLog();
-                    inventoryLog.setLogProductName(info.getInventoryProductName());
-                    inventoryLog.setLogProductBar(info.getInventoryProductBar());
-                    inventoryLog.setLogRemainingNum(item.getItemNum());
-                    inventoryLog.setLogType(2);
-                    inventoryLog.setLogOperationType(2);
-                    inventoryLog.setLogDesc(sdf.format(new Date())+"待发货标记出库"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
-                    inventoryLog.setLogQualityType(1);
-                    inventoryLog.setLogWarehouseId(salesWarehouseId);
-                    flag = inventoryLogMapper.insert(inventoryLog);
-                    if(flag < 1){
-                        throw new RuntimeException("【出库】更新库存失败,增加库存记录失败。");
-                    }
-                }else{
-                    throw new RuntimeException("【出库】更新库存失败,"+ warehouseName +"["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存不足。");
+            List<ProductCombinatInfo> listproduct = productMapper.combinatList(item.getItemProductId());
+            if(listOrderitem.size() > 0){
+                for(ProductCombinatInfo combinatInfo : listproduct){
+                    invIne(item,orderWarehouse,combinatInfo);
                 }
             }else{
-                throw new RuntimeException("【出库】更新库存失败,未查询到库存信息,请确认“"+ warehouseName +"”是否有该产品["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存信息。");
+                invIne(item,orderWarehouse,null);
             }
+
         }
         return true;
     }
+
+    public void invIne(SalesOrderItem item,OrderWarehouse orderWarehouse,ProductCombinatInfo combinatInfo){
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Integer combinatItemNum;
+        if(combinatInfo == null ){
+            combinatItemNum = 1;
+        }else{
+            combinatItemNum = combinatInfo.getCombinatItemNum();
+            item.setItemColorBar(productService.getProduceColor(combinatInfo.getCombinatItemColorId()).getColorBar());
+        }
+        InventoryInfo infos = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),orderWarehouse.getWarehouseId());
+        if(infos != null){
+            if(infos.getInventoryGoodProductNum() >= (item.getItemNum() * combinatItemNum)){
+                infos.setInventoryGoodProductNum(infos.getInventoryGoodProductNum() - (item.getItemNum() * combinatItemNum));
+                infos.setInventoryRecentRecord(sdf.format(new Date())+"出库"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
+                Integer flag =  inventoryMapper.updateById(infos);
+                if(flag < 1){
+                    throw new RuntimeException("【出库】更新库存失败,库存修改失败。");
+                }
+                //添加日志
+                InventoryLog inventoryLog = new InventoryLog();
+                inventoryLog.setLogProductName(infos.getInventoryProductName());
+                inventoryLog.setLogProductBar(infos.getInventoryProductBar());
+                inventoryLog.setLogRemainingNum(item.getItemNum() * combinatItemNum);
+                inventoryLog.setLogType(2);
+                inventoryLog.setLogOperationType(2);
+                inventoryLog.setLogDesc(sdf.format(new Date())+"待发货标记出库"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
+                inventoryLog.setLogQualityType(1);
+                inventoryLog.setLogWarehouseId(orderWarehouse.getWarehouseId());
+                flag = inventoryLogMapper.insert(inventoryLog);
+                if(flag < 1){
+                    throw new RuntimeException("【出库】更新库存失败,增加库存记录失败。");
+                }
+            }else{
+                throw new RuntimeException("【出库】更新库存失败,"+ orderWarehouse.getWarehouseName() +"["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存不足。");
+            }
+        }else{
+            throw new RuntimeException("【出库】更新库存失败,未查询到库存信息,请确认“"+ orderWarehouse.getWarehouseName() +"”是否有该产品["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存信息。");
+        }
+    }
     //标记未出库时返还库存
     @Transactional
     @Override
@@ -1378,38 +1397,54 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         SalesOrderItem salesOrderItem = new SalesOrderItem();
         salesOrderItem.setItemOrderId(salesId);
         List<SalesOrderItem> listOrderitem = salesOrderService.listSalesOrderItem(salesOrderItem);
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         for(SalesOrderItem item : listOrderitem){
-            InventoryInfo info = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),salesWarehouseId);
-            if(info != null){
-                info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + item.getItemNum());
-                info.setInventoryRecentRecord(sdf.format(new Date())+"删除/作废/标记未出库时订单返还库存"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
-                Integer flag = inventoryMapper.updateById(info);
-                if(flag < 1){
-                    throw new RuntimeException("【返还库存】更新库存失败,库存修改失败。");
-                }
-                //添加日志
-                InventoryLog inventoryLog = new InventoryLog();
-                inventoryLog.setLogProductName(info.getInventoryProductName());
-                inventoryLog.setLogProductBar(info.getInventoryProductBar());
-                inventoryLog.setLogRemainingNum(item.getItemNum());
-                inventoryLog.setLogType(1);
-                inventoryLog.setLogOperationType(1);
-                inventoryLog.setLogDesc(sdf.format(new Date())+"删除/作废/标记未出库时订单返还库存"+item.getItemNum()+"件,订单号:"+item.getSalesOrderId());
-                inventoryLog.setLogQualityType(1);
-                inventoryLog.setLogWarehouseId(salesWarehouseId);
-                flag = inventoryLogMapper.insert(inventoryLog);
-                if(flag < 1){
-                    throw new RuntimeException("【返还库存】更新库存失败,增加库存记录失败。");
+            List<ProductCombinatInfo> listproduct = productMapper.combinatList(item.getItemProductId());
+            if(listOrderitem.size() > 0){
+                for(ProductCombinatInfo combinatInfo : listproduct){
+                    invTwo(item,orderWarehouse,combinatInfo);
                 }
             }else{
-                throw new RuntimeException("【返还库存】更新库存失败,未查询到库存信息,请确认“"+ warehouseName +"”是否有该产品["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存信息。");
+                invTwo(item,orderWarehouse,null);
             }
-
         }
         return true;
     }
 
+    private void invTwo(SalesOrderItem item,OrderWarehouse orderWarehouse,ProductCombinatInfo combinatInfo){
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Integer combinatItemNum;
+        if(combinatInfo == null ){
+            combinatItemNum = 1;
+        }else{
+            combinatItemNum = combinatInfo.getCombinatItemNum();
+            item.setItemColorBar(productService.getProduceColor(combinatInfo.getCombinatItemColorId()).getColorBar());
+        }
+        InventoryInfo info = inventoryMapper.getByInventoryByBar(item.getItemColorBar(),orderWarehouse.getWarehouseId());
+        if(info != null){
+            info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + (item.getItemNum() * combinatItemNum));
+            info.setInventoryRecentRecord(sdf.format(new Date())+"删除/作废/标记未出库时订单返还库存"+(item.getItemNum() * combinatItemNum)+"件,订单号:"+item.getSalesOrderId());
+            Integer flag = inventoryMapper.updateById(info);
+            if(flag < 1){
+                throw new RuntimeException("【返还库存】更新库存失败,库存修改失败。");
+            }
+            //添加日志
+            InventoryLog inventoryLog = new InventoryLog();
+            inventoryLog.setLogProductName(info.getInventoryProductName());
+            inventoryLog.setLogProductBar(info.getInventoryProductBar());
+            inventoryLog.setLogRemainingNum((item.getItemNum() * combinatItemNum));
+            inventoryLog.setLogType(1);
+            inventoryLog.setLogOperationType(1);
+            inventoryLog.setLogDesc(sdf.format(new Date())+"删除/作废/标记未出库时订单返还库存"+(item.getItemNum() * combinatItemNum)+"件,订单号:"+item.getSalesOrderId());
+            inventoryLog.setLogQualityType(1);
+            inventoryLog.setLogWarehouseId(orderWarehouse.getWarehouseId());
+            flag = inventoryLogMapper.insert(inventoryLog);
+            if(flag < 1){
+                throw new RuntimeException("【返还库存】更新库存失败,增加库存记录失败。");
+            }
+        }else{
+            throw new RuntimeException("【返还库存】更新库存失败,未查询到库存信息,请确认“"+ orderWarehouse.getWarehouseName() +"”是否有该产品["+ item.getItemProductName()+ "("+ item.getItemProductColor() +")" +"]库存信息。");
+        }
+    }
     @Override
     public List<SalesOrderItem> getDeliverNum(SalesOrder salesOrder) {
         return salesOrderMapper.getDeliverNum(salesOrder);
@@ -1463,36 +1498,17 @@ public class SalesOrderServiceImpl implements SalesOrderService {
                 //查询订单判断是否已出库
                 SalesOrder so = salesOrderMapper.getSalesOrderById(orderCorrectInfo.getItemOrderId());
                 if(so.getSalesDeliver() == 2){
-                    //返还库存
-                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                    InventoryInfo info = inventoryMapper.getByInventoryByBar(orderItem.getItemColorBar(),so.getSalesWarehouseId());
-                    //添加日志
-                    InventoryLog inventoryLog = new InventoryLog();
-                    inventoryLog.setLogProductName(info.getInventoryProductName());
-                    inventoryLog.setLogProductBar(info.getInventoryProductBar());
-                    inventoryLog.setLogOperationType(1);
-                    inventoryLog.setLogQualityType(1);
-                    inventoryLog.setLogWarehouseId(1);
-                    if(orderItem.getItemNum() > salesOrderItem.getItemNum()){//原数量大于更正后数量
-                        info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + (orderItem.getItemNum() - salesOrderItem.getItemNum()));
-                        info.setInventoryRecentRecord(sdf.format(new Date())+"更正订单返还库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
-                        inventoryLog.setLogRemainingNum(orderItem.getItemNum() - salesOrderItem.getItemNum());
-                        inventoryLog.setLogType(2);
-                        inventoryLog.setLogDesc(sdf.format(new Date())+"更正订单返还库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
-                    }else if(orderItem.getItemNum() < salesOrderItem.getItemNum()){
-                        if(info.getInventoryGoodProductNum() > (salesOrderItem.getItemNum() - orderItem.getItemNum())){
-                            info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() - (salesOrderItem.getItemNum() - orderItem.getItemNum()));
-                            info.setInventoryRecentRecord(sdf.format(new Date())+"更正订单减少库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
-                            inventoryLog.setLogRemainingNum(salesOrderItem.getItemNum() - orderItem.getItemNum());
-                            inventoryLog.setLogType(1);
-                            inventoryLog.setLogDesc(sdf.format(new Date())+"更正订单减少库存:"+(salesOrderItem.getItemNum() - orderItem.getItemNum())+"件");
-                        }else{
-                            return false;
+                    //查询是否是组合产品
+                    List<ProductCombinatInfo> listproduct = productMapper.combinatList(salesOrderItem.getItemProductId());
+                    if(listproduct.size() > 0){
+                        for(ProductCombinatInfo combinatInfo : listproduct){
+                            correctInv(orderItem,salesOrderItem,so.getSalesWarehouseId(),combinatInfo);
                         }
-
+                    }else{
+                        correctInv(orderItem,salesOrderItem,so.getSalesWarehouseId(),null);
                     }
-                    inventoryMapper.updateById(info);
-                    inventoryLogMapper.insert(inventoryLog);
+
+
                 }
                 //修改订单项数量
                 orderItem.setItemNum(salesOrderItem.getItemNum());
@@ -1506,6 +1522,49 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         }
         return true;
     }
+
+    private void correctInv(SalesOrderItem orderItem,SalesOrderItem salesOrderItem,Integer warehouseId,ProductCombinatInfo combinatInfo){
+        //返还库存
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        Integer combinatItemNum;
+        if(combinatInfo == null ){
+            combinatItemNum = 0;
+        }else{
+            combinatItemNum = combinatInfo.getCombinatItemNum();
+            orderItem.setItemColorBar(productService.getProduceColor(combinatInfo.getCombinatItemColorId()).getColorBar());
+        }
+        InventoryInfo info = inventoryMapper.getByInventoryByBar(orderItem.getItemColorBar(),warehouseId);
+        //添加日志
+        InventoryLog inventoryLog = new InventoryLog();
+        inventoryLog.setLogProductName(info.getInventoryProductName());
+        inventoryLog.setLogProductBar(info.getInventoryProductBar());
+        inventoryLog.setLogOperationType(1);
+        inventoryLog.setLogQualityType(1);
+        inventoryLog.setLogWarehouseId(warehouseId);
+        if(orderItem.getItemNum() > salesOrderItem.getItemNum()){//原数量大于更正后数量
+
+            info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() + ((orderItem.getItemNum()  * combinatItemNum) - (salesOrderItem.getItemNum()  * combinatItemNum)));
+            info.setInventoryRecentRecord(sdf.format(new Date())+"更正订单返还库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
+            inventoryLog.setLogRemainingNum((orderItem.getItemNum()  * combinatItemNum) - (salesOrderItem.getItemNum() * combinatItemNum));
+            inventoryLog.setLogType(2);
+            inventoryLog.setLogDesc(sdf.format(new Date())+"更正订单返还库存:"+(orderItem.getItemNum() - salesOrderItem.getItemNum())+"件");
+        }else if(orderItem.getItemNum() < salesOrderItem.getItemNum()){
+
+            if(info.getInventoryGoodProductNum() > ((salesOrderItem.getItemNum()  * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum))){
+                info.setInventoryGoodProductNum(info.getInventoryGoodProductNum() - ((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum)));
+                info.setInventoryRecentRecord(sdf.format(new Date())+"更正订单减少库存:"+((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum))+"件");
+                inventoryLog.setLogRemainingNum(((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum)));
+                inventoryLog.setLogType(1);
+                inventoryLog.setLogDesc(sdf.format(new Date())+"更正订单减少库存:"+((salesOrderItem.getItemNum() * combinatItemNum) - (orderItem.getItemNum() * combinatItemNum))+"件");
+            }else{
+                throw  new RuntimeException("更正订单-减少库存修改订单项数量失败!");
+            }
+
+        }
+        inventoryMapper.updateById(info);
+        inventoryLogMapper.insert(inventoryLog);
+    }
     //更正订单时返还库存
     public boolean returnInventoryByItemId(Integer itemId){
         SalesOrderItem salesOrderItem = new SalesOrderItem();
@@ -1721,6 +1780,11 @@ public class SalesOrderServiceImpl implements SalesOrderService {
         return salesOrderMapper.listSublistCount(salesId);
     }
 
+    @Override
+    public List<LogisticsInfo> dayDeliveryNum(LogisticsInfo logisticsInfo) {
+        return salesOrderMapper.dayDeliveryNum(logisticsInfo);
+    }
+
     /***
      * 计算金额
      * @param salesOrder

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

@@ -407,4 +407,9 @@ public interface SalesOrderMapper {
      *查询子订单数量
      */
     List<SalesOrder> listSublistCount(Integer salesId);
+
+    /**
+     *查询一天的发货总数
+     */
+    List<LogisticsInfo> dayDeliveryNum(LogisticsInfo logisticsInfo);
 }

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

@@ -556,6 +556,9 @@
       <if test="detectPlaceorder != null and detectPlaceorder != ''">
         and (cd.detect_state = 37 or cc.procTypeId = 3) AND detect_placeorder = #{detectPlaceorder}
       </if>
+      <if test="salesOrderId != null and salesOrderId != ''">
+        and oi.sales_orderId = #{salesOrderId}
+      </if>
     </where>
     GROUP BY c.customer_id
     ORDER BY c.customer_id desc

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

@@ -159,6 +159,10 @@
                     <foreach collection="salesIds" item="node" index="index" separator="," open="(" close=")">
                         #{node}
                     </foreach >
+                    or sales_belong_orderId IN
+                    <foreach collection="salesIds" item="node" index="index" separator="," open="(" close=")">
+                        #{node}
+                    </foreach >
                 </if>
                 <if test="salesWarehouseId != null ">
                     AND sales_warehouse_id = #{salesWarehouseId}
@@ -1955,4 +1959,11 @@
         WHERE
             sales_belong_orderId = #{salesId}
     </select>
+<!--查询一天的发货总数-->
+    <select id="dayDeliveryNum" parameterType="LogisticsInfo" resultType="LogisticsInfo">
+        SELECT li.*,count(1) deliveryNum from tb_rst_logistics_info li
+        LEFT JOIN tb_rst_sales_order_info oi on li.logistics_rst_code = oi.sales_post_firm
+        where sales_send_time &gt; #{startDate} AND sales_send_time &lt; #{endDate}
+        GROUP BY li.logistics_rst_code
+    </select>
 </mapper>

+ 37 - 4
watero-rst-service/src/main/java/com/iamberry/rst/service/product/ProductServiceImpl.java

@@ -2,10 +2,7 @@ package com.iamberry.rst.service.product;
 
 import com.github.pagehelper.PageHelper;
 import com.iamberry.rst.core.fm.InventoryInfo;
-import com.iamberry.rst.core.order.Product;
-import com.iamberry.rst.core.order.ProductAreaRela;
-import com.iamberry.rst.core.order.ProductColor;
-import com.iamberry.rst.core.order.ProductType;
+import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.page.PagedResult;
 import com.iamberry.rst.core.product.Gift;
 import com.iamberry.rst.core.product.OrderGift;
@@ -240,6 +237,16 @@ public class ProductServiceImpl implements ProductService {
                 throw new RuntimeException("添加产品使用区域失败");
             }
         }
+        //添加产品组合项
+        if(product.getProductCombinatList() != null && product.getProductCombinatList().size() > 0){
+            for (ProductCombinatInfo productCombinatInfo:product.getProductCombinatList()) {
+                productCombinatInfo.setProductId(product.getProductId());
+                flag = productMapper.saveCombinat(productCombinatInfo);
+                if(flag < 1){
+                    throw new RuntimeException("添加产品组合项失败");
+                }
+            }
+        }
         return  flag;
     }
 
@@ -390,6 +397,22 @@ public class ProductServiceImpl implements ProductService {
                 throw new RuntimeException("添加产品使用区域失败");
             }
         }
+
+        //删除过去的组合项
+
+        productMapper.deleteCombinat(product.getProductId());
+        //增加产品组合项
+        if(product.getProductCombinatList() != null && product.getProductCombinatList().size() > 0){
+            for (ProductCombinatInfo productCombinatInfo:product.getProductCombinatList()) {
+                productCombinatInfo.setProductId(product.getProductId());
+                flag = productMapper.saveCombinat(productCombinatInfo);
+                if(flag < 1){
+                    throw new RuntimeException("添加产品组合项失败");
+                }
+            }
+        }
+
+
         return  flag;
     }
 
@@ -417,4 +440,14 @@ public class ProductServiceImpl implements ProductService {
     public  Integer  delete(Integer  id){
         return  productMapper.delete(id);
     }
+
+    @Override
+    public Integer saveCombinat(ProductCombinatInfo productCombinatInfo) {
+        return productMapper.saveCombinat(productCombinatInfo);
+    }
+
+    @Override
+    public List<ProductCombinatInfo> combinatList(Integer productId) {
+        return productMapper.combinatList(productId);
+    }
 }

+ 19 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/ProductMapper.java

@@ -2,6 +2,7 @@ package com.iamberry.rst.service.product.mapper;
 
 import com.iamberry.rst.core.order.ProductColor;
 import com.iamberry.rst.core.order.Product;
+import com.iamberry.rst.core.order.ProductCombinatInfo;
 import com.iamberry.rst.core.order.ProductType;
 import com.iamberry.rst.core.product.OrderGift;
 
@@ -124,5 +125,23 @@ public interface ProductMapper {
      * @return Integer
      */
     Integer  delete(Integer  id);
+    /**
+     * 添加组合项
+     *
+     * @return Integer
+     */
+    Integer  saveCombinat(ProductCombinatInfo productCombinatInfo);
+    /**
+     * 删除组合项数据
+     * @param
+     * @return Integer
+     */
+    Integer  deleteCombinat(Integer  productId);
+    /**
+     * 查询组合项数据
+     * @param
+     * @return Integer
+     */
+    List<ProductCombinatInfo>  combinatList(Integer  productId);
 
 }

+ 36 - 3
watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/productMapper.xml

@@ -322,7 +322,8 @@
         product_type,
         product_number,
         product_is_detection,
-        product_wholesale
+        product_wholesale,
+        product_is_combination
         )
         values
         (
@@ -335,7 +336,8 @@
         #{productType},
         #{productNumber},
         #{productIsDetection},
-        #{productWholesale}
+        #{productWholesale},
+        #{productIsCombination}
         )
     </insert>
     <update id="update" parameterType="Product" >
@@ -377,5 +379,36 @@
         tb_rst_product_info
         where product_id=#{productId}
     </delete>
-
+    <insert id="saveCombinat" parameterType="ProductCombinatInfo">
+        insert into
+        tb_rst_combinat_product_info
+        (
+        product_id,
+        combinat_item_color_id,
+        combinat_item_num
+        )
+        values
+        (
+        #{productId},
+        #{combinatItemColorId},
+        #{combinatItemNum}
+        )
+    </insert>
+    <delete id="deleteCombinat" parameterType="Integer" >
+        delete FROM
+        tb_rst_combinat_product_info
+        where product_id=#{productId}
+    </delete>
+    <select id="combinatList" parameterType="Integer"  resultType="ProductCombinatInfo">
+        SELECT
+        cpi.*,
+        pc.color_name colorName,
+        pi.product_name productName,
+        pc.color_bar colorBar
+        FROM
+        tb_rst_combinat_product_info cpi
+        LEFT JOIN tb_rst_product_color pc on cpi.combinat_item_color_id = pc.color_id
+        LEFT JOIN tb_rst_product_info pi on cpi.product_id = pi.product_id
+        WHERE cpi.product_id = #{productId}
+    </select>
 </mapper>

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

@@ -2028,30 +2028,30 @@ public class AdminSalesOrderController {
                         dealerProduct.setColorBar(pc.getColorBar());
                         List<DealerProduct> dealerProductList = dealerProductService.getDealerProductAndStoreList(dealerProduct);
                         if(dealerProductList != null && dealerProductList.size() > 0){
-                            for (DealerProduct dp:dealerProductList) {
-                                if(1 == dp.getDealProdStoreArea()){
-                                    // 1:全部店铺
+                    for (DealerProduct dp:dealerProductList) {
+                        if(1 == dp.getDealProdStoreArea()){
+                            // 1:全部店铺
+                            pc.setColorDiscount(dp.getDealProdPrice());
+                            pc.setColorPrice(dp.getDealProdPrice());
+                        }else{
+                            // 2:部分店铺
+                            for (DealerProductStore dps:dp.getDealerProductStoreList()) {
+                                if(dealerChannel.getDealChannelId().equals(dps.getDealChannelId())){
                                     pc.setColorDiscount(dp.getDealProdPrice());
                                     pc.setColorPrice(dp.getDealProdPrice());
-                                }else{
-                                    // 2:部分店铺
-                                    for (DealerProductStore dps:dp.getDealerProductStoreList()) {
-                                        if(dealerChannel.getDealChannelId().equals(dps.getDealChannelId())){
-                                            pc.setColorDiscount(dp.getDealProdPrice());
-                                            pc.setColorPrice(dp.getDealProdPrice());
-                                        }
-                                    }
                                 }
                             }
-                        }else{
-                            rj = ResponseJson.getFAILURE();
-                            rj.setResultMsg("未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+";产品名称:"+ pc.getProductName() +"("+ pc.getColorName() +")。");
                         }
                     }
-                /*}*/
-            }else{
-                rj = ResponseJson.getFAILURE();
-                rj.setResultMsg("查询店铺对应客户信息失败,店铺ID为空。");
+                }else{
+                    rj = ResponseJson.getFAILURE();
+                    rj.setResultMsg("未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+";产品名称:"+ pc.getProductName() +"("+ pc.getColorName() +")。");
+                }
+            }
+            /*}*/
+        }else{
+            rj = ResponseJson.getFAILURE();
+            rj.setResultMsg("查询店铺对应客户信息失败,店铺ID为空。");
                 return rj;
             }
         }

+ 50 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -1,6 +1,7 @@
 package com.iamberry.rst.controllers.order;
 
 import com.alibaba.fastjson.JSONObject;
+import com.iamberry.redis.RedisUtils;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
 import com.iamberry.rst.core.cm.StoreInfo;
@@ -37,6 +38,7 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import com.alibaba.fastjson.JSONArray;
@@ -179,7 +181,7 @@ public class AwaitSendController {
         salesOrder.setSalesWarehouseId(orderWarehouse.getWarehouseId());
         // 查询确认的订单
         salesOrder.setSalesStatus(1);
-        salesOrder.setSalesIsSublist(1);//不查询子订单
+        /*salesOrder.setSalesIsSublist(1);//不查询子订单*/
         PagedResult<SalesOrder> pagedResult = salesOrderService.listSalesOrderPage(1, pageSize, salesOrder, false);
         // 待发货产品总数
         int waitProductTotal = 0;
@@ -346,7 +348,11 @@ public class AwaitSendController {
         }
         // 20181113增加需求:产品名称后面增加打印订单日期
         goodName.append("【D").append(DateTimeUtil.format(new Date(), "MMdd")).append("】");
-        String uuid = UUIDGenerator.getUUID().substring(0, 8);
+        String uuid = RedisUtils.get(orderId);
+        if(uuid == null){
+            uuid = UUIDGenerator.getUUID().substring(0, 8);
+            RedisUtils.put(orderId,uuid);
+        }
         // 增加产品信息
         Map<String, Object> product1 = new HashMap<String, Object>();
         product1.put("GoodsName", uuid);
@@ -1224,4 +1230,46 @@ public class AwaitSendController {
         return "";
     }
 
+
+    /**
+     *
+     * 查询一天的发货总数
+     * @param
+     * @return
+     */
+    @RequestMapping("/dayDeliveryNum")
+    @RequiresPermissions("salesOrder:dayDeliveryNum:deliver")
+    public ModelAndView  dayDeliveryNum(HttpServletRequest request) throws ParseException {
+        ModelAndView mv = new ModelAndView("order/salesOrder/dayDeliveryNum_list");
+        String dates = request.getParameter("date");
+        Date date = null;
+        if(dates != null){
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+            date = simpleDateFormat.parse(dates);
+        }
+        LogisticsInfo logisticsInfo = new LogisticsInfo();
+        Calendar calendarStart = Calendar.getInstance();
+        Calendar calendarEnd = Calendar.getInstance();
+        if(date != null){
+            calendarStart.setTime(date);
+            calendarEnd.setTime(date);
+        }else{
+            calendarStart.setTime(new Date());
+            calendarEnd.setTime(new Date());
+        }
+        calendarStart.set(Calendar.HOUR_OF_DAY,0);
+        calendarStart.set(Calendar.MINUTE,0);
+        calendarStart.set(Calendar.SECOND,0);
+        calendarEnd.set(Calendar.HOUR_OF_DAY,23);
+        calendarEnd.set(Calendar.MINUTE,59);
+        calendarEnd.set(Calendar.SECOND,59);
+
+        logisticsInfo.setStartDate(calendarStart.getTime());
+        logisticsInfo.setEndDate(calendarEnd.getTime());
+
+        List<LogisticsInfo> logisticsInfoList = salesOrderService.dayDeliveryNum(logisticsInfo);
+        mv.addObject("logisticsInfoList",logisticsInfoList);
+        mv.addObject("date",date);
+        return mv;
+    }
 }

+ 14 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/product/AdminProductController.java

@@ -179,7 +179,7 @@ public class AdminProductController {
     @ResponseBody
     @RequiresPermissions("salesOrder:save:product")
     @RequestMapping("/add_product")
-    public ResponseJson addProduct(HttpServletRequest request,Product product,String colorListJson) {
+    public ResponseJson addProduct(HttpServletRequest request,Product product,String colorListJson,String productString) {
         ResponseJson rj = ResponseJson.getSUCCESS();
         if(product == null){
             rj = ResponseJson.getFAILURE();
@@ -190,11 +190,15 @@ public class AdminProductController {
         JSONArray jsonArray = JSONArray.fromObject(colorListJson);
         List<ProductColor> productColorList =  (List) JSONArray.toCollection(jsonArray, ProductColor.class);
         product.setColorList(productColorList);
+        if(productString != null) {
+            JSONArray productCombinatArray = JSONArray.fromObject(productString);
+            List<ProductCombinatInfo> productCombinatList = (List) JSONArray.toCollection(productCombinatArray, ProductCombinatInfo.class);
+            product.setProductCombinatList(productCombinatList);
+        }
         rj = verification(product);
         if(rj.getReturnCode() == 500){
             return rj;
         }
-
         List<ProductAreaRela> productAreaRelaList = new ArrayList<>();
         if(product.getProductAreaRelaStr() != null && !"".equals(product.getProductAreaRelaStr())){
             String areas[] = product.getProductAreaRelaStr().split(",");
@@ -317,6 +321,8 @@ public class AdminProductController {
         productColor.setColorProductId(productId);
         List<ProductColor> productColorList = productColorService.getProductColorList(productColor);
         mv.addObject("productColorList",productColorList);
+        List<ProductCombinatInfo> productCombinatList =  productService.combinatList(productId);
+        mv.addObject("productCombinatList",productCombinatList);
         return mv;
     }
 
@@ -328,7 +334,7 @@ public class AdminProductController {
     @ResponseBody
     @RequiresPermissions("salesOrder:update:product")
     @RequestMapping("/update_product")
-    public ResponseJson updateProduct(HttpServletRequest request,Product product,String colorListJson) {
+    public ResponseJson updateProduct(HttpServletRequest request,Product product,String colorListJson,String productString) {
         ResponseJson rj = ResponseJson.getSUCCESS();
         if(product == null){
             rj = ResponseJson.getFAILURE();
@@ -339,6 +345,11 @@ public class AdminProductController {
         JSONArray jsonArray = JSONArray.fromObject(colorListJson);
         List<ProductColor> productColorList =  (List) JSONArray.toCollection(jsonArray, ProductColor.class);
         product.setColorList(productColorList);
+        if(productString != null && !productString.equals("")){
+            JSONArray productCombinatArray = JSONArray.fromObject(productString);
+            List<ProductCombinatInfo> productCombinatList =  (List) JSONArray.toCollection(productCombinatArray, ProductCombinatInfo.class);
+            product.setProductCombinatList(productCombinatList);
+        }
         rj = verification(product);
         if(rj.getReturnCode() == 500){
             return rj;

+ 73 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/pts/AdminMachineController.java

@@ -596,6 +596,9 @@ public class AdminMachineController {
             }else if(produce.getBerGenerateRules() == 3){
                 String model = produce.getProducePattern() + produce.getProduceModel();
                 berQrcodeNum =  generationBarCode(num,model);
+            }else if(produce.getBerGenerateRules() == 4){
+                String model = produce.getProducePattern() + produce.getProduceModel();
+                berQrcodeNum =  generationElementBarCode(num,model);
             }
             if(produce.getIsPrintQrcode() == 1) {
                 if (produce.getIsGeneralQrcode() == 2) {
@@ -728,6 +731,70 @@ public class AdminMachineController {
         barcode = model + productCodeModel + dateMonthYear + serialNumber + (int)checkCode;
         return barcode;
     }
+
+   /* private String packagerCode = "12";//滤芯封装商编码
+    private String manufacturerCode = "R100AA12";//滤芯生产商编码*/
+    //生成博乐宝滤芯条形码
+    public String generationElementBarCode(String serialNumber,String model) {
+        String barcode = "";
+        if(serialNumber.length() < 5){
+            serialNumber = "0"+serialNumber;
+        }
+        serialNumber = serialNumber.trim();
+        //获取年月日
+        int year = DateTimeUtil.year();
+        int month = DateTimeUtil.month() + 1;
+        int day = DateTimeUtil.day();
+
+        SysConfig sysConfig = sysConfigService.getSysConfigAll(7);
+        if(sysConfig.getConfigStatus() == 1){
+            String config = sysConfig.getConfigParameter();
+            String[] configs = config.split(",");
+            month = Integer.valueOf(configs[0]);
+            day = Integer.valueOf(configs[1]);
+        }
+
+        char dateYear;
+        char dateMonth;
+        char dateDay;
+        String dateMonthYear = "";
+        int yearCod = year - years;
+        if(yearCod < 10){
+            dateYear = (char)(yearCod +'0');
+        }else{
+            dateYear = (char)((yearCod + days) +'0');
+        }
+        if(month < 10){
+            dateMonth = (char)(month +'0');
+        }else{
+            dateMonth = (char)(month + days);
+        }
+        if(day < 10){
+            dateDay = (char)(day +'0');
+        }else{
+            dateDay = (char)(day + days);
+        }
+        dateMonthYear = String.valueOf(dateYear) + dateMonth + dateDay;
+        //计算序列号
+        String[] nums = serialNumber.split("");
+        if(nums.length > 5){
+            List<String> list = new ArrayList<String>();
+            // 循环迭代,把数组放进List里面
+            for (String i : nums) {
+                if(i !=null && !i.equals("")){
+                    list.add(i);
+                }
+            }
+            nums = new String[]{"", "", "", "", ""};
+            for(int i = 0; i< list.size(); i++){
+                nums[i] = list.get(i);
+            }
+        }
+        int num = (Integer.valueOf(nums[4]) + Integer.valueOf(nums[2]) + Integer.valueOf(nums[0])) * 5 + (Integer.valueOf(nums[3]) + Integer.valueOf(nums[1])) * 3;
+        double checkCode = Math.ceil((double)num / 10) * 10 - num;
+        barcode = model + dateMonthYear + serialNumber + (int)checkCode;
+        return barcode;
+    }
     /**
      * 进入添加翻新机界面
      **/
@@ -851,6 +918,9 @@ public class AdminMachineController {
                     }else if(produce.getBerGenerateRules() == 3){
                         String model = produce.getProducePattern() + produce.getProduceModel();
                         berQrcodeNum =  generationBarCode(num,model);
+                    }else if(produce.getBerGenerateRules() == 4){
+                        String model = produce.getProducePattern() + produce.getProduceModel();
+                        berQrcodeNum =  generationElementBarCode(num,model);
                     }
                     if(produce.getIsPrintQrcode() == 1){
                         if(produce.getIsGeneralQrcode() == 2) {
@@ -897,6 +967,9 @@ public class AdminMachineController {
                     }else if(produce.getBerGenerateRules() == 3){
                         String model = produce.getProducePattern() + produce.getProduceModel();
                         berQrcodeNum =  generationBarCode(num,model);
+                    }else if(produce.getBerGenerateRules() == 4){
+                        String model = produce.getProducePattern() + produce.getProduceModel();
+                        berQrcodeNum =  generationElementBarCode(num,model);
                     }
                     if(produce.getIsPrintQrcode() == 1) {
                         if (produce.getIsGeneralQrcode() == 2) {

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

@@ -224,6 +224,9 @@
 
 		<!--客诉统计新增-->
 		<typeAlias type="com.iamberry.rst.core.cm.CustomerStatistics" alias="CustomerStatistics"/>
+
+		<!--产品新增-->
+		<typeAlias type="com.iamberry.rst.core.order.ProductCombinatInfo" alias="ProductCombinatInfo"/>
 	</typeAliases>
 	<!-- PageHelper -->
 	<plugins>

File diff suppressed because it is too large
+ 1 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/custome_list.ftl


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

@@ -0,0 +1,189 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <link rel="Bookmark" href="/favicon.ico" >
+    <link rel="Shortcut Icon" href="/favicon.ico" />
+<#include "/base/add_base.ftl">
+    <title>当天已打单总数</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;text-align: left;font-size: 16px;padding-left: 10px;}
+        .tit-2:after{content: '';position: absolute;left: 0;top: 20%;height: 60%;width: 3px;background-color: #32a3d8;}
+        #province select{margin-right:10px; width:100px;height: 31px;-webkit-appearance:none !important;appearance:none;background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;padding-left:3px;padding-right: 25px;}
+        #suggest, #suggest2 {width:200px}
+        .gray {color:gray}
+        .ac_results {background:#fff;border:1px solid #7f9db9;position: absolute;z-index: 10000;display: none}
+        .ac_results li a {white-space: nowrap;text-decoration:none;display:block;color:#05a;padding:1px 3px}
+        .ac_results li {border:1px solid #fff}
+        .ac_over, .ac_results li a:hover {background:#c8e3fc}
+        .ac_results li a span {float:right}
+        .ac_result_tip {border-bottom:1px dashed #666;padding:3px}
+        .select-box{background: url(${path}/common/images/cm/select-1.png) right center no-repeat;background-size: auto 100%;}
+        .select-box select{-webkit-appearance:none !important;background-color: transparent; appearance:none;padding-right: 15px;}
+        .dalog-ask{position: absolute;left:60%;top:0;-webkit-transform: translateY(-30%);transform: translateY(-30%);display: none;background-color: #fff;z-index: 10;}
+        .tag{ width:300px; min-height:300px; border:1px solid #32a3d8; position:relative;background-color: #fff;line-height: 1.5;padding: 10px 12px;}
+        .tag em{display:block; border-width:15px; position:absolute; top:30%; left:-30px;border-style:solid dashed dashed; border-color:transparent  #32a3d8 transparent transparent;font-size:0; line-height:0;}
+        .dalog-ask .ask{color: #000;margin: 10px 0 5px 0;}
+        .dalog-ask .answer{color: #666;margin-bottom: 10px;}
+        .dalog-ask .answer:hover{color: #32a3d8;cursor: pointer;}
+        .time-line-list{list-style: none;width: 100%;margin-left: -20px;}
+        .time-line-list>li{position: relative;float: left; text-align: center;width: 100px;overflow: hidden;white-space: nowrap;word-break: break-all;padding: 2px 0;}
+        .time-line-list .number{display: inline-block; padding: 2px; background: #32a3d8;border: 2px solid #fff;box-shadow:0 0 0 1px #32a3d8;width: 20px;height: 20px;color: #fff;line-height: 20px;border-radius: 50%;}
+        .time-line-list>li:before{content:'';position: absolute;height: 1px;width: 30%;right:0;top: 15px; background-color: #32a3d8;}
+        .time-line-list>li:after{content: '';position: absolute;height: 1px;width: 30%;left: 0;top: 15px;background:#32a3d8;}
+        .time-line-list>li:first-child:after,.time-line-list>li:last-child:before{display: none;}
+        .time-line-list .arrow{border-width:7px; position:absolute; left:25%; top:9px;border-style:solid dashed dashed; border-color:transparent  transparent  transparent #32a3d8;font-size:0; line-height:0;}
+        .time-line-list>li:first-child .arrow{display: none;}
+        .table-bg th{background-color: #e2f6ff;}
+        .update-parts>span{margin-right: 10px;padding: 3px 4px;background-color: #effaff;border: 1px solid #32a3d8;}
+    </style>
+</head>
+<body>
+<div class="page-container">
+    <div class="order-list">
+        <div class="text-c">
+            <form action="${path}/admin/await_send/dayDeliveryNum" method="post">
+                <div class="row cl" style="margin-left: 0px;">
+
+
+                    <div class="formControls col-2 col-sm-2"  style="padding: 0px 10px 0px 0px; width: 150px;">
+                        <input type="text" value="${(date?string("yyyy-MM-dd"))!''}" style="" class="input-text my-input-date Wdate" placeholder="打单日期" onClick="WdatePicker({skin:'whyGreen',maxDate:'%y-%M-%d'})" id="date" name="date" readonly="readonly"/>
+                    </div>
+
+
+
+                     <div class="formControls col-1 col-sm-1" >
+                         <button type="submit" class="btn btn-primary" style="background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);"  name="">搜索</button>
+                     </div>
+                </div>
+            </form>
+        </div>
+            <table class="table table-border table-bordered table-bg table-hover table-sort">
+                <thead>
+                <tr class="text-c">
+                    <th width="50">快递名称</th>
+                    <th width="50">快递代码</th>
+                    <th width="50">打单数量</th>
+                </tr>
+                </thead>
+                <tbody>
+        <#if logisticsInfoList?? &&  (logisticsInfoList?size > 0) >
+            <#list logisticsInfoList as info>
+        <tr>
+            <td class="text-c" width="100">${info.logisticsName!''}</td>
+            <td class="text-c" width="100">${info.logisticsRstCode!''}</td>
+            <td class="text-c" width="100">${info.deliveryNum!''}</td>
+        </tr>
+        </#list>
+        <#else>
+            <tr><td colspan="3" class="td-manage text-c" >暂时没有打单信息!</td></tr>
+        </#if>
+                </tbody>
+            </table>
+
+    </div>
+
+</div>
+
+<tfoot>
+</tfoot>
+<script type="text/javascript" src="${path}/common/lib/My97DatePicker/4.8/WdatePicker.js"></script>
+<script>
+
+    var selectType = "checkbox";
+
+    $(function () {
+        var isRadio = $("#isRadio").val();
+        if(isRadio != null && isRadio == 1){
+            selectType = "radio";
+        }
+
+        /*搜索*/
+        $(document).on('click', '#searchOrder', function() {
+            searchOrder();
+        });
+
+        /*初始化  搜索订单  */
+       searchOrder();
+
+        /*回车搜索*/
+        $('.input-text').keydown(function(event){
+            if(event.keyCode == 13){ //绑定回车
+                $('#searchOrder').click();
+            }
+        });
+    });
+
+    /**
+     * 搜索订单
+     */
+    function searchOrder(){
+        var index = layer.load(1, {
+            shade: [0.5,'#fff'] //0.1透明度的白色背景
+        });
+
+        var productName = cufte($("#productName").val());
+        var colorName = cufte($("#colorName").val());
+        var colorBar = cufte($("#colorBar").val());
+        var productType = cufte($("#productType").val());
+        var typeCompany = cufte($("#typeCompany").val());
+
+        $.ajax({
+            type: "POST",
+            data: {
+                productName : productName,
+                colorName : colorName,
+                colorBar : colorBar,
+                productType : productType,
+                typeCompany : typeCompany
+            },
+            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">' +
+                                ' <td><input type="'+ selectType +'" class="color_id" id=""  name="color_id" value="'+ productColor.colorId +'" ></td>' +
+                                ' <td>'+ cufte(productColor.productName) +'</td>' +
+                                ' <td>'+ cufte(productColor.colorName) +'</td>' +
+                                ' <td>'+ cufte(productColor.colorPrice)/100 +'</td>' +
+                                ' <td>'+ cufte(productColor.colorBar) +'</td>' +
+                                ' <td>'+ cufte(productColor.productTypeName) +'</td>' +
+                                ' </tr>';
+                    }
+                }else{
+                    html = '<tr class="text-c"><td colspan="12">没有搜索到商品,请重试!</td></tr>';
+                }
+                $("#productHtml").html(html);
+                layer.close(index);
+            },
+            error: function(XmlHttpRequest, textStatus, errorThrown){
+                layer.close(index);
+            }
+        });
+    }
+
+    /**
+     * 选择订单,返回订单内容到父级
+     */
+    function selectProduct() {
+        var colorId = "";
+        $(".color_id").each(function(){
+            if($(this).is(':checked')){
+                colorId += $(this).val() + "_";
+            }
+        })
+        parent.setSelectProduct(colorId);
+        parent.layer.close(parent.layer.getFrameIndex(window.name));
+    }
+</script>
+
+</body>
+</html>

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

@@ -51,30 +51,32 @@
                             <tr class="text-c"><td colspan="12">暂无数据</td></tr>
                             <#else>
                                 <#list value as o>
-                                <tr class="text-c ${x}-wait-print-order" printState="1" printNum="0">
-                                    <td>待处理</td>
-                                    <td salesId="${o.salesId}" post="${(o.salesPostFirm)!}">${(o.salesOrderId)!}</td>
-                                    <td>${(o.salesAddressName)!}</td>
-                                    <td>${(o.salesAddressTel)!}</td>
-                                    <td>${(o.salesAddressInfo)!}</td>
-                                    <td style="text-align: left;">
-                                        <#if o.salesOrderItemList ??>
-                                            <#list o.salesOrderItemList as d>
-                                                <#if o.suSalesOrderItemList ??>
-                                                    <#if d_index == 0><img style="width: 20px;height: 20px;" src="/common/images/zhudindan.png"></#if>
+                                <#if o.salesIsSublist = 1>
+                                    <tr class="text-c ${x}-wait-print-order" printState="1" printNum="0">
+                                        <td>待处理</td>
+                                        <td salesId="${o.salesId}" post="${(o.salesPostFirm)!}">${(o.salesOrderId)!}</td>
+                                        <td>${(o.salesAddressName)!}</td>
+                                        <td>${(o.salesAddressTel)!}</td>
+                                        <td>${(o.salesAddressInfo)!}</td>
+                                        <td style="text-align: left;">
+                                            <#if o.salesOrderItemList ??>
+                                                <#list o.salesOrderItemList as d>
+                                                    <#if o.suSalesOrderItemList ??>
+                                                        <#if d_index == 0><img style="width: 20px;height: 20px;" src="/common/images/zhudindan.png"></#if>
+                                                        <#if d_index gt 0><span style="margin-left: 24px;" src=""></span></#if>
+                                                    </#if><span class="label label-success radius">${(d.itemProductName)!}(${(d.itemProductColor)!})*${(d.itemNum)!}</span><br>
+                                                </#list>
+                                            </#if>
+                                            <#if o.suSalesOrderItemList ??>
+                                                <#list o.suSalesOrderItemList as d>
+                                                    <#if d_index == 0><img style="width: 20px;height: 20px;" src="/common/images/zidingdan.png"></#if>
                                                     <#if d_index gt 0><span style="margin-left: 24px;" src=""></span></#if>
-                                                </#if><span class="label label-success radius">${(d.itemProductName)!}(${(d.itemProductColor)!})*${(d.itemNum)!}</span><br>
-                                            </#list>
-                                        </#if>
-                                        <#if o.suSalesOrderItemList ??>
-                                            <#list o.suSalesOrderItemList as d>
-                                                <#if d_index == 0><img style="width: 20px;height: 20px;" src="/common/images/zhudindan.png"></#if>
-                                                <#if d_index gt 0><span style="margin-left: 24px;" src=""></span></#if>
-                                                <span class="label label-success radius">${(d.itemProductName)!}(${(d.itemProductColor)!})*${(d.itemNum)!}</span><span style="display: none;">${(d.itemOrderId)!}</span><br>
-                                            </#list>
-                                        </#if>
-                                    </td>
-                                </tr>
+                                                    <span class="label label-success radius">${(d.itemProductName)!}(${(d.itemProductColor)!})*${(d.itemNum)!}</span><span style="display: none;">${(d.itemOrderId)!}</span><br>
+                                                </#list>
+                                            </#if>
+                                        </td>
+                                    </tr>
+                                </#if>
                                 </#list>
                             </#if>
                         </tbody>

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


+ 42 - 3
watero-rst-web/src/main/webapp/WEB-INF/views/product/add_product.ftl

@@ -36,6 +36,9 @@
         .msg-phone{height: 35px;line-height: 35px;}
         .col-sm-1{width: 10%;}
         .all_down{text-decoration: underline;color: #00c;}
+        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>
     <title>添加产品 - 产品管理 - RST</title>
 </head>
@@ -105,7 +108,7 @@
                 </div>-->
 
                    <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>售后检测:</label>
-                   <div class="formControls col-2 col-sm-2 skin-minimal">
+                   <div class="formControls col-2 col-sm-2">
                        <div class="radio-box">
                            <input type="radio" id="productIsDetection-1" name="productIsDetection" value="1" >
                            <label for="productIsDetection-1">需要</label>
@@ -116,6 +119,41 @@
                        </div>
                    </div>
             </div>
+            <div class="row cl">
+                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>是否组合产品:</label>
+                <div class="formControls col-2 col-sm-2">
+                    <div class="radio-box">
+                        <input type="radio" id="productIsCombination-1" name="productIsCombination" value="1" checked>
+                        <label for="productIsCombination-1">否&nbsp;&nbsp;&nbsp;</label>
+                    </div>
+                    <div class="radio-box">
+                        <input type="radio" id="productIsCombination-2" name="productIsCombination" value="2">
+                        <label for="productIsCombination-2">是</label>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row cl" id="product_color" style="display: none;">
+                <label class="form-label col-1 col-sm-1"></label>
+                <div class="formControls col-10 col-sm-10">
+                    <input type="button" style="color: #32a3d8;border: 1px solid #32a3d8;" class="btn add-order-button" onclick="add_product()" value="选择组合产品" >
+                    <table class="table table-border table-bordered table-bg table-hover table-sort" style="margin-top: 10px;display: none" id="all_add_product">
+                        <thead>
+                        <tr class="text-c" id="table1">
+                            <th style="text-align: center;" width="40" >产品名称</th>
+                            <th style="text-align: center;" width="25" >产品颜色</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>
+                        </tr>
+                        </thead>
+                        <tbody id="add_product">
+                        </tbody>
+                    </table>
+                    <input type="hidden" id="productString" name="productString" value="" >
+                </div>
+                <br>
+            </div>
 
             <div class="row cl">
                 <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>使用区域:</label>
@@ -314,8 +352,6 @@
         radioClass: 'iradio-blue',
         increaseArea: '20%'
     });
-
-
     var isSonCh = false;
     //选中
     $('.all_checkbox').on('ifChecked', function(event){
@@ -349,6 +385,9 @@
     });
 
     var isHaveColorList = 2; //是否已经有颜色   2没有  1 含有
+
+
+
 </script>
 
 <script type="text/javascript" charset="utf-8" src="${path}/common/js/product/product.js"></script>

+ 52 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/product/update_product.ftl

@@ -36,6 +36,8 @@
         .msg-phone{height: 35px;line-height: 35px;}
         .col-sm-1{width: 10%;}
         .all_down{text-decoration: underline;color: #00c;}
+        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>
     <title>添加产品 - 产品管理 - RST</title>
 </head>
@@ -107,7 +109,7 @@
                 </div>-->
 
                 <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>售后检测:</label>
-                <div class="formControls col-2 col-sm-2 skin-minimal">
+                <div class="formControls col-2 col-sm-2">
                     <div class="radio-box">
                         <input type="radio" id="productIsDetection-1" name="productIsDetection" value="1" <#if product.productIsDetection ==1 >checked</#if>>
                         <label for="productIsDetection-1">需要</label>
@@ -120,6 +122,55 @@
             </div>
 
             <div class="row cl">
+                <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>是否组合产品:</label>
+                <div class="formControls col-2 col-sm-2">
+                    <div class="radio-box">
+                        <input type="radio" id="productIsCombination-1" name="productIsCombination" value="1" <#if product.productIsCombination ==1 >checked</#if>>
+                        <label for="productIsCombination-1">否&nbsp;&nbsp;&nbsp;</label>
+                    </div>
+                    <div class="radio-box">
+                        <input type="radio" id="productIsCombination-2" name="productIsCombination" value="2" <#if product.productIsCombination ==2 >checked</#if>>
+                        <label for="productIsCombination-2">是</label>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row cl" id="product_color" <#if product.productIsCombination ==1 >style="display: none;"</#if>>
+                <label class="form-label col-1 col-sm-1"></label>
+                <div class="formControls col-10 col-sm-10">
+                    <input type="button" style="color: #32a3d8;border: 1px solid #32a3d8;" class="btn add-order-button" onclick="add_product()" value="选择组合产品" >
+                    <table class="table table-border table-bordered table-bg table-hover table-sort" style="margin-top: 10px;<#if product.productIsCombination == 1 >display: none</#if>" id="all_add_product">
+                        <thead>
+                        <tr class="text-c" id="table1">
+                            <th style="text-align: center;" width="40" >产品名称</th>
+                            <th style="text-align: center;" width="25" >产品颜色</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>
+                        </tr>
+                        </thead>
+                        <tbody id="add_product">
+                        <#if productCombinatList??>
+                            <#list productCombinatList as productCombinat>
+                                <tr class="text-c">
+                                <input type="hidden" class="color_id" id="" value="${productCombinat.combinatItemColorId}" >
+                                <td>${productCombinat.productName}</td>
+                                <td>${productCombinat.colorName}</td>
+                                <td>${productCombinat.colorBar}</td>
+                                <td style="width: 30px;"><input type="text" class="input-text input-number item-num" style="text-align: center" value="${productCombinat.combinatItemNum}"  name="" id="" placeholder="产品数量" 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>
+
+                        </tbody>
+                    </table>
+                    <input type="hidden" id="productString" name="productString" value="" >
+                </div>
+                <br>
+            </div>
+
+            <div class="row cl">
                 <label class="form-label col-1 col-sm-1"><span class="c-red">*</span>使用区域:</label>
                 <div class="formControls col-9 col-sm-9 skin-minimal" >
                     <div class="radio-box">

+ 27 - 7
watero-rst-web/src/main/webapp/WEB-INF/views/pts/machine/machine_print_List.ftl

@@ -149,7 +149,7 @@
     function code128(barcode){
         $("#codeId").val(barcode);
         $("#bcTarget").empty().barcode($("#codeId").val(), "code128",{
-            barWidth:1, barHeight:43,showHRI:true,fontSize: 14
+            barWidth:1, barHeight:33,showHRI:true,fontSize: 12
         });
     }
 
@@ -202,14 +202,23 @@
                         if(berGenerateRules === 3){
                             code128(machineBarcode);
                             var barcodes2 = $("#bcTarget").html();
-                            $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
+                            $("#printlist").append('<div style="width: 243px;height: 120px;position: relative;">' +
                                     '<span style="padding-left: 10px;">反渗透净水机</span>' +
+                                   /* '<span style="position: absolute;top: 25px;left: 10px;font-size: 12px;visibility:hidden;">型号:'+producePattern+'-'+produceModel+'</span>' +
+                                    '<span style="position: absolute;top: 40px;left: 10px;font-size: 12px;visibility:hidden;">S/N</span>' +*/
+                                    '<div style="position: absolute;padding-top: 25px;" id="bcTarget2" class="barcodeImg">'+barcodes2+'</div>' +
+                                    /* '<span style="position: absolute;padding-top: 100px;padding-left: -100px;" id="barcodeId">'+machineBarcode+'</span>' +*/
+                                    '</div>');
+                        }else if(berGenerateRules === 4){
+                            code128(machineBarcode);
+                            var barcodes2 = $("#bcTarget").html();
+                            $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
+                                    '<span style="padding-left: 10px;">The One B1系列滤芯</span>' +
                                     '<span style="position: absolute;top: 25px;left: 10px;font-size: 12px;visibility:hidden;">型号:'+producePattern+'-'+produceModel+'</span>' +
                                     '<span style="position: absolute;top: 40px;left: 10px;font-size: 12px;visibility:hidden;">S/N</span>' +
                                     '<div style="position: absolute;padding-top: 25px;" id="bcTarget2" class="barcodeImg">'+barcodes2+'</div>' +
                                     /* '<span style="position: absolute;padding-top: 100px;padding-left: -100px;" id="barcodeId">'+machineBarcode+'</span>' +*/
                                     '</div>');
-                            // $("#printlist").append();
                         }else{
                             $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
                                     '<span style="position: absolute;left: 10px;font-size: 14px;">反渗透净水机</span>' +
@@ -224,7 +233,7 @@
                     }else{
                         if(isGeneralQrcode == 1 || berGenerateRules == 2){
                             if(produceName === "WA-2诺米克OEM净水机" || produceName === "WB-1诺米克OEM净水机"){
-                                $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
+                                $("#printlist").append('<div style="width: 242px;height: 122px;position: relative;">' +
                                         '<span style="position: absolute;left: 10px;font-size: 14px;">反渗透净水机</span>' +
                                         '<span style="position: absolute;left: 162px;font-size: 8px;"><b>淘&nbsp;&nbsp;宝&nbsp;/&nbsp;天&nbsp;&nbsp;猫&nbsp;A&nbsp;P&nbsp;P</b></span>' +
                                         '<span style="position: absolute;top: 25px;left: 10px;font-size: 12px;">生产日期:'+produceCreateTime+'</span>' +
@@ -281,8 +290,8 @@
         var selectNum = $("#listid").find("input[name='checkbox']:checked").length;
         var machinePrintNumber = parseInt(num)*parseInt(selectNum);
 
-        if(machinePrintNumber > 24){
-            layer.msg('一次最多支持打印24张条形码', {icon: 2, time: 2000});
+        if(machinePrintNumber > 1000){
+            layer.msg('一次最多支持打印1000张条形码', {icon: 2, time: 2000});
         }else if (prints != ""){
             $("#printlist").printArea();
             $("#printlist").html("");
@@ -436,6 +445,17 @@
                             /* '<span style="position: absolute;padding-top: 100px;padding-left: -100px;" id="barcodeId">'+machineBarcode+'</span>' +*/
                             '</div>');
                     // $("#printlist").append();
+                }else if(berGenerateRules === 4){
+                    code128(machineBarcode);
+                    var barcodes2 = $("#bcTarget").html();
+                    $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
+                            '<span style="padding-left: 10px;">The One B1系列滤芯</span>' +
+                            '<span style="position: absolute;top: 25px;left: 10px;font-size: 12px;visibility:hidden;">型号:'+producePattern+'-'+produceModel+'</span>' +
+                            '<span style="position: absolute;top: 40px;left: 10px;font-size: 12px;visibility:hidden;">S/N</span>' +
+                            '<div style="position: absolute;padding-top: 25px;" id="bcTarget2" class="barcodeImg">'+barcodes2+'</div>' +
+                            /* '<span style="position: absolute;padding-top: 100px;padding-left: -100px;" id="barcodeId">'+machineBarcode+'</span>' +*/
+                            '</div>');
+                    // $("#printlist").append();
                 }else{
                     $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
                             '<span style="position: absolute;left: 10px;font-size: 14px;">反渗透净水机</span>' +
@@ -450,7 +470,7 @@
             }else{
                 if(isGeneralQrcode == 1 || berGenerateRules == 2){
                     if(produceName === "WA-2诺米克OEM净水机" || produceName === "WB-1诺米克OEM净水机"){
-                        $("#printlist").append('<div style="width: 242px;height: 120px;position: relative;">' +
+                        $("#printlist").append('<div style="width: 242px;height: 122px;position: relative;">' +
                                 '<span style="position: absolute;left: 10px;font-size: 14px;">反渗透净水机</span>' +
                                 '<span style="position: absolute;left: 162px;font-size: 8px;"><b>淘&nbsp;&nbsp;宝&nbsp;/&nbsp;天&nbsp;&nbsp;猫&nbsp;A&nbsp;P&nbsp;P</b></span>' +
                                 '<span style="position: absolute;top: 25px;left: 10px;font-size: 12px;">生产日期:'+produceCreateTime+'</span>' +

+ 2 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/pts/produce/save_produce.ftl

@@ -68,7 +68,8 @@
                 <div class="input-box"><span class="input-dic">条形码生成规则</span>
                     <label><input type="radio" name="berGenerateRules" value="1" checked>序列化生成(原有生成规则)</label>
                     <label><input type="radio" name="berGenerateRules" value="2">随机生成</label>
-                    <label><input type="radio" name="berGenerateRules" value="3">博乐宝生成规则</label>
+                    <label><input type="radio" name="berGenerateRules" value="3">博乐宝</label>
+                    <label><input type="radio" name="berGenerateRules" value="4">博乐宝滤芯</label>
                 </div>
                 <div class="input-box"><span class="input-dic">是否需要二维码</span>
                     <label><input type="radio" name="isPrintQrcode" value="1" checked>是</label>

+ 2 - 1
watero-rst-web/src/main/webapp/WEB-INF/views/pts/produce/update_produce.ftl

@@ -66,7 +66,8 @@
             <div class="input-box"><span class="input-dic">条形码生成规则</span>
                 <label><input type="radio" name="berGenerateRules" value="1" <#if produce.berGenerateRules??> <#if produce.berGenerateRules == 1>checked</#if></#if>>序列化生成(原有生成规则)</label>
                 <label><input type="radio" name="berGenerateRules" value="2" <#if produce.berGenerateRules??> <#if produce.berGenerateRules == 2>checked</#if></#if>>随机生成</label>
-                <label><input type="radio" name="berGenerateRules" value="2" <#if produce.berGenerateRules??> <#if produce.berGenerateRules == 3>checked</#if></#if>>博乐宝生成规则</label>
+                <label><input type="radio" name="berGenerateRules" value="3" <#if produce.berGenerateRules??> <#if produce.berGenerateRules == 3>checked</#if></#if>>博乐宝生成规则</label>
+                <label><input type="radio" name="berGenerateRules" value="4" <#if produce.berGenerateRules??> <#if produce.berGenerateRules == 4>checked</#if></#if>>博乐宝滤芯</label>
             </div>
             <div class="input-box"><span class="input-dic">是否需要二维码</span>
                 <label><input type="radio" name="isPrintQrcode" value="1"<#if produce.isPrintQrcode??> <#if produce.isPrintQrcode == 1>checked</#if></#if>>是</label>

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

@@ -257,6 +257,25 @@ $(function(){
             });
             $("#productAreaRelaStr").val(productAreaRelaStr);
 
+
+            var flag = false;
+            /*封装订单项*/
+            var orderItemArray = new Array();
+            var combination = parseInt($("input[name='productIsCombination']:checked").val());
+            if(combination === 2){
+                $("#add_product").find("tr").each(function(){
+                    var orderItem = new Object();
+                    orderItem.combinatItemColorId = $(this).find(".color_id").val();
+                    orderItem.combinatItemNum = $(this).find(".item-num").val();
+                    orderItemArray.push(orderItem);
+                    flag = true;
+                });
+                if(!flag){
+                    vailErrorMsg($(".add-order-button"),"必须要有一个产品");
+                    return false;
+                }
+                $("#productString").val(JSON.stringify(orderItemArray));
+            }
             loadIndex = layer.load(1, {
                 shade: [0.5,'#fff'] //0.1透明度的白色背景
             });
@@ -455,4 +474,96 @@ function addProductInventory() {
         }
     })
     $("#addInventoryHtml").hide();
-}
+}
+
+/**
+ * 打开商品列表
+ */
+function add_product() {
+
+    layer_show("商品列表",url_path + "/admin/salesOrder/to_add_product","1000","500");
+}
+
+/**
+ * 选择商品回调
+ * @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 j=0;j<colorIdArray.length;j++){
+        var colorId = colorIdArray[j];
+        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;
+        }
+
+        var salesOrderStatus = 2;
+        $.ajax({
+            type: "POST",
+            data: {
+                colorId : colorId,
+                salesOrderStatus : salesOrderStatus
+            },
+            url: url_path +"/admin/salesOrder/get_product",
+            async:false,
+            success: function(data){
+                var html = "";
+                if (data.returnCode == 200 && data.returnMsg.productColorList.length > 0 ) {
+                    //所选店铺是否自营 1:自营 2:非自营
+                    dealerSelfOperated = data.returnMsg.dealerSelfOperated;
+
+                    for(var i=0;i<data.returnMsg.productColorList.length;i++){
+                        var productColor = data.returnMsg.productColorList[i];
+                        var discount = accDiv(productColor.colorDiscount,100);
+                        html += '<tr class="text-c">' +
+                            '<input type="hidden" class="color_id" id="" value="'+ productColor.colorId +'" >' +
+                            ' <td>'+ cufte(productColor.productName) +'</td>' +
+                            ' <td>'+ cufte(productColor.colorName) +'</td>' +
+                            ' <td>'+ cufte(productColor.colorBar) +'</td>' +
+                            ' <td style="width: 30px;"><input type="text" class="input-text input-number item-num" style="text-align: center" value="1"  name="" id="" placeholder="产品数量" 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{
+                    $("#product_color_error").html(data.resultMsg);
+                    return false;
+                }
+                $("#add_product").append(html);
+            }
+        });
+    }
+    layer.close(index);
+}
+
+/**
+ *  删除商品
+ */
+function delProduct($this){
+    $this.parents("tr").remove();
+    calculatePrice();
+}
+$("input[name='productIsCombination']").change(function (){
+    var combination = parseInt($("input[name='productIsCombination']:checked").val());
+    if(combination === 1){
+        $("#product_color").hide();
+    }
+    if(combination === 2){
+        $("#product_color").show();
+    }
+})