Răsfoiți Sursa

feat:总码单功能接口逻辑、出入库、接续、补码、作废等等等

韩帛霖 11 luni în urmă
părinte
comite
e16cf736d2
18 a modificat fișierele cu 1129 adăugiri și 571 ștergeri
  1. 17 18
      zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductCodeController.java
  2. 64 21
      zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductCodeListController.java
  3. 14 20
      zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductHandsetOutboundRecordController.java
  4. 44 21
      zkqy-custom-business/src/main/java/com/zkqy/business/controller/SaleAccountsReceivableDetailController.java
  5. 163 34
      zkqy-custom-business/src/main/java/com/zkqy/business/domain/ProductCodeList.java
  6. 225 192
      zkqy-custom-business/src/main/java/com/zkqy/business/domain/ProductInventory.java
  7. 26 0
      zkqy-custom-business/src/main/java/com/zkqy/business/domain/vo/ProductCodeListVO.java
  8. 17 1
      zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductCodeListMapper.java
  9. 23 12
      zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductWarehousingRecordMapper.java
  10. 11 2
      zkqy-custom-business/src/main/java/com/zkqy/business/service/IProductCodeListService.java
  11. 31 11
      zkqy-custom-business/src/main/java/com/zkqy/business/service/IProductWarehousingRecordService.java
  12. 58 5
      zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductCodeListServiceImpl.java
  13. 21 28
      zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductHandsetOutboundRecordServiceImpl.java
  14. 3 8
      zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductInventoryServiceImpl.java
  15. 86 33
      zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductWarehousingRecordServiceImpl.java
  16. 122 11
      zkqy-custom-business/src/main/resources/mapper/business/ProductCodeListMapper.xml
  17. 1 0
      zkqy-custom-business/src/main/resources/mapper/business/ProductOutboundRecordMapper.xml
  18. 203 154
      zkqy-custom-business/src/main/resources/mapper/business/ProductWarehousingRecordMapper.xml

+ 17 - 18
zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductCodeController.java

@@ -2,6 +2,7 @@ package com.zkqy.business.controller;
 
 import java.util.List;
 import javax.servlet.http.HttpServletResponse;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -32,19 +33,17 @@ import com.zkqy.common.core.page.TableDataInfo;
 @RestController
 @RequestMapping("/system/productCode")
 @Api(value = "/system/productCode", description = "产品编码-接口")
-public class ProductCodeController extends BaseController
-{
+public class ProductCodeController extends BaseController {
     @Autowired
     private IProductCodeService productCodeService;
 
-/**
- * 查询产品编码列表
- */
+    /**
+     * 查询产品编码列表
+     */
 //@PreAuthorize("@ss.hasPermi('system:productCode:list')")
     @GetMapping("/list")
     @ApiOperation(value = "查询产品编码列表")
-    public TableDataInfo list(ProductCode productCode)
-    {
+    public TableDataInfo list(ProductCode productCode) {
         startPage();
         List<ProductCode> list = productCodeService.selectProductCodeList(productCode);
         return getDataTable(list);
@@ -57,8 +56,7 @@ public class ProductCodeController extends BaseController
     @Log(title = "产品编码", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @ApiOperation(value = "导出产品编码列表")
-    public void export(HttpServletResponse response, ProductCode productCode)
-    {
+    public void export(HttpServletResponse response, ProductCode productCode) {
         List<ProductCode> list = productCodeService.selectProductCodeList(productCode);
         ExcelUtil<ProductCode> util = new ExcelUtil<ProductCode>(ProductCode.class);
         util.exportExcel(response, list, "产品编码数据");
@@ -70,8 +68,7 @@ public class ProductCodeController extends BaseController
     //@PreAuthorize("@ss.hasPermi('system:productCode:query')")
     @GetMapping(value = "/{id}")
     @ApiOperation(value = "获取产品编码详细信息")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return success(productCodeService.selectProductCodeById(id));
     }
 
@@ -82,8 +79,7 @@ public class ProductCodeController extends BaseController
     @Log(title = "产品编码", businessType = BusinessType.INSERT)
     @PostMapping
     @ApiOperation(value = "新增产品编码")
-    public AjaxResult add(@RequestBody ProductCode productCode)
-    {
+    public AjaxResult add(@RequestBody ProductCode productCode) {
         return toAjax(productCodeService.insertProductCode(productCode));
     }
 
@@ -94,8 +90,7 @@ public class ProductCodeController extends BaseController
     @Log(title = "产品编码", businessType = BusinessType.UPDATE)
     @PutMapping
     @ApiOperation(value = "修改产品编码")
-    public AjaxResult edit(@RequestBody ProductCode productCode)
-    {
+    public AjaxResult edit(@RequestBody ProductCode productCode) {
         return toAjax(productCodeService.updateProductCode(productCode));
     }
 
@@ -106,13 +101,17 @@ public class ProductCodeController extends BaseController
     @Log(title = "产品编码", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     @ApiOperation(value = "删除产品编码")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(productCodeService.deleteProductCodeByIds(ids));
     }
 
+    /**
+     * 码单管理下拉框所需数据
+     *
+     * @return
+     */
     @GetMapping("/dropDownData")
-    public AjaxResult dropDownData(){
+    public AjaxResult dropDownData() {
         return AjaxResult.success(productCodeService.dropDownData());
     }
 

+ 64 - 21
zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductCodeListController.java

@@ -1,20 +1,16 @@
 package com.zkqy.business.controller;
 
-import java.io.ByteArrayOutputStream;
 import java.util.List;
-import javax.print.*;
-import javax.servlet.http.HttpServletResponse;
 
 import com.zkqy.business.domain.ProductWarehousingRecord;
+import com.zkqy.business.domain.vo.NewOldProductCodeListVO;
 import com.zkqy.business.domain.vo.ProductCodeListVO;
+import com.zkqy.business.service.IProductOutboundRecordService;
 import com.zkqy.business.service.IProductWarehousingRecordService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.BeanUtils;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -29,7 +25,6 @@ import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.enums.BusinessType;
 import com.zkqy.business.domain.ProductCodeList;
 import com.zkqy.business.service.IProductCodeListService;
-import com.zkqy.common.utils.poi.ExcelUtil;
 import com.zkqy.common.core.page.TableDataInfo;
 
 /**
@@ -45,9 +40,12 @@ public class ProductCodeListController extends BaseController {
     @Autowired
     private IProductCodeListService productCodeListService;
 
-    @Autowired
+    @Autowired // 入库记录
     private IProductWarehousingRecordService productWarehousingRecordService;
 
+    @Autowired // 出库记录
+    private IProductOutboundRecordService productOutboundRecordService;
+
     /**
      * 查询产品码单列表
      */
@@ -94,14 +92,13 @@ public class ProductCodeListController extends BaseController {
     }
 
     /***
-     * 根据qrCode查询产品码单信息
+     * 根据父级查询产品码单信息
      */
-    @GetMapping("/queryCodeListByQrCode/{qrCode}")
-    public AjaxResult queryCodeListByQrCode(@PathVariable("qrCode") String qrCode) {
-        return success(productCodeListService.selectProductCodeInfoByQrCode(qrCode));
+    @GetMapping("/queryCodeListByParentCode/{parentCode}")
+    public AjaxResult queryCodeListByQrCode(@PathVariable("parentCode") String parentCode) {
+        return success(productCodeListService.selectProductCodeInfoByParentCode(parentCode));
     }
 
-
     /**
      * 新增产品码单
      */
@@ -120,18 +117,54 @@ public class ProductCodeListController extends BaseController {
     @Log(title = "产品码单", businessType = BusinessType.UPDATE)
     @PutMapping
     @ApiOperation(value = "修改产品码单")
-    public AjaxResult edit(@RequestBody ProductCodeListVO vo) {
+    @Transactional
+    public AjaxResult edit(@RequestBody NewOldProductCodeListVO newOldProductCodeListVO) {
+
         //查询成品库存表,查看当前码单是否已经入库,入库则不能修改
-        ProductWarehousingRecord productWarehousingRecord = new ProductWarehousingRecord();
-        productWarehousingRecord.setQrCode(vo.getQrCode());
-        List<ProductWarehousingRecord> productWarehousingRecordList = productWarehousingRecordService.selectProductWarehousingRecordList(productWarehousingRecord);
-        if (productWarehousingRecordList.size() > 0) {
-            return AjaxResult.warn("该码单已入库,不能修改!");
+        // ProductWarehousingRecord productWarehousingRecord = new ProductWarehousingRecord();
+        // productWarehousingRecord.setQrCode(vo.getQrCode());
+        // List<ProductWarehousingRecord> productWarehousingRecordList = productWarehousingRecordService.selectProductWarehousingRecordList(productWarehousingRecord);
+        // if (productWarehousingRecordList.size() > 0) {
+        //      return AjaxResult.warn("该码单已入库,不能修改!");
+        // }
+
+        // 查询出库记录、如果当前码单已经出库,则不能修改
+        ProductCodeListVO productCodeListVO = new ProductCodeListVO();
+        productCodeListVO.setQrCode(newOldProductCodeListVO.getOldVo().getQrCode());
+        productCodeListVO.setLotNum(newOldProductCodeListVO.getOldVo().getLotNum());
+        productCodeListVO.setQrCodeId(newOldProductCodeListVO.getOldVo().getQrCodeId());
+        int out = productOutboundRecordService.selectProductOutboundRecordList(productCodeListVO).size();
+        if (out != 0) {
+            return AjaxResult.warn("该码单已出库,不能修改!");
+        }
+        try {
+            // 删除原码单数据
+            productCodeListService.deleteProductCodeListById(newOldProductCodeListVO.getOldVo().getId());
+            // 新增码单
+            // productCodeListService.insertProductCodeList(newVo);
+            // 修改入库记录码单信息(删除后新增 同时删除对应库存)
+            // productWarehousingRecordService.updateProductWarehousingRecordRecord(newVo);
+            productWarehousingRecordService.deleteProductWarehousingRecordByQrCode(newOldProductCodeListVO.getNewVo());
+            // 更新库存数据(重新入库)
+            productCodeListService.insertProductCodeList(newOldProductCodeListVO.getNewVo());
+            return toAjax(true);
+        } catch (Exception e) {
+            return toAjax(false);
         }
+    }
 
-        return toAjax(productCodeListService.updateProductCodeList(vo));
+    /**
+     * 修改总码单信息
+     */
+    @Log(title = "产品码单", businessType = BusinessType.UPDATE)
+    @PutMapping("/updateAssembleProductCode")
+    @ApiOperation(value = "修改产品码单")
+    @Transactional
+    public AjaxResult editById(@RequestBody ProductCodeListVO vo) {
+        return AjaxResult.success(productCodeListService.updateProductCodeList(vo));
     }
 
+
     /**
      * 删除产品码单
      */
@@ -179,4 +212,14 @@ public class ProductCodeListController extends BaseController {
     public AjaxResult removeInventory(@RequestBody ProductCodeListVO productCodeListVO) {
         return productCodeListService.deleteProductCodeListInfoByInfo(productCodeListVO);
     }
+
+
+    /**
+     * 得到当前总码单中所包含的码单信息
+     */
+    @GetMapping("/getOutProductCodeList")
+    public AjaxResult getOutProductCodeList(String parentCode) {
+        return AjaxResult.success(productCodeListService.selectProductCodeListByParentCode(parentCode));
+    }
+
 }

+ 14 - 20
zkqy-custom-business/src/main/java/com/zkqy/business/controller/ProductHandsetOutboundRecordController.java

@@ -34,19 +34,17 @@ import com.zkqy.common.core.page.TableDataInfo;
 @RestController
 @RequestMapping("/system/ProductHandsetOutboundRecord")
 @Api(value = "/system/ProductHandsetOutboundRecord", description = "成品手持机出库记录-接口")
-public class ProductHandsetOutboundRecordController extends BaseController
-{
+public class ProductHandsetOutboundRecordController extends BaseController {
     @Autowired
     private IProductHandsetOutboundRecordService productHandsetOutboundRecordService;
 
-/**
- * 查询成品手持机出库记录列表
- */
+    /**
+     * 查询成品手持机出库记录列表
+     */
 //@PreAuthorize("@ss.hasPermi('system:ProductHandsetOutboundRecord:list')")
-@GetMapping("/list")
-@ApiOperation(value = "查询成品手持机出库记录列表")
-    public TableDataInfo list(ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    @GetMapping("/list")
+    @ApiOperation(value = "查询成品手持机出库记录列表")
+    public TableDataInfo list(ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         startPage();
         List<ProductHandsetOutboundRecord> list = productHandsetOutboundRecordService.selectProductHandsetOutboundRecordList(productHandsetOutboundRecord);
         return getDataTable(list);
@@ -59,8 +57,7 @@ public class ProductHandsetOutboundRecordController extends BaseController
     @Log(title = "成品手持机出库记录", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @ApiOperation(value = "导出成品手持机出库记录列表")
-    public void export(HttpServletResponse response, ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    public void export(HttpServletResponse response, ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         List<ProductHandsetOutboundRecord> list = productHandsetOutboundRecordService.selectProductHandsetOutboundRecordList(productHandsetOutboundRecord);
         ExcelUtil<ProductHandsetOutboundRecord> util = new ExcelUtil<ProductHandsetOutboundRecord>(ProductHandsetOutboundRecord.class);
         util.exportExcel(response, list, "成品手持机出库记录数据");
@@ -72,8 +69,7 @@ public class ProductHandsetOutboundRecordController extends BaseController
 //    @PreAuthorize("@ss.hasPermi('system:ProductHandsetOutboundRecord:query')")
     @GetMapping(value = "/{id}")
     @ApiOperation(value = "获取成品手持机出库记录详细信息")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return success(productHandsetOutboundRecordService.selectProductHandsetOutboundRecordById(id));
     }
 
@@ -84,8 +80,7 @@ public class ProductHandsetOutboundRecordController extends BaseController
     @Log(title = "成品手持机出库记录", businessType = BusinessType.INSERT)
     @PostMapping
     @ApiOperation(value = "新增成品手持机出库记录")
-    public AjaxResult add(@RequestBody ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    public AjaxResult add(@RequestBody ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         return toAjax(productHandsetOutboundRecordService.insertProductHandsetOutboundRecord(productHandsetOutboundRecord));
     }
 
@@ -96,8 +91,7 @@ public class ProductHandsetOutboundRecordController extends BaseController
     @Log(title = "成品手持机出库记录", businessType = BusinessType.UPDATE)
     @PutMapping
     @ApiOperation(value = "修改成品手持机出库记录")
-    public AjaxResult edit(@RequestBody ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    public AjaxResult edit(@RequestBody ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         return toAjax(productHandsetOutboundRecordService.updateProductHandsetOutboundRecord(productHandsetOutboundRecord));
     }
 
@@ -108,18 +102,18 @@ public class ProductHandsetOutboundRecordController extends BaseController
     @Log(title = "成品手持机出库记录", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     @ApiOperation(value = "删除成品手持机出库记录")
-    public AjaxResult remove(@PathVariable List<Long> ids)
-    {
+    public AjaxResult remove(@PathVariable List<Long> ids) {
         return toAjax(productHandsetOutboundRecordService.deleteProductHandsetOutboundRecordByIds(ids));
     }
 
     /**
      * 手持机出库记录
+     *
      * @param productCodeListVOList
      * @return
      */
     @PostMapping("/productHandsetOutStorage")
-    public AjaxResult productHandsetOutStorage(@RequestBody List<ProductCodeListVO> productCodeListVOList){
+    public AjaxResult productHandsetOutStorage(@RequestBody List<ProductCodeListVO> productCodeListVOList) {
         productHandsetOutboundRecordService.productHandsetOutStorage(productCodeListVOList);
         return AjaxResult.success();
     }

+ 44 - 21
zkqy-custom-business/src/main/java/com/zkqy/business/controller/SaleAccountsReceivableDetailController.java

@@ -1,9 +1,13 @@
 package com.zkqy.business.controller;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zkqy.business.domain.vo.FinishedProductInvoiceVo;
+import com.zkqy.execution.produce.dispersed.entity.CommonEntity;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -34,8 +38,7 @@ import com.zkqy.common.core.page.TableDataInfo;
 @RestController
 @RequestMapping("/system/SaleAccountsReceivableDetail")
 @Api(value = "/system/SaleAccountsReceivableDetail", description = "应收帐明细-接口")
-public class SaleAccountsReceivableDetailController extends BaseController
-{
+public class SaleAccountsReceivableDetailController extends BaseController {
     @Autowired
     private ISaleAccountsReceivableDetailService saleAccountsReceivableDetailService;
 
@@ -45,8 +48,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
     //@PreAuthorize("@ss.hasPermi('system:SaleAccountsReceivableDetail:list')")
     @GetMapping("/list")
     @ApiOperation(value = "查询应收帐明细列表")
-    public TableDataInfo list(SaleAccountsReceivableDetail saleAccountsReceivableDetail)
-    {
+    public TableDataInfo list(SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         startPage();
         List<SaleAccountsReceivableDetail> list = saleAccountsReceivableDetailService.selectSaleAccountsReceivableDetailList(saleAccountsReceivableDetail);
         return getDataTable(list);
@@ -59,8 +61,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
     @Log(title = "应收帐明细", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @ApiOperation(value = "导出应收帐明细列表")
-    public void export(HttpServletResponse response, SaleAccountsReceivableDetail saleAccountsReceivableDetail)
-    {
+    public void export(HttpServletResponse response, SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         List<SaleAccountsReceivableDetail> list = saleAccountsReceivableDetailService.selectSaleAccountsReceivableDetailList(saleAccountsReceivableDetail);
         ExcelUtil<SaleAccountsReceivableDetail> util = new ExcelUtil<SaleAccountsReceivableDetail>(SaleAccountsReceivableDetail.class);
         util.exportExcel(response, list, "应收帐明细数据");
@@ -72,8 +73,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
     @PreAuthorize("@ss.hasPermi('system:SaleAccountsReceivableDetail:query')")
     @GetMapping(value = "/{id}")
     @ApiOperation(value = "获取应收帐明细详细信息")
-    public AjaxResult getInfo(@PathVariable("id") Long id)
-    {
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
         return success(saleAccountsReceivableDetailService.selectSaleAccountsReceivableDetailById(id));
     }
 
@@ -84,8 +84,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
     @Log(title = "应收帐明细", businessType = BusinessType.INSERT)
     @PostMapping
     @ApiOperation(value = "新增应收帐明细")
-    public AjaxResult add(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail)
-    {
+    public AjaxResult add(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         return toAjax(saleAccountsReceivableDetailService.insertSaleAccountsReceivableDetail(saleAccountsReceivableDetail));
     }
 
@@ -96,8 +95,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
     @Log(title = "应收帐明细", businessType = BusinessType.UPDATE)
     @PutMapping
     @ApiOperation(value = "修改应收帐明细")
-    public AjaxResult edit(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail)
-    {
+    public AjaxResult edit(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         return toAjax(saleAccountsReceivableDetailService.updateSaleAccountsReceivableDetail(saleAccountsReceivableDetail));
     }
 
@@ -108,8 +106,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
     @Log(title = "应收帐明细", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     @ApiOperation(value = "删除应收帐明细")
-    public AjaxResult remove(@PathVariable Long[] ids)
-    {
+    public AjaxResult remove(@PathVariable Long[] ids) {
         return toAjax(saleAccountsReceivableDetailService.deleteSaleAccountsReceivableDetailByIds(ids));
     }
 
@@ -117,7 +114,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 回单接口
      */
     @PutMapping("/returnReceipt")
-    public AjaxResult returnReceipt(@RequestBody List<SaleAccountsReceivableDetail> saleAccountsReceivableDetailList){
+    public AjaxResult returnReceipt(@RequestBody List<SaleAccountsReceivableDetail> saleAccountsReceivableDetailList) {
         return toAjax(saleAccountsReceivableDetailService.returnReceipt(saleAccountsReceivableDetailList));
     }
 
@@ -125,7 +122,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 待办应收帐明细修改接口
      */
     @PutMapping("/editAccountsReceivableDetail")
-    public AjaxResult editAccountsReceivableDetail(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail){
+    public AjaxResult editAccountsReceivableDetail(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         return toAjax(saleAccountsReceivableDetailService.editAccountsReceivableDetail(saleAccountsReceivableDetail));
     }
 
@@ -133,7 +130,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 应收明细审核通过接口
      */
     @PostMapping("/reviewApproved")
-    public AjaxResult reviewApproved(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail){
+    public AjaxResult reviewApproved(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         return toAjax(saleAccountsReceivableDetailService.reviewApproved(saleAccountsReceivableDetail));
     }
 
@@ -141,7 +138,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 开票接口
      */
     @PostMapping("/billing")
-    public AjaxResult billing(@RequestBody FinishedProductInvoiceVo vo){
+    public AjaxResult billing(@RequestBody FinishedProductInvoiceVo vo) {
         return toAjax(saleAccountsReceivableDetailService.billing(vo));
     }
 
@@ -149,7 +146,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 取消开票
      */
     @PostMapping("/cancelBilling")
-    public AjaxResult cancelBilling(@RequestBody FinishedProductInvoiceVo vo){
+    public AjaxResult cancelBilling(@RequestBody FinishedProductInvoiceVo vo) {
         return toAjax(saleAccountsReceivableDetailService.cancelBilling(vo));
     }
 
@@ -157,7 +154,7 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 驳回
      */
     @PostMapping("/reject")
-    public AjaxResult reject(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail){
+    public AjaxResult reject(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         return toAjax(saleAccountsReceivableDetailService.reject(saleAccountsReceivableDetail));
     }
 
@@ -165,10 +162,36 @@ public class SaleAccountsReceivableDetailController extends BaseController
      * 撤销登账
      */
     @PostMapping("/cancelAccountEntry")
-    public AjaxResult cancelAccountEntry(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail){
+    public AjaxResult cancelAccountEntry(@RequestBody SaleAccountsReceivableDetail saleAccountsReceivableDetail) {
         return toAjax(saleAccountsReceivableDetailService.cancelAccountEntry(saleAccountsReceivableDetail));
     }
 
 
+    /**
+     * 动态导出应收帐明细列表
+     */
+    @Log(title = "动态应收帐明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/dynamicExport")
+    @ApiOperation(value = "动态导出应收帐明细列表")
+    public void dynamicExport(HttpServletResponse response, CommonEntity commonEntity) {
+        String exportType = commonEntity.getBasicMap().get("exportType").toString();
+        List<SaleAccountsReceivableDetail> list = new ArrayList<>();
+        switch (exportType) {
+            case "condition":
+                // 条件导出
+                ObjectMapper objectMapper = new ObjectMapper();
+                SaleAccountsReceivableDetail saleAccountsReceivableDetail = objectMapper.convertValue(commonEntity.getQueryMap(), SaleAccountsReceivableDetail.class);
+                list = saleAccountsReceivableDetailService.selectSaleAccountsReceivableDetailList(saleAccountsReceivableDetail);
+                break;
+            case "checkOff":
+                //  勾选导出
+                list = (List<SaleAccountsReceivableDetail>) commonEntity.getResultMap().get("exportRow");
+                break;
+        }
+        // 写入excel数据
+
+        ExcelUtil<SaleAccountsReceivableDetail> util = new ExcelUtil<SaleAccountsReceivableDetail>(SaleAccountsReceivableDetail.class);
+        util.exportExcel(response, list, "应收帐明细数据");
+    }
 
 }

+ 163 - 34
zkqy-custom-business/src/main/java/com/zkqy/business/domain/ProductCodeList.java

@@ -1,6 +1,7 @@
 package com.zkqy.business.domain;
 
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.zkqy.business.domain.vo.ProductCodeListVO;
 import com.zkqy.common.core.domain.BaseEntity;
@@ -10,115 +11,176 @@ import com.zkqy.common.annotation.Excel;
 
 /**
  * 产品码单对象 product_code_list
- * 
+ *
  * @author zkqy
  * @date 2024-04-01
  */
-public class ProductCodeList extends BaseEntity
-{
+public class ProductCodeList extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 编号 */
+    /**
+     * 编号
+     */
     private Long id;
 
-    /** 码单号 */
+    /**
+     * 码单号
+     */
     @Excel(name = "码单号")
     private String qrCode;
 
-    /** 批号 */
+    /**
+     * 批号
+     */
     @Excel(name = "批号")
     private String lotNum;
 
-    /** 货品编号 */
+    /**
+     * 货品编号
+     */
     @Excel(name = "货品编号")
     private Long productId;
 
-    /** 产品色泽 */
+    /**
+     * 产品色泽
+     */
     private String productColour;
 
-    /** 等级 */
+    /**
+     * 等级
+     */
     @Excel(name = "等级")
     private String levels;
 
-    /** 筒数 */
+    /**
+     * 筒数
+     */
     @Excel(name = "筒数")
     private Integer canisterNum;
 
-    /** 箱数 */
+    /**
+     * 箱数
+     */
     @Excel(name = "箱数")
     private Integer boxNum;
 
-    /** 净重 */
+    /**
+     * 净重
+     */
     @Excel(name = "净重")
     private Double suttle;
 
-    /** 生产日期 */
+    /**
+     * 生产日期
+     */
     private Date productionDate;
 
-    /** 机台 */
+    /**
+     * 机台
+     */
     private Long machineTool;
 
-    /** 毛重 */
+    /**
+     * 毛重
+     */
     private Double grossWeight;
 
-    /** 包装 */
+    /**
+     * 包装
+     */
     private String packaging;
 
-    /** 班次 */
+    /**
+     * 班次
+     */
     private String workShifts;
 
-    /** 外贸号 */
+    /**
+     * 外贸号
+     */
     private String foreignTradeNumber;
 
-    /** 筒重 */
+    /**
+     * 筒重
+     */
     private Double canisterWeight;
 
-    /** 箱重/车重 */
+    /**
+     * 箱重/车重
+     */
     private Double boxWeight;
 
-    /** 管色 */
+    /**
+     * 管色
+     */
     private String tubeColor;
 
-    /** 端口(usb端口号) */
+    /**
+     * 端口(usb端口号)
+     */
     private String comPort;
 
-    /** 打印格式(打印二维码格式) */
+    /**
+     * 打印格式(打印二维码格式)
+     */
     private String printFormat;
 
-    /** 包装类型(暂未使用) */
+    /**
+     * 包装类型(暂未使用)
+     */
     private String packagingType;
 
-    /** 库位(暂未使用) */
+    /**
+     * 库位(暂未使用)
+     */
     private String storageLocation;
 
-    /** 区域编号(暂未使用) */
+    /**
+     * 区域编号(暂未使用)
+     */
     private Long warehouseregionId;
 
-    /** 删除标志(0:否;2:是) */
+    /**
+     * 删除标志(0:否;2:是)
+     */
     private String delFlag;
 
-    /** 创建者编号 */
+    /**
+     * 创建者编号
+     */
     private Long createById;
 
-    /** 更新者编号 */
+    /**
+     * 更新者编号
+     */
     private Long updateById;
 
-    /** 合计筒数 */
+    /**
+     * 合计筒数
+     */
     private Integer totalCanisterNum;
 
-    /** 合计箱数 */
+    /**
+     * 合计箱数
+     */
     private Integer totalBoxNum;
 
-    /** 合计净重 */
+    /**
+     * 合计净重
+     */
     private Double totalSuttle;
 
-    /** 合计毛重 */
+    /**
+     * 合计毛重
+     */
     private Double totalGrossWeight;
 
     //码单uuid
     private String qrCodeId;
 
-    /** 退库标识 */
+    /**
+     * 退库标识
+     */
     private String withdrawingFlag;
 
     /**
@@ -126,6 +188,35 @@ public class ProductCodeList extends BaseEntity
      */
     private String saleProductId;
 
+    /**
+     * 父级码单编码
+     */
+    private String parentCode;
+
+    /**
+     * 码单状态(0:普通码单1:总码单)
+     */
+    private int otherStates;
+
+
+
+
+    public String getParentCode() {
+        return parentCode;
+    }
+
+    public void setParentCode(String parentCode) {
+        this.parentCode = parentCode;
+    }
+
+    public int getOtherStates() {
+        return otherStates;
+    }
+
+    public void setOtherStates(int otherStates) {
+        this.otherStates = otherStates;
+    }
+
     public String getSaleProductId() {
         return saleProductId;
     }
@@ -534,4 +625,42 @@ public class ProductCodeList extends BaseEntity
         this.withdrawingFlag = withdrawingFlag;
         this.saleProductId = saleProductId;
     }
+
+    public ProductCodeList(Long id, String qrCode, String lotNum, Long productId, String productColour, String levels, Integer canisterNum, Integer boxNum, Double suttle, Date productionDate, Long machineTool, Double grossWeight, String packaging, String workShifts, String foreignTradeNumber, Double canisterWeight, Double boxWeight, String tubeColor, String comPort, String printFormat, String packagingType, String storageLocation, Long warehouseregionId, String delFlag, Long createById, Long updateById, Integer totalCanisterNum, Integer totalBoxNum, Double totalSuttle, Double totalGrossWeight, String qrCodeId, String withdrawingFlag, String saleProductId, String parentCode, int otherStates) {
+        this.id = id;
+        this.qrCode = qrCode;
+        this.lotNum = lotNum;
+        this.productId = productId;
+        this.productColour = productColour;
+        this.levels = levels;
+        this.canisterNum = canisterNum;
+        this.boxNum = boxNum;
+        this.suttle = suttle;
+        this.productionDate = productionDate;
+        this.machineTool = machineTool;
+        this.grossWeight = grossWeight;
+        this.packaging = packaging;
+        this.workShifts = workShifts;
+        this.foreignTradeNumber = foreignTradeNumber;
+        this.canisterWeight = canisterWeight;
+        this.boxWeight = boxWeight;
+        this.tubeColor = tubeColor;
+        this.comPort = comPort;
+        this.printFormat = printFormat;
+        this.packagingType = packagingType;
+        this.storageLocation = storageLocation;
+        this.warehouseregionId = warehouseregionId;
+        this.delFlag = delFlag;
+        this.createById = createById;
+        this.updateById = updateById;
+        this.totalCanisterNum = totalCanisterNum;
+        this.totalBoxNum = totalBoxNum;
+        this.totalSuttle = totalSuttle;
+        this.totalGrossWeight = totalGrossWeight;
+        this.qrCodeId = qrCodeId;
+        this.withdrawingFlag = withdrawingFlag;
+        this.saleProductId = saleProductId;
+        this.parentCode = parentCode;
+        this.otherStates = otherStates;
+    }
 }

+ 225 - 192
zkqy-custom-business/src/main/java/com/zkqy/business/domain/ProductInventory.java

@@ -1,6 +1,7 @@
 package com.zkqy.business.domain;
 
 import java.util.Date;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.zkqy.common.core.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -9,135 +10,198 @@ import com.zkqy.common.annotation.Excel;
 
 /**
  * 产品库存对象 product_inventory
- * 
+ *
  * @author zkqy
  * @date 2024-04-09
  */
-public class ProductInventory extends BaseEntity
-{
+public class ProductInventory extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 编号 */
+    /**
+     * 编号
+     */
     private Long id;
 
-    /** 码单号 */
+    /**
+     * 码单号
+     */
     @Excel(name = "码单号")
     private String qrCode;
 
-    /** 批号 */
+    /**
+     * 批号
+     */
     @Excel(name = "批号")
     private String lotNum;
 
-    /** 货品编号 */
+    /**
+     * 货品编号
+     */
     @Excel(name = "货品编号")
     private Long productId;
 
-    /** 等级 */
+    /**
+     * 等级
+     */
     @Excel(name = "等级")
     private String levels;
 
-    /** 筒数 */
+    /**
+     * 筒数
+     */
     @Excel(name = "筒数")
     private Integer canisterNum;
 
-    /** 箱数 */
+    /**
+     * 箱数
+     */
     @Excel(name = "箱数")
     private Integer boxNum;
 
-    /** 净重 */
+    /**
+     * 净重
+     */
     @Excel(name = "净重")
     private Double suttle;
 
-    /** 生产日期 */
+    /**
+     * 生产日期
+     */
     @JsonFormat(pattern = "yyyy-MM-dd")
     @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date productionDate;
 
-    /** 仓库编号 */
+    /**
+     * 仓库编号
+     */
     @Excel(name = "仓库编号")
     private Long warehouseId;
 
-    /** 机台 */
+    /**
+     * 机台
+     */
     @Excel(name = "机台")
     private Long machineTool;
 
-    /** 毛重 */
+    /**
+     * 毛重
+     */
     @Excel(name = "毛重")
     private Double grossWeight;
 
-    /** 包装 */
+    /**
+     * 包装
+     */
     @Excel(name = "包装")
     private String packaging;
 
-    /** 班次 */
+    /**
+     * 班次
+     */
     @Excel(name = "班次")
     private String workShifts;
 
-    /** 外贸号 */
+    /**
+     * 外贸号
+     */
     @Excel(name = "外贸号")
     private String foreignTradeNumber;
 
-    /** 筒重 */
+    /**
+     * 筒重
+     */
     @Excel(name = "筒重")
     private Double canisterWeight;
 
-    /** 箱重 */
+    /**
+     * 箱重
+     */
     @Excel(name = "箱重")
     private Double boxWeight;
 
-    /** 管色 */
+    /**
+     * 管色
+     */
     @Excel(name = "管色")
     private String tubeColor;
 
-    /** 端口(usb端口号) */
+    /**
+     * 端口(usb端口号)
+     */
     @Excel(name = "端口", readConverterExp = "u=sb端口号")
     private String comPort;
 
-    /** 打印格式(打印二维码格式) */
+    /**
+     * 打印格式(打印二维码格式)
+     */
     @Excel(name = "打印格式", readConverterExp = "打=印二维码格式")
     private String printFormat;
 
-    /** 包装类型(暂未使用) */
+    /**
+     * 包装类型(暂未使用)
+     */
     @Excel(name = "包装类型", readConverterExp = "暂=未使用")
     private String packagingType;
 
-    /** 库位(暂未使用) */
+    /**
+     * 库位(暂未使用)
+     */
     @Excel(name = "库位", readConverterExp = "暂=未使用")
     private String storageLocation;
 
-    /** 区域编号(暂未使用) */
+    /**
+     * 区域编号(暂未使用)
+     */
     @Excel(name = "区域编号", readConverterExp = "暂=未使用")
     private Long warehouseregionId;
 
-    /** 删除标志(0:否;2:是) */
+    /**
+     * 删除标志(0:否;2:是)
+     */
     private String delFlag;
 
-    /** 创建者编号 */
+    /**
+     * 创建者编号
+     */
     private Long createById;
 
-    /** 更新者编号 */
+    /**
+     * 更新者编号
+     */
     private Long updateById;
 
-    /** 合计筒数 */
+    /**
+     * 合计筒数
+     */
     @Excel(name = "合计筒数")
     private Integer totalCanisterNum;
 
-    /** 合计箱数 */
+    /**
+     * 合计箱数
+     */
     @Excel(name = "合计箱数")
     private Integer totalBoxNum;
 
-    /** 合计净重 */
+    /**
+     * 合计净重
+     */
     @Excel(name = "合计净重")
     private Double totalSuttle;
 
-    /** 合计毛重 */
+    /**
+     * 合计毛重
+     */
     @Excel(name = "合计毛重")
     private Double totalGrossWeight;
 
-    /** 产品色泽 */
+    /**
+     * 产品色泽
+     */
     private String productColour;
 
-    /** 库存类型 */
+    /**
+     * 库存类型
+     */
     private String inventoryType;
 
     public String getInventoryType() {
@@ -148,274 +212,243 @@ public class ProductInventory extends BaseEntity
         this.inventoryType = inventoryType;
     }
 
-    public void setId(Long id)
-    {
+    public void setId(Long id) {
         this.id = id;
     }
 
-    public Long getId() 
-    {
+    public Long getId() {
         return id;
     }
-    public void setQrCode(String qrCode) 
-    {
+
+    public void setQrCode(String qrCode) {
         this.qrCode = qrCode;
     }
 
-    public String getQrCode() 
-    {
+    public String getQrCode() {
         return qrCode;
     }
-    public void setLotNum(String lotNum) 
-    {
+
+    public void setLotNum(String lotNum) {
         this.lotNum = lotNum;
     }
 
-    public String getLotNum() 
-    {
+    public String getLotNum() {
         return lotNum;
     }
-    public void setProductId(Long productId) 
-    {
+
+    public void setProductId(Long productId) {
         this.productId = productId;
     }
 
-    public Long getProductId() 
-    {
+    public Long getProductId() {
         return productId;
     }
-    public void setLevels(String levels) 
-    {
+
+    public void setLevels(String levels) {
         this.levels = levels;
     }
 
-    public String getLevels() 
-    {
+    public String getLevels() {
         return levels;
     }
-    public void setCanisterNum(Integer canisterNum)
-    {
+
+    public void setCanisterNum(Integer canisterNum) {
         this.canisterNum = canisterNum;
     }
 
-    public Integer getCanisterNum()
-    {
+    public Integer getCanisterNum() {
         return canisterNum;
     }
-    public void setBoxNum(Integer boxNum)
-    {
+
+    public void setBoxNum(Integer boxNum) {
         this.boxNum = boxNum;
     }
 
-    public Integer getBoxNum()
-    {
+    public Integer getBoxNum() {
         return boxNum;
     }
-    public void setSuttle(Double suttle)
-    {
+
+    public void setSuttle(Double suttle) {
         this.suttle = suttle;
     }
 
-    public Double getSuttle()
-    {
+    public Double getSuttle() {
         return suttle;
     }
-    public void setProductionDate(Date productionDate) 
-    {
+
+    public void setProductionDate(Date productionDate) {
         this.productionDate = productionDate;
     }
 
-    public Date getProductionDate() 
-    {
+    public Date getProductionDate() {
         return productionDate;
     }
-    public void setWarehouseId(Long warehouseId) 
-    {
+
+    public void setWarehouseId(Long warehouseId) {
         this.warehouseId = warehouseId;
     }
 
-    public Long getWarehouseId() 
-    {
+    public Long getWarehouseId() {
         return warehouseId;
     }
-    public void setMachineTool(Long machineTool)
-    {
+
+    public void setMachineTool(Long machineTool) {
         this.machineTool = machineTool;
     }
 
-    public Long getMachineTool()
-    {
+    public Long getMachineTool() {
         return machineTool;
     }
-    public void setGrossWeight(Double grossWeight)
-    {
+
+    public void setGrossWeight(Double grossWeight) {
         this.grossWeight = grossWeight;
     }
 
-    public Double getGrossWeight()
-    {
+    public Double getGrossWeight() {
         return grossWeight;
     }
-    public void setPackaging(String packaging) 
-    {
+
+    public void setPackaging(String packaging) {
         this.packaging = packaging;
     }
 
-    public String getPackaging() 
-    {
+    public String getPackaging() {
         return packaging;
     }
-    public void setWorkShifts(String workShifts) 
-    {
+
+    public void setWorkShifts(String workShifts) {
         this.workShifts = workShifts;
     }
 
-    public String getWorkShifts() 
-    {
+    public String getWorkShifts() {
         return workShifts;
     }
-    public void setForeignTradeNumber(String foreignTradeNumber) 
-    {
+
+    public void setForeignTradeNumber(String foreignTradeNumber) {
         this.foreignTradeNumber = foreignTradeNumber;
     }
 
-    public String getForeignTradeNumber() 
-    {
+    public String getForeignTradeNumber() {
         return foreignTradeNumber;
     }
-    public void setCanisterWeight(Double canisterWeight)
-    {
+
+    public void setCanisterWeight(Double canisterWeight) {
         this.canisterWeight = canisterWeight;
     }
 
-    public Double getCanisterWeight()
-    {
+    public Double getCanisterWeight() {
         return canisterWeight;
     }
-    public void setBoxWeight(Double boxWeight)
-    {
+
+    public void setBoxWeight(Double boxWeight) {
         this.boxWeight = boxWeight;
     }
 
-    public Double getBoxWeight()
-    {
+    public Double getBoxWeight() {
         return boxWeight;
     }
-    public void setTubeColor(String tubeColor) 
-    {
+
+    public void setTubeColor(String tubeColor) {
         this.tubeColor = tubeColor;
     }
 
-    public String getTubeColor() 
-    {
+    public String getTubeColor() {
         return tubeColor;
     }
-    public void setComPort(String comPort) 
-    {
+
+    public void setComPort(String comPort) {
         this.comPort = comPort;
     }
 
-    public String getComPort() 
-    {
+    public String getComPort() {
         return comPort;
     }
-    public void setPrintFormat(String printFormat) 
-    {
+
+    public void setPrintFormat(String printFormat) {
         this.printFormat = printFormat;
     }
 
-    public String getPrintFormat() 
-    {
+    public String getPrintFormat() {
         return printFormat;
     }
-    public void setPackagingType(String packagingType) 
-    {
+
+    public void setPackagingType(String packagingType) {
         this.packagingType = packagingType;
     }
 
-    public String getPackagingType() 
-    {
+    public String getPackagingType() {
         return packagingType;
     }
-    public void setStorageLocation(String storageLocation) 
-    {
+
+    public void setStorageLocation(String storageLocation) {
         this.storageLocation = storageLocation;
     }
 
-    public String getStorageLocation() 
-    {
+    public String getStorageLocation() {
         return storageLocation;
     }
-    public void setWarehouseregionId(Long warehouseregionId) 
-    {
+
+    public void setWarehouseregionId(Long warehouseregionId) {
         this.warehouseregionId = warehouseregionId;
     }
 
-    public Long getWarehouseregionId() 
-    {
+    public Long getWarehouseregionId() {
         return warehouseregionId;
     }
-    public void setDelFlag(String delFlag) 
-    {
+
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
 
-    public String getDelFlag() 
-    {
+    public String getDelFlag() {
         return delFlag;
     }
-    public void setCreateById(Long createById) 
-    {
+
+    public void setCreateById(Long createById) {
         this.createById = createById;
     }
 
-    public Long getCreateById() 
-    {
+    public Long getCreateById() {
         return createById;
     }
-    public void setUpdateById(Long updateById) 
-    {
+
+    public void setUpdateById(Long updateById) {
         this.updateById = updateById;
     }
 
-    public Long getUpdateById() 
-    {
+    public Long getUpdateById() {
         return updateById;
     }
-    public void setTotalCanisterNum(Integer totalCanisterNum)
-    {
+
+    public void setTotalCanisterNum(Integer totalCanisterNum) {
         this.totalCanisterNum = totalCanisterNum;
     }
 
-    public Integer getTotalCanisterNum()
-    {
+    public Integer getTotalCanisterNum() {
         return totalCanisterNum;
     }
-    public void setTotalBoxNum(Integer totalBoxNum)
-    {
+
+    public void setTotalBoxNum(Integer totalBoxNum) {
         this.totalBoxNum = totalBoxNum;
     }
 
-    public Integer getTotalBoxNum()
-    {
+    public Integer getTotalBoxNum() {
         return totalBoxNum;
     }
-    public void setTotalSuttle(Double totalSuttle)
-    {
+
+    public void setTotalSuttle(Double totalSuttle) {
         this.totalSuttle = totalSuttle;
     }
 
-    public Double getTotalSuttle()
-    {
+    public Double getTotalSuttle() {
         return totalSuttle;
     }
-    public void setTotalGrossWeight(Double totalGrossWeight)
-    {
+
+    public void setTotalGrossWeight(Double totalGrossWeight) {
         this.totalGrossWeight = totalGrossWeight;
     }
 
-    public Double getTotalGrossWeight()
-    {
+    public Double getTotalGrossWeight() {
         return totalGrossWeight;
     }
 
@@ -429,43 +462,43 @@ public class ProductInventory extends BaseEntity
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("id", getId())
-            .append("qrCode", getQrCode())
-            .append("lotNum", getLotNum())
-            .append("productId", getProductId())
-            .append("levels", getLevels())
-            .append("canisterNum", getCanisterNum())
-            .append("boxNum", getBoxNum())
-            .append("suttle", getSuttle())
-            .append("productionDate", getProductionDate())
-            .append("warehouseId", getWarehouseId())
-            .append("machineTool", getMachineTool())
-            .append("grossWeight", getGrossWeight())
-            .append("packaging", getPackaging())
-            .append("workShifts", getWorkShifts())
-            .append("foreignTradeNumber", getForeignTradeNumber())
-            .append("canisterWeight", getCanisterWeight())
-            .append("boxWeight", getBoxWeight())
-            .append("tubeColor", getTubeColor())
-            .append("comPort", getComPort())
-            .append("printFormat", getPrintFormat())
-            .append("packagingType", getPackagingType())
-            .append("storageLocation", getStorageLocation())
-            .append("warehouseregionId", getWarehouseregionId())
-            .append("remark", getRemark())
-            .append("delFlag", getDelFlag())
-            .append("createBy", getCreateBy())
-            .append("createById", getCreateById())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateById", getUpdateById())
-            .append("updateTime", getUpdateTime())
-            .append("totalCanisterNum", getTotalCanisterNum())
-            .append("totalBoxNum", getTotalBoxNum())
-            .append("totalSuttle", getTotalSuttle())
-            .append("totalGrossWeight", getTotalGrossWeight())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("qrCode", getQrCode())
+                .append("lotNum", getLotNum())
+                .append("productId", getProductId())
+                .append("levels", getLevels())
+                .append("canisterNum", getCanisterNum())
+                .append("boxNum", getBoxNum())
+                .append("suttle", getSuttle())
+                .append("productionDate", getProductionDate())
+                .append("warehouseId", getWarehouseId())
+                .append("machineTool", getMachineTool())
+                .append("grossWeight", getGrossWeight())
+                .append("packaging", getPackaging())
+                .append("workShifts", getWorkShifts())
+                .append("foreignTradeNumber", getForeignTradeNumber())
+                .append("canisterWeight", getCanisterWeight())
+                .append("boxWeight", getBoxWeight())
+                .append("tubeColor", getTubeColor())
+                .append("comPort", getComPort())
+                .append("printFormat", getPrintFormat())
+                .append("packagingType", getPackagingType())
+                .append("storageLocation", getStorageLocation())
+                .append("warehouseregionId", getWarehouseregionId())
+                .append("remark", getRemark())
+                .append("delFlag", getDelFlag())
+                .append("createBy", getCreateBy())
+                .append("createById", getCreateById())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateById", getUpdateById())
+                .append("updateTime", getUpdateTime())
+                .append("totalCanisterNum", getTotalCanisterNum())
+                .append("totalBoxNum", getTotalBoxNum())
+                .append("totalSuttle", getTotalSuttle())
+                .append("totalGrossWeight", getTotalGrossWeight())
+                .toString();
     }
 }
 

+ 26 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/domain/vo/ProductCodeListVO.java

@@ -279,6 +279,32 @@ public class ProductCodeListVO extends BaseEntity {
     private String saleProductId;
 
 
+    /**
+     * 父级码单编码
+     */
+    private String parentCode;
+
+    /**
+     * 码单状态(0:普通码单1:总码单)
+     */
+    private int otherStates;
+
+    public String getParentCode() {
+        return parentCode;
+    }
+
+    public void setParentCode(String parentCode) {
+        this.parentCode = parentCode;
+    }
+
+    public int getOtherStates() {
+        return otherStates;
+    }
+
+    public void setOtherStates(int otherStates) {
+        this.otherStates = otherStates;
+    }
+
     public String getSaleProductId() {
         return saleProductId;
     }

+ 17 - 1
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductCodeListMapper.java

@@ -28,6 +28,14 @@ public interface ProductCodeListMapper {
      */
     public List<ProductCodeListVO> selectProductCodeListBySaleProductId(ProductCodeList productCodeList);
 
+    /**
+     * 查询产品码单
+     *
+     * @param parentCode 总码单编码
+     * @return 产品码单
+     */
+    public List<ProductCodeListVO> selectProductCodeListByParentCode(String parentCode);
+
     /**
      * 查询产品码单列表
      *
@@ -36,6 +44,14 @@ public interface ProductCodeListMapper {
      */
     public List<ProductCodeListVO> selectProductCodeListList(ProductCodeListVO vo);
 
+    /**
+     * 查询产品码单列表-》未打印总码单数据条
+     *
+     * @param vo 产品码单
+     * @return 产品码单集合
+     */
+    public List<ProductCodeListVO> selectProductCodeListList1(ProductCodeListVO vo);
+
     /**
      * 新增产品码单
      *
@@ -86,7 +102,7 @@ public interface ProductCodeListMapper {
     /**
      * 根据码单号查询码单信息和码单唯一标识
      */
-    List<ProductCodeList> selectProductCodeInfoByQrCode(String qrCode);
+    List<ProductCodeList> selectProductCodeInfoByParentCode(String parentCode);
 
     /**
      * 获取当前吗码单完整信息

+ 23 - 12
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/ProductWarehousingRecordMapper.java

@@ -10,15 +10,14 @@ import org.apache.ibatis.annotations.Param;
 
 /**
  * 成品入库记录Mapper接口
- * 
+ *
  * @author zkqy
  * @date 2024-04-09
  */
-public interface ProductWarehousingRecordMapper 
-{
+public interface ProductWarehousingRecordMapper {
     /**
      * 查询成品入库记录
-     * 
+     *
      * @param id 成品入库记录主键
      * @return 成品入库记录
      */
@@ -26,7 +25,7 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 查询成品入库记录列表
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 成品入库记录集合
      */
@@ -34,7 +33,7 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 新增成品入库记录
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 结果
      */
@@ -42,7 +41,7 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 修改成品入库记录
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 结果
      */
@@ -50,15 +49,24 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 删除成品入库记录
-     * 
+     *
      * @param id 成品入库记录主键
      * @return 结果
      */
-    public int deleteProductWarehousingRecordById(Long id);
+    int deleteProductWarehousingRecordById(Long id);
+
+    /**
+     * 删除成品入库记录
+     *
+     * @param qrCode   码单号
+     * @param qrCodeId 码单唯一标识
+     * @return
+     */
+    int deleteProductWarehousingRecordByQrCode(@Param("qrCode") String qrCode, @Param("qrCodeId") String qrCodeId);
 
     /**
      * 批量删除成品入库记录
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
@@ -66,6 +74,7 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 查询入库记录日志列表
+     *
      * @param vo
      * @return
      */
@@ -73,6 +82,7 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 查询码单是否入库
+     *
      * @param qrCode
      * @param qrCodeId
      * @return
@@ -89,11 +99,12 @@ public interface ProductWarehousingRecordMapper
 
     /**
      * 统计产量---年月日季度查询
-     * @param timeType 时间类型
+     *
+     * @param timeType  时间类型
      * @param timeParam 时间参数
      * @return
      */
     @MapKey("id")
-    List<Map<String,Object>> productionStatistics(@Param("timeType") String timeType,@Param("timeParam") String timeParam);
+    List<Map<String, Object>> productionStatistics(@Param("timeType") String timeType, @Param("timeParam") String timeParam);
 
 }

+ 11 - 2
zkqy-custom-business/src/main/java/com/zkqy/business/service/IProductCodeListService.java

@@ -27,7 +27,16 @@ public interface IProductCodeListService {
      * @param productCodeList 码单对象
      * @return 产品码单
      */
-    public List<ProductCodeListVO> selectProductCodeListBySaleProductId( ProductCodeList productCodeList);
+    public List<ProductCodeListVO> selectProductCodeListBySaleProductId(ProductCodeList productCodeList);
+
+    /**
+     * 查询产品码单
+     *
+     * @param parentCode 总码单编码
+     * @return 产品码单
+     */
+    public List<ProductCodeListVO> selectProductCodeListByParentCode(String parentCode);
+
 
     /**
      * 查询产品码单列表
@@ -100,6 +109,6 @@ public interface IProductCodeListService {
     /**
      * 根据码单号查询码单信息和唯一标识uuid
      */
-    List<ProductCodeList> selectProductCodeInfoByQrCode(String qrCode);
+    List<ProductCodeList> selectProductCodeInfoByParentCode(String qrCode);
 
 }

+ 31 - 11
zkqy-custom-business/src/main/java/com/zkqy/business/service/IProductWarehousingRecordService.java

@@ -9,15 +9,14 @@ import org.apache.ibatis.annotations.Param;
 
 /**
  * 成品入库记录Service接口
- * 
+ *
  * @author zkqy
  * @date 2024-04-09
  */
-public interface IProductWarehousingRecordService 
-{
+public interface IProductWarehousingRecordService {
     /**
      * 查询成品入库记录
-     * 
+     *
      * @param id 成品入库记录主键
      * @return 成品入库记录
      */
@@ -25,7 +24,7 @@ public interface IProductWarehousingRecordService
 
     /**
      * 查询成品入库记录列表
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 成品入库记录集合
      */
@@ -33,7 +32,7 @@ public interface IProductWarehousingRecordService
 
     /**
      * 新增成品入库记录
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 结果
      */
@@ -41,7 +40,7 @@ public interface IProductWarehousingRecordService
 
     /**
      * 修改成品入库记录
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 结果
      */
@@ -49,7 +48,7 @@ public interface IProductWarehousingRecordService
 
     /**
      * 批量删除成品入库记录
-     * 
+     *
      * @param ids 需要删除的成品入库记录主键集合
      * @return 结果
      */
@@ -57,7 +56,7 @@ public interface IProductWarehousingRecordService
 
     /**
      * 删除成品入库记录信息
-     * 
+     *
      * @param id 成品入库记录主键
      * @return 结果
      */
@@ -65,6 +64,7 @@ public interface IProductWarehousingRecordService
 
     /**
      * 查询入库记录日志列表
+     *
      * @param vo
      * @return
      */
@@ -72,18 +72,38 @@ public interface IProductWarehousingRecordService
 
     /**
      * 查询码单是否入库
+     *
      * @param qrCode
      * @param qrCodeId
      * @return
      */
-    ProductWarehousingRecord selectProductWarehousingRecordWhetherExist(String qrCode,String qrCodeId);
+    ProductWarehousingRecord selectProductWarehousingRecordWhetherExist(String qrCode, String qrCodeId);
 
     /**
      * 统计产量---年月日季度查询
+     *
      * @param timeType
      * @param timeParam
      * @return
      */
-    Map<String,Object> productionStatistics(@Param("timeType") String timeType, @Param("timeParam") String timeParam);
+    Map<String, Object> productionStatistics(@Param("timeType") String timeType, @Param("timeParam") String timeParam);
+
+    /**
+     * 删除成品入库记录
+     *
+     * @param qrCode   码单号
+     * @param qrCodeId 码单唯一标识
+     * @return
+     */
+    int deleteProductWarehousingRecordByQrCode(ProductCodeListVO productCodeListVO);
+
+
+    /**
+     * 更新码单入库记录(删除后新增)
+     *
+     * @param productCodeListVO
+     * @return
+     */
+    int updateProductWarehousingRecordRecord(ProductCodeListVO productCodeListVO);
 
 }

+ 58 - 5
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductCodeListServiceImpl.java

@@ -9,11 +9,13 @@ import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
 
+import com.zkqy.business.domain.ProductHandsetOutboundRecord;
+import com.zkqy.business.domain.ProductOutboundRecord;
 import com.zkqy.business.domain.ProductWarehousingRecord;
 import com.zkqy.business.domain.vo.ProductCodeListVO;
 import com.zkqy.business.mapper.ProductCodeListInfoMapper;
 import com.zkqy.business.mapper.ProductWarehousingRecordMapper;
-import com.zkqy.business.service.IProductInventoryService;
+import com.zkqy.business.service.*;
 import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.core.domain.entity.SysDictData;
 import com.zkqy.common.core.redis.RedisCache;
@@ -26,7 +28,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.zkqy.business.mapper.ProductCodeListMapper;
 import com.zkqy.business.domain.ProductCodeList;
-import com.zkqy.business.service.IProductCodeListService;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -56,6 +57,16 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
     private RedisCache redisCache;
 
 
+    @Autowired
+    private IProductOutboundRecordService productOutboundRecordService;
+
+    @Autowired
+    private IProductWarehousingRecordService productWarehousingRecordService;
+
+    @Autowired
+    private IProductHandsetOutboundRecordService productHandsetOutboundRecordService;
+
+
     /**
      * 查询产品码单
      *
@@ -79,6 +90,30 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
         return productCodeListMapper.selectProductCodeListBySaleProductId(productCodeList);
     }
 
+    @Override
+    public List<ProductCodeListVO> selectProductCodeListByParentCode(String parentCode) {
+
+        // 得到当前总码单中的所有码单信息
+        List<ProductCodeListVO> productCodeListVOList = productCodeListMapper.selectProductCodeListByParentCode(parentCode);
+
+        // 只要得到当前总码单中未出库的码单
+        List<ProductCodeListVO> endProductCodeListVOList = new ArrayList<>();
+        productCodeListVOList.forEach(item -> {
+
+            //查看当前码单是否已入库
+            ProductWarehousingRecord productWarehousingRecord = productWarehousingRecordService.selectProductWarehousingRecordWhetherExist(item.getQrCode(), item.getQrCodeId());
+            //查看当前码单是否已出库
+            ProductOutboundRecord productOutboundRecord = productOutboundRecordService.whetherStorage(item.getQrCode(), item.getQrCodeId());
+            //查看手持机上当前码单是否已出库
+            ProductHandsetOutboundRecord productHandsetOutboundRecord = productHandsetOutboundRecordService.whetherStorage(item.getQrCode(), item.getQrCodeId());
+
+            if (productWarehousingRecord != null && productOutboundRecord == null && productHandsetOutboundRecord == null) {
+                endProductCodeListVOList.add(item);
+            }
+        });
+        return endProductCodeListVOList;
+    }
+
 
     /**
      * 查询产品码单列表
@@ -88,14 +123,21 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
      */
     @Override
     public List<ProductCodeListVO> selectProductCodeListList(ProductCodeListVO vo) {
-        List<ProductCodeListVO> productCodeListVOS = productCodeListMapper.selectProductCodeListList(vo);
+        List<ProductCodeListVO> productCodeListVOS = new ArrayList<>();
+        if (vo.getOtherStates() == 1) {  // 已打印总码单
+            productCodeListVOS.addAll(productCodeListMapper.selectProductCodeListList(vo));
+        } else { // 未打印总码单
+            productCodeListVOS.addAll(productCodeListMapper.selectProductCodeListList1(vo));
+        }
         for (ProductCodeListVO vo1 : productCodeListVOS) {
+            // 处理总净重小数位
             vo1.setTotalSuttle(handlingWeight(vo1.getTotalSuttle()));
         }
         return productCodeListVOS;
     }
 
     public Double handlingWeight(Double weight) {
+        if (weight == null) return 0.00;
         DecimalFormat df = new DecimalFormat("0.00");
         return Double.parseDouble(df.format(weight));
     }
@@ -125,8 +167,12 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
                 vo.setWarehouseId(Long.valueOf(item.getDictValue()));// 入库仓库ID
             }
         });
+        if (vo.getOtherStates() == 1) { // 如果当前打印的为总码单则不尽行累加库存
+            return productCodeList.getId();
+        }
         List<ProductCodeListVO> productCodeListVOList = new ArrayList<>();
         productCodeListVOList.add(vo);
+        // 入库
         iProductInventoryService.productStorage(productCodeListVOList);
         return productCodeList.getId();
     }
@@ -259,6 +305,13 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
     @Override
     public AjaxResult deleteProductCodeListInfoByInfo(ProductCodeListVO productCodeListVO) {
 //        productCodeListInfoMapper.deleteProductCodeListInfoById(productCodeListVO.getId());// 删除码单
+
+        ProductHandsetOutboundRecord productHandsetOutboundRecord = productHandsetOutboundRecordService
+                .whetherStorage(productCodeListVO.getQrCode(), productCodeListVO.getQrCodeId());
+        if (productHandsetOutboundRecord != null) {
+            return AjaxResult.warn("当前货品已出库,不可删除!");
+        }
+
         productCodeListMapper.deleteProductCodeListById(productCodeListVO.getId());
 
         // 删除库存
@@ -266,8 +319,8 @@ public class ProductCodeListServiceImpl implements IProductCodeListService {
     }
 
     @Override
-    public List<ProductCodeList> selectProductCodeInfoByQrCode(String qrCode) {
-        return productCodeListMapper.selectProductCodeInfoByQrCode(qrCode);
+    public List<ProductCodeList> selectProductCodeInfoByParentCode(String parentCode) {
+        return productCodeListMapper.selectProductCodeInfoByParentCode(parentCode);
     }
 
 }

+ 21 - 28
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductHandsetOutboundRecordServiceImpl.java

@@ -18,13 +18,12 @@ import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 成品手持机出库记录Service业务层处理
- * 
+ *
  * @author zkqy
  * @date 2024-04-12
  */
 @Service
-public class ProductHandsetOutboundRecordServiceImpl implements IProductHandsetOutboundRecordService 
-{
+public class ProductHandsetOutboundRecordServiceImpl implements IProductHandsetOutboundRecordService {
     @Autowired
     private ProductHandsetOutboundRecordMapper productHandsetOutboundRecordMapper;
 
@@ -33,100 +32,94 @@ public class ProductHandsetOutboundRecordServiceImpl implements IProductHandsetO
 
     /**
      * 查询成品手持机出库记录
-     * 
+     *
      * @param id 成品手持机出库记录主键
      * @return 成品手持机出库记录
      */
     @Override
-    public ProductHandsetOutboundRecord selectProductHandsetOutboundRecordById(Long id)
-    {
+    public ProductHandsetOutboundRecord selectProductHandsetOutboundRecordById(Long id) {
         return productHandsetOutboundRecordMapper.selectProductHandsetOutboundRecordById(id);
     }
 
     /**
      * 查询成品手持机出库记录列表
-     * 
+     *
      * @param productHandsetOutboundRecord 成品手持机出库记录
      * @return 成品手持机出库记录
      */
     @Override
-    public List<ProductHandsetOutboundRecord> selectProductHandsetOutboundRecordList(ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    public List<ProductHandsetOutboundRecord> selectProductHandsetOutboundRecordList(ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         return productHandsetOutboundRecordMapper.selectProductHandsetOutboundRecordList(productHandsetOutboundRecord);
     }
 
     /**
      * 新增成品手持机出库记录
-     * 
+     *
      * @param productHandsetOutboundRecord 成品手持机出库记录
      * @return 结果
      */
     @Override
-    public int insertProductHandsetOutboundRecord(ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    public int insertProductHandsetOutboundRecord(ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         productHandsetOutboundRecord.setCreateTime(DateUtils.getNowDate());
         return productHandsetOutboundRecordMapper.insertProductHandsetOutboundRecord(productHandsetOutboundRecord);
     }
 
     /**
      * 修改成品手持机出库记录
-     * 
+     *
      * @param productHandsetOutboundRecord 成品手持机出库记录
      * @return 结果
      */
     @Override
-    public int updateProductHandsetOutboundRecord(ProductHandsetOutboundRecord productHandsetOutboundRecord)
-    {
+    public int updateProductHandsetOutboundRecord(ProductHandsetOutboundRecord productHandsetOutboundRecord) {
         productHandsetOutboundRecord.setUpdateTime(DateUtils.getNowDate());
         return productHandsetOutboundRecordMapper.updateProductHandsetOutboundRecord(productHandsetOutboundRecord);
     }
 
     /**
      * 批量删除成品手持机出库记录
-     * 
+     *
      * @param ids 需要删除的成品手持机出库记录主键
      * @return 结果
      */
     @Override
-    public int deleteProductHandsetOutboundRecordByIds(List<Long> ids)
-    {
+    public int deleteProductHandsetOutboundRecordByIds(List<Long> ids) {
         return productHandsetOutboundRecordMapper.deleteProductHandsetOutboundRecordByIds(ids);
     }
 
     /**
      * 删除成品手持机出库记录信息
-     * 
+     *
      * @param id 成品手持机出库记录主键
      * @return 结果
      */
     @Override
-    public int deleteProductHandsetOutboundRecordById(Long id)
-    {
+    public int deleteProductHandsetOutboundRecordById(Long id) {
         return productHandsetOutboundRecordMapper.deleteProductHandsetOutboundRecordById(id);
     }
 
     @Override
     public ProductHandsetOutboundRecord whetherStorage(String qrCode, String qrCodeId) {
-        return productHandsetOutboundRecordMapper.selectWhetherExist(qrCode,qrCodeId);
+        return productHandsetOutboundRecordMapper.selectWhetherExist(qrCode, qrCodeId);
     }
 
     @Override
     @Transactional
     public void productHandsetOutStorage(List<ProductCodeListVO> productCodeListVOList) {
-
-
-        for (ProductCodeListVO vo : productCodeListVOList){
+        // 手持扫码出库逻辑
+        // 二维码中的内容
+        // 10@4a9b7b04-700e-4a5f-a7ee-bfbafd31e767@1@22.75@24.15@24052300001
+        for (ProductCodeListVO vo : productCodeListVOList) {
             //手持机出库日志
             ProductCodeList productCodeList = productCodeListMapper.selectProductCodeListById(vo.getId());
             //校验当前码单是否已出库
             ProductHandsetOutboundRecord productHandsetOutboundRecord1 =
                     productHandsetOutboundRecordMapper.selectWhetherExist(productCodeList.getQrCode(), vo.getQrCodeId());
-            if (productHandsetOutboundRecord1 != null){
+            if (productHandsetOutboundRecord1 != null) {// 如果当前码单存在出库记录表中则不执行出库操作!
                 continue;
             }
-
             ProductHandsetOutboundRecord productHandsetOutboundRecord = new ProductHandsetOutboundRecord();
-            BeanUtils.copyProperties(productCodeList,productHandsetOutboundRecord);
+            BeanUtils.copyProperties(productCodeList, productHandsetOutboundRecord);
             productHandsetOutboundRecord.setQrCodeId(vo.getQrCodeId());// 码单号唯一标识
             productHandsetOutboundRecord.setCanisterNum(vo.getCanisterNum()); //筒数
             productHandsetOutboundRecord.setSuttle(vo.getSuttle());//净重

+ 3 - 8
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductInventoryServiceImpl.java

@@ -133,7 +133,7 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
             if (productWarehousingRecord1 != null) {
                 continue;
             }
-            //入库记录信息
+            // 入库记录信息
             ProductWarehousingRecord productWarehousingRecord = new ProductWarehousingRecord();
             BeanUtils.copyProperties(productCodeList, productWarehousingRecord);
             productWarehousingRecord.setQrCodeId(vo.getQrCodeId());
@@ -267,7 +267,7 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
         List<ProductHandsetOutboundRecord> productHandsetOutboundRecords =
                 productHandsetOutboundRecordMapper.selectProductHandsetOutboundRecordList(productHandsetOutboundRecord);
 
-        //根据通知单查询已出库的货品
+        //根据通知单查询已出库的货品(类似码单信息)
         ProductOutboundRecord productOutboundRecord1 = new ProductOutboundRecord();
         productOutboundRecord1.setNoticeNumber(productInvoice.getNoticeNumber());
         List<ProductOutboundRecord> productOutboundRecords = productOutboundRecordMapper.selectProductOutboundRecordList(productOutboundRecord1);
@@ -275,8 +275,7 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
 
         // 循环插入出库记录
         for (ProductHandsetOutboundRecord productHandsetOutboundRecord1 : productHandsetOutboundRecords) {
-
-
+            //判断当前再次点击出库按钮的数据是否已出库
             boolean exists = productOutboundRecords.stream()
                     .anyMatch(record -> record.getQrCodeId().equals(productHandsetOutboundRecord1.getQrCodeId()));
             if (exists) {
@@ -337,10 +336,6 @@ public class ProductInventoryServiceImpl implements IProductInventoryService {
 
     @Override
     public AjaxResult deleteInventorByProductCodeListVO(ProductCodeListVO productCodeListVO) {
-
-        //查看当前码单是否已出库
-        System.err.println(productCodeListVO.toString());
-
         //当前码单是否已出库
         ProductHandsetOutboundRecord productHandsetOutboundRecord = productHandsetOutboundRecordMapper
                 .selectWhetherExist(productCodeListVO.getQrCode(), productCodeListVO.getQrCodeId());

+ 86 - 33
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/ProductWarehousingRecordServiceImpl.java

@@ -1,12 +1,18 @@
 package com.zkqy.business.service.impl;
 
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.zkqy.business.domain.ProductCodeList;
+import com.zkqy.business.domain.ProductInventory;
 import com.zkqy.business.domain.vo.ProductCodeListVO;
+import com.zkqy.business.mapper.ProductInventoryMapper;
 import com.zkqy.common.utils.DateUtils;
+import com.zkqy.common.utils.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.zkqy.business.mapper.ProductWarehousingRecordMapper;
@@ -15,121 +21,168 @@ import com.zkqy.business.service.IProductWarehousingRecordService;
 
 /**
  * 成品入库记录Service业务层处理
- * 
+ *
  * @author zkqy
  * @date 2024-04-09
  */
 @Service
-public class ProductWarehousingRecordServiceImpl implements IProductWarehousingRecordService 
-{
+public class ProductWarehousingRecordServiceImpl implements IProductWarehousingRecordService {
     @Autowired
     private ProductWarehousingRecordMapper productWarehousingRecordMapper;
 
+
+    @Autowired  // 成品库存
+    private ProductInventoryMapper productInventoryMapper;
+
     /**
      * 查询成品入库记录
-     * 
+     *
      * @param id 成品入库记录主键
      * @return 成品入库记录
      */
     @Override
-    public ProductWarehousingRecord selectProductWarehousingRecordById(Long id)
-    {
+    public ProductWarehousingRecord selectProductWarehousingRecordById(Long id) {
         return productWarehousingRecordMapper.selectProductWarehousingRecordById(id);
     }
 
     /**
      * 查询成品入库记录列表
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 成品入库记录
      */
     @Override
-    public List<ProductWarehousingRecord> selectProductWarehousingRecordList(ProductWarehousingRecord productWarehousingRecord)
-    {
+    public List<ProductWarehousingRecord> selectProductWarehousingRecordList(ProductWarehousingRecord productWarehousingRecord) {
         return productWarehousingRecordMapper.selectProductWarehousingRecordList(productWarehousingRecord);
     }
 
     /**
      * 新增成品入库记录
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 结果
      */
     @Override
-    public int insertProductWarehousingRecord(ProductWarehousingRecord productWarehousingRecord)
-    {
+    public int insertProductWarehousingRecord(ProductWarehousingRecord productWarehousingRecord) {
         productWarehousingRecord.setCreateTime(DateUtils.getNowDate());
         return productWarehousingRecordMapper.insertProductWarehousingRecord(productWarehousingRecord);
     }
 
     /**
      * 修改成品入库记录
-     * 
+     *
      * @param productWarehousingRecord 成品入库记录
      * @return 结果
      */
     @Override
-    public int updateProductWarehousingRecord(ProductWarehousingRecord productWarehousingRecord)
-    {
+    public int updateProductWarehousingRecord(ProductWarehousingRecord productWarehousingRecord) {
         productWarehousingRecord.setUpdateTime(DateUtils.getNowDate());
         return productWarehousingRecordMapper.updateProductWarehousingRecord(productWarehousingRecord);
     }
 
     /**
      * 批量删除成品入库记录
-     * 
+     *
      * @param ids 需要删除的成品入库记录主键
      * @return 结果
      */
     @Override
-    public int deleteProductWarehousingRecordByIds(Long[] ids)
-    {
+    public int deleteProductWarehousingRecordByIds(Long[] ids) {
         return productWarehousingRecordMapper.deleteProductWarehousingRecordByIds(ids);
     }
 
     /**
      * 删除成品入库记录信息
-     * 
+     *
      * @param id 成品入库记录主键
      * @return 结果
      */
     @Override
-    public int deleteProductWarehousingRecordById(Long id)
-    {
+    public int deleteProductWarehousingRecordById(Long id) {
         return productWarehousingRecordMapper.deleteProductWarehousingRecordById(id);
     }
 
     @Override
     public List<ProductCodeListVO> selectList(ProductCodeListVO vo) {
+
+        // 查询成品入库日志
         return productWarehousingRecordMapper.selectList(vo);
     }
 
     @Override
     public ProductWarehousingRecord selectProductWarehousingRecordWhetherExist(String qrCode, String qrCodeId) {
-        return productWarehousingRecordMapper.selectProductWarehousingRecordWhetherExist(qrCode,qrCodeId);
+        return productWarehousingRecordMapper.selectProductWarehousingRecordWhetherExist(qrCode, qrCodeId);
     }
 
     @Override
-    public Map<String,Object> productionStatistics(String timeType, String timeParam) {
+    public Map<String, Object> productionStatistics(String timeType, String timeParam) {
         List<Map<String, Object>> mapList = productWarehousingRecordMapper.productionStatistics(timeType, timeParam);
         //品名
         List<String> productNameList = new ArrayList<>();
         //产品详情
         List<Map<String, Object>> productDetailList = new ArrayList<>();
 
-        for (Map<String, Object> map : mapList){
+        for (Map<String, Object> map : mapList) {
             productNameList.add(map.get("name").toString());
-            Map<String,Object> productDetail = new HashMap<>();
-            productDetail.put("name",map.get("name"));
-            productDetail.put("data",map.get("suttle"));
-            productDetail.put("spec",map.get("spec"));
-            productDetail.put("levels",map.get("levels"));
-            productDetail.put("productColour",map.get("productColour"));
+            Map<String, Object> productDetail = new HashMap<>();
+            productDetail.put("name", map.get("name"));
+            productDetail.put("data", map.get("suttle"));
+            productDetail.put("spec", map.get("spec"));
+            productDetail.put("levels", map.get("levels"));
+            productDetail.put("productColour", map.get("productColour"));
             productDetailList.add(productDetail);
         }
-        Map<String,Object> result = new HashMap<>();
-        result.put("products",productNameList);
-        result.put("output",productDetailList);
+        Map<String, Object> result = new HashMap<>();
+        result.put("products", productNameList);
+        result.put("output", productDetailList);
         return result;
     }
+
+    @Override
+    public int deleteProductWarehousingRecordByQrCode(ProductCodeListVO productCodeListVO) {
+        // 删除入库记录
+        productWarehousingRecordMapper.deleteProductWarehousingRecordByQrCode(productCodeListVO.getQrCode(), productCodeListVO.getQrCodeId());
+        // 删除对应库存
+        ProductInventory productInventory = productInventoryMapper.selectProductInventoryByQrCode(productCodeListVO.getQrCode());
+        //计算合计箱数、筒数、净重、毛重
+        ProductInventory editProductInventory = new ProductInventory();
+        editProductInventory.setId(productInventory.getId());
+        editProductInventory.setTotalCanisterNum(productInventory.getTotalCanisterNum() - productCodeListVO.getCanisterNum());// 减去筒数
+        editProductInventory.setTotalBoxNum(productInventory.getTotalBoxNum() - 1);// 减去一箱数
+        Double suttle = productInventory.getTotalSuttle() - productCodeListVO.getSuttle(); // 减去净重
+        DecimalFormat df = new DecimalFormat("0.00");
+        String suttle1 = df.format(suttle);
+        editProductInventory.setTotalSuttle(Double.parseDouble(suttle1));//合计净重
+        Double grossWeight = productInventory.getTotalGrossWeight() - productCodeListVO.getGrossWeight();
+        String grossWeight1 = df.format(grossWeight);
+        editProductInventory.setTotalGrossWeight(Double.parseDouble(grossWeight1));//合计毛重
+        editProductInventory.setUpdateById(SecurityUtils.getUserId());
+        editProductInventory.setUpdateBy(SecurityUtils.getUsername());
+        editProductInventory.setUpdateTime(DateUtils.getNowDate());
+        productInventoryMapper.updateProductInventory(editProductInventory);
+        return 1;
+    }
+
+    @Override
+    public int updateProductWarehousingRecordRecord(ProductCodeListVO productCodeListVO) {
+        // 删除原码单
+        productWarehousingRecordMapper.deleteProductWarehousingRecordByQrCode(productCodeListVO.getQrCode(), productCodeListVO.getQrCodeId());
+        // 入库记录信息
+        ProductWarehousingRecord productWarehousingRecord = new ProductWarehousingRecord();
+        ProductCodeList productCodeList = new ProductCodeList(productCodeListVO);
+        BeanUtils.copyProperties(productCodeList, productWarehousingRecord);
+        productWarehousingRecord.setQrCodeId(productCodeListVO.getQrCodeId());
+        productWarehousingRecord.setCanisterNum(productCodeListVO.getCanisterNum());//筒数
+        productWarehousingRecord.setSuttle(productCodeListVO.getSuttle());//净重
+        productWarehousingRecord.setGrossWeight(productCodeListVO.getGrossWeight());//毛重
+        productWarehousingRecord.setCreateBy(SecurityUtils.getUsername());
+        productWarehousingRecord.setCreateTime(DateUtils.getNowDate());
+        productWarehousingRecord.setCreateById(SecurityUtils.getUserId());
+        productWarehousingRecord.setDepositor(SecurityUtils.getLoginUser().getUser().getNickName());//入库人
+        productWarehousingRecord.setWarehousingTime(DateUtils.getNowDate());
+        productWarehousingRecord.setWarehouseId(productCodeListVO.getWarehouseId());//入库仓库编号
+        productWarehousingRecord.setRemark(productCodeList.getRemark());
+        // 新增入库码单
+        return productWarehousingRecordMapper.insertProductWarehousingRecord(productWarehousingRecord);
+    }
 }

+ 122 - 11
zkqy-custom-business/src/main/resources/mapper/business/ProductCodeListMapper.xml

@@ -42,6 +42,8 @@
         <result property="qrCodeId" column="qr_code_id"/>
         <result property="withdrawingFlag" column="withdrawing_flag"/>
         <result property="saleProductId" column="sale_product_id"/>
+        <result property="otherStates" column="other_states"/>
+        <result property="parentCode" column="parent_code"/>
     </resultMap>
 
     <resultMap type="com.zkqy.business.domain.vo.ProductCodeListVO" id="ProductCodeListResultVO">
@@ -86,6 +88,8 @@
         <result property="totalGrossWeight" column="total_gross_weight"/>
         <result property="withdrawingFlag" column="withdrawing_flag"/>
         <result property="saleProductId" column="sale_product_id"/>
+        <result property="otherStates" column="other_states"/>
+        <result property="parentCode" column="parent_code"/>
     </resultMap>
 
     <sql id="selectProductCodeListVo">
@@ -125,7 +129,10 @@
                total_gross_weight,
                product_colour,
                withdrawing_flag,
-               sale_product_id
+               sale_product_id,
+               parent_code,
+               other_states,
+               qr_code_id
         from {DBNAME}.product_code_list
     </sql>
 
@@ -137,18 +144,28 @@
         p.product_name AS product_name,
         p.product_specifications AS product_specifications,
         pcl.lot_num,
-        pcl.product_colour AS product_color,
+        pcl.product_colour,
+        pcl.product_colour as product_color,
         pcl.levels,
-        sum( pcl.canister_num ) AS total_canister_num,
-        count( pcl.box_num ) AS total_box_num,
-        sum( pcl.suttle ) AS total_suttle,
-        sum( pcl.gross_weight ) AS total_gross_weight,
-        pcl.remark
-        FROM
+        pcl.canister_num,
+        pcl.box_num,
+        pcl.suttle,
+        pcl.gross_weight,
+        pcl.remark,
+        pcl.print_format,
+        sc.direction_of_twist as directionOfTwist,
+        pcl.work_shifts
+        from
         {DBNAME}.product_code_list pcl
-        LEFT JOIN {DBNAME}.production p ON pcl.product_id = p.id
+        left join {DBNAME}.production p on
+        pcl.product_id = p.id
+        left join {DBNAME}.sale_products sp on
+        sp.id = pcl.sale_product_id
+        left join {DBNAME}.sale_craft sc on
+        sp.sale_order_no = sc.sale_order_no
         WHERE
         pcl.del_flag = '0'
+        AND pcl.other_states = 1
         AND p.del_flag = '0'
         <if test="qrCode != null  and qrCode != ''">and pcl.qr_code = #{qrCode}</if>
         <if test="lotNum != null  and lotNum != ''">and pcl.lot_num = #{lotNum}</if>
@@ -162,6 +179,51 @@
         order by pcl.id desc
     </select>
 
+    <select id="selectProductCodeListList1" parameterType="com.zkqy.business.domain.vo.ProductCodeListVO"
+            resultMap="ProductCodeListResultVO">
+        SELECT
+        pcl.id,
+        pcl.qr_code,
+        p.product_name AS product_name,
+        p.product_specifications AS product_specifications,
+        pcl.lot_num,
+        pcl.product_colour,
+        pcl.product_colour as product_color,
+        pcl.levels,
+        pcl.canister_num,
+        pcl.box_num,
+        pcl.suttle,
+        pcl.gross_weight,
+        pcl.remark,
+        pcl.print_format,
+        sc.direction_of_twist as directionOfTwist,
+        pcl.work_shifts
+        from
+        {DBNAME}.product_code_list pcl
+        left join {DBNAME}.product_code_list parent on
+        pcl.parent_code = parent.id
+        left join {DBNAME}.production p on
+        pcl.product_id = p.id
+        left join {DBNAME}.sale_products sp on
+        sp.id = pcl.sale_product_id
+        left join {DBNAME}.sale_craft sc on
+        sp.sale_order_no = sc.sale_order_no
+        where
+        pcl.other_states = 0
+        and parent.id is null
+        and pcl.parent_code is not null
+        and pcl.del_flag = '0'
+        and p.del_flag = '0'
+        <if test="qrCode != null  and qrCode != ''">and pcl.qr_code = #{qrCode}</if>
+        <if test="lotNum != null  and lotNum != ''">and pcl.lot_num = #{lotNum}</if>
+        <if test="productName != null and productName != ''">and p.product_name = #{productName}</if>
+        <if test="productSpecifications != null and productSpecifications != ''">and p.product_specifications =
+            #{productSpecifications}
+        </if>
+        <if test="productColor != null and productColor != ''">and pcl.product_colour = #{productColor}</if>
+        order by pcl.id desc
+    </select>
+
     <select id="selectProductCodeListById" parameterType="Long" resultMap="ProductCodeListResult">
         <include refid="selectProductCodeListVo"/>
         where id = #{id}
@@ -170,12 +232,43 @@
     <select id="selectProductCodeListBySaleProductId" parameterType="com.zkqy.business.domain.ProductCodeList"
             resultMap="ProductCodeListResult">
         <include refid="selectProductCodeListVo"/>
+
+
+        where sale_product_id = #{saleProductId}
+        and lot_num = #{lotNum}
+        and levels = #{levels}
+        and machine_tool = #{machineTool}
+        and work_shifts = #{workShifts}
+        and del_flag = '0'
+        and other_states = 0
+        and parent_code not in
+        (select id from {DBNAME}.product_code_list
         where sale_product_id = #{saleProductId}
         and lot_num = #{lotNum}
         and levels = #{levels}
         and machine_tool = #{machineTool}
         and work_shifts = #{workShifts}
         and del_flag = '0'
+        and other_states = 1);
+
+        <!--
+
+
+                 暂存
+                 where sale_product_id = #{saleProductId}
+                 and lot_num = #{lotNum}
+                 and levels = #{lotNum}
+                 and machine_tool = #{machineTool}
+                 and work_shifts = #{workShifts}
+                 and del_flag = '0'
+                 and other_states = 0
+                 and ( select count(id) from {DBNAME}.product_code_list where sale_product_id = #{saleProductId} and lot_num =
+                 #{lotNum} and levels = #{levels} and machine_tool = #{machineTool} and work_shifts = #{workShifts} and
+                 del_flag
+                 = '0' and other_states = 1 and (parent_code is null or parent_code = '')) = 0
+
+        -->
+
 
         <!--        <if test="lotNum != null  and lotNum != ''">and lot_num = #{lotNum}</if>-->
         <!--        <if test="levels != null  and levels != ''">and levels = #{levels},</if>-->
@@ -183,6 +276,14 @@
         <!--        <if test="workShifts != null  and workShifts != ''">and work_shifts = #{workShifts}</if>-->
     </select>
 
+    <select id="selectProductCodeListByParentCode" parameterType="com.zkqy.business.domain.vo.ProductCodeListVO"
+            resultMap="ProductCodeListResultVO">
+        <include refid="selectProductCodeListVo"/>
+        where parent_code = #{parentCode}
+        and del_flag = '0'
+        and other_states = 0
+    </select>
+
     <insert id="insertProductCodeList" parameterType="com.zkqy.business.domain.ProductCodeList" useGeneratedKeys="true"
             keyProperty="id">
         insert into {DBNAME}.product_code_list
@@ -220,6 +321,9 @@
             <if test="productColour != null">product_colour,</if>
             <if test="withdrawingFlag != null">withdrawing_flag,</if>
             <if test="saleProductId != null">sale_product_id,</if>
+            <if test="otherStates != null">other_states,</if>
+            <if test="parentCode != null">parent_code,</if>
+            <if test="qrCodeId != null">qr_code_id,</if>
             del_flag
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -256,6 +360,9 @@
             <if test="productColour != null">#{productColour},</if>
             <if test="withdrawingFlag != null">#{withdrawingFlag},</if>
             <if test="saleProductId != null">#{saleProductId},</if>
+            <if test="otherStates != null">#{otherStates},</if>
+            <if test="parentCode != null">#{parentCode},</if>
+            <if test="qrCodeId != null">#{qrCodeId},</if>
             '0'
         </trim>
     </insert>
@@ -294,6 +401,9 @@
             <if test="totalGrossWeight != null">total_gross_weight = #{totalGrossWeight},</if>
             <if test="productColour != null">product_colour = #{productColour},</if>
             <if test="withdrawingFlag != null">withdrawing_flag = #{withdrawingFlag}</if>
+            <if test="otherStates != null">other_states = #{otherStates}</if>
+            <if test="parentCode != null">parent_code = #{parentCode},</if>
+
         </trim>
         where id = #{id}
     </update>
@@ -345,7 +455,7 @@
         where qr_code = #{qrCode} and del_flag = '0'
     </select>
 
-    <select id="selectProductCodeInfoByQrCode" parameterType="string" resultMap="ProductCodeListResult">
+    <select id="selectProductCodeInfoByParentCode" parameterType="string" resultMap="ProductCodeListResult">
         SELECT pcl.*,
                pwr.qr_code_id
         FROM {DBNAME}.product_code_list pcl
@@ -357,7 +467,8 @@
             AND pcl.levels = pwr.levels
             and pcl.box_num = pwr.box_num
             and pwr.del_flag = '0'
-        where pcl.del_flag = '0' and pcl.qr_code = #{qrCode}
+        where pcl.del_flag = '0' and pcl.parent_code = #{parentCode}
+        Order by pcl.box_num desc
     </select>
 
 

+ 1 - 0
zkqy-custom-business/src/main/resources/mapper/business/ProductOutboundRecordMapper.xml

@@ -317,6 +317,7 @@
         WHERE
         r.del_flag = '0'
         <if test="qrCode != null and qrCode != ''">and r.qr_code like concat('%', #{qrCode}, '%')</if>
+        <if test="qrCodeId != null and qrCodeId != ''">and r.qr_code_id = #{qrCodeId}</if>
         <if test="lotNum != null  and lotNum != ''">and r.lot_num like concat('%', #{lotNum}, '%')</if>
         <if test="productionDate != null">and r.production_date = #{productionDate}</if>
         <if test="warehousingTime != null ">and r.warehousing_time = #{warehousingTime}</if>

+ 203 - 154
zkqy-custom-business/src/main/resources/mapper/business/ProductWarehousingRecordMapper.xml

@@ -1,130 +1,169 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.business.mapper.ProductWarehousingRecordMapper">
-    
+
     <resultMap type="com.zkqy.business.domain.ProductWarehousingRecord" id="ProductWarehousingRecordResult">
-        <result property="id"    column="id"    />
-        <result property="qrCode"    column="qr_code"    />
-        <result property="qrCodeId"    column="qr_code_id"    />
-        <result property="lotNum"    column="lot_num"    />
-        <result property="productId"    column="product_id"    />
-        <result property="levels"    column="levels"    />
-        <result property="canisterNum"    column="canister_num"    />
-        <result property="boxNum"    column="box_num"    />
-        <result property="suttle"    column="suttle"    />
-        <result property="productionDate"    column="production_date"    />
-        <result property="machineTool"    column="machine_tool"    />
-        <result property="grossWeight"    column="gross_weight"    />
-        <result property="packaging"    column="packaging"    />
-        <result property="workShifts"    column="work_shifts"    />
-        <result property="foreignTradeNumber"    column="foreign_trade_number"    />
-        <result property="canisterWeight"    column="canister_weight"    />
-        <result property="boxWeight"    column="box_weight"    />
-        <result property="tubeColor"    column="tube_color"    />
-        <result property="comPort"    column="com_port"    />
-        <result property="printFormat"    column="print_format"    />
-        <result property="packagingType"    column="packaging_type"    />
-        <result property="storageLocation"    column="storage_location"    />
-        <result property="warehouseregionId"    column="warehouseregion_id"    />
-        <result property="remark"    column="remark"    />
-        <result property="delFlag"    column="del_flag"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createById"    column="create_by_id"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateById"    column="update_by_id"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="warehousingTime"    column="warehousing_time"    />
-        <result property="depositor"    column="depositor"    />
+        <result property="id" column="id"/>
+        <result property="qrCode" column="qr_code"/>
+        <result property="qrCodeId" column="qr_code_id"/>
+        <result property="lotNum" column="lot_num"/>
+        <result property="productId" column="product_id"/>
+        <result property="levels" column="levels"/>
+        <result property="canisterNum" column="canister_num"/>
+        <result property="boxNum" column="box_num"/>
+        <result property="suttle" column="suttle"/>
+        <result property="productionDate" column="production_date"/>
+        <result property="machineTool" column="machine_tool"/>
+        <result property="grossWeight" column="gross_weight"/>
+        <result property="packaging" column="packaging"/>
+        <result property="workShifts" column="work_shifts"/>
+        <result property="foreignTradeNumber" column="foreign_trade_number"/>
+        <result property="canisterWeight" column="canister_weight"/>
+        <result property="boxWeight" column="box_weight"/>
+        <result property="tubeColor" column="tube_color"/>
+        <result property="comPort" column="com_port"/>
+        <result property="printFormat" column="print_format"/>
+        <result property="packagingType" column="packaging_type"/>
+        <result property="storageLocation" column="storage_location"/>
+        <result property="warehouseregionId" column="warehouseregion_id"/>
+        <result property="remark" column="remark"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createById" column="create_by_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateById" column="update_by_id"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="warehousingTime" column="warehousing_time"/>
+        <result property="depositor" column="depositor"/>
         <result property="warehouseId" column="warehouse_id"/>
         <result property="productColour" column="product_colour"/>
     </resultMap>
 
     <resultMap type="com.zkqy.business.domain.vo.ProductCodeListVO" id="ProductCodeListResultVO">
-        <result property="id"    column="id"    />
-        <result property="qrCode"    column="qr_code"    />
-        <result property="lotNum"    column="lot_num"    />
-        <result property="productId"    column="product_id"    />
-        <result property="levels"    column="levels"    />
-        <result property="canisterNum"    column="canister_num"    />
-        <result property="boxNum"    column="box_num"    />
-        <result property="suttle"    column="suttle"    />
-        <result property="productionDate"    column="production_date"    />
-        <result property="machineTool"    column="machine_tool"    />
-        <result property="grossWeight"    column="gross_weight"    />
-        <result property="packaging"    column="packaging"    />
-        <result property="workShifts"    column="work_shifts"    />
-        <result property="foreignTradeNumber"    column="foreign_trade_number"    />
-        <result property="canisterWeight"    column="canister_weight"    />
-        <result property="boxWeight"    column="box_weight"    />
-        <result property="tubeColor"    column="tube_color"    />
-        <result property="comPort"    column="com_port"    />
-        <result property="printFormat"    column="print_format"    />
-        <result property="packagingType"    column="packaging_type"    />
-        <result property="storageLocation"    column="storage_location"    />
-        <result property="warehouseregionId"    column="warehouseregion_id"    />
-        <result property="remark"    column="remark"    />
-        <result property="delFlag"    column="del_flag"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createById"    column="create_by_id"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateById"    column="update_by_id"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="productName"    column="product_name"    />
+        <result property="id" column="id"/>
+        <result property="qrCode" column="qr_code"/>
+        <result property="lotNum" column="lot_num"/>
+        <result property="productId" column="product_id"/>
+        <result property="levels" column="levels"/>
+        <result property="canisterNum" column="canister_num"/>
+        <result property="boxNum" column="box_num"/>
+        <result property="suttle" column="suttle"/>
+        <result property="productionDate" column="production_date"/>
+        <result property="machineTool" column="machine_tool"/>
+        <result property="grossWeight" column="gross_weight"/>
+        <result property="packaging" column="packaging"/>
+        <result property="workShifts" column="work_shifts"/>
+        <result property="foreignTradeNumber" column="foreign_trade_number"/>
+        <result property="canisterWeight" column="canister_weight"/>
+        <result property="boxWeight" column="box_weight"/>
+        <result property="tubeColor" column="tube_color"/>
+        <result property="comPort" column="com_port"/>
+        <result property="printFormat" column="print_format"/>
+        <result property="packagingType" column="packaging_type"/>
+        <result property="storageLocation" column="storage_location"/>
+        <result property="warehouseregionId" column="warehouseregion_id"/>
+        <result property="remark" column="remark"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createById" column="create_by_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateById" column="update_by_id"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="productName" column="product_name"/>
         <result property="productColor" column="product_color"/>
         <result property="productSpecifications" column="product_specifications"/>
         <result property="totalCanisterNum" column="total_canister_num"/>
         <result property="totalBoxNum" column="total_box_num"/>
         <result property="totalSuttle" column="total_suttle"/>
         <result property="totalGrossWeight" column="total_gross_weight"/>
-        <result property="warehousingTime"    column="warehousing_time"    />
-        <result property="depositor"    column="depositor"    />
+        <result property="warehousingTime" column="warehousing_time"/>
+        <result property="depositor" column="depositor"/>
         <result property="warehouseId" column="warehouse_id"/>
         <result property="productColour" column="product_colour"/>
     </resultMap>
 
     <sql id="selectProductWarehousingRecordVo">
-        select id, qr_code, qr_code_id, lot_num, product_id, levels, canister_num, box_num, suttle, production_date, 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, del_flag, create_by, create_by_id, create_time, update_by, update_by_id, update_time, warehousing_time, depositor,warehouse_id,product_colour from {DBNAME}.product_warehousing_record
+        select id,
+               qr_code,
+               qr_code_id,
+               lot_num,
+               product_id,
+               levels,
+               canister_num,
+               box_num,
+               suttle,
+               production_date,
+               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,
+               del_flag,
+               create_by,
+               create_by_id,
+               create_time,
+               update_by,
+               update_by_id,
+               update_time,
+               warehousing_time,
+               depositor,
+               warehouse_id,
+               product_colour
+        from {DBNAME}.product_warehousing_record
     </sql>
 
-    <select id="selectProductWarehousingRecordList" parameterType="com.zkqy.business.domain.ProductWarehousingRecord" resultMap="ProductWarehousingRecordResult">
+    <select id="selectProductWarehousingRecordList" parameterType="com.zkqy.business.domain.ProductWarehousingRecord"
+            resultMap="ProductWarehousingRecordResult">
         <include refid="selectProductWarehousingRecordVo"/>
         where del_flag = '0'
-            <if test="qrCode != null  and qrCode != ''"> and qr_code = #{qrCode}</if>
-            <if test="qrCodeId != null  and qrCodeId != ''"> and qr_code_id = #{qrCodeId}</if>
-            <if test="lotNum != null  and lotNum != ''"> and lot_num = #{lotNum}</if>
-            <if test="productId != null "> and product_id = #{productId}</if>
-            <if test="levels != null  and levels != ''"> and levels = #{levels}</if>
-            <if test="canisterNum != null "> and canister_num = #{canisterNum}</if>
-            <if test="boxNum != null "> and box_num = #{boxNum}</if>
-            <if test="suttle != null "> and suttle = #{suttle}</if>
-            <if test="productionDate != null "> and production_date = #{productionDate}</if>
-            <if test="machineTool != null  and machineTool != ''"> and machine_tool = #{machineTool}</if>
-            <if test="grossWeight != null "> and gross_weight = #{grossWeight}</if>
-            <if test="packaging != null  and packaging != ''"> and packaging = #{packaging}</if>
-            <if test="workShifts != null  and workShifts != ''"> and work_shifts = #{workShifts}</if>
-            <if test="foreignTradeNumber != null  and foreignTradeNumber != ''"> and foreign_trade_number = #{foreignTradeNumber}</if>
-            <if test="canisterWeight != null "> and canister_weight = #{canisterWeight}</if>
-            <if test="boxWeight != null "> and box_weight = #{boxWeight}</if>
-            <if test="tubeColor != null  and tubeColor != ''"> and tube_color = #{tubeColor}</if>
-            <if test="comPort != null  and comPort != ''"> and com_port = #{comPort}</if>
-            <if test="printFormat != null  and printFormat != ''"> and print_format = #{printFormat}</if>
-            <if test="packagingType != null  and packagingType != ''"> and packaging_type = #{packagingType}</if>
-            <if test="storageLocation != null  and storageLocation != ''"> and storage_location = #{storageLocation}</if>
-            <if test="warehouseregionId != null "> and warehouseregion_id = #{warehouseregionId}</if>
-            <if test="warehousingTime != null "> and warehousing_time = #{warehousingTime}</if>
-            <if test="depositor != null  and depositor != ''"> and depositor = #{depositor}</if>
+        <if test="qrCode != null  and qrCode != ''">and qr_code = #{qrCode}</if>
+        <if test="qrCodeId != null  and qrCodeId != ''">and qr_code_id = #{qrCodeId}</if>
+        <if test="lotNum != null  and lotNum != ''">and lot_num = #{lotNum}</if>
+        <if test="productId != null ">and product_id = #{productId}</if>
+        <if test="levels != null  and levels != ''">and levels = #{levels}</if>
+        <if test="canisterNum != null ">and canister_num = #{canisterNum}</if>
+        <if test="boxNum != null ">and box_num = #{boxNum}</if>
+        <if test="suttle != null ">and suttle = #{suttle}</if>
+        <if test="productionDate != null ">and production_date = #{productionDate}</if>
+        <if test="machineTool != null  and machineTool != ''">and machine_tool = #{machineTool}</if>
+        <if test="grossWeight != null ">and gross_weight = #{grossWeight}</if>
+        <if test="packaging != null  and packaging != ''">and packaging = #{packaging}</if>
+        <if test="workShifts != null  and workShifts != ''">and work_shifts = #{workShifts}</if>
+        <if test="foreignTradeNumber != null  and foreignTradeNumber != ''">and foreign_trade_number =
+            #{foreignTradeNumber}
+        </if>
+        <if test="canisterWeight != null ">and canister_weight = #{canisterWeight}</if>
+        <if test="boxWeight != null ">and box_weight = #{boxWeight}</if>
+        <if test="tubeColor != null  and tubeColor != ''">and tube_color = #{tubeColor}</if>
+        <if test="comPort != null  and comPort != ''">and com_port = #{comPort}</if>
+        <if test="printFormat != null  and printFormat != ''">and print_format = #{printFormat}</if>
+        <if test="packagingType != null  and packagingType != ''">and packaging_type = #{packagingType}</if>
+        <if test="storageLocation != null  and storageLocation != ''">and storage_location = #{storageLocation}</if>
+        <if test="warehouseregionId != null ">and warehouseregion_id = #{warehouseregionId}</if>
+        <if test="warehousingTime != null ">and warehousing_time = #{warehousingTime}</if>
+        <if test="depositor != null  and depositor != ''">and depositor = #{depositor}</if>
     </select>
-    
+
     <select id="selectProductWarehousingRecordById" parameterType="Long" resultMap="ProductWarehousingRecordResult">
         <include refid="selectProductWarehousingRecordVo"/>
         where id = #{id}
     </select>
-        
-    <insert id="insertProductWarehousingRecord" parameterType="com.zkqy.business.domain.ProductWarehousingRecord" useGeneratedKeys="true" keyProperty="id">
+
+    <insert id="insertProductWarehousingRecord" parameterType="com.zkqy.business.domain.ProductWarehousingRecord"
+            useGeneratedKeys="true" keyProperty="id">
         insert into {DBNAME}.product_warehousing_record
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="qrCode != null">qr_code,</if>
@@ -158,7 +197,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="warehouseId != null">warehouse_id,</if>
             <if test="productColour">product_colour,</if>
             del_flag
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="qrCode != null">#{qrCode},</if>
             <if test="qrCodeId != null">#{qrCodeId},</if>
@@ -191,7 +230,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="warehouseId != null">#{warehouseId},</if>
             <if test="productColour">#{productColour},</if>
             '0'
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateProductWarehousingRecord" parameterType="com.zkqy.business.domain.ProductWarehousingRecord">
@@ -236,7 +275,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteProductWarehousingRecordById" parameterType="Long">
-        update {DBNAME}.product_warehousing_record set del_flag = '2' where id = #{id}
+        update {DBNAME}.product_warehousing_record
+        set del_flag = '2'
+        where id = #{id}
+    </delete>
+
+    <delete id="deleteProductWarehousingRecordByQrCode" parameterType="String">
+        update {DBNAME}.product_warehousing_record
+        set del_flag = '2'
+        where qr_code = #{qrCode}
+          and qr_code_id = #{qrCodeId}
     </delete>
 
     <delete id="deleteProductWarehousingRecordByIds" parameterType="String">
@@ -246,22 +294,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
-    <select id="selectList" parameterType="com.zkqy.business.domain.vo.ProductCodeListVO" resultMap="ProductCodeListResultVO">
+    <select id="selectList" parameterType="com.zkqy.business.domain.vo.ProductCodeListVO"
+            resultMap="ProductCodeListResultVO">
         SELECT
-            r.*,
-            p.product_name,
-            p.product_specifications,
-            r.product_colour as product_color
+        r.*,
+        p.product_name,
+        p.product_specifications,
+        r.product_colour as product_color
         FROM
         {DBNAME}.product_warehousing_record r
-                LEFT JOIN {DBNAME}.production p ON r.product_id = p.id
+        LEFT JOIN {DBNAME}.production p ON r.product_id = p.id
         WHERE
-            r.del_flag = '0'
-            <if test="qrCode != null and qrCode != ''">and r.qr_code like concat('%', #{qrCode}, '%')</if>
-            <if test="lotNum != null  and lotNum != ''"> and r.lot_num like concat('%', #{lotNum}, '%')</if>
-            <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>
+        r.del_flag = '0'
+        <if test="qrCode != null and qrCode != ''">and r.qr_code like concat('%', #{qrCode}, '%')</if>
+        <if test="lotNum != null  and lotNum != ''">and r.lot_num like concat('%', #{lotNum}, '%')</if>
+        <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>
         order by r.id desc
     </select>
 
@@ -278,51 +327,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="productionStatistics" resultType="map">
         SELECT
-            a.*
+        a.*
+        FROM
+        (
+        SELECT
+        p.id,
+        p.product_name as name,
+        p.product_specifications as spec,
+        -- pr.levels,
+        TRUNCATE(sum( pr.suttle ),2) as suttle,
+        <if test="timeType == 'days'">
+            DATE( pr.warehousing_time ) AS days,
+        </if>
+        <if test="timeType == 'months'">
+            DATE_FORMAT( pr.warehousing_time, '%Y-%m' ) AS months,
+        </if>
+        <if test="timeType == 'quarters'">
+            CONCAT(YEAR ( pr.warehousing_time ),'-',QUARTER ( pr.warehousing_time )) AS quarters,
+        </if>
+        <if test="timeType == 'years'">
+            YEAR ( pr.warehousing_time ) AS years,
+        </if>
+        pr.product_colour as productColour
         FROM
-            (
-                SELECT
-                    p.id,
-                    p.product_name as name,
-                    p.product_specifications as spec,
---                     pr.levels,
-                    TRUNCATE(sum( pr.suttle ),2) as suttle,
-                    <if test="timeType == 'days'">
-                        DATE( pr.warehousing_time ) AS days,
-                    </if>
-                    <if test="timeType == 'months'">
-                        DATE_FORMAT( pr.warehousing_time, '%Y-%m' ) AS months,
-                    </if>
-                    <if test="timeType == 'quarters'">
-                        CONCAT(YEAR ( pr.warehousing_time ),'-',QUARTER ( pr.warehousing_time )) AS quarters,
-                    </if>
-                    <if test="timeType == 'years'">
-                        YEAR ( pr.warehousing_time ) AS years,
-                    </if>
-                    pr.product_colour as productColour
-                FROM
-                {DBNAME}.product_warehousing_record pr
-		LEFT JOIN {DBNAME}.production p ON pr.product_id = p.id
+        {DBNAME}.product_warehousing_record pr
+        LEFT JOIN {DBNAME}.production p ON pr.product_id = p.id
         WHERE
-            pr.del_flag = '0'
+        pr.del_flag = '0'
         GROUP BY
-            pr.product_id,
---             pr.levels,
-            pr.product_colour
-            ) AS a
+        pr.product_id,
+        -- pr.levels,
+        pr.product_colour
+        ) AS a
         WHERE
-            <if test="timeType == 'days'">
-                days = #{timeParam}
-            </if>
-            <if test="timeType == 'months'">
-                months = #{timeParam}
-            </if>
-            <if test="timeType == 'quarters'">
-                quarters = #{timeParam}
-            </if>
-            <if test="timeType == 'years'">
-                years = #{timeParam}
-            </if>
+        <if test="timeType == 'days'">
+            days = #{timeParam}
+        </if>
+        <if test="timeType == 'months'">
+            months = #{timeParam}
+        </if>
+        <if test="timeType == 'quarters'">
+            quarters = #{timeParam}
+        </if>
+        <if test="timeType == 'years'">
+            years = #{timeParam}
+        </if>
     </select>
 
 </mapper>