Commit 92d2f0293128cbc3fcec6b7fc28de874e23bcc8f

Authored by xqs
2 parents c13d4a97 08a255e4

Merge remote-tracking branch 'origin/develop' into develop

src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java
... ... @@ -3,5 +3,10 @@ package com.huaheng.pc.inventory.inventoryDetail.mapper;
3 3 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 4 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
5 5  
  6 +import java.util.List;
  7 +
6 8 public interface InventoryDetailMapper extends BaseMapper<InventoryDetail> {
  9 +
  10 + List<InventoryDetail> selectBysql(String sql);
  11 +
7 12 }
8 13 \ No newline at end of file
... ...
src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java
... ... @@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
4 4 import com.huaheng.framework.web.domain.AjaxResult;
5 5 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
6 6  
  7 +import java.util.List;
  8 +
7 9 public interface InventoryDetailService extends IService<InventoryDetail> {
8 10  
9 11  
10 12 AjaxResult detailcreateCheckOutTask (Integer id);
11 13  
  14 + List<InventoryDetail> selectBysql(String sql);
  15 +
12 16 }
13 17  
14 18  
... ...
src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java
... ... @@ -102,6 +102,10 @@ public class InventoryDetailServiceImpl extends ServiceImpl&lt;InventoryDetailMappe
102 102 return AjaxResult.success("库存明细出库查看任务下发成功!");
103 103 }
104 104  
  105 + @Override
  106 + public List<InventoryDetail> selectBysql(String sql) {
  107 + return inventoryDetailMapper.selectBysql(sql);
  108 + }
105 109  
106 110  
107 111 }
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java
... ... @@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
6 6 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7 +import com.huaheng.common.support.Convert;
7 8 import com.huaheng.common.utils.StringUtils;
8 9 import com.huaheng.framework.aspectj.lang.annotation.Log;
9 10 import com.huaheng.framework.aspectj.lang.constant.BusinessType;
10 11 import com.huaheng.framework.web.controller.BaseController;
  12 +import com.huaheng.framework.web.domain.AjaxResult;
11 13 import com.huaheng.framework.web.page.PageDomain;
12 14 import com.huaheng.framework.web.page.TableDataInfo;
13 15 import com.huaheng.framework.web.page.TableSupport;
... ... @@ -23,6 +25,7 @@ import org.springframework.ui.ModelMap;
23 25 import org.springframework.web.bind.annotation.*;
24 26  
25 27 import javax.annotation.Resource;
  28 +import java.util.Arrays;
26 29 import java.util.List;
27 30  
28 31 @Controller
... ... @@ -67,4 +70,16 @@ public class ReceiptContainerDetailController extends BaseController {
67 70 return getDataTable(list);
68 71 }
69 72 }
  73 +
  74 + @RequiresPermissions("receipt:receiptContainerDetail:remove")
  75 + @Log(title = "入库-入库详情列表", operating = "入库详情列表", action = BusinessType.GRANT)
  76 + @PostMapping("remove")
  77 + public AjaxResult remove(String ids) {
  78 + if (StringUtils.isEmpty(ids)){
  79 + return AjaxResult.error("id不能为空");
  80 + }
  81 +
  82 + List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
  83 + return toAjax(receiptContainerDetailService.detailRemove(idList));
  84 + }
70 85 }
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java
... ... @@ -3,6 +3,7 @@ package com.huaheng.pc.receipt.receiptContainerDetail.service;
3 3 import com.huaheng.framework.web.domain.AjaxResult;
4 4 import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
5 5 import com.baomidou.mybatisplus.extension.service.IService;
  6 +import com.sun.org.apache.xpath.internal.operations.Bool;
6 7  
7 8 import java.util.List;
8 9 import java.util.Map;
... ... @@ -10,4 +11,6 @@ import java.util.Map;
10 11 public interface ReceiptContainerDetailService extends IService<ReceiptContainerDetail>{
11 12  
12 13 AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode);
  14 +
  15 + Boolean detailRemove(List<Integer> idList);
13 16 }
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java
... ... @@ -3,17 +3,32 @@ package com.huaheng.pc.receipt.receiptContainerDetail.service;
3 3 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 4 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5 5 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6 +import com.huaheng.common.exception.service.ServiceException;
6 7 import com.huaheng.common.utils.security.ShiroUtils;
7 8 import com.huaheng.framework.web.domain.AjaxResult;
8 9 import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
9 10 import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper;
  11 +import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
  12 +import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
  13 +import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
  14 +import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
10 15 import org.springframework.stereotype.Service;
11 16  
  17 +import javax.annotation.Resource;
12 18 import java.util.List;
13 19 import java.util.Map;
14 20 @Service
15 21 public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContainerDetailMapper, ReceiptContainerDetail> implements ReceiptContainerDetailService{
16 22  
  23 + @Resource
  24 + private ReceiptDetailService receiptDetailService;
  25 + @Resource
  26 + private ReceiptHeaderService receiptHeaderService;
  27 + /**
  28 + * 根据入库单编码查询入库组盘明细
  29 + * @param receiptCode
  30 + * @return
  31 + */
17 32 @Override
18 33 public AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode) {
19 34 LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
... ... @@ -24,5 +39,44 @@ public class ReceiptContainerDetailServiceImpl extends ServiceImpl&lt;ReceiptContai
24 39 return AjaxResult.success(detail);
25 40 }
26 41  
  42 + /**
  43 + * 撤销入库组盘明细
  44 + * @param idList
  45 + * @return
  46 + */
  47 + @Override
  48 + public Boolean detailRemove(List<Integer> idList) {
  49 + for (Integer id : idList){
  50 + ReceiptContainerDetail receiptContainerDetail = this.getById(id);
  51 + //如果已生成任务不允许撤销
  52 + if (receiptContainerDetail.getStatus() < 10){
  53 + //回滚入库单明细收货数量
  54 + ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
  55 + receiptDetail.setOpenQty(receiptDetail.getOpenQty() - receiptContainerDetail.getQty());
  56 + if (!receiptDetailService.updateById(receiptDetail)){throw new SecurityException("回滚入库单明细失败");}
  57 +
  58 + //查询入库头表
  59 + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
  60 + containerDetailLambda = Wrappers.lambdaQuery();
  61 + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
  62 + List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda);
  63 + //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
  64 + if (containerDetailList == null){
  65 + ReceiptHeader receiptHeader = new ReceiptHeader();
  66 + receiptHeader.setId(receiptContainerDetail.getReceiptId());
  67 + receiptHeader.setFirstStatus(200);
  68 + receiptHeader.setLastStatus(200);
  69 + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
  70 +
  71 + if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); }
  72 + }
  73 +
  74 + } else {
  75 + throw new SecurityException("已生成任务,不允许取消");
  76 + }
  77 + }
  78 + return true;
  79 + }
  80 +
27 81  
28 82 }
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
... ... @@ -102,7 +102,7 @@ public class ReceiptContainerHeaderController extends BaseController {
102 102 }
103 103  
104 104 /**
105   - * 删除入库
  105 + * 删除入库组盘
106 106 */
107 107 @ApiOperation(value="取消", notes="取消入库组盘", httpMethod = "POST")
108 108 @RequiresPermissions("receipt:receiptContainer:remove")
... ... @@ -114,7 +114,7 @@ public class ReceiptContainerHeaderController extends BaseController {
114 114 return AjaxResult.error("id为空");
115 115 }
116 116 List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
117   - return toAjax(receiptContainerHeaderService.removeByIds(idList));
  117 + return toAjax(receiptContainerHeaderService.cancelByIds(idList));
118 118 }
119 119 /**
120 120 * 生成任务
... ... @@ -134,7 +134,6 @@ public class ReceiptContainerHeaderController extends BaseController {
134 134 lambda.select(ReceiptContainerHeader::getId)
135 135 .lt(ReceiptContainerHeader::getStatus, 10)
136 136 .le(ReceiptContainerHeader::getId, maxId);
137   - List<Object> ContainerIdList = receiptContainerHeaderService.listObjs(lambda);
138 137 return taskHeaderService.createReceiptTask(idList);
139 138 }
140 139  
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java
... ... @@ -3,6 +3,9 @@ package com.huaheng.pc.receipt.receiptContainerHeader.service;
3 3 import com.huaheng.framework.web.domain.AjaxResult;
4 4 import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
5 5 import com.baomidou.mybatisplus.extension.service.IService;
  6 +
  7 +import java.util.List;
  8 +
6 9 public interface ReceiptContainerHeaderService extends IService<ReceiptContainerHeader>{
7 10  
8 11 /**
... ... @@ -18,4 +21,6 @@ public interface ReceiptContainerHeaderService extends IService&lt;ReceiptContainer
18 21 */
19 22 AjaxResult saveCountain(String receiptCode, String containerCode, Integer receiptDetailId, Integer taskType,
20 23 String locationCode, Integer qty, String locatingRule);
  24 +
  25 + Boolean cancelByIds(List<Integer> id);
21 26 }
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java
... ... @@ -114,16 +114,66 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
114 114 receiptDetail = receiptDetailService.getById(receiptDetailId);
115 115  
116 116 receiptContainerDetailAdd(receiptContainerHeaders.get(0).getId(), receiptDetail, qty, containerCode);
117   - //更新入库详情状态和入库单状态
118   - ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail);
119   - if (!receiptDetailService.updateById(receiptDetail1)){
120   - throw new ServiceException("更新入库详情下一流程失败");
  117 + //如果单据数量等于已收数量,更新入库详情状态和入库单状态
  118 + if (receiptDetail.getTotalQty() == receiptDetail.getOpenQty()){
  119 + ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail);
  120 + if (!receiptDetailService.updateById(receiptDetail1)){
  121 + throw new ServiceException("更新入库详情下一流程失败");
  122 + }
121 123 }
122 124 receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
123 125 return AjaxResult.success("success");
124 126 }
125 127  
126 128 /**
  129 + * 批量撤销入库组盘
  130 + * @param ids
  131 + * @return
  132 + */
  133 + @Override
  134 + public Boolean cancelByIds(List<Integer> ids) {
  135 + for (Integer id : ids) {
  136 + //如果已生成任务则不允许取消组盘
  137 + if (this.getById(id).getStatus() < 10){
  138 + //根据组盘头表id查询组盘明细表
  139 + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
  140 + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id);
  141 + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(containerDetailLambda);
  142 +
  143 + //查询入库单明细,减去已收数量,更新单据
  144 + for (ReceiptContainerDetail receiptContainerDetail: receiptContainerDetails){
  145 + ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
  146 + receiptDetail.setOpenQty(receiptDetail.getOpenQty()-receiptContainerDetail.getQty());
  147 + if (!receiptDetailService.updateById(receiptDetail)){throw new ServiceException("回滚入库明细失败"); }
  148 +
  149 + containerDetailLambda = Wrappers.lambdaQuery();
  150 + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
  151 + List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(containerDetailLambda);
  152 + //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
  153 + if (containerDetailList == null){
  154 + ReceiptHeader receiptHeader = new ReceiptHeader();
  155 + receiptHeader.setId(receiptContainerDetail.getReceiptId());
  156 + receiptHeader.setFirstStatus(200);
  157 + receiptHeader.setLastStatus(200);
  158 + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
  159 +
  160 + if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); }
  161 + }
  162 +
  163 + if (!receiptContainerDetailService.removeById(receiptContainerDetail.getId())){
  164 + throw new ServiceException("删除入库组盘明细表失败,id是"+receiptContainerDetail.getId());
  165 + }
  166 + }
  167 + //删除入库组盘头表
  168 + this.removeById(id);
  169 + } else {
  170 + throw new ServiceException("已生成任务不允许取消");
  171 + }
  172 + }
  173 + return true;
  174 + }
  175 +
  176 + /**
127 177 * 检查容器编码合法性
128 178 * @param containerCode
129 179 * @return
... ...
src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java
... ... @@ -67,6 +67,7 @@ public class ShipmentDetailController extends BaseController
67 67 .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
68 68 .in(ShipmentDetail::getCompanyCode,ShiroUtils.getCompanyCodeList())
69 69 .eq(StringUtils.isNotEmpty(shipmentDetail.getShipmentCode()),ShipmentDetail::getShipmentCode,shipmentDetail.getShipmentCode())
  70 + .eq(ShipmentDetail::getShipmentId,shipmentDetail.getShipmentId())
70 71 .orderByAsc(ShipmentDetail::getId);
71 72  
72 73 if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
... ...
src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
... ... @@ -8,11 +8,14 @@ import com.huaheng.common.utils.security.ShiroUtils;
8 8 import com.huaheng.framework.web.controller.BaseController;
9 9 import com.huaheng.framework.web.domain.AjaxResult;
10 10 import com.huaheng.framework.web.page.TableDataInfo;
  11 +import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
  12 +import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
11 13 import com.huaheng.pc.config.configValue.domain.ConfigValue;
12 14 import com.huaheng.pc.config.configValue.service.ConfigValueService;
13 15 import com.huaheng.pc.config.material.domain.Material;
14 16 import com.huaheng.pc.config.material.service.MaterialServiceImpl;
15 17 import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
  18 +import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
16 19 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
17 20 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
18 21 import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
... ... @@ -30,6 +33,7 @@ import org.springframework.stereotype.Controller;
30 33 import org.springframework.ui.ModelMap;
31 34 import org.springframework.web.bind.annotation.*;
32 35  
  36 +import java.util.ArrayList;
33 37 import java.util.List;
34 38  
35 39 @Controller
... ... @@ -54,6 +58,10 @@ public class ShippingCombinationController extends BaseController {
54 58 InventoryDetailService inventoryDetailService;
55 59 @Autowired
56 60 ConfigValueService configValueService;
  61 + @Autowired
  62 + FilterConfigDetailService filterConfigDetailService;
  63 + @Autowired
  64 + ShipmentPreferenceService shipmentPreferenceService;
57 65  
58 66  
59 67 /**
... ... @@ -89,38 +97,6 @@ public class ShippingCombinationController extends BaseController {
89 97 }
90 98  
91 99  
92   - /**
93   - * 获取能出库的库存列表
94   - * @param code,id
95   - * @return
96   - */
97   - @PostMapping("/getInventory")
98   - @ResponseBody
99   - public TableDataInfo getInventory(String code, Integer id){
100   - //找到主单的账套
101   - LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
102   - lambdaQueryWrapper.eq(ShipmentHeader::getCode,code)
103   - .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode());
104   - ShipmentHeader shipmentHeader=shipmentHeaderService.getOne(lambdaQueryWrapper);
105   - if(shipmentHeader==null){
106   - throw new ServiceException("找不到主单");
107   - }
108   - //找到子单物料
109   - ShipmentDetail shipmentDetail=new ShipmentDetail();
110   - shipmentDetail=shipmentDetailService.getById(id);
111   - if(shipmentDetail==null){
112   - throw new ServiceException("找不到子单");
113   - }
114   - LambdaQueryWrapper<InventoryDetail> lam = Wrappers.lambdaQuery();
115   - lam.eq(InventoryDetail::getWarehouseCode,shipmentHeader.getWarehouseCode())
116   - .eq(InventoryDetail::getCompanyCode,shipmentHeader.getCompanyCode())
117   - .eq(InventoryDetail::getMaterialCode,shipmentDetail.getMaterialCode());
118   -
119   - List<InventoryDetail> list= inventoryDetailService.list(lam);
120   - return getDataTable(list);
121   - }
122   -
123   -
124 100 // /**
125 101 // * 获取能出库的库存列表
126 102 // * @param code,id
... ... @@ -143,42 +119,10 @@ public class ShippingCombinationController extends BaseController {
143 119 // if(shipmentDetail==null){
144 120 // throw new ServiceException("找不到子单");
145 121 // }
146   -//
147   -// //出库首选项
148   -// LambdaQueryWrapper<ShipmentPreference> shipmentPreferenceLambdaQueryWrapper=Wrappers.lambdaQuery();
149   -//
150   -// //出库规则
151   -// //出库子单的分配规则
152   -// if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){
153   -//
154   -//
155   -// }
156   -//
157   -// //物料的分+配规则
158   -// LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery();
159   -// materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode())
160   -// .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode());
161   -// Material material=materialService.getOne(materialLambdaQueryWrapper);
162   -// if(StringUtils.isNotEmpty(material.getAllocationRule())){
163   -//
164   -//
165   -// }
166   -//
167   -// //仓库的分配规则
168   -// LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
169   -// configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
170   -// .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode());
171   -// ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper);
172   -// //查找出库首选项
173   -//
174   -// configValue.getIdentifier();
175   -//
176   -//
177   -//
178 122 // LambdaQueryWrapper<InventoryDetail> lam = Wrappers.lambdaQuery();
179 123 // lam.eq(InventoryDetail::getWarehouseCode,shipmentHeader.getWarehouseCode())
180 124 // .eq(InventoryDetail::getCompanyCode,shipmentHeader.getCompanyCode())
181   -// .eq(InventoryDetail::getMaterialName,shipmentDetail.getMaterialCode());
  125 +// .eq(InventoryDetail::getMaterialCode,shipmentDetail.getMaterialCode());
182 126 //
183 127 // List<InventoryDetail> list= inventoryDetailService.list(lam);
184 128 // return getDataTable(list);
... ... @@ -186,6 +130,99 @@ public class ShippingCombinationController extends BaseController {
186 130  
187 131  
188 132 /**
  133 + * 获取能出库的库存列表
  134 + * @param code,id
  135 + * @return
  136 + */
  137 + @PostMapping("/getInventory")
  138 + @ResponseBody
  139 + public TableDataInfo getInventory(String code, Integer id){
  140 + //找到主单
  141 + LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery();
  142 + lambdaQueryWrapper.eq(ShipmentHeader::getCode,code)
  143 + .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode());
  144 + ShipmentHeader shipmentHeader=shipmentHeaderService.getOne(lambdaQueryWrapper);
  145 + if(shipmentHeader==null){
  146 + throw new ServiceException("找不到主单");
  147 + }
  148 + //找到子单
  149 + ShipmentDetail shipmentDetail=new ShipmentDetail();
  150 + shipmentDetail=shipmentDetailService.getById(id);
  151 + if(shipmentDetail==null){
  152 + throw new ServiceException("找不到子单");
  153 + }
  154 +
  155 + //查找分配规则
  156 + List<InventoryDetail> list=new ArrayList<>();
  157 + FilterConfigDetail filterConfigDetail=new FilterConfigDetail();
  158 + LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambdaQueryWrapper=Wrappers.lambdaQuery();
  159 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode,shipmentDetail.getWarehouseCode());
  160 +
  161 + //出库子单的分配规则有时,优先出库子单的分配规则
  162 + if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){
  163 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentDetail.getAllocationRule());
  164 + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
  165 + if(filterConfigDetail==null){
  166 + throw new ServiceException("出库子单出库规则配置不存在");
  167 + }
  168 +
  169 + //根据sql查库存
  170 + try {
  171 + list = inventoryDetailService.selectBysql(filterConfigDetail.getStatement());
  172 + }catch (Exception e){
  173 + throw new ServiceException("sql错误");
  174 + }
  175 + return getDataTable(list);
  176 + }
  177 +
  178 + //出库子单的分配规则没有时,优先物料的分配规则
  179 + LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery();
  180 + materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode())
  181 + .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode());
  182 + Material material=materialService.getOne(materialLambdaQueryWrapper);
  183 + if(StringUtils.isNotEmpty(material.getAllocationRule())){
  184 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,material.getAllocationRule());
  185 + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
  186 + if(filterConfigDetail==null){
  187 + throw new ServiceException("物料出库规则配置不存在");
  188 + }
  189 +
  190 + //根据sql查库存
  191 + list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement());
  192 + return getDataTable(list);
  193 + }
  194 +
  195 + //都没有时,默认仓库的分配规则
  196 + LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
  197 + configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
  198 + .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode());
  199 + ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper);
  200 + if(configValue==null){
  201 + throw new ServiceException("仓库的出库配置不存在");
  202 + }
  203 +
  204 + //查找出库首选项
  205 + LambdaQueryWrapper<ShipmentPreference> slam=Wrappers.lambdaQuery();
  206 + slam.eq(ShipmentPreference::getCode,configValue.getIdentifier())
  207 + .eq(ShipmentPreference::getWarehouseCode,configValue.getWarehouseCode());
  208 + ShipmentPreference shipmentPreference=shipmentPreferenceService.getOne(slam);
  209 + if(shipmentPreference==null){
  210 + throw new ServiceException("仓库的出库配置中出库首选项不存在");
  211 + }
  212 + //查找分配规则
  213 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentPreference.getAllocationRule());
  214 + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
  215 + if(filterConfigDetail==null){
  216 + throw new ServiceException("出库首选项中出库规则配置不存在");
  217 + }
  218 +
  219 + //根据sql查库存
  220 + list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement());
  221 + return getDataTable(list);
  222 + }
  223 +
  224 +
  225 + /**
189 226 * 保存组盘
190 227 * @param shipmentCombinationModel
191 228 * @return
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
... ... @@ -906,6 +906,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
906 906 throw new ServiceException("生成任务明细失败");
907 907 }
908 908  
  909 + //更新入库组盘明细状态
  910 + item.setStatus(10);
  911 + receiptContainerDetailService.updateById(item);
  912 +
909 913 ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId());
910 914 if ("300".equals(receiptDetail.getProcessStamp())){
911 915 ReceiptDetail detail = receiptDetailService.queryflow(receiptDetail);
... ...
src/main/resources/mybatis/inventory/InventoryDetailMapper.xml
... ... @@ -54,4 +54,9 @@
54 54 lastCycleCountDate, created, createdBy, lastUpdated, lastUpdatedBy, userDef1, userDef2,
55 55 userDef3, processStamp, receiptCode, receiptDetailId
56 56 </sql>
  57 +
  58 +
  59 + <select id="selectBysql" parameterType="String" resultType="com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail">
  60 + ${value}
  61 + </select>
57 62 </mapper>
58 63 \ No newline at end of file
... ...
src/main/resources/templates/shipment/shipmentDetail/add.html
... ... @@ -34,9 +34,9 @@
34 34 <div class="form-group">
35 35 <label class="col-sm-3 control-label">分配规则:</label>
36 36 <div class="col-sm-8">
37   - <select id="allocationRule" class="form-control" th:with="allocationRule=${@filterConfigDetail.list()}">
  37 + <select id="allocationRule" class="form-control" th:with="allocationRule=${@FilterConfigDetailService.list()}">
38 38 <option value=" " checked></option>
39   - <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['code']}" th:value="${allocationRules['description']}"></option>
  39 + <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['description']}" th:value="${allocationRules['code']}"></option>
40 40 </select>
41 41 </div>
42 42 </div>
... ... @@ -102,12 +102,6 @@
102 102 <input id="shipQty" name="shipQty" class="form-control" type="text" onkeyup=" this.value=this.value.replace(/^\s+|\s+$/g,'')">
103 103 </div>
104 104 </div>
105   - <div class="form-group">
106   - <label class="col-sm-3 control-label">物料单价:</label>
107   - <div class="col-sm-8">
108   - <input id="price" name="price" class="form-control" type="text">
109   - </div>
110   - </div>
111 105 <div class="form-group">
112 106 <div class="form-control-static col-sm-offset-9">
113 107 <button type="submit" class="btn btn-primary">提交</button>
... ... @@ -160,6 +154,7 @@
160 154 "batch": $("input[name='batch']").val(),
161 155 "lot": $("input[name='lot']").val(),
162 156 "projectNo": $("input[name='project']").val(),
  157 + "allocationRule": $("#allocationRule option:selected").val(),
163 158 "manufactureDate": $("input[name='manufactureDate']").val(),
164 159 "expirationDate": $("input[name='expirationDate']").val(),
165 160 "agingDate": $("input[name='agingDate']").val(),
... ...
src/main/resources/templates/shipment/shipmentDetail/edit.html
... ... @@ -19,12 +19,6 @@
19 19 </div>
20 20 </div>
21 21 <div class="form-group">
22   - <label class="col-sm-3 control-label">上游系统行号:</label>
23   - <div class="col-sm-8">
24   - <input id="sourceLine" name="sourceLine" th:field="*{sourceLine}" class="form-control" type="text" readonly="readonly">
25   - </div>
26   - </div>
27   - <div class="form-group">
28 22 <label class="col-sm-3 control-label">存货编码:</label>
29 23 <div class="col-sm-8">
30 24 <input id="materialCode" name="materialCode" th:field="*{materialCode}" class="form-control" type="text" readonly="readonly">
... ... @@ -51,7 +45,16 @@
51 45 <div class="form-group">
52 46 <label class="col-sm-3 control-label">项目号:</label>
53 47 <div class="col-sm-8">
54   - <input id="project" name="project" th:field="*{project}" class="form-control" type="text">
  48 + <input id="project" name="projectNo" th:field="*{projectNo}" class="form-control" type="text">
  49 + </div>
  50 + </div>
  51 + <div class="form-group">
  52 + <label class="col-sm-3 control-label">分配规则:</label>
  53 + <div class="col-sm-8">
  54 + <select id="allocationRule" class="form-control" th:with="allocationRule=${@FilterConfigDetailService.list()}" th:field="*{allocationRule}">
  55 + <option value=" " checked></option>
  56 + <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['description']}" th:value="${allocationRules['code']}"></option>
  57 + </select>
55 58 </div>
56 59 </div>
57 60 <div class="form-group">
... ... @@ -75,27 +78,21 @@
75 78 <div class="form-group">
76 79 <label class="col-sm-3 control-label">库存状态:</label>
77 80 <div class="col-sm-8">
78   - <select id="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}" th:field="*{inventoryStatus}">
  81 + <select id="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}" th:field="*{inventorySts}">
79 82 <option th:each="dict : ${inventoryStatus}" th:text="${dict['dictLabel']}" th:value="${dict['dictValue']}"></option>
80 83 </select>
81 84 </div>
82 85 </div>
83   - <div class="form-group">
  86 + <div class="form-group">
84 87 <label class="col-sm-3 control-label">发货数量:</label>
85 88 <div class="col-sm-8">
86   - <input id="qty" name="qty" th:field="*{qty}" class="form-control" type="text">
  89 + <input id="qty" name="shipQty" th:field="*{shipQty}" class="form-control" type="text">
87 90 </div>
88 91 </div>
89 92 <div class="form-group">
90 93 <label class="col-sm-3 control-label">已出数量:</label>
91 94 <div class="col-sm-8">
92   - <input id="qtyCompleted" name="qtyCompleted" th:field="*{qtyCompleted}" class="form-control" type="text" readonly="readonly">
93   - </div>
94   - </div>
95   - <div class="form-group">
96   - <label class="col-sm-3 control-label">物料单价:</label>
97   - <div class="col-sm-8">
98   - <input id="price" name="price" th:field="*{price}" class="form-control" type="number">
  95 + <input id="requestQty" name="requestQty" th:field="*{requestQty}" class="form-control" type="text" readonly="readonly">
99 96 </div>
100 97 </div>
101 98 <div class="form-group">
... ... @@ -187,18 +184,15 @@
187 184 "id":$("#id").val(),
188 185 "shipmentId": $("input[name='shipmentId']").val(),
189 186 "shipmentCode": $("input[name='shipmentCode']").val(),
190   - "sourceLine": $("input[name='sourceLine']").val(),
191   - "materialId": $("input[name='materialId']").val(),
192 187 "materialCode": $("input[name='materialCode']").val(),
193 188 "batch": $("input[name='batch']").val(),
194 189 "lot": $("input[name='lot']").val(),
195   - "project": $("input[name='project']").val(),
  190 + "projectNo": $("input[name='projectNo']").val(),
  191 + "allocationRule": $("#allocationRule option:selected").val(),
196 192 "manufactureDate": $("input[name='manufactureDate']").val(),
197 193 "expirationDate": $("input[name='expirationDate']").val(),
198   - "agingDate": $("input[name='agingDate']").val(),
199   - "inventoryStatus": $("#inventoryStatus option:selected").val(),
200   - "qty": $("input[name='qty']").val(),
201   - "price": $("input[name='price']").val(),
  194 + "inventorySts": $("#inventoryStatus option:selected").val(),
  195 + "shipQty": $("input[name='shipQty']").val(),
202 196 "userDef1": $("input[name='userDef1']").val(),
203 197 "userDef2": $("input[name='userDef2']").val(),
204 198 "userDef3": $("input[name='userDef3']").val(),
... ...