Преглед изворни кода

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

# Conflicts:
#	watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java
liujiankang пре 5 година
родитељ
комит
3124f0684b
22 измењених фајлова са 691 додато и 143 уклоњено
  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. 13 0
      watero-rst-interface/src/main/java/com/iamberry/rst/faces/product/ProductService.java
  5. 54 1
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/InventoryServiceImpl.java
  6. 139 80
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java
  7. 3 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/customerInfoMapper.xml
  8. 4 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml
  9. 37 4
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/ProductServiceImpl.java
  10. 19 0
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/ProductMapper.java
  11. 36 3
      watero-rst-service/src/main/java/com/iamberry/rst/service/product/mapper/productMapper.xml
  12. 18 18
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java
  13. 7 2
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java
  14. 14 3
      watero-rst-web/src/main/java/com/iamberry/rst/controllers/product/AdminProductController.java
  15. 3 0
      watero-rst-web/src/main/resources/watero-rst-orm.xml
  16. 1 0
      watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/custome_list.ftl
  17. 2 2
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/dayDeliveryNum_list.ftl
  18. 25 23
      watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/print_order.ftl
  19. 42 3
      watero-rst-web/src/main/webapp/WEB-INF/views/product/add_product.ftl
  20. 52 1
      watero-rst-web/src/main/webapp/WEB-INF/views/product/update_product.ftl
  21. 2 2
      watero-rst-web/src/main/webapp/WEB-INF/views/pts/machine/machine_print_List.ftl
  22. 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;
+    }
+}

+ 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;
     }
-
 }

+ 139 - 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();

+ 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

+ 4 - 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}

+ 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;
             }
         }

+ 7 - 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;
@@ -180,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;
@@ -347,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);

+ 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;

+ 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>

Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/cm/customer/custome_list.ftl


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

@@ -47,7 +47,7 @@
 <body>
 <div class="page-container">
     <div class="order-list">
-       <#-- <div class="text-c">
+        <div class="text-c">
             <form action="${path}/admin/await_send/dayDeliveryNum" method="post">
                 <div class="row cl" style="margin-left: 0px;">
 
@@ -63,7 +63,7 @@
                      </div>
                 </div>
             </form>
-        </div>-->
+        </div>
             <table class="table table-border table-bordered table-bg table-hover table-sort">
                 <thead>
                 <tr class="text-c">

+ 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>

+ 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">

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

@@ -233,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>' +
@@ -470,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>' +

+ 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();
+    }
+})