Procházet zdrojové kódy

Merge branch 'master' of http://62.234.61.92:3000/wjm/mec-cloud_IntelligentManufacturing_CLIENT

lph před 1 rokem
rodič
revize
3e57fdd56f

+ 5 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductHandsetOutboundRecordMapper.java

@@ -74,4 +74,9 @@ public interface ProductHandsetOutboundRecordMapper
     ProductHandsetOutboundRecord selectBoxNumSuttle(@Param("productId") Long productId,@Param("noticeNumber") String noticeNumber,@Param("qrCode") String qrCode);
 
 
+    /**
+     * 查询实发箱数、重量库存
+     */
+    ProductHandsetOutboundRecord selectBoxNumSuttle1(@Param("productId") Long productId,@Param("noticeNumber") String noticeNumber,@Param("productColour") String productColour);
+
 }

+ 13 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductInventoryMapper.java

@@ -2,6 +2,7 @@ package com.zkqy.business.mapper;
 
 import java.util.List;
 import com.zkqy.business.domain.ProductInventory;
+import com.zkqy.business.domain.vo.ProductCodeListVO;
 
 /**
  * 产品库存Mapper接口
@@ -71,4 +72,16 @@ public interface ProductInventoryMapper
      */
     ProductInventory selectProductInventoryByLotNumAndProductId(ProductInventory productInventory);
 
+    /**
+     * 查询综合库存列表
+     */
+    List<ProductCodeListVO> selectComprehensiveInventoryList(ProductCodeListVO productCodeListVO);
+
+    /**
+     * 批量新增库存
+     * @param productInventoryList
+     * @return
+     */
+    int batchInsertProductInventory(List<ProductInventory> productInventoryList);
+
 }

+ 9 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductOutboundRecordMapper.java

@@ -85,6 +85,15 @@ public interface ProductOutboundRecordMapper
      */
     ProductOutboundRecord statisticsBoxNumSuttle(@Param("productId") Long productId,@Param("noticeNumber") String noticeNumber,@Param("qrCode") String qrCode);
 
+
+    /**
+     * 统计箱数和净重走库存
+     * @param productId
+     * @param noticeNumber
+     * @return
+     */
+    ProductOutboundRecord statisticsBoxNumSuttle1(@Param("productId") Long productId,@Param("noticeNumber") String noticeNumber,@Param("productColour") String productColour);
+
     /**
      * 根据通知单号查询出库明细
      */

+ 7 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/SaleProductsMapper.java

@@ -113,6 +113,13 @@ public interface SaleProductsMapper
      */
     List<ProductInvoiceVO.SaleProductInfo> selectSaleProductsInfo(String saleOrderNo);
 
+
+    /**
+     * 查询销售单货品信息(不获取库存等级信息)
+     */
+    List<ProductInvoiceVO.SaleProductInfo> selectSaleProductsInfo1(String saleOrderNo);
+
+
     /***
      * 查询销售出库单详情
      * @param saleOrderNo

+ 179 - 34
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductInvoiceServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zkqy.business.service.impl;
 
 import java.text.DecimalFormat;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -131,47 +132,155 @@ public class ProductInvoiceServiceImpl implements IProductInvoiceService
             SaleOrder saleOrder = saleOrderMapper.selectSaleOrderBySaleNo(saleOrderNo);
             vo.setCustomerNo(saleOrder.getSaleCustomNo());
         }
-        //表格数据
-        //根据销售单编号查询货品信息
-        //销售单货品信息联查库存
-        List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = saleProductsMapper.selectSaleProductsInfo(saleOrderNo);
-        if(productInvoice != null){
-            for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
-                //获取箱数重量
-                ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper.statisticsBoxNumSuttle(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(),saleProductInfo.getQrCode());
-                if(productOutboundRecord != null){
-                    saleProductInfo.setBoxNum(productOutboundRecord.getBoxNum());
-                    saleProductInfo.setWeight(handlingWeight(productOutboundRecord.getSuttle() == null ? 0 : productOutboundRecord.getSuttle()));
-                }else {
+
+        // 查询销售单信息
+        SaleOrder saleOrder = saleOrderMapper.selectSaleOrderBySaleNo(saleOrderNo);
+
+        if(saleOrder.getOrderType().equals("1")){
+            List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = saleProductsMapper.selectSaleProductsInfo1(saleOrderNo);
+            if(productInvoice != null){
+                for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
+
+                    //获取已出库箱数和重量
+                    ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper
+                            .statisticsBoxNumSuttle1(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(),saleProductInfo.getProductColor());
+
+                    if(productOutboundRecord != null){
+                        saleProductInfo.setBoxNum(productOutboundRecord.getBoxNum());
+                        saleProductInfo.setWeight(handlingWeight(productOutboundRecord.getSuttle() == null ? 0 : productOutboundRecord.getSuttle()));
+                    }else {
+                        saleProductInfo.setBoxNum(0);
+                        saleProductInfo.setWeight(0.0);
+                    }
+                }
+            }else {
+                for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
                     saleProductInfo.setBoxNum(0);
                     saleProductInfo.setWeight(0.0);
                 }
             }
-        }else {
-            for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
-                saleProductInfo.setBoxNum(0);
-                saleProductInfo.setWeight(0.0);
+            //查询当前批号库存箱数,重量
+            ProductInventory productInventory1 = new ProductInventory();
+            productInventory1.setProductId(saleProductInfoList.get(0).getProductId());
+            productInventory1.setLotNum(saleProductInfoList.get(0).getLotNum());
+            ProductInventory productInventory = productInventoryMapper.selectProductInventoryByLotNumAndProductId(productInventory1);
+            if(productInventory != null){
+                vo.setInventoryBoxNum(productInventory.getTotalBoxNum());
+                vo.setInventoryWeight(handlingWeight(productInventory.getTotalSuttle()));
+            }else {
+                vo.setInventoryBoxNum(0);
+                vo.setInventoryWeight(0.0);
             }
-        }
-        //查询当前批号库存箱数,重量
-        ProductInventory productInventory1 = new ProductInventory();
-        productInventory1.setProductId(saleProductInfoList.get(0).getProductId());
-        productInventory1.setLotNum(saleProductInfoList.get(0).getLotNum());
-        ProductInventory productInventory = productInventoryMapper.selectProductInventoryByLotNumAndProductId(productInventory1);
-        if(productInventory != null){
-            vo.setInventoryBoxNum(productInventory.getTotalBoxNum());
-            vo.setInventoryWeight(handlingWeight(productInventory.getTotalSuttle()));
+
+            //客户编号
+            vo.setCustomerId(saleOrderMapper.selectCustomerIdBySaleNo(saleOrderNo));
+            vo.setSaleProductInfoList(saleProductInfoList);
+
+
         }else {
-            vo.setInventoryBoxNum(0);
-            vo.setInventoryWeight(0.0);
+            //表格数据
+            //根据销售单编号查询货品信息
+            List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = saleProductsMapper.selectSaleProductsInfo(saleOrderNo);
+            if(productInvoice != null){
+                for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
+
+                    //获取已出库箱数和重量
+                    ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper
+                            .statisticsBoxNumSuttle1(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(),saleProductInfo.getProductColor());
+
+                    if(productOutboundRecord != null){
+                        saleProductInfo.setBoxNum(productOutboundRecord.getBoxNum());
+                        saleProductInfo.setWeight(handlingWeight(productOutboundRecord.getSuttle() == null ? 0 : productOutboundRecord.getSuttle()));
+                    }else {
+                        saleProductInfo.setBoxNum(0);
+                        saleProductInfo.setWeight(0.0);
+                    }
+                }
+            }else {
+                for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
+                    saleProductInfo.setBoxNum(0);
+                    saleProductInfo.setWeight(0.0);
+                }
+            }
+            //查询当前批号库存箱数,重量
+            ProductInventory productInventory1 = new ProductInventory();
+            productInventory1.setProductId(saleProductInfoList.get(0).getProductId());
+            productInventory1.setLotNum(saleProductInfoList.get(0).getLotNum());
+            ProductInventory productInventory = productInventoryMapper.selectProductInventoryByLotNumAndProductId(productInventory1);
+            if(productInventory != null){
+                vo.setInventoryBoxNum(productInventory.getTotalBoxNum());
+                vo.setInventoryWeight(handlingWeight(productInventory.getTotalSuttle()));
+            }else {
+                vo.setInventoryBoxNum(0);
+                vo.setInventoryWeight(0.0);
+            }
+
+            //客户编号
+            vo.setCustomerId(saleOrderMapper.selectCustomerIdBySaleNo(saleOrderNo));
+            vo.setSaleProductInfoList(saleProductInfoList);
         }
 
-        //客户编号
-        vo.setCustomerId(saleOrderMapper.selectCustomerIdBySaleNo(saleOrderNo));
-        vo.setSaleProductInfoList(saleProductInfoList);
         return vo;
     }
 
+
+
+//    @Override
+//    public ProductInvoiceVO productInvoiceInfo(String saleOrderNo) {
+//        ProductInvoiceVO vo = new ProductInvoiceVO();
+//        // 顶部数据回显
+//        ProductInvoice productInvoice = productInvoiceMapper.selectProductInvoiceBySaleOrderNo(saleOrderNo);
+//        if(productInvoice != null){
+//            BeanUtils.copyProperties(productInvoice, vo);
+//        }else {
+//            SaleOrder saleOrder = saleOrderMapper.selectSaleOrderBySaleNo(saleOrderNo);
+//            vo.setCustomerNo(saleOrder.getSaleCustomNo());
+//        }
+//        //表格数据
+//        //根据销售单编号查询货品信息
+//        List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = saleProductsMapper.selectSaleProductsInfo(saleOrderNo);
+//
+//
+//        if(productInvoice != null){
+//            for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
+//
+//                //获取已出库箱数和重量
+//                ProductOutboundRecord productOutboundRecord = productOutboundRecordMapper
+//                        .statisticsBoxNumSuttle(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(),saleProductInfo.getQrCode());
+//
+//                if(productOutboundRecord != null){
+//                    saleProductInfo.setBoxNum(productOutboundRecord.getBoxNum());
+//                    saleProductInfo.setWeight(handlingWeight(productOutboundRecord.getSuttle() == null ? 0 : productOutboundRecord.getSuttle()));
+//                }else {
+//                    saleProductInfo.setBoxNum(0);
+//                    saleProductInfo.setWeight(0.0);
+//                }
+//            }
+//        }else {
+//            for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
+//                saleProductInfo.setBoxNum(0);
+//                saleProductInfo.setWeight(0.0);
+//            }
+//        }
+//        //查询当前批号库存箱数,重量
+//        ProductInventory productInventory1 = new ProductInventory();
+//        productInventory1.setProductId(saleProductInfoList.get(0).getProductId());
+//        productInventory1.setLotNum(saleProductInfoList.get(0).getLotNum());
+//        ProductInventory productInventory = productInventoryMapper.selectProductInventoryByLotNumAndProductId(productInventory1);
+//        if(productInventory != null){
+//            vo.setInventoryBoxNum(productInventory.getTotalBoxNum());
+//            vo.setInventoryWeight(handlingWeight(productInventory.getTotalSuttle()));
+//        }else {
+//            vo.setInventoryBoxNum(0);
+//            vo.setInventoryWeight(0.0);
+//        }
+//
+//        //客户编号
+//        vo.setCustomerId(saleOrderMapper.selectCustomerIdBySaleNo(saleOrderNo));
+//        vo.setSaleProductInfoList(saleProductInfoList);
+//        return vo;
+//    }
+
     @Override
     public ProductInvoiceVO saleStorageDetails(Long id) {
         ProductInvoiceVO vo = new ProductInvoiceVO();
@@ -179,15 +288,21 @@ public class ProductInvoiceServiceImpl implements IProductInvoiceService
         ProductInvoice productInvoice = productInvoiceMapper.selectProductInvoiceById(id);
         BeanUtils.copyProperties(productInvoice, vo);
 
+        // 查询销售单信息
+        SaleOrder saleOrder = saleOrderMapper.selectSaleOrderBySaleNo(productInvoice.getSaleOrderNo());
+        List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = new ArrayList<>();
 
-        //查询发货单货品详情,循环得到货品实发箱数、重量
-        List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = saleProductsMapper.selectSaleProductsInfo(productInvoice.getSaleOrderNo());
-
+        if(saleOrder.getOrderType().equals("1")){
+            //查询发货单货品详情,循环得到货品实发箱数、重量
+            saleProductInfoList = saleProductsMapper.selectSaleProductsInfo1(productInvoice.getSaleOrderNo());
+        }else {
+            saleProductInfoList = saleProductsMapper.selectSaleProductsInfo(productInvoice.getSaleOrderNo());
+        }
 
         for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
             //实发箱数、重量
             ProductHandsetOutboundRecord productHandsetOutboundRecord =
-                    productHandsetOutboundRecordMapper.selectBoxNumSuttle(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(), saleProductInfo.getQrCode());
+                    productHandsetOutboundRecordMapper.selectBoxNumSuttle1(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(),saleProductInfo.getProductColor());
             if(productHandsetOutboundRecord != null){
                 saleProductInfo.setBoxNum(productHandsetOutboundRecord.getBoxNum());
                 saleProductInfo.setWeight(handlingWeight(productHandsetOutboundRecord.getSuttle() == null ? 0 : productHandsetOutboundRecord.getSuttle()));
@@ -200,6 +315,36 @@ public class ProductInvoiceServiceImpl implements IProductInvoiceService
         return vo;
     }
 
+
+
+//    @Override
+//    public ProductInvoiceVO saleStorageDetails(Long id) {
+//        ProductInvoiceVO vo = new ProductInvoiceVO();
+//        //查询发货通知单详情
+//        ProductInvoice productInvoice = productInvoiceMapper.selectProductInvoiceById(id);
+//        BeanUtils.copyProperties(productInvoice, vo);
+//
+//
+//        //查询发货单货品详情,循环得到货品实发箱数、重量
+//        List<ProductInvoiceVO.SaleProductInfo> saleProductInfoList = saleProductsMapper.selectSaleProductsInfo(productInvoice.getSaleOrderNo());
+//
+//
+//        for (ProductInvoiceVO.SaleProductInfo saleProductInfo : saleProductInfoList){
+//            //实发箱数、重量
+//            ProductHandsetOutboundRecord productHandsetOutboundRecord =
+//                    productHandsetOutboundRecordMapper.selectBoxNumSuttle(saleProductInfo.getProductId(), productInvoice.getNoticeNumber(), saleProductInfo.getQrCode());
+//            if(productHandsetOutboundRecord != null){
+//                saleProductInfo.setBoxNum(productHandsetOutboundRecord.getBoxNum());
+//                saleProductInfo.setWeight(handlingWeight(productHandsetOutboundRecord.getSuttle() == null ? 0 : productHandsetOutboundRecord.getSuttle()));
+//            }
+//        }
+//
+//        //客户编号
+//        vo.setCustomerId(saleOrderMapper.selectCustomerIdBySaleNo(productInvoice.getSaleOrderNo()));
+//        vo.setSaleProductInfoList(saleProductInfoList);
+//        return vo;
+//    }
+
     @Override
     public ProductInvoice selectProductInvoiceBySaleOrderNo(String saleOrderNo) {
         return productInvoiceMapper.selectProductInvoiceBySaleOrderNo(saleOrderNo);

+ 5 - 0
zkqy-custom-business/src/main/resources/mapper/business/ProductHandsetOutboundRecordMapper.xml

@@ -218,4 +218,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select count(1) as boxNum , sum(suttle) as suttle from {DBNAME}.product_handset_outbound_record where product_id = #{productId} and notice_number = #{noticeNumber} and qr_code = #{qrCode}
     </select>
 
+    <select id="selectBoxNumSuttle1" resultType="com.zkqy.business.domain.ProductHandsetOutboundRecord">
+        select count(1) as boxNum , sum(suttle) as suttle from {DBNAME}.product_handset_outbound_record where product_id = #{productId} and notice_number = #{noticeNumber}
+        and product_colour = #{productColour}
+    </select>
+
 </mapper>

+ 79 - 1
zkqy-custom-business/src/main/resources/mapper/business/ProductInventoryMapper.xml

@@ -213,8 +213,86 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectProductInventoryByLotNumAndProductId" resultType="com.zkqy.business.domain.ProductInventory">
         select sum(total_box_num) as totalBoxNum,sum(total_suttle) as totalSuttle  from {DBNAME}.product_inventory
         where del_flag = '0'
-        <if test="lotNum != null">and lot_num = #{lotNum}</if>
+        <if test="lotNum != null and lotNum != '' ">and lot_num = #{lotNum}</if>
         <if test="productId != null">and product_id = #{productId}</if>
     </select>
 
+    <select id="selectComprehensiveInventoryList" resultType="com.zkqy.business.domain.vo.ProductCodeListVO">
+
+    </select>
+
+
+    <insert id="batchInsertProductInventory" parameterType="com.zkqy.business.domain.ProductInventory">
+        INSERT INTO {DBNAME}.product_inventory (
+        qr_code,
+        lot_num,
+        product_id,
+        levels,
+        canister_num,
+        box_num,
+        suttle,
+        production_date,
+        warehouse_id,
+        machine_tool,
+        gross_weight,
+        packaging,
+        work_shifts,
+        foreign_trade_number,
+        canister_weight,
+        box_weight,
+        tube_color,
+        com_port,
+        print_format,
+        packaging_type,
+        storage_location,
+        warehouseregion_id,
+        remark,
+        create_by,
+        create_by_id,
+        create_time,
+        total_canister_num,
+        total_box_num,
+        total_suttle,
+        total_gross_weight,
+        product_colour,
+        del_flag
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.qrCode},
+            #{item.lotNum},
+            #{item.productId},
+            #{item.levels},
+            #{item.canisterNum},
+            #{item.boxNum},
+            #{item.suttle},
+            #{item.productionDate},
+            #{item.warehouseId},
+            #{item.machineTool},
+            #{item.grossWeight},
+            #{item.packaging},
+            #{item.workShifts},
+            #{item.foreignTradeNumber},
+            #{item.canisterWeight},
+            #{item.boxWeight},
+            #{item.tubeColor},
+            #{item.comPort},
+            #{item.printFormat},
+            #{item.packagingType},
+            #{item.storageLocation},
+            #{item.warehouseregionId},
+            #{item.remark},
+            #{item.createBy},
+            #{item.createById},
+            #{item.createTime},
+            #{item.totalCanisterNum},
+            #{item.totalBoxNum},
+            #{item.totalSuttle},
+            #{item.totalGrossWeight},
+            #{item.productColour},
+            '0'
+            )
+        </foreach>
+    </insert>
+
 </mapper>

+ 10 - 4
zkqy-custom-business/src/main/resources/mapper/business/ProductOutboundRecordMapper.xml

@@ -303,8 +303,6 @@
         r.packaging,
         r.warehousing_time,
         r.depositor,
-        count( r.id ) AS total_box_num,
-        sum( r.gross_weight ) AS total_gross_weight,
         r.work_shifts,
         r.production_date,
         r.remark
@@ -318,8 +316,7 @@
         <if test="productionDate != null">and r.production_date = #{productionDate}</if>
         <if test="warehousingTime != null ">and r.warehousing_time = #{warehousingTime}</if>
         <if test="depositor != null  and depositor != ''">and r.depositor like concat('%', #{depositor}, '%')</if>
-        GROUP BY
-        r.qr_code
+        order by r.id desc
     </select>
 
     <select id="selectProductOutboundRecordWhetherExist" resultMap="ProductOutboundRecordResult">
@@ -335,6 +332,15 @@
           and qr_code = #{qrCode}
     </select>
 
+
+    <select id="statisticsBoxNumSuttle1" resultType="com.zkqy.business.domain.ProductOutboundRecord">
+        select count(1) as boxNum, sum(suttle) as suttle
+        from {DBNAME}.product_outbound_record
+        where product_id = #{productId}
+          and notice_number = #{noticeNumber}
+        and product_colour = #{productColour}
+    </select>
+
     <delete id="deleteProductOutboundRecordByUUID" parameterType="string">
         update {DBNAME}.product_outbound_record
         set del_flag = '0'

+ 3 - 6
zkqy-custom-business/src/main/resources/mapper/business/ProductWarehousingRecordMapper.xml

@@ -251,9 +251,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             r.*,
             p.product_name,
             p.product_specifications,
-            r.product_colour as product_color,
-            count( r.id ) AS total_box_num,
-            sum( r.gross_weight ) AS total_gross_weight
+            r.product_colour as product_color
         FROM
         {DBNAME}.product_warehousing_record r
                 LEFT JOIN {DBNAME}.production p ON r.product_id = p.id
@@ -264,8 +262,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="productionDate != null"> and r.production_date = #{productionDate}</if>
             <if test="warehousingTime != null "> and r.warehousing_time = #{warehousingTime}</if>
             <if test="depositor != null  and depositor != ''"> and r.depositor like concat('%', #{depositor}, '%')</if>
-        GROUP BY
-            r.qr_code
+        order by r.id desc
     </select>
 
     <select id="selectProductWarehousingRecordWhetherExist" resultMap="ProductWarehousingRecordResult">
@@ -275,7 +272,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <delete id="deleteProductWarehousingRecordByUUID" parameterType="string">
         update {DBNAME}.product_warehousing_record
-        set del_flag = '0'
+        set del_flag = '2'
         where qr_code_id = #{qrCodeId}
     </delete>
 

+ 2 - 2
zkqy-custom-business/src/main/resources/mapper/business/ProductionMapper.xml

@@ -32,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectProductionList" parameterType="com.zkqy.business.domain.Production" resultMap="ProductionResult">
         <include refid="selectProductionVo"/>
-        <where>  
+        where del_flag = '0'
             <if test="productNo != null  and productNo != ''"> and product_no = #{productNo}</if>
             <if test="productName != null  and productName != ''"> and product_name like concat('%', #{productName}, '%')</if>
             <if test="productSpecifications != null  and productSpecifications != ''"> and product_specifications = #{productSpecifications}</if>
@@ -41,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="productDescribe != null  and productDescribe != ''"> and product_describe = #{productDescribe}</if>
             <if test="productUnit != null  and productUnit != ''"> and product_unit = #{productUnit}</if>
             <if test="productTypeNo != null "> and product_type_no = #{productTypeNo}</if>
-        </where>
+
     </select>
     
     <select id="selectProductionById" parameterType="Long" resultMap="ProductionResult">

+ 28 - 2
zkqy-custom-business/src/main/resources/mapper/business/SaleProductsMapper.xml

@@ -371,8 +371,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    and  ml.del_flag = '0'
                   AND sp.sale_order_no = #{saleOrderNo}
             ) AS a
-                LEFT JOIN {DBNAME}.product_inventory pi ON a.productId = pi.product_id
-                 AND pi.del_flag = '0' and pi.total_suttle > 0
+                LEFT JOIN {DBNAME}.product_inventory pi ON a.productId = pi.product_id and a.productColor = pi.product_colour
+                 where  pi.del_flag = '0' and pi.total_suttle > 0
+                group by a.productId,a.lotNum,a.productColor,pi.levels
+    </select>
+
+
+    <select id="selectSaleProductsInfo1" resultType="com.zkqy.business.domain.vo.ProductInvoiceVO$SaleProductInfo">
+                SELECT
+                    pt.id AS productId,
+                    pt.product_no AS productCode,
+                    pt.product_name AS productName,
+                    pt.product_specifications AS productSpecifications,
+                    sp.lot_number AS lotNum,
+                    sp.product_unit_price AS unitPrice,
+                    concat(ml.materie_encoding,ml.materie_color_number)  AS productColor,
+                    pt.product_type AS productType,
+                    sp.remark AS productRemark,
+                    sp.product_number AS actualWeight
+                FROM
+                    {DBNAME}.sale_products sp
+                        LEFT JOIN {DBNAME}.production pt ON sp.product_no = pt.product_no
+                    left join {DBNAME}.materiel ml on sp.colour_number = ml.materiel_code
+                WHERE
+                    sp.del_flag = '0'
+                  AND pt.del_flag = '0'
+                  and  ml.del_flag = '0'
+                  AND sp.sale_order_no = #{saleOrderNo}
+
     </select>
 
     <select id="selectOutboundOrderInfo" resultType="com.zkqy.business.domain.vo.SaleProductsVo">

+ 20 - 8
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/CommonServiceImpl.java

@@ -67,6 +67,7 @@ public class CommonServiceImpl implements ICommonService {
         });
 
         List<Map<String, Object>> mapList = new ArrayList<>();
+        LinkedHashMap<String, String> linkedHashMap = listAsd.get(0);  // 得到当前需要处理的第一条数据
         for (Object obj : listAsd) {
             Map<String, Object> map1 = (Map<String, Object>) obj;
             mapList.add(map1);
@@ -77,7 +78,17 @@ public class CommonServiceImpl implements ICommonService {
                 fieldNames.add(toUnderScoreCase(key));
             });
         });
-
+        //
+        List<String> sequenceMap = new ArrayList<>(linkedHashMap.keySet());
+        for (int e = 0; e < sequenceMap.size(); e++) {
+            // 交换键值对位置
+            for (int i = 0; i < mapList.size(); i++) {
+                String entry = sequenceMap.get(e);
+                Object val = mapList.get(i).get(entry);
+                mapList.get(i).remove(entry);
+                mapList.get(i).put(entry, val);
+            }
+        }
         return commonMapper.batchInsert(fieldNames, tableName, mapList);
     }
 
@@ -109,6 +120,7 @@ public class CommonServiceImpl implements ICommonService {
 
         return commonMapper.batchInsert(fieldNames, tableName, mapList);
     }
+
     @Override
     public int edit(CommonEntity commonEntity) {
         String tableName = (String) commonEntity.getBasicMap().get("tableName");
@@ -356,17 +368,17 @@ public class CommonServiceImpl implements ICommonService {
             equivalent.set(querySqlWhere);
         });
         //联动表格查询
-        AtomicReference<String> stringAtomicReference=new AtomicReference<>(endSQL);
-        if(endSQL.contains("#{")){
-            queryMap.forEach((k, v)->{
+        AtomicReference<String> stringAtomicReference = new AtomicReference<>(endSQL);
+        if (endSQL.contains("#{")) {
+            queryMap.forEach((k, v) -> {
                 //是否包含这个条件
                 boolean contains = stringAtomicReference.get().contains(k.toString());
-                if(contains){
+                if (contains) {
                     //#{ck.id 替换成具体的值
-                    stringAtomicReference.set(stringAtomicReference.get().replace(k.toString(),v.toString()));
+                    stringAtomicReference.set(stringAtomicReference.get().replace(k.toString(), v.toString()));
                 }
             });
-            endSQL=stringAtomicReference.get();
+            endSQL = stringAtomicReference.get();
             equivalent.set("");
         }
         String sqlString = tableSql.getTableSql() + " where " + endSQL + equivalent.get();
@@ -502,4 +514,4 @@ public class CommonServiceImpl implements ICommonService {
         String sqlColumn = input.substring(startIndex + identifier.length() + 1, endIndex);
         return convertToCamelCase(sqlColumn);
     }
-}
+}

+ 65 - 63
zkqy-ui/src/views/orderMange/codeListManage/printIndex.vue

@@ -15,7 +15,7 @@
                   type="primary"
                   size="mini"
                   @click="updateOrderData"
-                  >保存修改
+                >保存修改
                 </el-button>
                 <!-- <el-button
                     :disabled="tableData.length != 1"
@@ -40,14 +40,14 @@
                 >
                 </el-switch>
                 <el-button type="primary" size="mini" @click="readStateChange"
-                  >{{ isStartReadNum ? "停止读数" : "开始读数" }}
+                >{{ isStartReadNum ? "停止读数" : "开始读数" }}
                 </el-button>
                 <el-button
                   v-show="!printAuto"
                   type="success"
                   size="mini"
                   @click="printBtnHandler"
-                  >打印
+                >打印
                 </el-button>
               </div>
               <div class="weightWrap" v-show="excuteType == 1">
@@ -83,7 +83,7 @@
               width="50"
               label="序号"
             ></el-table-column>
-            <el-table-column prop="machineTool" label="机台"> </el-table-column>
+            <el-table-column prop="machineTool" label="机台"></el-table-column>
             <el-table-column
               prop="boxNum"
               :label="`${tempStr}号`"
@@ -121,7 +121,7 @@
                   size="mini"
                   :disabled="chooseState"
                   @click="handleSaveOne(scope.row)"
-                  >保存修改
+                >保存修改
                 </el-button>
                 <el-button
                   v-else-if="excuteType == 3"
@@ -129,7 +129,7 @@
                   size="mini"
                   :disabled="chooseState"
                   @click="handleSuppleOne(scope.row)"
-                  >打印
+                >打印
                 </el-button>
 
                 <el-button
@@ -138,7 +138,7 @@
                   size="mini"
                   :disabled="chooseState"
                   @click="handleDeleteOne(scope.$index, scope.row)"
-                  >删除
+                >删除
                 </el-button>
               </template>
             </el-table-column>
@@ -224,11 +224,11 @@
                       :value="item.id"
                     >
                       <span class="discribe" style="float: left">{{
-                        item.productionLineName
-                      }}</span>
+                          item.productionLineName
+                        }}</span>
                       <span
                         style="float: right; color: #8492a6; font-size: 13px"
-                        >{{ item.productionLineDepartment }}</span
+                      >{{ item.productionLineDepartment }}</span
                       >
                     </el-option>
                   </el-select>
@@ -489,8 +489,8 @@ import {
   removeProductCodeASInventory,
 } from "@/api/codeListManage/productCodeList";
 import codeListPrint from "@/utils/print/codeListPrint";
-import { getServerPrintData } from "@/utils/print/printUtils";
-import { v4 as uuidv4 } from "uuid";
+import {getServerPrintData} from "@/utils/print/printUtils";
+import {v4 as uuidv4} from "uuid";
 
 export default {
   name: "ProductCodeList",
@@ -562,36 +562,36 @@ export default {
       },
       rules: {
         grossWeight: [
-          { required: true, message: "请输入重量", trigger: "change" },
+          {required: true, message: "请输入重量", trigger: "change"},
         ],
         packaging: [
-          { required: true, message: "请选择包装", trigger: "change" },
+          {required: true, message: "请选择包装", trigger: "change"},
         ],
         machineTool: [
-          { required: true, message: "请选择机台", trigger: "change" },
+          {required: true, message: "请选择机台", trigger: "change"},
         ],
         workShifts: [
-          { required: true, message: "请选择班次", trigger: "change" },
+          {required: true, message: "请选择班次", trigger: "change"},
         ],
         productionDate: [
-          { required: true, message: "请选择生产日期", trigger: "change" },
+          {required: true, message: "请选择生产日期", trigger: "change"},
         ],
-        levels: [{ required: true, message: "请选择等级", trigger: "change" }],
+        levels: [{required: true, message: "请选择等级", trigger: "change"}],
         // foreignTradeNumber: [
         //   { required: true, message: "请输入外贸号", trigger: "blur" },
         // ],
         canisterWeight: [
-          { required: true, message: "请选择筒重", trigger: "change" },
+          {required: true, message: "请选择筒重", trigger: "change"},
         ],
         boxWeight: [
-          { required: true, message: "请选择箱重/车重", trigger: "change" },
+          {required: true, message: "请选择箱重/车重", trigger: "change"},
         ],
         tubeColor: [
-          { required: true, message: "请选择管色", trigger: "change" },
+          {required: true, message: "请选择管色", trigger: "change"},
         ],
-        comPort: [{ required: true, message: "请选择端口", trigger: "change" }],
+        comPort: [{required: true, message: "请选择端口", trigger: "change"}],
         printFormat: [
-          { required: true, message: "请选择格式", trigger: "change" },
+          {required: true, message: "请选择格式", trigger: "change"},
         ],
       },
       dropDownData: {},
@@ -654,6 +654,7 @@ export default {
         suttle: null,
       },
       waiting: 0, // 等待次数 不论时间
+      confirmPrinting: false,// 确认打印
       lastWeight: 0, // 上次得到的重量
     };
   },
@@ -693,7 +694,7 @@ export default {
   mounted() {
     // console.log(this.dict.type.packaging_type);
     console.log("mounted");
-    let { excuteType, qrCode } = this.$route.query;
+    let {excuteType, qrCode} = this.$route.query;
     if (excuteType == 2) {
       //修改
       this.handleUpdate(qrCode);
@@ -734,9 +735,11 @@ export default {
     },
     async readStateChange() {
       if (this.isStartReadNum) {
+        console.log("当前等待次数:", this.waiting);
         //正在读
         this.closeWebSocket();
         this.isStartReadNum = false;
+        this.waiting = 0; //
         this.$message.success("已关闭读数");
       } else {
         // 开启读数时 先获取码单号
@@ -754,42 +757,33 @@ export default {
       }
     },
     initWebSocket() {
-      // console.log("开始连接ws", process.env.VUE_APP_BASE_WS_API);
-      let automatis_printing = this.dict.type.automatic_printing;
-      let frequency = automatis_printing.find(
-        // 等到稳定次数
-        (item) => item.label == "frequency"
-      )?.value;
-      if (frequency == undefined) {
-        frequency = 30;
-      }
-      let minimumWeight = automatis_printing.find(
-        // 打印最小值
-        (item) => item.label == "minimumWeight"
-      )?.value;
-      if (minimumWeight == undefined) {
-        minimumWeight = 5;
-      }
-      let antishake = automatis_printing.find(
-        // 防抖
-        (item) => item.label == "antishake"
-      )?.value;
-      if (antishake == undefined) {
-        antishake = 3;
-      }
-      const wsUrl = "ws:" + process.env.VUE_APP_BASE_WS_API + "/currentWeight";
+      const getConfigValue = (label, defaultValue) => {
+        let value = this.dict.type.automatic_printing.find(
+          (item) => item.label === label
+        )?.value;
+        return value !== undefined ? value : defaultValue;
+      };
+
+      let frequency = getConfigValue("frequency", 30);
+      let minimumWeight = getConfigValue("minimumWeight", 5);
+      let antishake = getConfigValue("antishake", 3);
+
+      const wsUrl = `ws:${process.env.VUE_APP_BASE_WS_API}/currentWeight`;
       this.websocket = new WebSocket(wsUrl);
       this.websocket.addEventListener("open", (event) => {
         console.log("建立WebSocket连接");
         this.isStartReadNum = true;
         this.$message.success("已开启读数");
       });
+
       let initialWeight = null; // 初始化基准重量
-      const weightChangeThreshold = antishake; // 定义重量变化阈值x
+      const weightChangeThreshold = antishake; // 定义重量变化阈值
       let shouldPrint = false; // 用于控制是否应该打印
+
       this.websocket.addEventListener("message", async (event) => {
         console.log(event);
         if (!this.printAuto) return;
+
         const weightData = JSON.parse(event.data);
         const weight = weightData.weight;
         this.nowWeight = weight;
@@ -803,6 +797,7 @@ export default {
         if (weight <= minimumWeight) {
           this.resetWeightStatus();
           shouldPrint = false; // 重量未满足打印条件,重置打印标志
+          this.confirmPrinting = true;
           return;
         }
 
@@ -811,6 +806,8 @@ export default {
           shouldPrint = true; // 第一次有效重量,允许打印
           return;
         }
+
+
         const weightDifference = Math.abs(weight - initialWeight);
         if (weightDifference > weightChangeThreshold) {
           initialWeight = weight;
@@ -818,9 +815,10 @@ export default {
           shouldPrint = true;
         } else {
           this.waiting++;
-          if (this.waiting == frequency && shouldPrint) {
-            // 只有在应该打印且等待计数达标时才打印
+          if (this.waiting == frequency && shouldPrint && this.confirmPrinting) {
+            // 只有在应该打印且等待计数达标时才打印qwe
             this.waiting = 0;
+            this.confirmPrinting = false;
             shouldPrint = false; // 打印后禁止下一次打印,直到重量再次变化
             const isValidate = await this.validateAndPrint(weight);
           }
@@ -832,10 +830,10 @@ export default {
       });
       this.websocket.addEventListener("error", (event) => {
         console.error("WebSocket错误:", event);
-        this.$message.error("WebSocket错误,请重试");
+        this.$message.error("WebSocket错误请重试");
       });
 
-      this.websocket.addEventListener("close", (event) => {
+      this.websocket.addEventListener("close", () => {
         console.log("关闭WebSocket连接");
       });
     },
@@ -850,10 +848,11 @@ export default {
       if (isValidate) {
         this.setWeight(weight);
       } else {
-        // this.$message.warning("请完善表单数据");
+        this.$message.warning("请完善表单数据");
       }
       return isValidate;
     },
+
     // 表单重量改变回调
     changeGrossWeightForm(val) {
       // console.log(val);
@@ -1012,7 +1011,7 @@ export default {
     // 毛重改变回调
     changeGrossWeight(row) {
       console.log(row);
-      let { boxWeight, grossWeight, canisterWeight, canisterNum } = row;
+      let {boxWeight, grossWeight, canisterWeight, canisterNum} = row;
       if (!Number(grossWeight)) {
         row.suttle = 0;
         return;
@@ -1048,7 +1047,7 @@ export default {
     // 确认保存修改一条数据
     async handleSaveOne(row) {
       try {
-        let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+        let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
           this.count;
         let rowData = JSON.parse(JSON.stringify(row));
 
@@ -1131,7 +1130,7 @@ export default {
       this.$refs.form.validate(async (valid) => {
         if (valid) {
           try {
-            let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+            let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
               this.count;
             let rowData = newData.machineTool
               ? JSON.parse(JSON.stringify(newData))
@@ -1189,7 +1188,7 @@ export default {
       this.$refs.form.validate(async (valid) => {
         if (valid) {
           try {
-            let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+            let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
               this.count;
             let rowData = JSON.parse(JSON.stringify(this.tableData[0]));
             this.printTableData = [rowData];
@@ -1333,7 +1332,7 @@ export default {
     },
     // 计算净重
     getSuttle() {
-      let { boxWeight, canisterWeight, canisterNum } = this.form;
+      let {boxWeight, canisterWeight, canisterNum} = this.form;
       return (Number(boxWeight) - canisterWeight * canisterNum).toFixed(2);
     },
     // 表格点击回调
@@ -1376,7 +1375,7 @@ export default {
             this.$refs.form.validate(async (valid) => {
               if (valid) {
                 try {
-                  let { sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight } =
+                  let {sumBoxNum, sumCanisterNum, sumSuttle, sumGrossWeight} =
                     this.count;
                   let rowData = JSON.parse(JSON.stringify(row));
                   this.printTableData = [rowData];
@@ -1428,7 +1427,7 @@ export default {
     // 获取所有批次数据
     async getAllBatchData(id) {
       try {
-        let payload = { machineTool: id };
+        let payload = {machineTool: id};
         let res = await finishedProductList(payload);
         if (res.code == 200) {
           this.batchData = res.data;
@@ -1457,7 +1456,8 @@ export default {
         if (res.code == 200) {
           this.dropDownData = res.data;
         }
-      } catch (error) {}
+      } catch (error) {
+      }
     },
     /** 查询产品码单列表 */
     getList() {
@@ -1658,7 +1658,8 @@ export default {
           this.getList();
           this.$modal.msgSuccess("删除成功");
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -1752,6 +1753,7 @@ export default {
 ::v-deep .el-table .current-row {
   background-color: #55e905 !important;
 }
+
 ::v-deep .el-table__body tr.current-row > td.el-table__cell {
   background-color: #55e905 !important;
 }