diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java
index 90f6936..8600e90 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java
@@ -3,5 +3,10 @@ package com.huaheng.pc.inventory.inventoryDetail.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 
+import java.util.List;
+
 public interface InventoryDetailMapper extends BaseMapper<InventoryDetail> {
+
+    List<InventoryDetail> selectBysql(String sql);
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java
index e241784..96af1bf 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java
@@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 
+import java.util.List;
+
 public interface InventoryDetailService extends IService<InventoryDetail> {
 
 
     AjaxResult detailcreateCheckOutTask (Integer id);
 
+    List<InventoryDetail> selectBysql(String sql);
+
 }
 
 
diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java
index 99d286e..457d060 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java
@@ -102,6 +102,10 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe
         return AjaxResult.success("库存明细出库查看任务下发成功!");
     }
 
+    @Override
+    public List<InventoryDetail> selectBysql(String sql) {
+        return inventoryDetailMapper.selectBysql(sql);
+    }
 
 
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java
index c2166a7..6357164 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java
@@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaheng.common.support.Convert;
 import com.huaheng.common.utils.StringUtils;
 import com.huaheng.framework.aspectj.lang.annotation.Log;
 import com.huaheng.framework.aspectj.lang.constant.BusinessType;
 import com.huaheng.framework.web.controller.BaseController;
+import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.framework.web.page.PageDomain;
 import com.huaheng.framework.web.page.TableDataInfo;
 import com.huaheng.framework.web.page.TableSupport;
@@ -23,6 +25,7 @@ import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 
 @Controller
@@ -67,4 +70,16 @@ public class ReceiptContainerDetailController extends BaseController {
             return getDataTable(list);
         }
     }
+
+    @RequiresPermissions("receipt:receiptContainerDetail:remove")
+    @Log(title = "入库-入库详情列表", operating = "入库详情列表", action = BusinessType.GRANT)
+    @PostMapping("remove")
+    public AjaxResult remove(String ids) {
+        if (StringUtils.isEmpty(ids)){
+            return AjaxResult.error("id不能为空");
+        }
+
+        List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
+        return toAjax(receiptContainerDetailService.detailRemove(idList));
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java
index 8b1d0cb..3654762 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java
@@ -3,6 +3,7 @@ package com.huaheng.pc.receipt.receiptContainerDetail.service;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 
 import java.util.List;
 import java.util.Map;
@@ -10,4 +11,6 @@ import java.util.Map;
 public interface ReceiptContainerDetailService extends IService<ReceiptContainerDetail>{
 
     AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode);
+
+    Boolean detailRemove(List<Integer> idList);
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java
index 00f8193..d4b73e8 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java
@@ -3,17 +3,32 @@ package com.huaheng.pc.receipt.receiptContainerDetail.service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
 import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper;
+import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
+import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
+import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
+import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 @Service
 public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContainerDetailMapper, ReceiptContainerDetail> implements ReceiptContainerDetailService{
 
+    @Resource
+    private ReceiptDetailService receiptDetailService;
+    @Resource
+    private ReceiptHeaderService receiptHeaderService;
+    /**
+     * 根据入库单编码查询入库组盘明细
+     * @param receiptCode
+     * @return
+     */
     @Override
     public AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode) {
         LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
@@ -24,5 +39,44 @@ public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContai
         return AjaxResult.success(detail);
     }
 
+    /**
+     * 撤销入库组盘明细
+     * @param idList
+     * @return
+     */
+    @Override
+    public Boolean detailRemove(List<Integer> idList) {
+        for (Integer id : idList){
+            ReceiptContainerDetail receiptContainerDetail = this.getById(id);
+            //如果已生成任务不允许撤销
+            if (receiptContainerDetail.getStatus() < 10){
+                //回滚入库单明细收货数量
+                ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
+                receiptDetail.setOpenQty(receiptDetail.getOpenQty() - receiptContainerDetail.getQty());
+                if (!receiptDetailService.updateById(receiptDetail)){throw new SecurityException("回滚入库单明细失败");}
+
+                //查询入库头表
+                LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
+                containerDetailLambda = Wrappers.lambdaQuery();
+                containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
+                List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda);
+                //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
+                if (containerDetailList == null){
+                    ReceiptHeader receiptHeader = new ReceiptHeader();
+                    receiptHeader.setId(receiptContainerDetail.getReceiptId());
+                    receiptHeader.setFirstStatus(200);
+                    receiptHeader.setLastStatus(200);
+                    receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
+
+                    if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); }
+                }
+
+            } else {
+                throw new SecurityException("已生成任务,不允许取消");
+            }
+        }
+        return true;
+    }
+
 
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
index e49b48c..f7dc832 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
@@ -102,7 +102,7 @@ public class ReceiptContainerHeaderController extends BaseController {
     }
 
     /**
-     * 删除入库单
+     * 删除入库组盘
      */
     @ApiOperation(value="取消", notes="取消入库组盘", httpMethod = "POST")
     @RequiresPermissions("receipt:receiptContainer:remove")
@@ -114,7 +114,7 @@ public class ReceiptContainerHeaderController extends BaseController {
             return AjaxResult.error("id为空");
         }
         List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
-        return toAjax(receiptContainerHeaderService.removeByIds(idList));
+        return toAjax(receiptContainerHeaderService.cancelByIds(idList));
     }
     /**
      * 生成任务
@@ -134,7 +134,6 @@ public class ReceiptContainerHeaderController extends BaseController {
         lambda.select(ReceiptContainerHeader::getId)
                 .lt(ReceiptContainerHeader::getStatus, 10)
                 .le(ReceiptContainerHeader::getId, maxId);
-        List<Object> ContainerIdList = receiptContainerHeaderService.listObjs(lambda);
         return taskHeaderService.createReceiptTask(idList);
     }
 
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java
index c057a18..5f71188 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java
@@ -3,6 +3,9 @@ package com.huaheng.pc.receipt.receiptContainerHeader.service;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
 public interface ReceiptContainerHeaderService extends IService<ReceiptContainerHeader>{
 
     /**
@@ -18,4 +21,6 @@ public interface ReceiptContainerHeaderService extends IService<ReceiptContainer
      */
     AjaxResult saveCountain(String receiptCode, String containerCode, Integer receiptDetailId, Integer taskType,
                             String locationCode, Integer qty, String locatingRule);
+
+    Boolean cancelByIds(List<Integer> id);
 }
diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java
index 607d624..768cc3b 100644
--- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java
@@ -114,16 +114,66 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
         receiptDetail = receiptDetailService.getById(receiptDetailId);
 
         receiptContainerDetailAdd(receiptContainerHeaders.get(0).getId(), receiptDetail, qty, containerCode);
-        //更新入库详情状态和入库单状态
-        ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail);
-        if (!receiptDetailService.updateById(receiptDetail1)){
-            throw new ServiceException("更新入库详情下一流程失败");
+        //如果单据数量等于已收数量,更新入库详情状态和入库单状态
+        if (receiptDetail.getTotalQty() == receiptDetail.getOpenQty()){
+            ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail);
+            if (!receiptDetailService.updateById(receiptDetail1)){
+                throw new ServiceException("更新入库详情下一流程失败");
+            }
         }
         receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
         return AjaxResult.success("success");
     }
 
     /**
+     * 批量撤销入库组盘
+     * @param ids
+     * @return
+     */
+    @Override
+    public Boolean cancelByIds(List<Integer> ids) {
+        for (Integer id : ids) {
+            //如果已生成任务则不允许取消组盘
+            if (this.getById(id).getStatus() < 10){
+                //根据组盘头表id查询组盘明细表
+                LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
+                containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id);
+                List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(containerDetailLambda);
+
+                //查询入库单明细,减去已收数量,更新单据
+                for (ReceiptContainerDetail receiptContainerDetail: receiptContainerDetails){
+                    ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
+                    receiptDetail.setOpenQty(receiptDetail.getOpenQty()-receiptContainerDetail.getQty());
+                    if (!receiptDetailService.updateById(receiptDetail)){throw new ServiceException("回滚入库明细失败"); }
+
+                    containerDetailLambda = Wrappers.lambdaQuery();
+                    containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
+                    List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(containerDetailLambda);
+                    //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
+                    if (containerDetailList == null){
+                        ReceiptHeader receiptHeader = new ReceiptHeader();
+                        receiptHeader.setId(receiptContainerDetail.getReceiptId());
+                        receiptHeader.setFirstStatus(200);
+                        receiptHeader.setLastStatus(200);
+                        receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
+
+                        if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); }
+                    }
+
+                    if (!receiptContainerDetailService.removeById(receiptContainerDetail.getId())){
+                        throw new ServiceException("删除入库组盘明细表失败,id是"+receiptContainerDetail.getId());
+                    }
+                }
+                //删除入库组盘头表
+                this.removeById(id);
+            } else {
+                throw new ServiceException("已生成任务不允许取消");
+            }
+        }
+        return true;
+    }
+
+    /**
      * 检查容器编码合法性
      * @param containerCode
      * @return
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
index 886abeb..6864033 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
@@ -67,6 +67,7 @@ public class ShipmentDetailController extends BaseController
 				.eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
 				.in(ShipmentDetail::getCompanyCode,ShiroUtils.getCompanyCodeList())
 				.eq(StringUtils.isNotEmpty(shipmentDetail.getShipmentCode()),ShipmentDetail::getShipmentCode,shipmentDetail.getShipmentCode())
+				.eq(ShipmentDetail::getShipmentId,shipmentDetail.getShipmentId())
 				.orderByAsc(ShipmentDetail::getId);
 
 		if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
index 26a00d2..67d1df9 100644
--- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
@@ -8,11 +8,14 @@ import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.controller.BaseController;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.framework.web.page.TableDataInfo;
+import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
+import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
 import com.huaheng.pc.config.configValue.domain.ConfigValue;
 import com.huaheng.pc.config.configValue.service.ConfigValueService;
 import com.huaheng.pc.config.material.domain.Material;
 import com.huaheng.pc.config.material.service.MaterialServiceImpl;
 import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
+import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
 import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
@@ -30,6 +33,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Controller
@@ -54,6 +58,10 @@ public class ShippingCombinationController extends BaseController {
     InventoryDetailService inventoryDetailService;
     @Autowired
     ConfigValueService configValueService;
+    @Autowired
+    FilterConfigDetailService filterConfigDetailService;
+    @Autowired
+    ShipmentPreferenceService shipmentPreferenceService;
 
 
     /**
@@ -89,38 +97,6 @@ public class ShippingCombinationController extends BaseController {
     }
 
 
-    /**
-     * 获取能出库的库存列表
-     * @param code,id
-     * @return
-     */
-    @PostMapping("/getInventory")
-    @ResponseBody
-    public TableDataInfo getInventory(String code, Integer id){
-        //找到主单的账套
-        LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(ShipmentHeader::getCode,code)
-                .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode());
-        ShipmentHeader shipmentHeader=shipmentHeaderService.getOne(lambdaQueryWrapper);
-        if(shipmentHeader==null){
-            throw new ServiceException("找不到主单");
-        }
-        //找到子单物料
-        ShipmentDetail shipmentDetail=new ShipmentDetail();
-        shipmentDetail=shipmentDetailService.getById(id);
-        if(shipmentDetail==null){
-            throw new ServiceException("找不到子单");
-        }
-        LambdaQueryWrapper<InventoryDetail> lam = Wrappers.lambdaQuery();
-        lam.eq(InventoryDetail::getWarehouseCode,shipmentHeader.getWarehouseCode())
-                .eq(InventoryDetail::getCompanyCode,shipmentHeader.getCompanyCode())
-                .eq(InventoryDetail::getMaterialCode,shipmentDetail.getMaterialCode());
-
-        List<InventoryDetail> list= inventoryDetailService.list(lam);
-        return getDataTable(list);
-    }
-
-
 //    /**
 //     * 获取能出库的库存列表
 //     * @param code,id
@@ -143,42 +119,10 @@ public class ShippingCombinationController extends BaseController {
 //        if(shipmentDetail==null){
 //            throw new ServiceException("找不到子单");
 //        }
-//
-//        //出库首选项
-//        LambdaQueryWrapper<ShipmentPreference> shipmentPreferenceLambdaQueryWrapper=Wrappers.lambdaQuery();
-//
-//        //出库规则
-//        //出库子单的分配规则
-//        if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){
-//
-//
-//        }
-//
-//        //物料的分+配规则
-//        LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery();
-//        materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode())
-//                .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode());
-//        Material material=materialService.getOne(materialLambdaQueryWrapper);
-//        if(StringUtils.isNotEmpty(material.getAllocationRule())){
-//
-//
-//        }
-//
-//        //仓库的分配规则
-//        LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
-//        configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
-//                .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode());
-//        ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper);
-//        //查找出库首选项
-//
-//        configValue.getIdentifier();
-//
-//
-//
 //        LambdaQueryWrapper<InventoryDetail> lam = Wrappers.lambdaQuery();
 //        lam.eq(InventoryDetail::getWarehouseCode,shipmentHeader.getWarehouseCode())
 //                .eq(InventoryDetail::getCompanyCode,shipmentHeader.getCompanyCode())
-//                .eq(InventoryDetail::getMaterialName,shipmentDetail.getMaterialCode());
+//                .eq(InventoryDetail::getMaterialCode,shipmentDetail.getMaterialCode());
 //
 //        List<InventoryDetail> list= inventoryDetailService.list(lam);
 //        return getDataTable(list);
@@ -186,6 +130,99 @@ public class ShippingCombinationController extends BaseController {
 
 
     /**
+     * 获取能出库的库存列表
+     * @param code,id
+     * @return
+     */
+    @PostMapping("/getInventory")
+    @ResponseBody
+    public TableDataInfo getInventory(String code, Integer id){
+        //找到主单
+        LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(ShipmentHeader::getCode,code)
+                .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode());
+        ShipmentHeader shipmentHeader=shipmentHeaderService.getOne(lambdaQueryWrapper);
+        if(shipmentHeader==null){
+            throw new ServiceException("找不到主单");
+        }
+        //找到子单
+        ShipmentDetail shipmentDetail=new ShipmentDetail();
+        shipmentDetail=shipmentDetailService.getById(id);
+        if(shipmentDetail==null){
+            throw new ServiceException("找不到子单");
+        }
+
+        //查找分配规则
+        List<InventoryDetail> list=new ArrayList<>();
+        FilterConfigDetail filterConfigDetail=new FilterConfigDetail();
+        LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambdaQueryWrapper=Wrappers.lambdaQuery();
+        filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode,shipmentDetail.getWarehouseCode());
+
+        //出库子单的分配规则有时,优先出库子单的分配规则
+        if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){
+            filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentDetail.getAllocationRule());
+            filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
+            if(filterConfigDetail==null){
+                throw new ServiceException("出库子单出库规则配置不存在");
+            }
+
+            //根据sql查库存
+            try {
+                list = inventoryDetailService.selectBysql(filterConfigDetail.getStatement());
+            }catch (Exception e){
+                throw new ServiceException("sql错误");
+            }
+            return getDataTable(list);
+        }
+
+        //出库子单的分配规则没有时,优先物料的分配规则
+        LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery();
+        materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode())
+                .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode());
+        Material material=materialService.getOne(materialLambdaQueryWrapper);
+        if(StringUtils.isNotEmpty(material.getAllocationRule())){
+            filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,material.getAllocationRule());
+            filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
+            if(filterConfigDetail==null){
+                throw new ServiceException("物料出库规则配置不存在");
+            }
+
+            //根据sql查库存
+            list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement());
+            return getDataTable(list);
+        }
+
+        //都没有时,默认仓库的分配规则
+        LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
+        configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
+                .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode());
+        ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper);
+        if(configValue==null){
+            throw new ServiceException("仓库的出库配置不存在");
+        }
+
+        //查找出库首选项
+        LambdaQueryWrapper<ShipmentPreference> slam=Wrappers.lambdaQuery();
+        slam.eq(ShipmentPreference::getCode,configValue.getIdentifier())
+                .eq(ShipmentPreference::getWarehouseCode,configValue.getWarehouseCode());
+        ShipmentPreference shipmentPreference=shipmentPreferenceService.getOne(slam);
+        if(shipmentPreference==null){
+            throw new ServiceException("仓库的出库配置中出库首选项不存在");
+        }
+        //查找分配规则
+        filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentPreference.getAllocationRule());
+        filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
+        if(filterConfigDetail==null){
+            throw new ServiceException("出库首选项中出库规则配置不存在");
+        }
+
+        //根据sql查库存
+        list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement());
+        return getDataTable(list);
+    }
+
+
+    /**
      * 保存组盘
      * @param shipmentCombinationModel
      * @return
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
index 1f41c21..af356d7 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -906,6 +906,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                             throw new ServiceException("生成任务明细失败");
                         }
 
+                        //更新入库组盘明细状态
+                        item.setStatus(10);
+                        receiptContainerDetailService.updateById(item);
+
                         ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId());
                         if ("300".equals(receiptDetail.getProcessStamp())){
                             ReceiptDetail detail = receiptDetailService.queryflow(receiptDetail);
diff --git a/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml b/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml
index e936b0c..9ebf802 100644
--- a/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml
+++ b/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml
@@ -54,4 +54,9 @@
     lastCycleCountDate, created, createdBy, lastUpdated, lastUpdatedBy, userDef1, userDef2, 
     userDef3, processStamp, receiptCode, receiptDetailId
   </sql>
+
+
+  <select id="selectBysql"  parameterType="String" resultType="com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail">
+        ${value}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/shipment/shipmentDetail/add.html b/src/main/resources/templates/shipment/shipmentDetail/add.html
index fc366c2..5f106fe 100644
--- a/src/main/resources/templates/shipment/shipmentDetail/add.html
+++ b/src/main/resources/templates/shipment/shipmentDetail/add.html
@@ -34,9 +34,9 @@
 			<div class="form-group">
 				<label class="col-sm-3 control-label">分配规则:</label>
 				<div class="col-sm-8">
-					<select id="allocationRule" class="form-control" th:with="allocationRule=${@filterConfigDetail.list()}">
+					<select id="allocationRule" class="form-control" th:with="allocationRule=${@FilterConfigDetailService.list()}">
 						<option value=" " checked></option>
-						<option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['code']}" th:value="${allocationRules['description']}"></option>
+						<option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['description']}" th:value="${allocationRules['code']}"></option>
 					</select>
 				</div>
 			</div>
@@ -102,12 +102,6 @@
 					<input id="shipQty" name="shipQty" class="form-control" type="text" onkeyup=" this.value=this.value.replace(/^\s+|\s+$/g,'')">
 				</div>
 			</div>
-			<div class="form-group">	
-				<label class="col-sm-3 control-label">物料单价:</label>
-				<div class="col-sm-8">
-					<input id="price" name="price" class="form-control" type="text">
-				</div>
-			</div>
 			<div class="form-group">
 				<div class="form-control-static col-sm-offset-9">
 					<button type="submit" class="btn btn-primary">提交</button>
@@ -160,6 +154,7 @@
                         "batch": $("input[name='batch']").val(),
                         "lot": $("input[name='lot']").val(),
                         "projectNo": $("input[name='project']").val(),
+						"allocationRule": $("#allocationRule option:selected").val(),
                         "manufactureDate": $("input[name='manufactureDate']").val(),
                         "expirationDate": $("input[name='expirationDate']").val(),
                         "agingDate": $("input[name='agingDate']").val(),
diff --git a/src/main/resources/templates/shipment/shipmentDetail/edit.html b/src/main/resources/templates/shipment/shipmentDetail/edit.html
index bbaa021..12ae051 100644
--- a/src/main/resources/templates/shipment/shipmentDetail/edit.html
+++ b/src/main/resources/templates/shipment/shipmentDetail/edit.html
@@ -19,12 +19,6 @@
                 </div>
             </div>
             <div class="form-group">
-                <label class="col-sm-3 control-label">上游系统行号:</label>
-                <div class="col-sm-8">
-                    <input id="sourceLine" name="sourceLine" th:field="*{sourceLine}" class="form-control" type="text" readonly="readonly">
-                </div>
-            </div>
-            <div class="form-group">
                 <label class="col-sm-3 control-label">存货编码:</label>
                 <div class="col-sm-8">
                     <input id="materialCode" name="materialCode" th:field="*{materialCode}" class="form-control" type="text" readonly="readonly">
@@ -51,7 +45,16 @@
             <div class="form-group">	
                 <label class="col-sm-3 control-label">项目号:</label>
                 <div class="col-sm-8">
-                    <input id="project" name="project" th:field="*{project}" class="form-control" type="text">
+                    <input id="project" name="projectNo" th:field="*{projectNo}" class="form-control" type="text">
+                </div>
+            </div>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">分配规则:</label>
+                <div class="col-sm-8">
+                    <select id="allocationRule" class="form-control" th:with="allocationRule=${@FilterConfigDetailService.list()}" th:field="*{allocationRule}">
+                        <option value=" " checked></option>
+                        <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['description']}" th:value="${allocationRules['code']}"></option>
+                    </select>
                 </div>
             </div>
             <div class="form-group">	
@@ -75,27 +78,21 @@
             <div class="form-group">
                 <label class="col-sm-3 control-label">库存状态:</label>
                 <div class="col-sm-8">
-                    <select id="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}" th:field="*{inventoryStatus}">
+                    <select id="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}" th:field="*{inventorySts}">
                         <option th:each="dict : ${inventoryStatus}" th:text="${dict['dictLabel']}" th:value="${dict['dictValue']}"></option>
                     </select>
                 </div>
             </div>
-            <div class="form-group">	
+            <div class="form-group">
                 <label class="col-sm-3 control-label">发货数量:</label>
                 <div class="col-sm-8">
-                    <input id="qty" name="qty" th:field="*{qty}" class="form-control" type="text">
+                    <input id="qty" name="shipQty" th:field="*{shipQty}" class="form-control" type="text">
                 </div>
             </div>
             <div class="form-group">	
                 <label class="col-sm-3 control-label">已出数量:</label>
                 <div class="col-sm-8">
-                    <input id="qtyCompleted" name="qtyCompleted" th:field="*{qtyCompleted}" class="form-control" type="text" readonly="readonly">
-                </div>
-            </div>
-            <div class="form-group">	
-                <label class="col-sm-3 control-label">物料单价:</label>
-                <div class="col-sm-8">
-                    <input id="price" name="price" th:field="*{price}" class="form-control" type="number">
+                    <input id="requestQty" name="requestQty" th:field="*{requestQty}" class="form-control" type="text" readonly="readonly">
                 </div>
             </div>
             <div class="form-group">	
@@ -187,18 +184,15 @@
                         "id":$("#id").val(),
                         "shipmentId": $("input[name='shipmentId']").val(),
                         "shipmentCode": $("input[name='shipmentCode']").val(),
-                        "sourceLine": $("input[name='sourceLine']").val(),
-                        "materialId": $("input[name='materialId']").val(),
                         "materialCode": $("input[name='materialCode']").val(),
                         "batch": $("input[name='batch']").val(),
                         "lot": $("input[name='lot']").val(),
-                        "project": $("input[name='project']").val(),
+                        "projectNo": $("input[name='projectNo']").val(),
+                        "allocationRule": $("#allocationRule option:selected").val(),
                         "manufactureDate": $("input[name='manufactureDate']").val(),
                         "expirationDate": $("input[name='expirationDate']").val(),
-                        "agingDate": $("input[name='agingDate']").val(),
-                        "inventoryStatus": $("#inventoryStatus option:selected").val(),
-                        "qty": $("input[name='qty']").val(),
-                        "price": $("input[name='price']").val(),
+                        "inventorySts": $("#inventoryStatus option:selected").val(),
+                        "shipQty": $("input[name='shipQty']").val(),
                         "userDef1": $("input[name='userDef1']").val(),
                         "userDef2": $("input[name='userDef2']").val(),
                         "userDef3": $("input[name='userDef3']").val(),