From 693b4cd0aa709c135350f29af7f84d0d8ed7434e Mon Sep 17 00:00:00 2001
From: yiwenpeng <ywp303@163.com>
Date: Sat, 26 Aug 2023 00:23:16 +0800
Subject: [PATCH] feat:1、库存交易记录新增库区;2、母件编码和母件名称去重复;3、出库单新增颜色信息字段。

---
 src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java                                               |  37 +++++++++++++++++++++++++++++--------
 src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java                    | 345 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java            |  15 +++++++--------
 src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java  |   2 ++
 src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/InventoryTransaction.java                |   7 ++++++-
 src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java                        |   7 ++++---
 src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java               |  21 +++++++++++++++------
 src/main/java/com/huaheng/pc/shipment/shipmentHeader/domain/ShipmentHeader.java                             |   7 +++++++
 src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java | 342 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/domain/ShipmentHeaderHistory.java               |  18 +++++++++++++-----
 src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java                                |   1 +
 src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java                               |   1 +
 src/main/java/com/huaheng/pc/task/taskHeader/service/TransferTaskService.java                               |   4 +++-
 src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html                       |  25 +++++++++++++++++++++++++
 src/main/resources/templates/receipt/receiving/receiving.html                                               |  13 +++++++++++++
 src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html                                    |  36 +++++++++++++++++++++++++++---------
 src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html                      |  35 +++++++++++++++++++++++++++--------
 17 files changed, 524 insertions(+), 392 deletions(-)

diff --git a/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java b/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java
index e36680b..3b4109d 100644
--- a/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java
+++ b/src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java
@@ -31,7 +31,9 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Service
@@ -186,20 +188,19 @@ public class MesServiceImpl implements IMesService {
     public AjaxResult shipment(ReceiptDTO receiptDTO) {
         Header header = receiptDTO.getShipmentHeader();
         List<Detail> details = receiptDTO.getShipemtnDetails();
-
-        LambdaQueryWrapper<ShipmentHeader> query = Wrappers.lambdaQuery();
-        query.eq(ShipmentHeader::getCode, header.getReferCode()).eq(ShipmentHeader::getShipmentType, header.getRefeCodeType());
-        List<ShipmentHeader> list = shipmentHeaderService.list(query);
-        if (list.size() > 0) {
+        List<ShipmentHeader> list = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>()
+                .eq(ShipmentHeader::getCode, header.getReferCode())
+                .eq(ShipmentHeader::getShipmentType, header.getRefeCodeType()));
+        if (!list.isEmpty()) {
             return AjaxResult.error("添加出库单: 上游单号referCode重复[ " + header.getReferCode() + " ],请勿重复添加。");
         }
         AjaxResult ajaxResult = new AjaxResult();
+        //校验参数
         boolean inNull = enterIsNull(ajaxResult, header, details);
         if (inNull) {
             return ajaxResult;
         }
         ShipmentHeader shipmentHeader = new ShipmentHeader();
-        // shipmentHeader.setId(header.getId());
         if (StringUtils.isNotEmpty(header.getMOMID())) {
             shipmentHeader.setMOMID(header.getMOMID());
         }
@@ -219,14 +220,30 @@ public class MesServiceImpl implements IMesService {
         shipmentHeader.setCreatorCode(header.getCreatorCode());
         shipmentHeader.setCreatorName(header.getCreatorName());
         shipmentHeader.setRequestedStartDate(header.getRequestedStartDate());
-        shipmentHeader.setSuperiorCode(header.getSuperiorCode());
+
+        //母件编码和母件名称去重复
+        String[] superiorCodeValue = header.getSuperiorCode().split(",");
+        String[] superiorNameValue = header.getSuperiorName().split(",");
+        Set<String> uniqueSuperiorCodeValue = new HashSet<>();
+        Set<String> uniqueSuperiorNameValue = new HashSet<>();
+        for (String value : superiorCodeValue) {
+            uniqueSuperiorCodeValue.add(value.trim());
+        }
+        for (String value : superiorNameValue) {
+            uniqueSuperiorNameValue.add(value.trim());
+        }
+        String superiorCode = String.join(",", uniqueSuperiorCodeValue);
+        String superiorName = String.join(",", uniqueSuperiorNameValue);
+        shipmentHeader.setSuperiorCode(superiorCode);
+        shipmentHeader.setSuperiorName(superiorName);
+
+
         if (StringUtils.isNotEmpty(header.getTransferWarehouseName())) {
             shipmentHeader.setTransferWarehouseName(header.getTransferWarehouseName());
         }
         if (StringUtils.isNotEmpty(header.getTransferWarehouseCode())) {
             shipmentHeader.setTransferWarehouseCode(header.getTransferWarehouseCode());
         }
-        shipmentHeader.setSuperiorName(header.getSuperiorName());
         shipmentHeader.setShipmentNote(header.getShipmentNote());
         shipmentHeader.setRequestedDeliveryDate(header.getRequestedDeliveryDate());
         if (StringUtils.isNotEmpty(header.getTransferWarehouseCode())) {
@@ -295,6 +312,10 @@ public class MesServiceImpl implements IMesService {
         if (!success) {
             throw new ServiceException("生成出库单详情失败");
         }
+
+
+        //如果通知单号和车间、仓库相同,自动合并单据
+
         return AjaxResult.success(receiptDTO);
     }
 
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
index ee3a37c..ef41b15 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
@@ -40,7 +40,6 @@ import java.util.List;
 public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, AdjustDetail> implements AdjustDetailService {
 
 
-
     @Resource
     private CycleCountDetailService cycleCountDetailService;
     @Resource
@@ -61,12 +60,9 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
     private ContainerService containerService;
 
 
-
-
-
-
     /**
-     *新增调整明细
+     * 新增调整明细
+     *
      * @param adjustDetail
      * @return
      */
@@ -82,38 +78,38 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         LambdaQueryWrapper<AdjustHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(adjustHeader);
         adjustHeader = adjustHeaderService.getOne(lambdaQueryWrapper);
         //检查库存
-        if((adjustDetail.getInventoryDetailId()) != null){
+        if ((adjustDetail.getInventoryDetailId()) != null) {
             InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
-            if(inventoryDetail == null){
+            if (inventoryDetail == null) {
                 return AjaxResult.error("没有该条库存明细");
             }
         }
         //明细单据的上层单编码需要和主单一直,主单空值则不判断
-        if(StringUtils.isNotEmpty(adjustHeader.getCycleCountHeaderCode()) || StringUtils.isNotEmpty(adjustHeader.getCheckCode())){
+        if (StringUtils.isNotEmpty(adjustHeader.getCycleCountHeaderCode()) || StringUtils.isNotEmpty(adjustHeader.getCheckCode())) {
             adjustDetail.setCycleCountHeaderCode(adjustHeader.getCycleCountHeaderCode());
             adjustDetail.setCheckCode(adjustHeader.getCheckCode());
         }
         //检查盘点单
-        if(StringUtils.isNotEmpty(adjustDetail.getCycleCountHeaderCode())){
-           CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(adjustDetail.getCheckDetailId());
-            if(cycleCountDetail == null || !cycleCountDetail.getCycleCountHeadCode().equals(adjustDetail.getCycleCountHeaderCode())){
-              return AjaxResult.error("盘点单错误,请核对盘点单据!");
+        if (StringUtils.isNotEmpty(adjustDetail.getCycleCountHeaderCode())) {
+            CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(adjustDetail.getCheckDetailId());
+            if (cycleCountDetail == null || !cycleCountDetail.getCycleCountHeadCode().equals(adjustDetail.getCycleCountHeaderCode())) {
+                return AjaxResult.error("盘点单错误,请核对盘点单据!");
             }
         }
         //检查质检单
-        if(StringUtils.isNotEmpty(adjustDetail.getCheckCode())){
+        if (StringUtils.isNotEmpty(adjustDetail.getCheckCode())) {
             CheckDetail checkDetail = checkDetailService.getById(adjustDetail.getCheckDetailId());
-            if(checkDetail == null || !checkDetail.getCheckCode().equals(adjustDetail.getCheckCode())){
+            if (checkDetail == null || !checkDetail.getCheckCode().equals(adjustDetail.getCheckCode())) {
                 return AjaxResult.error("质检单错误,请核对质检单据!");
             }
         }
         //检查物料
         Material material = materialService.getMaterialByCode(adjustDetail.getMaterialCode());
-        if(material != null){
-            if(!material.getName().equals(adjustDetail.getMaterialName())){
-               return AjaxResult.error("物料名称错误!");
+        if (material != null) {
+            if (!material.getName().equals(adjustDetail.getMaterialName())) {
+                return AjaxResult.error("物料名称错误!");
             }
-        }else{
+        } else {
             return AjaxResult.error("物料编码错误!");
         }
         //调整数量
@@ -133,6 +129,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
 
     /**
      * 调整审批
+     *
      * @param adjustDetail
      * @return
      */
@@ -140,7 +137,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
     @Override
     public AjaxResult adjustAgree(AdjustDetail adjustDetail) {
         //修改状态,审批人栏填入名称,修改状态
-        if(adjustDetail.getStatus() > 1){
+        if (adjustDetail.getStatus() > 1) {
             return AjaxResult.error("单据状态无法审批!");
         }
         adjustDetail.setAgreeBy(ShiroUtils.getName());
@@ -155,17 +152,17 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
 
     /**
      * 修改调整数量
-     * */
+     */
     @Override
     public AjaxResult editSave(AdjustDetail adjustDetail) {
-    //调整数量和货主,供应商
-    //根据ID修改
+        //调整数量和货主,供应商
+        //根据ID修改
         BigDecimal t = adjustDetail.getToQty().subtract(adjustDetail.getFromQty());
         adjustDetail.setGapQty(t);
-       Boolean j = this.updateById(adjustDetail);
-       if(!j){
-           throw new ServiceException("修改调账明细失败!");
-       }
+        Boolean j = this.updateById(adjustDetail);
+        if (!j) {
+            throw new ServiceException("修改调账明细失败!");
+        }
         return AjaxResult.success("修改成功");
     }
 
@@ -174,157 +171,160 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
      * 调整库存
      * 调整数量,调整库存状态
      * 调整插入库存
+     *
      * @param adjustDetail
      * @return
      */
     @Transactional
     @Override
     public AjaxResult updateAdjustDetail(AdjustDetail adjustDetail) {
-            if(adjustDetail.getStatus() == 1){
-                AjaxResult.error("该单据已调整,不允许再次调整!" );
-            }
+        if (adjustDetail.getStatus() == 1) {
+            AjaxResult.error("该单据已调整,不允许再次调整!");
+        }
         String containerCode = adjustDetail.getContainerCode();
         Container container = containerService.getContainerByCode(containerCode);
         adjustDetail.setLocationCode(container.getLocationCode());
         //调整单中不带库存明细时不查询
-            if(adjustDetail.getInventoryDetailId() != null && adjustDetail.getInventoryDetailId() != 0) {
-                InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
-                if (!adjustDetail.getLocationCode().equals(inventoryDetail.getLocationCode()) ||
-                        !adjustDetail.getContainerCode().equals(inventoryDetail.getContainerCode())) {
-                    return AjaxResult.error("调整单和所调整库存的库位容器不符,前检查数据");
-                }
-                //验证该条库存是不是正在使用,验证库存明细
-                Location location = new Location();
-                location.setCode(inventoryDetail.getLocationCode());
-                location.setWarehouseCode(inventoryDetail.getWarehouseCode());
-                LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location);
-                location = locationService.getOne(lambdaQueryWrapper);
-                if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(location.getStatus())) {
-                    return AjaxResult.error (inventoryDetail.getId() + "库位非空闲,请等待其他任务完成再进行调整!");
-                }
-                //判断调整库存状态还是数量
-                if ((adjustDetail.getToQty() != null || adjustDetail.getGapQty() != null) &&!"manual".equals(adjustDetail.getUserDef3())) {
-                    //调整数量
-                    this.updateAdjustDetailNumber(adjustDetail, inventoryDetail);
-                }
-                if (!adjustDetail.getFromInventorySts().equals(adjustDetail.getToInventorySts())) {
-                    //调整库存状态
-                    this.updateAdjustDetailState(adjustDetail, inventoryDetail);
-                }
-            }else{
-                String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
-                if(StringUtils.isNotEmpty(fromQtyString) && !"manual".equals(adjustDetail.getUserDef3())){
-                    //调整插入库存
-                    updateAdjustDetailInsert(adjustDetail);
-                }
+        if (adjustDetail.getInventoryDetailId() != null && adjustDetail.getInventoryDetailId() != 0) {
+            InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
+            if (!adjustDetail.getLocationCode().equals(inventoryDetail.getLocationCode()) ||
+                    !adjustDetail.getContainerCode().equals(inventoryDetail.getContainerCode())) {
+                return AjaxResult.error("调整单和所调整库存的库位容器不符,前检查数据");
             }
-
-            if ("manual".equals(adjustDetail.getUserDef3())){
-                LambdaQueryWrapper<InventoryDetail>queryWrapper=Wrappers.lambdaQuery();
-                queryWrapper.eq(InventoryDetail::getContainerCode,adjustDetail.getContainerCode())
-                        .eq(InventoryDetail::getLocationCode,adjustDetail.getLocationCode())
-                        .eq(InventoryDetail::getCompanyCode,adjustDetail.getCompanyCode()).last("limit 1");
-                InventoryDetail inventoryDetail=inventoryDetailService.getOne(queryWrapper);
-                if (StringUtils.isNotNull(inventoryDetail)){
-                    //新增库存
-                    InventoryDetail insertDetail=new InventoryDetail();
-                    insertDetail.setMaterialCode(adjustDetail.getMaterialCode());
-                    insertDetail.setMaterialUnit(adjustDetail.getMaterialUnit());
-                    insertDetail.setMaterialName(adjustDetail.getMaterialName());
-                    insertDetail.setQty(adjustDetail.getToQty());
-                    insertDetail.setMaterialSpec(adjustDetail.getMaterialSpec());
-                    insertDetail.setContainerCode(inventoryDetail.getContainerCode());
-                    insertDetail.setLocationCode(inventoryDetail.getLocationCode());
-                    insertDetail.setInventoryHeaderId(inventoryDetail.getInventoryHeaderId());
-                    insertDetail.setCompanyCode(inventoryDetail.getCompanyCode());
-                    insertDetail.setInventorySts(inventoryDetail.getInventorySts());
-                    insertDetail.setWarehouseCode(inventoryDetail.getWarehouseCode());
-                    insertDetail.setZoneCode(inventoryDetail.getZoneCode());
-                    insertDetail.setCreatedBy(ShiroUtils.getName());
-                    insertDetail.setLastUpdatedBy(ShiroUtils.getName());
-                    insertDetail.setLastUpdatedByName(ShiroUtils.getName());
-                    insertDetail.setZoneCode(inventoryDetail.getZoneCode());
-                    insertDetail.setTaskQty(new BigDecimal(0));
-                    insertDetail.setReceiptDetailId(0);
-                    insertDetail.setReceiptCode("0");
-                    insertDetail.setInventorySts(QuantityConstant.GOOD);
-                    inventoryDetailService.save(insertDetail);
-                    adjustDetail.setInventoryDetailId(insertDetail.getId());
-
-                    //写入库存交易
-                    //调整入
-                    InventoryTransaction inventoryTransaction = new InventoryTransaction();
-                    inventoryTransaction.setAdjustCode(adjustDetail.getAdjustCode());
-                    inventoryTransaction.setWarehouseCode(insertDetail.getWarehouseCode());
-                    inventoryTransaction.setCompanyCode(insertDetail.getCompanyCode());
-                    inventoryTransaction.setLocationCode(insertDetail.getLocationCode());
-                    inventoryTransaction.setContainerCode(insertDetail.getContainerCode());
-                    inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
-                    inventoryTransaction.setMaterialCode(insertDetail.getMaterialCode());
-                    inventoryTransaction.setMaterialName(insertDetail.getMaterialName());
-                    inventoryTransaction.setMaterialSpec(insertDetail.getMaterialSpec());
-                    inventoryTransaction.setMaterialUnit(insertDetail.getMaterialUnit());
-                    inventoryTransaction.setTaskQty(adjustDetail.getToQty());
-                    inventoryTransaction.setInventorySts(insertDetail.getInventorySts());//状态
-                    inventoryTransaction.setReferCode(insertDetail.getReferCode());
-                    inventoryTransaction.setReferDetailId(insertDetail.getReferDetailId());
-                    inventoryTransaction.setBatch(insertDetail.getBatch());
-                    inventoryTransaction.setLot(insertDetail.getLot());
-                    inventoryTransaction.setProjectNo(insertDetail.getProjectNo());
-                    inventoryTransaction.setQcCheck(insertDetail.getQcCheck());
-                    inventoryTransaction.setWeight(insertDetail.getWeight());
-                    inventoryTransaction.setManufactureDate(insertDetail.getManufactureDate());
-                    inventoryTransaction.setExpirationDate(insertDetail.getExpirationDate());
-                    inventoryTransaction.setAgingDate(insertDetail.getCreated());
-                    inventoryTransaction.setAttributeId(insertDetail.getAttributeId());
-                    inventoryTransaction.setAttribute1(insertDetail.getAttribute1());
-                    inventoryTransaction.setAttribute2(insertDetail.getAttribute2());
-                    inventoryTransaction.setAttribute3(insertDetail.getAttribute3());
-                    inventoryTransaction.setCreated(new Date());
-                    inventoryTransaction.setCreatedBy(ShiroUtils.getName());
-                    inventoryTransaction.setBillDetailId(insertDetail.getReceiptDetailId());
-                    inventoryTransaction.setSupplierCode(insertDetail.getSupplierCode());
-                    inventoryTransactionService.saveOrUpdate(inventoryTransaction);
-                }
+            //验证该条库存是不是正在使用,验证库存明细
+            Location location = new Location();
+            location.setCode(inventoryDetail.getLocationCode());
+            location.setWarehouseCode(inventoryDetail.getWarehouseCode());
+            LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location);
+            location = locationService.getOne(lambdaQueryWrapper);
+            if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(location.getStatus())) {
+                return AjaxResult.error(inventoryDetail.getId() + "库位非空闲,请等待其他任务完成再进行调整!");
+            }
+            //判断调整库存状态还是数量
+            if ((adjustDetail.getToQty() != null || adjustDetail.getGapQty() != null) && !"manual".equals(adjustDetail.getUserDef3())) {
+                //调整数量
+                this.updateAdjustDetailNumber(adjustDetail, inventoryDetail);
+            }
+            if (!adjustDetail.getFromInventorySts().equals(adjustDetail.getToInventorySts())) {
+                //调整库存状态
+                this.updateAdjustDetailState(adjustDetail, inventoryDetail);
+            }
+        } else {
+            String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
+            if (StringUtils.isNotEmpty(fromQtyString) && !"manual".equals(adjustDetail.getUserDef3())) {
+                //调整插入库存
+                updateAdjustDetailInsert(adjustDetail);
             }
-            //修改调整单明细状态
-            adjustDetail.setStatus(3);
-            adjustDetail.setLastUpdatedBy(ShiroUtils.getName());
-            adjustDetail.setLastUpdated(new Date());
-            this.saveOrUpdate(adjustDetail);
-            //判断调整单明细是否全部已批准
-            List<AdjustDetail> list = this.list(new LambdaQueryWrapper<AdjustDetail>()
-                    .eq(AdjustDetail::getAdjustCode, adjustDetail.getAdjustCode()));
-            boolean isFlag = false;
-            for (AdjustDetail detail : list) {
-                if(detail.getStatus()!=3){
-                    isFlag = true;
-                }
+        }
+
+        if ("manual".equals(adjustDetail.getUserDef3())) {
+            LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(InventoryDetail::getContainerCode, adjustDetail.getContainerCode())
+                    .eq(InventoryDetail::getLocationCode, adjustDetail.getLocationCode())
+                    .eq(InventoryDetail::getCompanyCode, adjustDetail.getCompanyCode()).last("limit 1");
+            InventoryDetail inventoryDetail = inventoryDetailService.getOne(queryWrapper);
+            if (StringUtils.isNotNull(inventoryDetail)) {
+                //新增库存
+                InventoryDetail insertDetail = new InventoryDetail();
+                insertDetail.setMaterialCode(adjustDetail.getMaterialCode());
+                insertDetail.setMaterialUnit(adjustDetail.getMaterialUnit());
+                insertDetail.setMaterialName(adjustDetail.getMaterialName());
+                insertDetail.setQty(adjustDetail.getToQty());
+                insertDetail.setMaterialSpec(adjustDetail.getMaterialSpec());
+                insertDetail.setContainerCode(inventoryDetail.getContainerCode());
+                insertDetail.setLocationCode(inventoryDetail.getLocationCode());
+                insertDetail.setInventoryHeaderId(inventoryDetail.getInventoryHeaderId());
+                insertDetail.setCompanyCode(inventoryDetail.getCompanyCode());
+                insertDetail.setInventorySts(inventoryDetail.getInventorySts());
+                insertDetail.setWarehouseCode(inventoryDetail.getWarehouseCode());
+                insertDetail.setZoneCode(inventoryDetail.getZoneCode());
+                insertDetail.setCreatedBy(ShiroUtils.getName());
+                insertDetail.setLastUpdatedBy(ShiroUtils.getName());
+                insertDetail.setLastUpdatedByName(ShiroUtils.getName());
+                insertDetail.setZoneCode(inventoryDetail.getZoneCode());
+                insertDetail.setTaskQty(new BigDecimal(0));
+                insertDetail.setReceiptDetailId(0);
+                insertDetail.setReceiptCode("0");
+                insertDetail.setInventorySts(QuantityConstant.GOOD);
+                inventoryDetailService.save(insertDetail);
+                adjustDetail.setInventoryDetailId(insertDetail.getId());
+
+                //写入库存交易
+                //调整入
+                InventoryTransaction inventoryTransaction = new InventoryTransaction();
+                inventoryTransaction.setAdjustCode(adjustDetail.getAdjustCode());
+                inventoryTransaction.setWarehouseCode(insertDetail.getWarehouseCode());
+                inventoryTransaction.setCompanyCode(insertDetail.getCompanyCode());
+                inventoryTransaction.setLocationCode(insertDetail.getLocationCode());
+                inventoryTransaction.setContainerCode(insertDetail.getContainerCode());
+                inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
+                inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
+                inventoryTransaction.setMaterialCode(insertDetail.getMaterialCode());
+                inventoryTransaction.setMaterialName(insertDetail.getMaterialName());
+                inventoryTransaction.setMaterialSpec(insertDetail.getMaterialSpec());
+                inventoryTransaction.setMaterialUnit(insertDetail.getMaterialUnit());
+                inventoryTransaction.setTaskQty(adjustDetail.getToQty());
+                inventoryTransaction.setInventorySts(insertDetail.getInventorySts());//状态
+                inventoryTransaction.setReferCode(insertDetail.getReferCode());
+                inventoryTransaction.setReferDetailId(insertDetail.getReferDetailId());
+                inventoryTransaction.setBatch(insertDetail.getBatch());
+                inventoryTransaction.setLot(insertDetail.getLot());
+                inventoryTransaction.setProjectNo(insertDetail.getProjectNo());
+                inventoryTransaction.setQcCheck(insertDetail.getQcCheck());
+                inventoryTransaction.setWeight(insertDetail.getWeight());
+                inventoryTransaction.setManufactureDate(insertDetail.getManufactureDate());
+                inventoryTransaction.setExpirationDate(insertDetail.getExpirationDate());
+                inventoryTransaction.setAgingDate(insertDetail.getCreated());
+                inventoryTransaction.setAttributeId(insertDetail.getAttributeId());
+                inventoryTransaction.setAttribute1(insertDetail.getAttribute1());
+                inventoryTransaction.setAttribute2(insertDetail.getAttribute2());
+                inventoryTransaction.setAttribute3(insertDetail.getAttribute3());
+                inventoryTransaction.setCreated(new Date());
+                inventoryTransaction.setCreatedBy(ShiroUtils.getName());
+                inventoryTransaction.setBillDetailId(insertDetail.getReceiptDetailId());
+                inventoryTransaction.setSupplierCode(insertDetail.getSupplierCode());
+                inventoryTransactionService.saveOrUpdate(inventoryTransaction);
             }
-            if(isFlag){
-                return AjaxResult.success("调整库存成功!");
+        }
+        //修改调整单明细状态
+        adjustDetail.setStatus(3);
+        adjustDetail.setLastUpdatedBy(ShiroUtils.getName());
+        adjustDetail.setLastUpdated(new Date());
+        this.saveOrUpdate(adjustDetail);
+        //判断调整单明细是否全部已批准
+        List<AdjustDetail> list = this.list(new LambdaQueryWrapper<AdjustDetail>()
+                .eq(AdjustDetail::getAdjustCode, adjustDetail.getAdjustCode()));
+        boolean isFlag = false;
+        for (AdjustDetail detail : list) {
+            if (detail.getStatus() != 3) {
+                isFlag = true;
             }
-            //已批准更新 调整单头
-            AdjustHeader adjustHeader = adjustHeaderService.getOne(new LambdaQueryWrapper<AdjustHeader>()
-                    .eq(AdjustHeader::getCode, adjustDetail.getAdjustCode()));
-            adjustHeader.setProcessStamp("100");
-            adjustHeaderService.updateById(adjustHeader);
+        }
+        if (isFlag) {
             return AjaxResult.success("调整库存成功!");
+        }
+        //已批准更新 调整单头
+        AdjustHeader adjustHeader = adjustHeaderService.getOne(new LambdaQueryWrapper<AdjustHeader>()
+                .eq(AdjustHeader::getCode, adjustDetail.getAdjustCode()));
+        adjustHeader.setProcessStamp("100");
+        adjustHeaderService.updateById(adjustHeader);
+        return AjaxResult.success("调整库存成功!");
     }
 
 
     /**
      * 调整修改库存数量
+     *
      * @param adjustDetail
      */
     @Transactional
-    public void updateAdjustDetailNumber (AdjustDetail adjustDetail, InventoryDetail inventoryDetail){
+    public void updateAdjustDetailNumber(AdjustDetail adjustDetail, InventoryDetail inventoryDetail) {
         /*修改库存数量,调整单据状态,写入库存交易*/
 
         /*调整后的数量写入库存*/
         //比较大小可以用 .compareTo()返回值 -1 小于 0 等于 1 大于
         //Bigdecimal 自带运算方法.add加法 .subtract减法
-        if(adjustDetail.getToQty().compareTo(BigDecimal.ZERO) == 0){
+        if (adjustDetail.getToQty().compareTo(BigDecimal.ZERO) == 0) {
             //当调整后数量为0时,直接删除该条库存,并写入库存交易
             //删除库存,并查询当前库位还有没有其他物料,没有则删除库存头,恢复容器和库位状态
             InventoryDetail inv = new InventoryDetail();
@@ -334,36 +334,38 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
             LambdaQueryWrapper<InventoryDetail> lamdDetail = Wrappers.lambdaQuery(inv);
             List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(lamdDetail);
             inventoryDetailService.removeById(adjustDetail.getInventoryDetailId());//删除实际库存数量为0的库存明细
-            if(inventoryDetailList.size() == 0){
+            if (inventoryDetailList.size() == 0) {
                 //恢复库位和容器状态,删除库存头
                 inventoryHeaderService.removeById(inventoryDetail.getInventoryHeaderId());
                 locationService.updateContainerCodeAndStatus(inventoryDetail.getLocationCode(),
-                        "",QuantityConstant.STATUS_LOCATION_EMPTY);
+                        "", QuantityConstant.STATUS_LOCATION_EMPTY);
                 containerService.updateLocationCodeAndStatus(inventoryDetail.getContainerCode(),
-                        "",QuantityConstant.STATUS_CONTAINER_EMPTY);
+                        "", QuantityConstant.STATUS_CONTAINER_EMPTY);
             }
-        }else{
+        } else {
             //修改库存
             //BigDecimal temp =(adjustDetail.getFromQty()).add(adjustDetail.getGapQty());
             inventoryDetail.setQty(adjustDetail.getToQty());//调整后的数量
             inventoryDetail.setLastUpdatedBy(ShiroUtils.getName());
             inventoryDetail.setLastUpdatedByName(ShiroUtils.getName());
             inventoryDetail.setLastUpdated(new Date());
-            Boolean j =  inventoryDetailService.saveOrUpdate(inventoryDetail);
-            if(j == false){
+            Boolean j = inventoryDetailService.saveOrUpdate(inventoryDetail);
+            if (j == false) {
                 throw new SecurityException("调整修改库存失败!");
-            }        }
+            }
+        }
         //写入库存交易记录
         InventoryTransaction inventoryTransaction = new InventoryTransaction();
         inventoryTransaction.setWarehouseCode(inventoryDetail.getWarehouseCode());
         inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
         inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
         inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
-        if(adjustDetail.getGapQty().compareTo(BigDecimal.ZERO) > 0) {
-            inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO );
+        if (adjustDetail.getGapQty().compareTo(BigDecimal.ZERO) > 0) {
+            inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
         } else {
-            inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT );
+            inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT);
         }
+        inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
         inventoryTransaction.setAdjustCode(adjustDetail.getAdjustCode());
         inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
         inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
@@ -390,18 +392,19 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction.setBillDetailId(inventoryDetail.getReceiptDetailId());
         inventoryTransaction.setSupplierCode(inventoryDetail.getSupplierCode());
         Boolean k = inventoryTransactionService.saveOrUpdate(inventoryTransaction);
-        if(k == false){
+        if (k == false) {
             throw new SecurityException("调整单库存交易生成失败!");
         }
     }
 
     /**
      * 调整库存属性
+     *
      * @param adjustDetail
      */
     @Transactional
-    public void updateAdjustDetailState (AdjustDetail adjustDetail, InventoryDetail inventoryDetail) {
-      /*不考虑其他只改变库存状态即可,也需要写入库存交易。*/
+    public void updateAdjustDetailState(AdjustDetail adjustDetail, InventoryDetail inventoryDetail) {
+        /*不考虑其他只改变库存状态即可,也需要写入库存交易。*/
 
         //修改库存的状态
         inventoryDetail.setInventorySts(adjustDetail.getToInventorySts());//修改为调整库存
@@ -420,7 +423,8 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
         inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
         inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
-        inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT );
+        inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT);
+        inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
         inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
         inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
         inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
@@ -485,10 +489,11 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
 
     /**
      * 调整插入库存
+     *
      * @param adjustDetail
      */
     @Transactional
-    public void updateAdjustDetailInsert (AdjustDetail adjustDetail) {
+    public void updateAdjustDetailInsert(AdjustDetail adjustDetail) {
         /*当系统库存为0时,调整单触发插入新库存状态*/
         //新生成库存头时,库位,容器都需要更新数据
 
@@ -499,7 +504,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         ih.setContainerCode(adjustDetail.getContainerCode());
         LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(ih);
         InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper);
-        if(inventoryHeader == null){
+        if (inventoryHeader == null) {
             //库存头为空,生成库存头
             inventoryHeader.setWarehouseCode(adjustDetail.getWarehouseCode());
             inventoryHeader.setLocationCode(adjustDetail.getLocationCode());
@@ -515,9 +520,9 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
             inventoryHeaderService.saveOrUpdate(inventoryHeader);
             //更新库位和容器
             locationService.updateContainerCodeAndStatus(inventoryHeader.getLocationCode(),
-                    inventoryHeader.getContainerCode(),QuantityConstant.STATUS_LOCATION_EMPTY);
+                    inventoryHeader.getContainerCode(), QuantityConstant.STATUS_LOCATION_EMPTY);
             containerService.updateLocationCodeAndStatus(inventoryHeader.getContainerCode(),
-                    inventoryHeader.getLocationCode(),QuantityConstant.STATUS_CONTAINER_EMPTY);
+                    inventoryHeader.getLocationCode(), QuantityConstant.STATUS_CONTAINER_EMPTY);
 
         }
         //生成库存明细
@@ -567,6 +572,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
         inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
         inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
+        inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
         inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
         inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
         inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
@@ -596,7 +602,4 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
     }
 
 
-
-
-
 }
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
index bdcf39e..257915f 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
@@ -98,7 +98,7 @@ public class InventoryHeaderController extends BaseController {
         lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin), InventoryHeader::getCreated, createdBegin)
                 .le(StringUtils.isNotEmpty(createdEnd), InventoryHeader::getCreated, createdEnd)//创建时间范围
                 .eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())//仓库
-                .eq(StringUtils.isNotEmpty(inventoryHeader.getZoneCode()), InventoryHeader::getZoneCode, inventoryHeader.getZoneCode()) //库位
+                .eq(StringUtils.isNotEmpty(inventoryHeader.getZoneCode()), InventoryHeader::getZoneCode, inventoryHeader.getZoneCode()) //库区
                 .eq(StringUtils.isNotEmpty(inventoryHeader.getLocationCode()), InventoryHeader::getLocationCode, inventoryHeader.getLocationCode()) //库位
                 .like(StringUtils.isNotEmpty(inventoryHeader.getContainerCode()), InventoryHeader::getContainerCode, inventoryHeader.getContainerCode())//容器
                 .eq(StringUtils.isNotEmpty(inventoryHeader.getCreatedBy()), InventoryHeader::getCreatedBy, inventoryHeader.getCreatedBy())//创建用户
@@ -162,7 +162,7 @@ public class InventoryHeaderController extends BaseController {
                                     BigDecimal materialQuantity = BigDecimal.ZERO;
                                     BigDecimal materialWeight = BigDecimal.ZERO;
 
-                                    if(StrUtil.isNotBlank(dimension) && ReUtil.isMatch(pattern, dimension)){
+                                    if (StrUtil.isNotBlank(dimension) && ReUtil.isMatch(pattern, dimension)) {
                                         String[] parts = dimension.split("x");
                                         double length = Double.parseDouble(parts[0]);
                                         double width = Double.parseDouble(parts[1]);
@@ -177,12 +177,12 @@ public class InventoryHeaderController extends BaseController {
                                     }
 
 
-                                    if(materialQuantity.compareTo(BigDecimal.ZERO) > 0){
-                                        if(materialVolume.compareTo(BigDecimal.ZERO) > 0){
+                                    if (materialQuantity.compareTo(BigDecimal.ZERO) > 0) {
+                                        if (materialVolume.compareTo(BigDecimal.ZERO) > 0) {
                                             materialVolumeList.add(NumberUtil.mul(materialVolume, materialQuantity));
 
                                         }
-                                        if(materialWeight.compareTo(BigDecimal.ZERO) > 0 ){
+                                        if (materialWeight.compareTo(BigDecimal.ZERO) > 0) {
                                             materialWeightList.add(NumberUtil.mul(materialWeight, materialQuantity));
                                         }
                                     }
@@ -191,11 +191,11 @@ public class InventoryHeaderController extends BaseController {
 
                                 BigDecimal materialVolume = materialVolumeList.stream()
                                         .reduce(BigDecimal.ZERO, BigDecimal::add)
-                                        .divide(palletVolume,4,RoundingMode.HALF_UP);
+                                        .divide(palletVolume, 4, RoundingMode.HALF_UP);
 
                                 BigDecimal materialWeight = materialWeightList.stream()
                                         .reduce(BigDecimal.ZERO, BigDecimal::add)
-                                        .divide(palletWeightCapacity,4,RoundingMode.HALF_UP);
+                                        .divide(palletWeightCapacity, 4, RoundingMode.HALF_UP);
 
                                 String materialVolumePercentage = percentageFormat.format(materialVolume);
                                 String materialWeightPercentage = percentageFormat.format(materialWeight);
@@ -213,7 +213,6 @@ public class InventoryHeaderController extends BaseController {
     }
 
 
-
     /**
      * 盘点库存主列表
      */
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
index 7aae758..129d696 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
@@ -14,6 +14,7 @@ import com.huaheng.framework.web.page.TableDataInfo;
 import com.huaheng.framework.web.page.TableSupport;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
+import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
 import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
 import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
 import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
@@ -87,6 +88,7 @@ public class InventoryTransactionController extends BaseController {
                 .like(StringUtils.isNotEmpty(inventoryTransaction.getCreatedBy()), InventoryTransaction::getCreatedBy, inventoryTransaction.getCreatedBy())//创建用户
                 .eq(StringUtils.isNotEmpty(inventoryTransaction.getWarehouse()), InventoryTransaction::getWarehouse, inventoryTransaction.getWarehouse()) //原仓库编码
                 .like(StringUtils.isNotEmpty(inventoryTransaction.getWarehouseName()), InventoryTransaction::getWarehouseName, inventoryTransaction.getWarehouseName()) //原仓库名称
+                .eq(StringUtils.isNotEmpty(inventoryTransaction.getZoneCode()), InventoryTransaction::getZoneCode, inventoryTransaction.getZoneCode()) //库区
                 //货主
                 .in(InventoryTransaction::getCompanyCode, ShiroUtils.getCompanyCodeList())
                 .orderByDesc(InventoryTransaction::getId);
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/InventoryTransaction.java b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/InventoryTransaction.java
index 1bc7a95..e100346 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/InventoryTransaction.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/InventoryTransaction.java
@@ -330,5 +330,10 @@ public class InventoryTransaction implements Serializable {
     @TableField(value = "isFlatWarehouse")
     @ApiModelProperty(value = "是否平库,1为平库")
     private Integer isFlatWarehouse;
-
+    /**
+     * 库区
+     */
+    @TableField(value = "zoneCode")
+    @ApiModelProperty(value = "库区")
+    private String zoneCode;
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java b/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
index 844c97d..bede5dd 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
@@ -110,7 +110,7 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei
         SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
         LambdaQueryWrapper<ReceiptHeader> lambda = Wrappers.lambdaQuery();
         lambda.select(ReceiptHeader::getCode).eq(ReceiptHeader::getReceiptType, receiptType)
-                .inSql(ReceiptHeader::getCode, "select code from receipt_header where code like '"+receiptType+"%'")
+                .inSql(ReceiptHeader::getCode, "select code from receipt_header where code like '" + receiptType + "%'")
                 .orderByDesc(ReceiptHeader::getId).last("Limit 1");
         //如果指定类型的最后的code存在,并且日期一致。那么 code = 入库单类型 + 年月日 + (排序号 + 1)
         String maxCode = null;
@@ -127,12 +127,12 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei
                 Integer Count = Integer.valueOf(maxCode.substring(maxCode.length() - 5, maxCode.length()));
                 code = receiptType + df.format(now) + String.format("%05d", Count + i++);
             } else {
-                code = receiptType + df.format(now) + String.format("%05d", 0000+i++);
+                code = receiptType + df.format(now) + String.format("%05d", 0000 + i++);
             }
             aa.select(ReceiptHeaderHistory::getCode).eq(ReceiptHeaderHistory::getCode, code);
             List<ReceiptHeaderHistory> list = receiptheaderhistoryMapper.selectList(aa);
             if (list.size() <= 0) {
-                i=0;
+                i = 0;
             }
         }
         return code;
@@ -484,6 +484,7 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei
                 inventoryTransaction.setLocationCode(locationCode);
                 inventoryTransaction.setContainerCode(containerCode);
                 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
+                inventoryTransaction.setZoneCode("未知库区");
                 inventoryTransaction.setMaterialCode(receiptDetail.getMaterialCode());
                 inventoryTransaction.setMaterialName(receiptDetail.getMaterialName());
                 inventoryTransaction.setMaterialSpec(receiptDetail.getMaterialSpec());
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java
index 5bdf5b2..623d2bb 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java
@@ -26,6 +26,7 @@ import com.huaheng.pc.config.waveMaster.service.WaveMasterService;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
 import com.huaheng.pc.momLog.service.IMomLogService;
+import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
 import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail;
 import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
 import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
@@ -47,10 +48,7 @@ import javax.annotation.Resource;
 import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 
 /**
@@ -182,6 +180,7 @@ public class ShipmentHeaderController extends BaseController {
                 .eq(shipmentHeader.getFirstStatus() != null, ShipmentHeader::getFirstStatus, shipmentHeader.getFirstStatus())
                 .eq(shipmentHeader.getLastStatus() != null, ShipmentHeader::getLastStatus, shipmentHeader.getLastStatus())
                 .eq(StringUtils.isNotNull(shipmentHeader.getPushSuccessStatus()), ShipmentHeader::getPushSuccessStatus, shipmentHeader.getPushSuccessStatus())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getMaterialColor()), ShipmentHeader::getMaterialColor, shipmentHeader.getMaterialColor())
                 .eq(ShipmentHeader::getDeleted, 0)
                 .orderByAsc(ShipmentHeader::getLastStatus)
                 .orderByAsc(ShipmentHeader::getRequestedStartDate)
@@ -511,7 +510,7 @@ public class ShipmentHeaderController extends BaseController {
         LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery();
         headerWrapper.in(ShipmentHeader::getId, headerIdArr);
         List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(headerWrapper);
-        if (shipmentHeaderList.size() < 1) {
+        if (shipmentHeaderList.isEmpty()) {
             throw new ServiceException("单据主表不存在!!!");
         }
         shipmentHeaderList.forEach(shipmentHeader -> {
@@ -540,7 +539,17 @@ public class ShipmentHeaderController extends BaseController {
         shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_BUILD);
         StringBuilder recordID = new StringBuilder();
         StringBuilder workShops = new StringBuilder();
-        shipmentHeaderList.forEach(header -> workShops.append(header.getWorkshop()).append(","));
+        Set<String> uniqueWorkshops = new HashSet<>();
+        for (ShipmentHeader header : shipmentHeaderList) {
+            uniqueWorkshops.add(header.getWorkshop());
+        }
+        for (String workshop : uniqueWorkshops) {
+            workShops.append(workshop).append(",");
+        }
+        // 移除最后一个逗号
+        if (workShops.length() > 0) {
+            workShops.setLength(workShops.length() - 1);
+        }
         shipmentHeaderList.forEach(header -> recordID.append(header.getId()).append(","));
         shipmentHeader.setWorkshop(workShops.toString());
         shipmentHeader.setRecordID(recordID.toString());
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/domain/ShipmentHeader.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/domain/ShipmentHeader.java
index 82240d7..333fb2e 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentHeader/domain/ShipmentHeader.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeader/domain/ShipmentHeader.java
@@ -529,4 +529,11 @@ public class ShipmentHeader implements Serializable {
     @TableField(value = "ISMOM")
     @ApiModelProperty(value = "ISMOM")
     private String ISMOM;
+
+    /**
+     * 物料颜色
+     */
+    @TableField(value = "materialColor")
+    @ApiModelProperty(value = "物料颜色")
+    public String materialColor;
 }
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
index fff2202..170b251 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
@@ -40,183 +40,181 @@ import java.util.List;
  */
 @Controller
 @RequestMapping("/shipment/shipmentHeaderHistory")
-public class ShipmentHeaderHistoryController extends BaseController
-{
+public class ShipmentHeaderHistoryController extends BaseController {
     private String prefix = "shipment/shipmentHeaderHistory";
 
-	@Autowired
-	private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
-	@Autowired
-	private ShipmentDetailHistoryService shipmentDetailHistoryService;
-
-
-	@RequiresPermissions("shipment:bill:view")
-	@GetMapping()
-	public String shipmentHeaderHistory()
-	{
-	    return prefix + "/shipmentHeaderHistory";
-	}
-
-	/**
-	 * 查询出库单主列表
-	 */
-	@RequiresPermissions("shipment:bill:list")
-	@Log(title = "出库-出库单历史", operating="查看历史出库主单", action = BusinessType.GRANT)
-	@PostMapping("/list")
-	@ResponseBody
-	public TableDataInfo list(ShipmentHeaderHistory shipmentHeader, String createdBegin, String createdEnd, String deliveryDate, String startDate,String importDate) {
-		LambdaQueryWrapper<ShipmentHeaderHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
-		PageDomain pageDomain = TableSupport.buildPageRequest();
-		Integer pageNum = pageDomain.getPageNum();
-		Integer pageSize = pageDomain.getPageSize();
-		Date date1 = null;
-		Date date2 = null;
-		Date date3 = null;
-		try {
-			if (StringUtils.isNotNull(deliveryDate)) {
-				date1 = new SimpleDateFormat("yyyy-MM-dd").parse(deliveryDate);
-			}else {
-				date1 = null;
-			}
-		} catch (java.text.ParseException e) {
-			//LOGGER.error("时间转换错误, string = {}", deliveryDate, e);
-		}
-
-		try {
-			if (StringUtils.isNotNull(startDate)) {
-				date2 = new SimpleDateFormat("yyyy-MM-dd").parse(startDate);
-			}else {
-				date2 = null;
-			}
-		} catch (java.text.ParseException e) {
-		}
-		try {
-			if (StringUtils.isNotNull(importDate)) {
-				date3 = new SimpleDateFormat("yyyy-MM-dd").parse(importDate);
-			} else {
-				date3 = null;
-			}
-		} catch (java.text.ParseException e) {
-		}
-		Date startTime1 = date1;
-		Date endTime1 = null;
-		if(startTime1!=null){
-			//获取当前时间
-			endTime1 = DateUtils.dateAddNum(startTime1, 1,0,-1);
-		}
-
-		Date startTime2 = date2;
-		Date endTime2 = null;
-		if(startTime2!=null){
-			//获取当前时间
-			endTime2 = DateUtils.dateAddNum(startTime2, 1,0,-1);
-		}
-		Date startTime3 = date3;
-		Date endTime3 = null;
-		if (startTime3 != null) {
-			//获取当前时间
-			endTime3 = DateUtils.dateAddNum(startTime3, 1, 0, -1);
-		}
-
-		lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin),ShipmentHeaderHistory::getCreated, createdBegin)
-				.le(StringUtils.isNotEmpty(createdEnd), ShipmentHeaderHistory::getCreated, createdEnd)
-				.eq(ShipmentHeaderHistory::getWarehouseCode,ShiroUtils.getWarehouseCode())
-				.eq(ShipmentHeaderHistory::getDeleted,false)
+    @Autowired
+    private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
+    @Autowired
+    private ShipmentDetailHistoryService shipmentDetailHistoryService;
+
+
+    @RequiresPermissions("shipment:bill:view")
+    @GetMapping()
+    public String shipmentHeaderHistory() {
+        return prefix + "/shipmentHeaderHistory";
+    }
+
+    /**
+     * 查询出库单主列表
+     */
+    @RequiresPermissions("shipment:bill:list")
+    @Log(title = "出库-出库单历史", operating = "查看历史出库主单", action = BusinessType.GRANT)
+    @PostMapping("/list")
+    @ResponseBody
+    public TableDataInfo list(ShipmentHeaderHistory shipmentHeader, String createdBegin, String createdEnd, String deliveryDate, String startDate, String importDate) {
+        LambdaQueryWrapper<ShipmentHeaderHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        Date date1 = null;
+        Date date2 = null;
+        Date date3 = null;
+        try {
+            if (StringUtils.isNotNull(deliveryDate)) {
+                date1 = new SimpleDateFormat("yyyy-MM-dd").parse(deliveryDate);
+            } else {
+                date1 = null;
+            }
+        } catch (java.text.ParseException e) {
+            //LOGGER.error("时间转换错误, string = {}", deliveryDate, e);
+        }
+
+        try {
+            if (StringUtils.isNotNull(startDate)) {
+                date2 = new SimpleDateFormat("yyyy-MM-dd").parse(startDate);
+            } else {
+                date2 = null;
+            }
+        } catch (java.text.ParseException e) {
+        }
+        try {
+            if (StringUtils.isNotNull(importDate)) {
+                date3 = new SimpleDateFormat("yyyy-MM-dd").parse(importDate);
+            } else {
+                date3 = null;
+            }
+        } catch (java.text.ParseException e) {
+        }
+        Date startTime1 = date1;
+        Date endTime1 = null;
+        if (startTime1 != null) {
+            //获取当前时间
+            endTime1 = DateUtils.dateAddNum(startTime1, 1, 0, -1);
+        }
+
+        Date startTime2 = date2;
+        Date endTime2 = null;
+        if (startTime2 != null) {
+            //获取当前时间
+            endTime2 = DateUtils.dateAddNum(startTime2, 1, 0, -1);
+        }
+        Date startTime3 = date3;
+        Date endTime3 = null;
+        if (startTime3 != null) {
+            //获取当前时间
+            endTime3 = DateUtils.dateAddNum(startTime3, 1, 0, -1);
+        }
+
+        lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin), ShipmentHeaderHistory::getCreated, createdBegin)
+                .le(StringUtils.isNotEmpty(createdEnd), ShipmentHeaderHistory::getCreated, createdEnd)
+                .eq(ShipmentHeaderHistory::getWarehouseCode, ShiroUtils.getWarehouseCode())
+                .eq(ShipmentHeaderHistory::getDeleted, false)
 //				.eq(date != null,ShipmentHeader::getRequestedDeliveryDate,date)
-				.inSql(StringUtils.isNotEmpty(shipmentHeader.getNoticeNo()),ShipmentHeaderHistory::getId,"select DISTINCT shipmentId from shipment_detail_history where noticeNo like '%"+shipmentHeader.getNoticeNo()+"%'")
-				.in(StringUtils.isNotEmpty(shipmentHeader.getCompanyCode()),ShipmentHeaderHistory::getCompanyCode, shipmentHeader.getCompanyCode())
-				.in(StringUtils.isEmpty(shipmentHeader.getCompanyCode()), ShipmentHeaderHistory::getCompanyCode, ShiroUtils.getCompanyCodeList())
-				.inSql(StringUtils.isNotEmpty(shipmentHeader.getCode()),ShipmentHeaderHistory::getCode,"select DISTINCT shipmentCode from shipment_detail_history where recordCode = '"+shipmentHeader.getCode()+"' UNION SELECT DISTINCT shipmentCode FROM shipment_detail_history WHERE shipmentCode like  '%" + shipmentHeader.getCode() + "%'")
-				//.inSql(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getId, "select DISTINCT shipmentId from shipment_detail_history where preMergerWorkshop like '%" + shipmentHeader.getWorkshop() + "%'")
-				//.or()
-				.like(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getWorkshop, shipmentHeader.getWorkshop())
-				.like(StringUtils.isNotEmpty(shipmentHeader.getLastUpdatedBy()), ShipmentHeaderHistory::getLastUpdatedBy, shipmentHeader.getLastUpdatedBy())
-				.like(StringUtils.isNotEmpty(shipmentHeader.getShipmentNote()), ShipmentHeaderHistory::getShipmentNote, shipmentHeader.getShipmentNote())
-				.eq(StringUtils.isNotEmpty(shipmentHeader.getShipmentType()),ShipmentHeaderHistory::getShipmentType,shipmentHeader.getShipmentType())
-				.like(StringUtils.isNotEmpty(shipmentHeader.getProcessType()), ShipmentHeaderHistory::getProcessType, shipmentHeader.getProcessType())
-				.eq(StringUtils.isNotEmpty(shipmentHeader.getReferCode()), ShipmentHeaderHistory::getReferCode, shipmentHeader.getReferCode())
-				.like(StringUtils.isNotEmpty(shipmentHeader.getTransferWarehouseName()), ShipmentHeaderHistory::getTransferWarehouseName, shipmentHeader.getTransferWarehouseName())
-				.eq(StringUtils.isNotEmpty(shipmentHeader.getReferCodeType()), ShipmentHeaderHistory::getReferCodeType, shipmentHeader.getReferCodeType())
-				.like(StringUtils.isNotEmpty(shipmentHeader.getOrigin()), ShipmentHeaderHistory::getOrigin, shipmentHeader.getOrigin())
-				.between(StringUtils.isNotNull(startTime1), ShipmentHeaderHistory::getRequestedDeliveryDate, startTime1,endTime1)
-				.between(StringUtils.isNotNull(startTime2), ShipmentHeaderHistory::getRequestedStartDate, startTime2,endTime2)
-				.between(StringUtils.isNotNull(startTime3), ShipmentHeaderHistory::getDailyScheduleImportDate, startTime3, endTime3)
-				.eq(shipmentHeader.getFirstStatus()!=null, ShipmentHeaderHistory::getFirstStatus, shipmentHeader.getFirstStatus())
-				.eq(shipmentHeader.getLastStatus()!=null, ShipmentHeaderHistory::getLastStatus, shipmentHeader.getLastStatus())
-				.eq(StringUtils.isNotNull(shipmentHeader.getPushSuccessStatus()),ShipmentHeaderHistory::getPushSuccessStatus,shipmentHeader.getPushSuccessStatus())
-				.eq(ShipmentHeaderHistory::getDeleted,0)
-				//.orderByAsc(ShipmentHeaderHistory::getLastUpdated)
-				//.orderByAsc(ShipmentHeaderHistory::getLastStatus)
-				//.orderByAsc(ShipmentHeaderHistory::getRequestedStartDate)
-				//.orderByAsc(ShipmentHeaderHistory::getCreated);
-				.orderByDesc(ShipmentHeaderHistory::getLastUpdated);
-
-		if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
-			/**
-			 * 使用分页查询
-			 */
-			Page<ShipmentHeaderHistory> page = new Page<>(pageNum, pageSize);
-			IPage<ShipmentHeaderHistory> iPage = shipmentHeaderHistoryService.page(page, lambdaQueryWrapper);
-			return getMpDataTable(iPage.getRecords(),iPage.getTotal());
-		} else {
-			List<ShipmentHeaderHistory> list = shipmentHeaderHistoryService.list(lambdaQueryWrapper);
-			return getDataTable(list);
-		}
-	}
-
-
-	/**
-	 * 删除出库单主
-	 */
-	@RequiresPermissions("shipment:bill:remove")
-	@Log(title = "出库-历史出库单", operating="删除历史出库主单", action = BusinessType.DELETE)
-	@PostMapping( "/remove")
-	@ResponseBody
-	public AjaxResult remove(String ids)  {
-		if (StringUtils.isEmpty(ids)) {
+                .inSql(StringUtils.isNotEmpty(shipmentHeader.getNoticeNo()), ShipmentHeaderHistory::getId, "select DISTINCT shipmentId from shipment_detail_history where noticeNo like '%" + shipmentHeader.getNoticeNo() + "%'")
+                .in(StringUtils.isNotEmpty(shipmentHeader.getCompanyCode()), ShipmentHeaderHistory::getCompanyCode, shipmentHeader.getCompanyCode())
+                .in(StringUtils.isEmpty(shipmentHeader.getCompanyCode()), ShipmentHeaderHistory::getCompanyCode, ShiroUtils.getCompanyCodeList())
+                .inSql(StringUtils.isNotEmpty(shipmentHeader.getCode()), ShipmentHeaderHistory::getCode, "select DISTINCT shipmentCode from shipment_detail_history where recordCode = '" + shipmentHeader.getCode() + "' UNION SELECT DISTINCT shipmentCode FROM shipment_detail_history WHERE shipmentCode like  '%" + shipmentHeader.getCode() + "%'")
+                //.inSql(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getId, "select DISTINCT shipmentId from shipment_detail_history where preMergerWorkshop like '%" + shipmentHeader.getWorkshop() + "%'")
+                //.or()
+                .like(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getWorkshop, shipmentHeader.getWorkshop())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getLastUpdatedBy()), ShipmentHeaderHistory::getLastUpdatedBy, shipmentHeader.getLastUpdatedBy())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getShipmentNote()), ShipmentHeaderHistory::getShipmentNote, shipmentHeader.getShipmentNote())
+                .eq(StringUtils.isNotEmpty(shipmentHeader.getShipmentType()), ShipmentHeaderHistory::getShipmentType, shipmentHeader.getShipmentType())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getProcessType()), ShipmentHeaderHistory::getProcessType, shipmentHeader.getProcessType())
+                .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCode()), ShipmentHeaderHistory::getReferCode, shipmentHeader.getReferCode())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getTransferWarehouseName()), ShipmentHeaderHistory::getTransferWarehouseName, shipmentHeader.getTransferWarehouseName())
+                .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCodeType()), ShipmentHeaderHistory::getReferCodeType, shipmentHeader.getReferCodeType())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getOrigin()), ShipmentHeaderHistory::getOrigin, shipmentHeader.getOrigin())
+                .between(StringUtils.isNotNull(startTime1), ShipmentHeaderHistory::getRequestedDeliveryDate, startTime1, endTime1)
+                .between(StringUtils.isNotNull(startTime2), ShipmentHeaderHistory::getRequestedStartDate, startTime2, endTime2)
+                .between(StringUtils.isNotNull(startTime3), ShipmentHeaderHistory::getDailyScheduleImportDate, startTime3, endTime3)
+                .eq(shipmentHeader.getFirstStatus() != null, ShipmentHeaderHistory::getFirstStatus, shipmentHeader.getFirstStatus())
+                .eq(shipmentHeader.getLastStatus() != null, ShipmentHeaderHistory::getLastStatus, shipmentHeader.getLastStatus())
+                .eq(StringUtils.isNotNull(shipmentHeader.getPushSuccessStatus()), ShipmentHeaderHistory::getPushSuccessStatus, shipmentHeader.getPushSuccessStatus())
+                .like(StringUtils.isNotEmpty(shipmentHeader.getMaterialColor()), ShipmentHeaderHistory::getMaterialColor, shipmentHeader.getMaterialColor())
+                .eq(ShipmentHeaderHistory::getDeleted, 0)
+                //.orderByAsc(ShipmentHeaderHistory::getLastUpdated)
+                //.orderByAsc(ShipmentHeaderHistory::getLastStatus)
+                //.orderByAsc(ShipmentHeaderHistory::getRequestedStartDate)
+                //.orderByAsc(ShipmentHeaderHistory::getCreated);
+                .orderByDesc(ShipmentHeaderHistory::getLastUpdated);
+
+        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
+            /**
+             * 使用分页查询
+             */
+            Page<ShipmentHeaderHistory> page = new Page<>(pageNum, pageSize);
+            IPage<ShipmentHeaderHistory> iPage = shipmentHeaderHistoryService.page(page, lambdaQueryWrapper);
+            return getMpDataTable(iPage.getRecords(), iPage.getTotal());
+        } else {
+            List<ShipmentHeaderHistory> list = shipmentHeaderHistoryService.list(lambdaQueryWrapper);
+            return getDataTable(list);
+        }
+    }
+
+
+    /**
+     * 删除出库单主
+     */
+    @RequiresPermissions("shipment:bill:remove")
+    @Log(title = "出库-历史出库单", operating = "删除历史出库主单", action = BusinessType.DELETE)
+    @PostMapping("/remove")
+    @ResponseBody
+    public AjaxResult remove(String ids) {
+        if (StringUtils.isEmpty(ids)) {
             return AjaxResult.error("id不能为空");
         }
-		for (Integer id : Convert.toIntArray(ids))
-		{
-			boolean result=shipmentHeaderHistoryService.removeById(id);
-			LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper=Wrappers.lambdaQuery();
-			lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId,id)
-					.eq(ShipmentDetailHistory::getWarehouseCode,ShiroUtils.getWarehouseCode());
-			Boolean flag=true;
-			flag=shipmentDetailHistoryService.remove(lambdaQueryWrapper);
-			if(result==false){
-				return AjaxResult.error("删除失败");
-			}
-		}
-		return AjaxResult.success("删除成功!");
-	}
-
-	/**
-	 *  出库单报表打印
-	 * @return
-	 */
-	@RequiresPermissions("shipment:bill:report")
-	@Log(title = "出库-历史出库单", operating="打印历史出库单报表", action = BusinessType.OTHER)
-	@GetMapping("/report/{id}")
-	public String report(@PathVariable("id") Integer id, ModelMap mmap)
-	{
-		ShipmentHeaderHistory shipmentHeaderHistory = shipmentHeaderHistoryService.getById(id);
-		mmap.put("shipmentHeader", shipmentHeaderHistory);
-
-		LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
-		lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId,id)
-				.eq(ShipmentDetailHistory::getWarehouseCode,ShiroUtils.getWarehouseCode());
-		List<ShipmentDetailHistory> details = shipmentDetailHistoryService.list(lambdaQueryWrapper);
-		mmap.put("details", details);
-
-		return prefix + "/report";
-	}
-
-	@PostMapping("/getShipmentHeader")
-	@ResponseBody
-	public AjaxResult<ShipmentHeaderHistory> getShipmentHeader(int id){
-		return AjaxResult.success(shipmentHeaderHistoryService.getById(id));
-	}
+        for (Integer id : Convert.toIntArray(ids)) {
+            boolean result = shipmentHeaderHistoryService.removeById(id);
+            LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
+            lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId, id)
+                    .eq(ShipmentDetailHistory::getWarehouseCode, ShiroUtils.getWarehouseCode());
+            Boolean flag = true;
+            flag = shipmentDetailHistoryService.remove(lambdaQueryWrapper);
+            if (result == false) {
+                return AjaxResult.error("删除失败");
+            }
+        }
+        return AjaxResult.success("删除成功!");
+    }
+
+    /**
+     * 出库单报表打印
+     *
+     * @return
+     */
+    @RequiresPermissions("shipment:bill:report")
+    @Log(title = "出库-历史出库单", operating = "打印历史出库单报表", action = BusinessType.OTHER)
+    @GetMapping("/report/{id}")
+    public String report(@PathVariable("id") Integer id, ModelMap mmap) {
+        ShipmentHeaderHistory shipmentHeaderHistory = shipmentHeaderHistoryService.getById(id);
+        mmap.put("shipmentHeader", shipmentHeaderHistory);
+
+        LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId, id)
+                .eq(ShipmentDetailHistory::getWarehouseCode, ShiroUtils.getWarehouseCode());
+        List<ShipmentDetailHistory> details = shipmentDetailHistoryService.list(lambdaQueryWrapper);
+        mmap.put("details", details);
+
+        return prefix + "/report";
+    }
+
+    @PostMapping("/getShipmentHeader")
+    @ResponseBody
+    public AjaxResult<ShipmentHeaderHistory> getShipmentHeader(int id) {
+        return AjaxResult.success(shipmentHeaderHistoryService.getById(id));
+    }
 
 
 }
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/domain/ShipmentHeaderHistory.java b/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/domain/ShipmentHeaderHistory.java
index eb1d5d9..e1a0f1b 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/domain/ShipmentHeaderHistory.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/domain/ShipmentHeaderHistory.java
@@ -485,31 +485,32 @@ public class ShipmentHeaderHistory implements Serializable {
 
     /**
      * 回传错误次数
+     *
      * @return
      */
     @TableField(value = "pushErrorCount")
-    @ApiModelProperty(value="回传错误次数")
+    @ApiModelProperty(value = "回传错误次数")
     public Integer pushErrorCount;
 
     /**
      * 错误消息
      */
     @TableField(value = "ErrorMsg")
-    @ApiModelProperty(value="错误消息")
+    @ApiModelProperty(value = "错误消息")
     public String errorMsg;
 
     /**
      * 回传状态,0默认,1成功,2失败
      */
     @TableField(value = "pushSuccessStatus")
-    @ApiModelProperty(value="回传状态,0默认,1成功,2失败,3提前过账")
+    @ApiModelProperty(value = "回传状态,0默认,1成功,2失败,3提前过账")
     public Integer pushSuccessStatus;
 
     /**
      * 来源
      */
     @TableField(value = "origin")
-    @ApiModelProperty(value="来源")
+    @ApiModelProperty(value = "来源")
     public String origin;
 
     /**
@@ -530,6 +531,13 @@ public class ShipmentHeaderHistory implements Serializable {
      * 入库单的最后更新时间
      */
     @TableField(value = "lastUpdateTime")
-    @ApiModelProperty(value="入库单的最后更新时间")
+    @ApiModelProperty(value = "入库单的最后更新时间")
     private Date lastUpdateTime;
+
+    /**
+     * 物料颜色
+     */
+    @TableField(value = "materialColor")
+    @ApiModelProperty(value = "物料颜色")
+    public String materialColor;
 }
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java
index 67513a5..acebc1f 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java
@@ -558,6 +558,7 @@ public class ReceiptTaskService {
         //记录库存交易记录
         InventoryTransaction inventoryTransaction = new InventoryTransaction();
         ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
+        inventoryTransaction.setZoneCode(inventoryHeader.getZoneCode());
         inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
         inventoryTransaction.setWarehouseCode(taskDetail.getWarehouseCode());
         inventoryTransaction.setCompanyCode(taskDetail.getCompanyCode());
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
index 79a7313..e39d760 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
@@ -359,6 +359,7 @@ public class ShipmentTaskService {
                 inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
                 inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
                 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
+                inventoryTransaction.setZoneCode(inventoryHeader.getZoneCode());
                 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT);
                 inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
                 inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TransferTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TransferTaskService.java
index 6c86788..e18950d 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TransferTaskService.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TransferTaskService.java
@@ -159,7 +159,7 @@ public class TransferTaskService {
 //        locationService.updateStatus(desLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
         int updateCount = locationService.updateStatusNew(desLocationCode, warehouseCode,
                 QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY);
-        if(updateCount != 1) {
+        if (updateCount != 1) {
             throw new ServiceException("库位已经锁定,不允许再分到这个库位");
         }
         containerService.updateLocationCodeAndStatus(sourceLocation.getContainerCode(),
@@ -236,6 +236,7 @@ public class TransferTaskService {
             inventoryTransaction.setLocationCode(taskDetail.getToLocation());
             inventoryTransaction.setContainerCode(taskDetail.getContainerCode());
             inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_TRANSFERINTO);
+            inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
             inventoryTransaction.setMaterialCode(taskDetail.getMaterialCode());
             inventoryTransaction.setMaterialName(taskDetail.getMaterialName());
             inventoryTransaction.setMaterialSpec(taskDetail.getMaterialSpec());
@@ -259,6 +260,7 @@ public class TransferTaskService {
             inventoryTransactionService.save(inventoryTransaction);
             inventoryTransaction.setLocationCode(taskDetail.getFromLocation());
             inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_TRANSFEROUT);
+            inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
             inventoryTransactionService.save(inventoryTransaction);
         }
         if (taskDetailList.size() != 0) {
diff --git a/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html b/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
index 3f464a6..5e7c21e 100644
--- a/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
+++ b/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
@@ -10,6 +10,15 @@
                 <div class="select-list">
                     <ul>
                         <li>
+                            库区:
+                            <select id="zoneCode" name="zoneCode" th:with="list=${@zone.getCode()}">
+                                <option value="">所有</option>
+                                <option th:each="item : ${list}" th:text="${item['name']}"
+                                        th:value="${item['code']}"
+                                        th:attr=" code = ${item['code']}"></option>
+                            </select>
+                        </li>
+                        <li>
                             库位编码:<input type="text" name="locationCode"/>
                         </li>
                         <li>
@@ -102,6 +111,7 @@
     var prefix = ctx + "inventory/inventoryTransaction";
     var inventoryStatus = [[${@dict.getType('inventorySts')}]];
     var warehouses = [[${@WarehouseService.getCode()}]];
+    var zone = [[${@zone.getCode()}]];
     var inventoryTransactionType = [[${@dict.getType('inventoryTransactionType')}]];
     $(function () {
         var options = {
@@ -148,6 +158,21 @@
                     }
                 },
                 {
+                    field: 'zoneCode',
+                    title: '库区',
+                    align: 'center',
+                    formatter: function (value, row, index) {
+                        var actions = [];
+                        $.each(zone, function (index, dict) {
+                            if (dict.code == value) {
+                                actions.push("<span class='badge badge-info'>" + dict.name + "</span>");
+                                return false;
+                            }
+                        });
+                        return actions.join('');
+                    }
+                },
+                {
                     field: 'locationCode',
                     title: '库位编号'
                 },
diff --git a/src/main/resources/templates/receipt/receiving/receiving.html b/src/main/resources/templates/receipt/receiving/receiving.html
index a8f72b4..4c4ab0a 100644
--- a/src/main/resources/templates/receipt/receiving/receiving.html
+++ b/src/main/resources/templates/receipt/receiving/receiving.html
@@ -327,6 +327,19 @@
                 field: 'materialUnit',
                 title: '单位'
             },
+            {
+                field: 'isFlatWarehouse',
+                title: '仓库类型',
+                visible: true,
+                align: 'center',
+                formatter: function (value, row, index) {
+                    if (value == 1) {
+                        return '<span style="color:#51855c">平库</span>'
+                    } else {
+                        return '<span style="color:black">立库</span>'
+                    }
+                }
+            },
 
         ]
     });
diff --git a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
index 4e69790..6618c10 100644
--- a/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
+++ b/src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
@@ -104,6 +104,9 @@
                                     </select>
                                     </li>
                                     <li>
+                                        颜色信息:<input type="text" name="materialColor"/>
+                                    </li>
+                                    <li>
                                         备注:<input type="text" name="shipmentNote"/>
                                     </li>
                                     <li class="time">
@@ -499,19 +502,22 @@
                     field: 'requestedDeliveryDate',
                     title: '计划完成日期',
                 },
+                // {
+                //     field: 'workshop',
+                //     title: '生产车间',
+                //     formatter: function (value, row, index) {
+                //         var actions = [];
+                //         if (value == undefined || value == '')
+                //             value = " "
+                //         else
+                //             actions.push("<div class='textEllipsis'>" + value + "</div>")
+                //         return actions.join(" ")
+                //     }
+                // },
                 {
                     field: 'workshop',
                     title: '生产车间',
-                    formatter: function (value, row, index) {
-                        var actions = [];
-                        if (value == undefined || value == '')
-                            value = " "
-                        else
-                            actions.push("<div class='textEllipsis'>" + value + "</div>")
-                        return actions.join(" ")
-                    }
                 },
-
                 {
                     field: 'shipmentNote',
                     title: '备注',
@@ -591,6 +597,18 @@
                     visible: true
                 },
                 {
+                    field: 'materialColor',
+                    title: '颜色信息',
+                    formatter: function (value, row, index) {
+                        var actions = [];
+                        if (value == undefined || value == '')
+                            value = " "
+                        else
+                            actions.push('<pre style="max-height:50px; white-space: pre-wrap; width:500px">' + value + '</pre>')
+                        return actions.join(" ")
+                    }
+                },
+                {
                     field: 'errorMsg',
                     title: '错误信息',
                     formatter: function (value, row, index) {
diff --git a/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html b/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
index 4f256a7..7b3ad4d 100644
--- a/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
+++ b/src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
@@ -98,6 +98,9 @@
                                     </li>
                                     </li>
                                     <li>
+                                        颜色信息:<input type="text" name="materialColor"/>
+                                    </li>
+                                    <li>
                                         备注:<input type="text" name="shipmentNote"/>
                                     </li>
                                     <li class="time">
@@ -454,17 +457,21 @@
                     field: 'requestedDeliveryDate',
                     title: '计划完成日期',
                 },
+                // {
+                //     field: 'workshop',
+                //     title: '生产车间',
+                //     formatter: function(value, row, index) {
+                //         var actions = [];
+                //         if(value == undefined || value == '')
+                //             value = " "
+                //         else
+                //             actions.push("<div class='textEllipsis'>"+value+"</div>")
+                //         return actions.join(" ")
+                //     }
+                // },
                 {
                     field: 'workshop',
                     title: '生产车间',
-                    formatter: function(value, row, index) {
-                        var actions = [];
-                        if(value == undefined || value == '')
-                            value = " "
-                        else
-                            actions.push("<div class='textEllipsis'>"+value+"</div>")
-                        return actions.join(" ")
-                    }
                 },
                 {
                     field: 'shipmentNote',
@@ -553,6 +560,18 @@
                     visible: true
                 },
                 {
+                    field: 'materialColor',
+                    title: '颜色信息',
+                    formatter: function (value, row, index) {
+                        var actions = [];
+                        if (value == undefined || value == '')
+                            value = " "
+                        else
+                            actions.push('<pre style="max-height:50px; white-space: pre-wrap; width:500px">' + value + '</pre>')
+                        return actions.join(" ")
+                    }
+                },
+                {
                     field: 'errorMsg',
                     title: '错误信息',
                     formatter: function (value, row, index) {
--
libgit2 0.22.2