Commit 4e37be5a42c0d4ae2cdb626b8c66efe219f0ee2a

Authored by xqs
2 parents ae6f8a90 18b8331b

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

# Conflicts:
#	.idea/workspace.xml
src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java
@@ -108,35 +108,7 @@ public class MaterialController extends BaseController { @@ -108,35 +108,7 @@ public class MaterialController extends BaseController {
108 @ResponseBody 108 @ResponseBody
109 public AjaxResult addSave(Material material) { 109 public AjaxResult addSave(Material material) {
110 110
111 - LambdaQueryWrapper<Material> lambda = Wrappers.lambdaQuery();  
112 - lambda.eq(Material::getCode, material.getCode())  
113 - .eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode())  
114 - .eq(Material::getDeleted, false);  
115 - Map<String, Object> map = materialService.getMap(lambda);  
116 - if (map != null) {  
117 - return AjaxResult.error("物料已经存在");  
118 - }  
119 - LambdaQueryWrapper<MaterialUnit> lambdaQueryWrapper = Wrappers.lambdaQuery();  
120 - lambdaQueryWrapper.eq(MaterialUnit::getMaterialCode, material.getCode())  
121 - .eq(MaterialUnit::getUnit, material.getUnit());  
122 - if (materialUnitService.getOne(lambdaQueryWrapper) == null){  
123 - MaterialUnit materialUnit = new MaterialUnit();  
124 - materialUnit.setMaterialCode(material.getCode());  
125 - materialUnit.setMaterialName(material.getName());  
126 - materialUnit.setMaterialSpec(material.getSpec());  
127 - materialUnit.setCompanyCode(material.getCompanyCode());  
128 - materialUnit.setWarehouseCode(ShiroUtils.getWarehouseCode());  
129 - materialUnit.setUnit(material.getUnit());  
130 - materialUnit.setCreatedBy(ShiroUtils.getLoginName());  
131 - materialUnit.setLastUpdatedBy(ShiroUtils.getLoginName());  
132 -  
133 - materialUnitService.save(materialUnit);  
134 - }  
135 -  
136 - material.setWarehouseCode(ShiroUtils.getWarehouseCode());  
137 - material.setCreatedBy(ShiroUtils.getLoginName());  
138 - material.setLastUpdatedBy(ShiroUtils.getLoginName());  
139 - return AjaxResult.toAjax(materialService.save(material)); 111 + return materialService.addSave(material);
140 } 112 }
141 113
142 /** 114 /**
src/main/java/com/huaheng/pc/config/material/service/MaterialService.java
@@ -13,5 +13,10 @@ public interface MaterialService extends IService&lt;Material&gt;{ @@ -13,5 +13,10 @@ public interface MaterialService extends IService&lt;Material&gt;{
13 13
14 String importMaterial(List<Material> materialList, Boolean updateSupport,String operName); 14 String importMaterial(List<Material> materialList, Boolean updateSupport,String operName);
15 15
16 - 16 + /**
  17 + * 添加物料
  18 + * @param material
  19 + * @return
  20 + */
  21 + AjaxResult addSave(Material material);
17 } 22 }
src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java
@@ -7,10 +7,15 @@ import com.huaheng.common.support.Convert; @@ -7,10 +7,15 @@ import com.huaheng.common.support.Convert;
7 import com.huaheng.common.utils.StringUtils; 7 import com.huaheng.common.utils.StringUtils;
8 import com.huaheng.common.utils.security.ShiroUtils; 8 import com.huaheng.common.utils.security.ShiroUtils;
9 import com.huaheng.framework.web.domain.AjaxResult; 9 import com.huaheng.framework.web.domain.AjaxResult;
  10 +import com.huaheng.pc.config.materialType.domain.MaterialType;
  11 +import com.huaheng.pc.config.materialType.service.MaterialTypeService;
  12 +import com.huaheng.pc.config.materialUnit.domain.MaterialUnit;
  13 +import com.huaheng.pc.config.materialUnit.service.MaterialUnitService;
10 import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; 14 import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
11 import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; 15 import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
12 import org.springframework.stereotype.Service; 16 import org.springframework.stereotype.Service;
13 import javax.annotation.Resource; 17 import javax.annotation.Resource;
  18 +import java.lang.ref.WeakReference;
14 import java.util.List; 19 import java.util.List;
15 import java.util.Map; 20 import java.util.Map;
16 21
@@ -23,6 +28,10 @@ public class MaterialServiceImpl extends ServiceImpl&lt;MaterialMapper, Material&gt; i @@ -23,6 +28,10 @@ public class MaterialServiceImpl extends ServiceImpl&lt;MaterialMapper, Material&gt; i
23 28
24 @Resource 29 @Resource
25 private ReceiptDetailService receiptDetailService; 30 private ReceiptDetailService receiptDetailService;
  31 + @Resource
  32 + private MaterialUnitService materialUnitService;
  33 + @Resource
  34 + private MaterialTypeService materialTypeService;
26 35
27 @Override 36 @Override
28 public AjaxResult removeByIds(String ids) { 37 public AjaxResult removeByIds(String ids) {
@@ -94,4 +103,60 @@ public class MaterialServiceImpl extends ServiceImpl&lt;MaterialMapper, Material&gt; i @@ -94,4 +103,60 @@ public class MaterialServiceImpl extends ServiceImpl&lt;MaterialMapper, Material&gt; i
94 } 103 }
95 return successMsg.toString(); 104 return successMsg.toString();
96 } 105 }
  106 +
  107 + /**
  108 + * 添加物料
  109 + * @param material
  110 + * @return
  111 + */
  112 + @Override
  113 + public AjaxResult addSave(Material material) {
  114 + LambdaQueryWrapper<Material> lambda = Wrappers.lambdaQuery();
  115 + //如果物料编码为空则生成物料编码
  116 + if (material.getCode() == null) {
  117 + material.setCode(createCode(material.getType()));
  118 + }
  119 + lambda.eq(Material::getCode, material.getCode())
  120 + .eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode())
  121 + .eq(Material::getDeleted, false);
  122 + Map<String, Object> map = this.getMap(lambda);
  123 + if (map != null) {
  124 + return AjaxResult.error("物料已经存在");
  125 + }
  126 +
  127 + LambdaQueryWrapper<MaterialUnit> lambdaQueryWrapper = Wrappers.lambdaQuery();
  128 + lambdaQueryWrapper.eq(MaterialUnit::getMaterialCode, material.getCode())
  129 + .eq(MaterialUnit::getUnit, material.getUnit());
  130 + //如果不存在该物料的单位是新建物料单位
  131 + if (materialUnitService.getOne(lambdaQueryWrapper) == null){
  132 + MaterialUnit materialUnit = new MaterialUnit();
  133 + materialUnit.setMaterialCode(material.getCode());
  134 + materialUnit.setMaterialName(material.getName());
  135 + materialUnit.setMaterialSpec(material.getSpec());
  136 + materialUnit.setCompanyCode(material.getCompanyCode());
  137 + materialUnit.setWarehouseCode(ShiroUtils.getWarehouseCode());
  138 + materialUnit.setUnit(material.getUnit());
  139 + materialUnit.setCreatedBy(ShiroUtils.getLoginName());
  140 + materialUnit.setLastUpdatedBy(ShiroUtils.getLoginName());
  141 +
  142 + materialUnitService.save(materialUnit);
  143 + }
  144 + material.setWarehouseCode(ShiroUtils.getWarehouseCode());
  145 + material.setCreatedBy(ShiroUtils.getLoginName());
  146 + material.setLastUpdatedBy(ShiroUtils.getLoginName());
  147 + return null;
  148 + }
  149 +
  150 + /**
  151 + * 生成物料编码
  152 + * @param code
  153 + * @return
  154 + */
  155 + private String createCode(String code){
  156 + LambdaQueryWrapper<MaterialType> lambda = Wrappers.lambdaQuery();
  157 + lambda.eq(MaterialType::getCode, code);
  158 + MaterialType materialType = materialTypeService.getOne(lambda);
  159 +
  160 + return String.format(materialType.getAutoGenSerialNumFormat(), materialType.getTrackSerialNum());
  161 + }
97 } 162 }
src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java
@@ -3,6 +3,7 @@ package com.huaheng.pc.inventory.inventoryDetail.service; @@ -3,6 +3,7 @@ package com.huaheng.pc.inventory.inventoryDetail.service;
3 import com.baomidou.mybatisplus.extension.service.IService; 3 import com.baomidou.mybatisplus.extension.service.IService;
4 import com.huaheng.framework.web.domain.AjaxResult; 4 import com.huaheng.framework.web.domain.AjaxResult;
5 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; 5 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
  6 +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
6 7
7 import java.util.List; 8 import java.util.List;
8 9
@@ -11,7 +12,7 @@ public interface InventoryDetailService extends IService&lt;InventoryDetail&gt; { @@ -11,7 +12,7 @@ public interface InventoryDetailService extends IService&lt;InventoryDetail&gt; {
11 12
12 AjaxResult detailcreateCheckOutTask (Integer id); 13 AjaxResult detailcreateCheckOutTask (Integer id);
13 14
14 - List<InventoryDetail> selectBysql(String sql); 15 + List<InventoryDetail> selectBysql(String sql, ShipmentDetail shipmentDetail);
15 16
16 } 17 }
17 18
src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java
@@ -9,6 +9,7 @@ import com.huaheng.framework.web.domain.AjaxResult; @@ -9,6 +9,7 @@ import com.huaheng.framework.web.domain.AjaxResult;
9 import com.huaheng.pc.config.location.domain.Location; 9 import com.huaheng.pc.config.location.domain.Location;
10 import com.huaheng.pc.config.location.service.LocationService; 10 import com.huaheng.pc.config.location.service.LocationService;
11 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; 11 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
  12 +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
12 import com.huaheng.pc.task.taskDetail.domain.TaskDetail; 13 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
13 import com.huaheng.pc.task.taskDetail.service.TaskDetailService; 14 import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
14 import com.huaheng.pc.task.taskHeader.domain.TaskHeader; 15 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
@@ -103,7 +104,11 @@ public class InventoryDetailServiceImpl extends ServiceImpl&lt;InventoryDetailMappe @@ -103,7 +104,11 @@ public class InventoryDetailServiceImpl extends ServiceImpl&lt;InventoryDetailMappe
103 } 104 }
104 105
105 @Override 106 @Override
106 - public List<InventoryDetail> selectBysql(String sql) { 107 + public List<InventoryDetail> selectBysql(String sql, ShipmentDetail shipmentDetail) {
  108 + sql=sql+" \n" +"and warehouseCode='" + shipmentDetail.getWarehouseCode()+"' \n" +
  109 + "and companyCode='" + shipmentDetail.getCompanyCode()+"' \n" +
  110 + "and materialCode='" + shipmentDetail.getMaterialCode() +"' \n" +
  111 + "and inventorySts='" + shipmentDetail.getInventorySts() + "'";
107 return inventoryDetailMapper.selectBysql(sql); 112 return inventoryDetailMapper.selectBysql(sql);
108 } 113 }
109 114
src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
@@ -154,8 +154,9 @@ public class ReceiptDetailServiceImpl extends ServiceImpl&lt;ReceiptDetailMapper, R @@ -154,8 +154,9 @@ public class ReceiptDetailServiceImpl extends ServiceImpl&lt;ReceiptDetailMapper, R
154 * @param receiptDetail 154 * @param receiptDetail
155 * @return 155 * @return
156 */ 156 */
  157 + @Transactional
157 public ReceiptDetail queryflow(ReceiptDetail receiptDetail){ 158 public ReceiptDetail queryflow(ReceiptDetail receiptDetail){
158 - 159 + //当单据状态为驳回或作废时不更新状态
159 if ("10".equals(receiptDetail.getProcessStamp()) || "20".equals(receiptDetail.getProcessStamp())){ 160 if ("10".equals(receiptDetail.getProcessStamp()) || "20".equals(receiptDetail.getProcessStamp())){
160 return receiptDetail; 161 return receiptDetail;
161 } 162 }
src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
@@ -21,7 +21,10 @@ import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; @@ -21,7 +21,10 @@ import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
21 import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; 21 import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
22 import com.huaheng.pc.shipment.shippingCombination.domain.ShippingSearch; 22 import com.huaheng.pc.shipment.shippingCombination.domain.ShippingSearch;
23 import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService; 23 import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService;
  24 +import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
  25 +import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
24 import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; 26 import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel;
  27 +import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
25 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; 28 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
26 import org.springframework.beans.factory.annotation.Autowired; 29 import org.springframework.beans.factory.annotation.Autowired;
27 import org.springframework.stereotype.Service; 30 import org.springframework.stereotype.Service;
@@ -58,6 +61,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -58,6 +61,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
58 private ShippingCombinationService shippingCombinationService; 61 private ShippingCombinationService shippingCombinationService;
59 @Autowired 62 @Autowired
60 private TaskHeaderService taskHeaderService; 63 private TaskHeaderService taskHeaderService;
  64 + @Autowired
  65 + private TaskDetailService taskDetailService;
61 66
62 67
63 @Override 68 @Override
@@ -106,24 +111,26 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -106,24 +111,26 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
106 Location location = locationService.getOne(lambdaQueryWrapper); 111 Location location = locationService.getOne(lambdaQueryWrapper);
107 if (location == null) 112 if (location == null)
108 throw new ServiceException("库位 "+ inventoryDetail.getLocationCode() +" 不存在"); 113 throw new ServiceException("库位 "+ inventoryDetail.getLocationCode() +" 不存在");
109 - if (location.getStatus().equals("lock")) {  
110 - //如果库位状态是锁定的话,就查找出库组盘表,如果存在未下发  
111 - LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();  
112 - lam.eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())  
113 - .eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())  
114 - .eq(ShipmentContainerHeader::getTaskCreated,0);  
115 - ShipmentContainerHeader shipmentContainerHeader = this.getOne(lam);  
116 - if (shipmentContainerHeader == null) {  
117 - throw new ServiceException("库位已经锁定不能使用");  
118 - }  
119 - } 114 +// if (location.getStatus().equals("lock")) {
  115 +// //如果库位状态是锁定的话,就查找出库组盘表,如果存在未下发
  116 +// LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();
  117 +// lam.eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
  118 +// .eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
  119 +// .eq(ShipmentContainerHeader::getTaskCreated,0);
  120 +// ShipmentContainerHeader shipmentContainerHeader = this.getOne(lam);
  121 +// if (shipmentContainerHeader == null) {
  122 +// throw new ServiceException("库位已经锁定不能使用");
  123 +// }
  124 +// }
120 125
121 //更新库存分配数 126 //更新库存分配数
122 inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().add(shipmentCombinationModel.getShipQty())); 127 inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().add(shipmentCombinationModel.getShipQty()));
123 inventoryDetailService.saveOrUpdate(inventoryDetail); 128 inventoryDetailService.saveOrUpdate(inventoryDetail);
124 //获取库位,然后锁定 129 //获取库位,然后锁定
125 - location.setStatus("lock");  
126 - locationService.saveOrUpdate(location); 130 + if(location.getStatus().equals("empty")) {
  131 + location.setStatus("lock");
  132 + locationService.saveOrUpdate(location);
  133 + }
127 //更新单据明细的已出库数量 134 //更新单据明细的已出库数量
128 shipmentDetail.setRequestQty(shipmentDetail.getRequestQty().add(shipmentCombinationModel.getShipQty())); 135 shipmentDetail.setRequestQty(shipmentDetail.getRequestQty().add(shipmentCombinationModel.getShipQty()));
129 int i = shipmentDetail.getShipQty().compareTo(shipmentDetail.getRequestQty()); 136 int i = shipmentDetail.getShipQty().compareTo(shipmentDetail.getRequestQty());
@@ -166,20 +173,19 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -166,20 +173,19 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
166 LambdaQueryWrapper<ShipmentContainerHeader> lambdaQueryWrapper=Wrappers.lambdaQuery(); 173 LambdaQueryWrapper<ShipmentContainerHeader> lambdaQueryWrapper=Wrappers.lambdaQuery();
167 lambdaQueryWrapper.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode()) 174 lambdaQueryWrapper.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
168 .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()) 175 .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
169 - .eq(ShipmentContainerHeader::getTaskCreated,1)  
170 - .eq(ShipmentContainerHeader::getStatus,10); 176 + .le(ShipmentContainerHeader::getStatus,20);
171 ShipmentContainerHeader shipmentContainerHeader = this.getOne(lambdaQueryWrapper); 177 ShipmentContainerHeader shipmentContainerHeader = this.getOne(lambdaQueryWrapper);
172 if(shipmentContainerHeader != null) { 178 if(shipmentContainerHeader != null) {
173 - throw new ServiceException("容器"+location.getContainerCode()+"已经生成任务,不能再添加明细;操作中止;"); 179 + return shipmentContainerHeader;
174 } 180 }
175 else { 181 else {
176 - LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();  
177 - lam.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())  
178 - .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())  
179 - .eq(ShipmentContainerHeader::getTaskCreated,0)  
180 - .eq(ShipmentContainerHeader::getStatus,0);  
181 - shipmentContainerHeader = this.getOne(lam);  
182 - if (shipmentContainerHeader == null) { 182 +// LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();
  183 +// lam.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
  184 +// .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
  185 +// .eq(ShipmentContainerHeader::getTaskCreated,0)
  186 +// .eq(ShipmentContainerHeader::getStatus,0);
  187 +// shipmentContainerHeader = this.getOne(lam);
  188 +// if (shipmentContainerHeader == null) {
183 shipmentContainerHeader = new ShipmentContainerHeader(); 189 shipmentContainerHeader = new ShipmentContainerHeader();
184 shipmentContainerHeader.setContainerCode(location.getContainerCode()); 190 shipmentContainerHeader.setContainerCode(location.getContainerCode());
185 shipmentContainerHeader.setLocationCode(location.getCode()); 191 shipmentContainerHeader.setLocationCode(location.getCode());
@@ -194,9 +200,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -194,9 +200,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
194 // material.setCode(shipmentDetail.getMaterialCode()); 200 // material.setCode(shipmentDetail.getMaterialCode());
195 // shipmentContainerHeader.setZoneCode(materialService.selectFirstEntity(material).getZoneCode()); 201 // shipmentContainerHeader.setZoneCode(materialService.selectFirstEntity(material).getZoneCode());
196 this.save(shipmentContainerHeader); 202 this.save(shipmentContainerHeader);
  203 + return shipmentContainerHeader;
197 } 204 }
198 - }  
199 - return shipmentContainerHeader; 205 +// }
200 } 206 }
201 207
202 /** 208 /**
@@ -246,6 +252,45 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -246,6 +252,45 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
246 shipmentContainerDetail.setCreatedBy(ShiroUtils.getLoginName()); 252 shipmentContainerDetail.setCreatedBy(ShiroUtils.getLoginName());
247 shipmentContainerDetailService.save(shipmentContainerDetail); 253 shipmentContainerDetailService.save(shipmentContainerDetail);
248 } 254 }
  255 +
  256 + //
  257 + if(shipmentContainerHeader.getStatus()<=10){
  258 + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper=Wrappers.lambdaQuery();
  259 + taskHeaderLambdaQueryWrapper.eq(TaskHeader::getWarehouseCode,shipmentContainerHeader.getWarehouseCode())
  260 + .eq(TaskHeader::getInternalTaskType,200)
  261 + .eq(TaskHeader::getAllocationHeadId,shipmentContainerHeader.getId());
  262 + TaskHeader taskHeader=taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
  263 + if(taskHeader==null){
  264 + throw new ServiceException("找不到相应的任务头");
  265 + }
  266 + TaskDetail taskDetail = new TaskDetail();
  267 + taskDetail.setTaskId(taskHeader.getId());
  268 + taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
  269 + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
  270 + taskDetail.setCompanyCode(taskHeader.getCompanyCode());
  271 + taskDetail.setTaskType(taskHeader.getTaskType());
  272 + taskDetail.setAllocationId(shipmentContainerDetail.getId());
  273 + taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode());
  274 + taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId());
  275 + taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode());
  276 + taskDetail.setMaterialName(shipmentContainerDetail.getMaterialName());
  277 + taskDetail.setMaterialSpec(shipmentContainerDetail.getMaterialSpec());
  278 + taskDetail.setMaterialUnit(shipmentContainerDetail.getMaterialUnit());
  279 + taskDetail.setFromInventoryId(shipmentContainerDetail.getInventoryId());
  280 + taskDetail.setQty(shipmentContainerDetail.getQty());
  281 + taskDetail.setContainerCode(taskHeader.getContainerCode());
  282 + taskDetail.setFromLocation(taskHeader.getFromLocation());
  283 + taskDetail.setToLocation(taskHeader.getToLocation());
  284 + if(shipmentContainerHeader.getStatus()==10) {
  285 + taskDetail.setStatus(0);
  286 + }else {
  287 + taskDetail.setStatus(10);
  288 + }
  289 + taskDetail.setTaskType(taskHeader.getTaskType());
  290 + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
  291 + taskDetail.setLastUpdated(null);
  292 + taskDetailService.save(taskDetail);
  293 + }
249 return shipmentContainerDetail; 294 return shipmentContainerDetail;
250 } 295 }
251 296
@@ -360,13 +405,13 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -360,13 +405,13 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
360 continue; 405 continue;
361 } 406 }
362 // 根据 仓库编码、货主编码、存货编码,物料状态,项目号来查找可以出库的物料 407 // 根据 仓库编码、货主编码、存货编码,物料状态,项目号来查找可以出库的物料
363 - ShippingSearch search = new ShippingSearch();  
364 - search.setWarehouseCode(ShiroUtils.getWarehouseCode());  
365 - search.setCompanyCode(item.getCompanyCode());  
366 - search.setMaterialCode(item.getMaterialCode());  
367 - search.setInventorySts(item.getInventorySts()); //物料状态 408 +// ShippingSearch search = new ShippingSearch();
  409 +// search.setWarehouseCode(ShiroUtils.getWarehouseCode());
  410 +// search.setCompanyCode(item.getCompanyCode());
  411 +// search.setMaterialCode(item.getMaterialCode());
  412 +// search.setInventorySts(item.getInventorySts()); //物料状态
368 413
369 - List<InventoryDetail> inventoryList = shippingCombinationService.getInventorys(search); 414 + List<InventoryDetail> inventoryList = shippingCombinationService.getInventorys(item);
370 if (inventoryList.size() < 1) { 415 if (inventoryList.size() < 1) {
371 num = num + 1; 416 num = num + 1;
372 } else { 417 } else {
src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
@@ -42,8 +42,7 @@ public class ShippingCombinationController extends BaseController { @@ -42,8 +42,7 @@ public class ShippingCombinationController extends BaseController {
42 42
43 private String prefix = "shipment/shippingCombination"; 43 private String prefix = "shipment/shippingCombination";
44 44
45 - @Autowired  
46 - MaterialServiceImpl materialService; 45 +
47 @Autowired 46 @Autowired
48 ShipmentDetailServiceImpl shipmentDetailService; 47 ShipmentDetailServiceImpl shipmentDetailService;
49 @Autowired 48 @Autowired
@@ -54,14 +53,6 @@ public class ShippingCombinationController extends BaseController { @@ -54,14 +53,6 @@ public class ShippingCombinationController extends BaseController {
54 ShipmentContainerDetailService shipmentContainerDetailService; 53 ShipmentContainerDetailService shipmentContainerDetailService;
55 @Autowired 54 @Autowired
56 ShipmentHeaderService shipmentHeaderService; 55 ShipmentHeaderService shipmentHeaderService;
57 - @Autowired  
58 - InventoryDetailService inventoryDetailService;  
59 - @Autowired  
60 - ConfigValueService configValueService;  
61 - @Autowired  
62 - FilterConfigDetailService filterConfigDetailService;  
63 - @Autowired  
64 - ShipmentPreferenceService shipmentPreferenceService;  
65 56
66 57
67 /** 58 /**
@@ -152,72 +143,8 @@ public class ShippingCombinationController extends BaseController { @@ -152,72 +143,8 @@ public class ShippingCombinationController extends BaseController {
152 throw new ServiceException("找不到子单"); 143 throw new ServiceException("找不到子单");
153 } 144 }
154 145
  146 + List<InventoryDetail> list=shippingCombinationService.getInventorys(shipmentDetail);
155 //查找分配规则 147 //查找分配规则
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); 148 return getDataTable(list);
222 } 149 }
223 150
src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
1 package com.huaheng.pc.shipment.shippingCombination.service; 1 package com.huaheng.pc.shipment.shippingCombination.service;
2 2
3 3
  4 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6 +import com.huaheng.common.exception.service.ServiceException;
  7 +import com.huaheng.common.utils.StringUtils;
  8 +import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
  9 +import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
  10 +import com.huaheng.pc.config.configValue.domain.ConfigValue;
  11 +import com.huaheng.pc.config.configValue.service.ConfigValueService;
  12 +import com.huaheng.pc.config.material.domain.Material;
  13 +import com.huaheng.pc.config.material.service.MaterialServiceImpl;
  14 +import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
  15 +import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
4 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; 16 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
  17 +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
  18 +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
5 import com.huaheng.pc.shipment.shippingCombination.domain.ShippingSearch; 19 import com.huaheng.pc.shipment.shippingCombination.domain.ShippingSearch;
6 import com.huaheng.pc.shipment.shippingCombination.mapper.ShippingCombinationMapper; 20 import com.huaheng.pc.shipment.shippingCombination.mapper.ShippingCombinationMapper;
  21 +import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service; 22 import org.springframework.stereotype.Service;
8 23
9 import javax.annotation.Resource; 24 import javax.annotation.Resource;
  25 +import java.util.ArrayList;
10 import java.util.List; 26 import java.util.List;
11 27
12 28
@@ -15,10 +31,86 @@ public class ShippingCombinationService { @@ -15,10 +31,86 @@ public class ShippingCombinationService {
15 31
16 @Resource 32 @Resource
17 private ShippingCombinationMapper shippingCombinationMapper; 33 private ShippingCombinationMapper shippingCombinationMapper;
  34 + @Autowired
  35 + InventoryDetailService inventoryDetailService;
  36 + @Autowired
  37 + ConfigValueService configValueService;
  38 + @Autowired
  39 + FilterConfigDetailService filterConfigDetailService;
  40 + @Autowired
  41 + ShipmentPreferenceService shipmentPreferenceService;
  42 + @Autowired
  43 + MaterialServiceImpl materialService;
18 44
19 45
20 - public List<InventoryDetail> getInventorys(ShippingSearch search) {  
21 - List<InventoryDetail> list = shippingCombinationMapper.getInventorys(search); 46 +
  47 + //根据分配规则查找库存
  48 + public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail) {
  49 + List<InventoryDetail> list=new ArrayList<>();
  50 + FilterConfigDetail filterConfigDetail=new FilterConfigDetail();
  51 + LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambdaQueryWrapper= Wrappers.lambdaQuery();
  52 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode,shipmentDetail.getWarehouseCode());
  53 +
  54 + //出库子单的分配规则有时,优先出库子单的分配规则
  55 + if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){
  56 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentDetail.getAllocationRule());
  57 + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
  58 + if(filterConfigDetail==null){
  59 + throw new ServiceException("出库子单出库规则配置不存在");
  60 + }
  61 +
  62 + //根据sql查库存
  63 + try {
  64 + list = inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail);
  65 + }catch (Exception e){
  66 + throw new ServiceException("sql错误");
  67 + }
  68 + return list;
  69 + }
  70 +
  71 + //出库子单的分配规则没有时,优先物料的分配规则
  72 + LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery();
  73 + materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode())
  74 + .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode());
  75 + Material material=materialService.getOne(materialLambdaQueryWrapper);
  76 + if(StringUtils.isNotEmpty(material.getAllocationRule())){
  77 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,material.getAllocationRule());
  78 + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
  79 + if(filterConfigDetail==null){
  80 + throw new ServiceException("物料出库规则配置不存在");
  81 + }
  82 +
  83 + //根据sql查库存
  84 + list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail);
  85 + return list;
  86 + }
  87 +
  88 + //都没有时,默认仓库的分配规则
  89 + LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
  90 + configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
  91 + .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode());
  92 + ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper);
  93 + if(configValue==null){
  94 + throw new ServiceException("仓库的出库配置不存在");
  95 + }
  96 +
  97 + //查找出库首选项
  98 + LambdaQueryWrapper<ShipmentPreference> slam=Wrappers.lambdaQuery();
  99 + slam.eq(ShipmentPreference::getCode,configValue.getIdentifier())
  100 + .eq(ShipmentPreference::getWarehouseCode,configValue.getWarehouseCode());
  101 + ShipmentPreference shipmentPreference=shipmentPreferenceService.getOne(slam);
  102 + if(shipmentPreference==null){
  103 + throw new ServiceException("仓库的出库配置中出库首选项不存在");
  104 + }
  105 + //查找分配规则
  106 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentPreference.getAllocationRule());
  107 + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
  108 + if(filterConfigDetail==null){
  109 + throw new ServiceException("出库首选项中出库规则配置不存在");
  110 + }
  111 +
  112 + //根据sql查库存
  113 + list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail);
22 return list; 114 return list;
23 } 115 }
24 116
src/main/java/com/huaheng/pc/task/taskDetail/domain/TaskDetail.java
@@ -57,6 +57,14 @@ public class TaskDetail implements Serializable { @@ -57,6 +57,14 @@ public class TaskDetail implements Serializable {
57 @ApiModelProperty(value="货主") 57 @ApiModelProperty(value="货主")
58 private String companyCode; 58 private String companyCode;
59 59
  60 +
  61 + /**
  62 + * 组盘子id
  63 + */
  64 + @TableField(value = "allocationId")
  65 + @ApiModelProperty(value="组盘子id")
  66 + private Integer allocationId;
  67 +
60 /** 68 /**
61 * 单据编码 69 * 单据编码
62 */ 70 */
@@ -162,12 +170,6 @@ public class TaskDetail implements Serializable { @@ -162,12 +170,6 @@ public class TaskDetail implements Serializable {
162 @ApiModelProperty(value="参考单号") 170 @ApiModelProperty(value="参考单号")
163 private String referenceCode; 171 private String referenceCode;
164 172
165 - /**  
166 - * 参考内部号  
167 - */  
168 - @TableField(value = "referenceId")  
169 - @ApiModelProperty(value="参考内部号")  
170 - private Integer referenceId;  
171 173
172 /** 174 /**
173 * 参考内部行号 175 * 参考内部行号
@@ -379,6 +381,8 @@ public class TaskDetail implements Serializable { @@ -379,6 +381,8 @@ public class TaskDetail implements Serializable {
379 381
380 public static final String COL_COMPANYCODE = "companyCode"; 382 public static final String COL_COMPANYCODE = "companyCode";
381 383
  384 + public static final String COL_ALLOCATIONID= "allocationId";
  385 +
382 public static final String COL_BILLCODE= "billCode"; 386 public static final String COL_BILLCODE= "billCode";
383 387
384 public static final String COL_BILLDETAILID= "billDetailId"; 388 public static final String COL_BILLDETAILID= "billDetailId";
src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
@@ -43,6 +43,13 @@ public class TaskHeader implements Serializable { @@ -43,6 +43,13 @@ public class TaskHeader implements Serializable {
43 private Integer taskType; 43 private Integer taskType;
44 44
45 /** 45 /**
  46 + * 入库或出库组盘头ID
  47 + */
  48 + @TableField(value = "allocationHeadId")
  49 + @ApiModelProperty(value="入库或出库组盘头ID")
  50 + private Integer allocationHeadId;
  51 +
  52 + /**
46 * 内部类型 53 * 内部类型
47 */ 54 */
48 @TableField(value = "internalTaskType") 55 @TableField(value = "internalTaskType")
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java
@@ -31,6 +31,8 @@ public interface TaskHeaderService extends IService&lt;TaskHeader&gt;{ @@ -31,6 +31,8 @@ public interface TaskHeaderService extends IService&lt;TaskHeader&gt;{
31 31
32 AjaxResult createReceiptTask(List<Integer> ids); 32 AjaxResult createReceiptTask(List<Integer> ids);
33 33
  34 + void completeShipmentTask(TaskHeader task) ;
  35 +
34 Integer UncompleteCount(String containerCode); 36 Integer UncompleteCount(String containerCode);
35 37
36 38
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -30,12 +30,21 @@ import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerD @@ -30,12 +30,21 @@ import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerD
30 import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService; 30 import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
31 import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader; 31 import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
32 import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService; 32 import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
  33 +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
  34 +import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
33 import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; 35 import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
  36 +import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
34 import com.huaheng.pc.task.taskDetail.domain.TaskDetail; 37 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
35 import com.huaheng.pc.task.taskDetail.service.TaskDetailService; 38 import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
36 import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; 39 import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel;
  40 +import org.jsoup.helper.DataUtil;
37 import org.springframework.stereotype.Service; 41 import org.springframework.stereotype.Service;
38 import java.math.BigDecimal; 42 import java.math.BigDecimal;
  43 +import java.text.SimpleDateFormat;
  44 +import java.util.ArrayList;
  45 +import java.util.Date;
  46 +import java.util.List;
  47 +import java.util.Map;
39 import java.util.*; 48 import java.util.*;
40 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 49 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
41 import com.huaheng.pc.task.taskHeader.domain.TaskHeader; 50 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
@@ -74,6 +83,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -74,6 +83,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
74 @Resource 83 @Resource
75 private ReceiptContainerDetailService receiptContainerDetailService; 84 private ReceiptContainerDetailService receiptContainerDetailService;
76 @Resource 85 @Resource
  86 + private ShipmentHeaderService shipmentHeaderService;
  87 + @Resource
  88 + private ShipmentDetailService shipmentDetailService;
  89 +
  90 +
  91 +
  92 + @Resource
77 private ReceiptContainerHeaderService receiptContainerHeaderService; 93 private ReceiptContainerHeaderService receiptContainerHeaderService;
78 @Resource 94 @Resource
79 private TaskHeaderMapper taskHeaderMapper; 95 private TaskHeaderMapper taskHeaderMapper;
@@ -156,12 +172,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -156,12 +172,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
156 task.setToLocation(""); 172 task.setToLocation("");
157 } 173 }
158 } 174 }
  175 + task.setInternalTaskType(200);
  176 + task.setAllocationHeadId(shipmentContainerHeader.getId());
159 task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode()); 177 task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
160 task.setCompanyCode(shipmentContainerHeader.getCompanyCode()); 178 task.setCompanyCode(shipmentContainerHeader.getCompanyCode());
161 - task.setInternalTaskType(null);  
162 task.setAssignedUser(ShiroUtils.getLoginName()); 179 task.setAssignedUser(ShiroUtils.getLoginName());
163 task.setConfirmedBy(ShiroUtils.getLoginName()); 180 task.setConfirmedBy(ShiroUtils.getLoginName());
164 - task.setStatus(1); 181 + task.setStatus(0);
165 task.setContainerCode(shipmentContainerHeader.getContainerCode()); 182 task.setContainerCode(shipmentContainerHeader.getContainerCode());
166 task.setCreatedBy(ShiroUtils.getLoginName()); 183 task.setCreatedBy(ShiroUtils.getLoginName());
167 task.setCreated(new Date()); 184 task.setCreated(new Date());
@@ -172,9 +189,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -172,9 +189,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
172 for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetails) { 189 for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetails) {
173 TaskDetail taskDetail = new TaskDetail(); 190 TaskDetail taskDetail = new TaskDetail();
174 taskDetail.setTaskId(task.getId()); 191 taskDetail.setTaskId(task.getId());
  192 + taskDetail.setInternalTaskType(task.getInternalTaskType());
175 taskDetail.setWarehouseCode(task.getWarehouseCode()); 193 taskDetail.setWarehouseCode(task.getWarehouseCode());
176 taskDetail.setCompanyCode(task.getCompanyCode()); 194 taskDetail.setCompanyCode(task.getCompanyCode());
177 taskDetail.setTaskType(task.getTaskType()); 195 taskDetail.setTaskType(task.getTaskType());
  196 + taskDetail.setAllocationId(shipmentContainerDetail.getId());
178 taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode()); 197 taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode());
179 taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId()); 198 taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId());
180 taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode()); 199 taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode());
@@ -186,7 +205,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -186,7 +205,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
186 taskDetail.setContainerCode(task.getContainerCode()); 205 taskDetail.setContainerCode(task.getContainerCode());
187 taskDetail.setFromLocation(task.getFromLocation()); 206 taskDetail.setFromLocation(task.getFromLocation());
188 taskDetail.setToLocation(task.getToLocation()); 207 taskDetail.setToLocation(task.getToLocation());
189 - taskDetail.setStatus(1); 208 + taskDetail.setStatus(0);
190 taskDetail.setTaskType(task.getTaskType()); 209 taskDetail.setTaskType(task.getTaskType());
191 taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); 210 taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
192 taskDetail.setLastUpdated(null); 211 taskDetail.setLastUpdated(null);
@@ -205,7 +224,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -205,7 +224,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
205 /** 224 /**
206 * 下发WCS执行任务 225 * 下发WCS执行任务
207 */ 226 */
  227 + /**
  228 + *
  229 + * 执行任务
  230 + * */
208 @Override 231 @Override
  232 + @Transactional
209 public AjaxResult<TaskHeader> sendTaskToWcs(Integer[] taskIds) { 233 public AjaxResult<TaskHeader> sendTaskToWcs(Integer[] taskIds) {
210 TaskHeader task = null; 234 TaskHeader task = null;
211 for (Integer taskId : taskIds) { 235 for (Integer taskId : taskIds) {
@@ -220,7 +244,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -220,7 +244,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
220 task.setLastUpdatedBy(ShiroUtils.getLoginName()); 244 task.setLastUpdatedBy(ShiroUtils.getLoginName());
221 LambdaUpdateWrapper<TaskHeader> HeaderUpdateWrapper = Wrappers.lambdaUpdate(); 245 LambdaUpdateWrapper<TaskHeader> HeaderUpdateWrapper = Wrappers.lambdaUpdate();
222 HeaderUpdateWrapper.eq(TaskHeader::getId, taskId); 246 HeaderUpdateWrapper.eq(TaskHeader::getId, taskId);
223 - taskHeaderService.update(task, HeaderUpdateWrapper); 247 + if (!taskHeaderService.update(task, HeaderUpdateWrapper))
  248 + throw new ServiceException("更新任务头失败");
224 //修改任务明细状态 249 //修改任务明细状态
225 TaskDetail record = new TaskDetail(); 250 TaskDetail record = new TaskDetail();
226 record.setStatus(10); 251 record.setStatus(10);
@@ -228,38 +253,24 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -228,38 +253,24 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
228 record.setLastUpdatedBy(ShiroUtils.getLoginName()); 253 record.setLastUpdatedBy(ShiroUtils.getLoginName());
229 LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); 254 LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
230 lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId()); 255 lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId());
231 - taskDetailService.update(record, lambdaUpdateWrapper);  
232 -  
233 -  
234 -// if (task.getInternalTaskType().equals("100"))  
235 -// {  
236 -// List<Map<String, Object>> maps = taskDetailService.selectListMapByEqual("billId, billDetailId", condition);  
237 -// for (Map<String, Object> item : maps){  
238 -// Integer billDetailId = DataUtils.getInteger(item.get("billDetailId"));  
239 -// receiptHeaderService.updateDetailStatus(billDetailId, (short)300);  
240 -// }  
241 -// maps.stream().map(X -> X.get("billId")).distinct().forEach(X -> receiptHeaderService.receiptStatusUpdate(DataUtils.getInteger(X), (short)300));  
242 -// }  
243 -// //盘点单执行  
244 -// if(task.getType() == 700){  
245 -// CyclecountDetail cyclecountDetai = cyclecountDetailService.selectEntityById(  
246 -// task.getAllocationHeadId());  
247 -// cyclecountDetai.setStatus(10);  
248 -// cyclecountDetailService.updateByModel(cyclecountDetai);  
249 -// }  
250 -//// //如果是单排人工库,那么出入库都是先完成,在下发AGV任务  
251 -//// if (task.getType().intValue() == 300 || task.getType().intValue() == 600) {  
252 -//// if (task.getSourceLocation().startsWith("L03") == false ) {  
253 -//// taskAgvService.createTaskAgv(task);  
254 -//// }  
255 -//// }  
256 -//// else {  
257 -//// taskAgvService.createTaskAgv(task);  
258 -//// }  
259 -// //任务类型是出库,那就完成任务在叫agv  
260 -// if (task.getType().intValue() == 100 || task.getType().intValue() == 500) {  
261 -// taskAgvService.createTaskAgv(task);  
262 -// } 256 + if (!taskDetailService.update(record, lambdaUpdateWrapper)){
  257 + throw new ServiceException("更新任务明细失败");
  258 + }
  259 + //修改入库明细
  260 + ReceiptDetail receiptDetail = receiptDetailService.queryflow(receiptDetailService.getById(record.getId()));
  261 + if (!receiptDetailService.updateById(receiptDetail)){
  262 + throw new ServiceException("更新状态失败");
  263 + }
  264 + receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
  265 + //修改组盘表状态为20
  266 + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
  267 + receiptContainerDetail.setStatus(20);
  268 + receiptContainerDetail.setLastUpdated(new Date());
  269 + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
  270 + LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
  271 + receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId,receiptDetail.getReceiptId());
  272 + if (! receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper))
  273 + throw new ServiceException("更新组盘状态失败");
263 } 274 }
264 return AjaxResult.success("下发任务成功", task); 275 return AjaxResult.success("下发任务成功", task);
265 } 276 }
@@ -293,13 +304,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -293,13 +304,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
293 */ 304 */
294 public void completeTask(TaskHeader task) throws Exception { 305 public void completeTask(TaskHeader task) throws Exception {
295 //区分任务类型 306 //区分任务类型
296 - if (task.getInternalTaskType() == 100 || task.getInternalTaskType() == 200) { 307 + if (task.getInternalTaskType() == 100) {
297 //入库任务 308 //入库任务
298 completeReceiptTask(task); 309 completeReceiptTask(task);
299 } 310 }
300 - if (task.getInternalTaskType() == 300 || task.getInternalTaskType() == 400) {  
301 -// //出库任务  
302 -// completeShipmentTask(task); 311 + if (task.getInternalTaskType() == 200) {
  312 +// 出库任务
  313 + completeShipmentTask(task);
303 } 314 }
304 // 700 盘点 900 出库查看,包过空托出库查看 315 // 700 盘点 900 出库查看,包过空托出库查看
305 if (task.getInternalTaskType() == 700 || task.getInternalTaskType() == 900) { 316 if (task.getInternalTaskType() == 700 || task.getInternalTaskType() == 900) {
@@ -321,9 +332,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -321,9 +332,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
321 332
322 333
323 /** 334 /**
324 - * 335 + *完成任务
325 */ 336 */
326 @Override 337 @Override
  338 + @Transactional
327 public AjaxResult completeReceiptTask(TaskHeader task) throws Exception { 339 public AjaxResult completeReceiptTask(TaskHeader task) throws Exception {
328 List<Map<String, Object>> taskReceiptContainerDetail = taskHeaderMapper.getReceiptTask(task.getId()); 340 List<Map<String, Object>> taskReceiptContainerDetail = taskHeaderMapper.getReceiptTask(task.getId());
329 if (taskReceiptContainerDetail.size() < 1) { 341 if (taskReceiptContainerDetail.size() < 1) {
@@ -344,13 +356,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -344,13 +356,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
344 header.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库 356 header.setWarehouseCode(DataUtils.getString(map.get("warehouseCode")));//仓库
345 header.setCompanyCode(task.getCompanyCode());//货主 357 header.setCompanyCode(task.getCompanyCode());//货主
346 header.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号 358 header.setContainerCode(DataUtils.getString(map.get("containerCode")));//容器号
  359 + header.setLocationCode(task.getToLocation());
347 header.setTotalQty(DataUtils.getInteger(map.get("totalQty")));//总数量 360 header.setTotalQty(DataUtils.getInteger(map.get("totalQty")));//总数量
348 header.setLocking(1); 361 header.setLocking(1);
349 header.setEnable(1); 362 header.setEnable(1);
350 header.setCreatedBy(ShiroUtils.getLoginName()); 363 header.setCreatedBy(ShiroUtils.getLoginName());
351 header.setCreated(new Date()); 364 header.setCreated(new Date());
352 header.setLastUpdated(new Date()); 365 header.setLastUpdated(new Date());
353 - inventoryHeaderService.save(header); 366 + if (!inventoryHeaderService.save(header))
  367 + throw new ServiceException("添加库存单失败");
  368 +
354 //库存明细添加 369 //库存明细添加
355 detail = new InventoryDetail(); 370 detail = new InventoryDetail();
356 detail.setInventoryHeaderId(header.getId());//库存头ID 371 detail.setInventoryHeaderId(header.getId());//库存头ID
@@ -366,19 +381,23 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -366,19 +381,23 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
366 detail.setBatch(DataUtils.getString(map.get("batch")));//批次 381 detail.setBatch(DataUtils.getString(map.get("batch")));//批次
367 detail.setLot(DataUtils.getString(map.get("lot")));//批号 382 detail.setLot(DataUtils.getString(map.get("lot")));//批号
368 detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态 383 detail.setInventorySts(DataUtils.getString(map.get("inventorySts")));//库存状态
369 - detail.setManufactureDate(DataUtils.getDateTime(map.get("manufactureDate")));//生产日期  
370 - detail.setExpirationDate(DataUtils.getDateTime(map.get("expirationDate")));//失效日期 384 + detail.setManufactureDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("manufactureDate").toString()));//生产日期
  385 +// detail.setExpirationDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("expirationDate").toString()));//失效日期
371 detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量 386 detail.setQty(DataUtils.getBigDecimal(map.get("qty")));//数量
372 detail.setTaskQty(DataUtils.getBigDecimal(map.get("qty"))); 387 detail.setTaskQty(DataUtils.getBigDecimal(map.get("qty")));
373 detail.setCreatedBy(ShiroUtils.getLoginName());//创建人 388 detail.setCreatedBy(ShiroUtils.getLoginName());//创建人
374 detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间 389 detail.setLastUpdatedBy(ShiroUtils.getLoginName());//创建时间
375 - inventoryDetailService.save(detail);  
376 - } else { 390 + if (!inventoryDetailService.save(detail))
  391 + throw new ServiceException("添加库存明细失败");
  392 + }
  393 + else {
377 detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty")))); 394 detail.setQty(detail.getQty().add(DataUtils.getBigDecimal(map.get("qty"))));
378 detail.setLastUpdatedBy(ShiroUtils.getLoginName()); 395 detail.setLastUpdatedBy(ShiroUtils.getLoginName());
379 LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); 396 LambdaUpdateWrapper<InventoryDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
380 - lambdaUpdateWrapper.eq(InventoryDetail::getId, DataUtils.getInteger(map.get("receiptDetailId")));  
381 - inventoryDetailService.update(detail, lambdaUpdateWrapper); 397 + lambdaUpdateWrapper.eq(InventoryDetail::getId,DataUtils.getInteger(map.get("receiptDetailId")));
  398 + if (!inventoryDetailService.update(detail, lambdaUpdateWrapper))
  399 + throw new ServiceException("更新入库单明细失败");
  400 +
382 } 401 }
383 //记录库存交易记录 402 //记录库存交易记录
384 InventoryTransaction inventoryTransaction = new InventoryTransaction(); 403 InventoryTransaction inventoryTransaction = new InventoryTransaction();
@@ -393,28 +412,49 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -393,28 +412,49 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
393 inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId"))); 412 inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId")));
394 inventoryTransaction.setBatch(DataUtils.getString(map.get("batch"))); 413 inventoryTransaction.setBatch(DataUtils.getString(map.get("batch")));
395 inventoryTransaction.setLot(DataUtils.getString(map.get("lot"))); 414 inventoryTransaction.setLot(DataUtils.getString(map.get("lot")));
396 - inventoryTransaction.setManufactureDate(DataUtils.getDateTime(map.get("manufactureDate")));  
397 - inventoryTransaction.setExpirationDate(DataUtils.getDateTime(map.get("expirationDate"))); 415 + inventoryTransaction.setManufactureDate(new SimpleDateFormat("yyyy-MM-dd").parse(map.get("manufactureDate").toString()));//生产日期
  416 +// inventoryTransaction.setExpirationDate(DataUtils.getDateTime(map.get("expirationDate")));
398 inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts")))); 417 inventoryTransaction.setInventorySts(DataUtils.getString((map.get("inventorySts"))));
399 inventoryTransaction.setTaskQty(DataUtils.getInteger(map.get("qty"))); 418 inventoryTransaction.setTaskQty(DataUtils.getInteger(map.get("qty")));
400 inventoryTransaction.setCreated(new Date()); 419 inventoryTransaction.setCreated(new Date());
401 inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName()); 420 inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName());
402 - inventoryTransactionService.save(inventoryTransaction); 421 + if (!inventoryTransactionService.save(inventoryTransaction))
  422 + throw new ServiceException("新增库存记录失败");
403 //修改任务明细的状态为完成 423 //修改任务明细的状态为完成
404 TaskDetail taskDetail = new TaskDetail(); 424 TaskDetail taskDetail = new TaskDetail();
405 taskDetail.setStatus(100); 425 taskDetail.setStatus(100);
406 taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); 426 taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
407 taskDetail.setAgingDate(new Date()); //入库时间 427 taskDetail.setAgingDate(new Date()); //入库时间
408 LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); 428 LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
409 - lambdaUpdateWrapper.eq(TaskDetail::getTaskId, DataUtils.getInteger(map.get("taskDetailId"))); 429 + lambdaUpdateWrapper.eq(TaskDetail::getTaskId,task.getId());
410 taskDetailService.update(taskDetail, lambdaUpdateWrapper); 430 taskDetailService.update(taskDetail, lambdaUpdateWrapper);
411 - //修改入库单的状态  
412 - ReceiptHeader receiptHeader = new ReceiptHeader();  
413 - receiptHeader.setFirstStatus(100);  
414 - receiptHeader.setLastStatus(100);  
415 - LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();  
416 - receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(map.get("receiptId")));  
417 - receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper); 431 + if ( !taskDetailService.update(taskDetail, lambdaUpdateWrapper)){
  432 + throw new ServiceException("修改入库单明细失败");
  433 + }
  434 +// //修改入库单的状态
  435 +// ReceiptHeader receiptHeader = new ReceiptHeader();
  436 +// receiptHeader.setFirstStatus(100);
  437 +// receiptHeader.setLastStatus(100);
  438 +// LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();
  439 +// receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(map.get("receiptId")));
  440 +// if (!receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper)){
  441 +// throw new ServiceException("修改入库单失败");
  442 +// }
  443 +// //修改任务明细的状态为完成
  444 +// TaskDetail taskDetail = new TaskDetail();
  445 +// taskDetail.setStatus(100);
  446 +// taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
  447 +// taskDetail.setAgingDate(new Date()); //入库时间
  448 +// LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
  449 +// lambdaUpdateWrapper.eq(TaskDetail::getTaskId, DataUtils.getInteger(map.get("taskDetailId")));
  450 +// taskDetailService.update(taskDetail, lambdaUpdateWrapper);
  451 +// //修改入库单的状态
  452 +// ReceiptHeader receiptHeader =new ReceiptHeader();
  453 +// receiptHeader.setFirstStatus(100);
  454 +// receiptHeader.setLastStatus(100);
  455 +// LambdaUpdateWrapper<ReceiptHeader> receiptHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();
  456 +// receiptHeaderLambdaUpdateWrapper.eq(ReceiptHeader::getId, DataUtils.getInteger(map.get("receiptId")));
  457 +// receiptHeaderService.update(receiptHeader, receiptHeaderLambdaUpdateWrapper);
418 458
419 //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成 459 //修改任务主表状态,因为立库任务表单头只对应一个货箱,表单详情的任务会同时完成
420 task.setStatus(100); 460 task.setStatus(100);
@@ -422,25 +462,43 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -422,25 +462,43 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
422 task.setLastUpdated(new Date()); 462 task.setLastUpdated(new Date());
423 LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate(); 463 LambdaUpdateWrapper<TaskHeader> taskHeaderLambdaUpdateWrapper = Wrappers.lambdaUpdate();
424 taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId()); 464 taskHeaderLambdaUpdateWrapper.eq(TaskHeader::getId, task.getId());
425 - taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper); 465 + if (!taskHeaderService.update(task, taskHeaderLambdaUpdateWrapper))
  466 + throw new ServiceException("更新任务主表失败");
  467 +
426 //修改库位状态和对应的容器 468 //修改库位状态和对应的容器
427 Location location = new Location(); 469 Location location = new Location();
428 location.setContainerCode(task.getContainerCode()); 470 location.setContainerCode(task.getContainerCode());
429 location.setStatus("empty"); 471 location.setStatus("empty");
430 LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate(); 472 LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate();
431 locationLambdaUpdateWrapper.eq(Location::getCode, task.getToLocation()); 473 locationLambdaUpdateWrapper.eq(Location::getCode, task.getToLocation());
432 - locationService.update(location, locationLambdaUpdateWrapper); 474 + if (!locationService.update(location, locationLambdaUpdateWrapper))
  475 + throw new ServiceException("更新库位失败");
  476 +
433 //修改容器状态和对应的库位 477 //修改容器状态和对应的库位
434 Container container = new Container(); 478 Container container = new Container();
435 container.setLocationCode(task.getToLocation()); 479 container.setLocationCode(task.getToLocation());
436 container.setStatus("some"); 480 container.setStatus("some");
437 - //修改组盘表状态为20 481 + if (!containerService.save(container)){
  482 + throw new ServiceException("更新容器失败");
  483 + }
  484 + //修改组盘表状态为20
438 ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); 485 ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
439 receiptContainerDetail.setStatus(20); 486 receiptContainerDetail.setStatus(20);
  487 + receiptContainerDetail.setProcessStamp("0");
  488 + receiptContainerDetail.setLastUpdated(new Date());
  489 + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
440 LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate(); 490 LambdaUpdateWrapper<ReceiptContainerDetail> receiptContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
441 receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId, DataUtils.getInteger(map.get("receiptId"))); 491 receiptContainerDetailLambdaUpdateWrapper.eq(ReceiptContainerDetail::getReceiptId, DataUtils.getInteger(map.get("receiptId")));
442 - receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper); 492 + if (! receiptContainerDetailService.update(receiptContainerDetail, receiptContainerDetailLambdaUpdateWrapper))
  493 + throw new ServiceException("更新组盘状态失败");
  494 + //修改入库明细
  495 + ReceiptDetail receiptDetail = receiptDetailService.queryflow(receiptDetailService.getById(DataUtils.getInteger(map.get("receiptDetailId"))));
  496 + if (!receiptDetailService.updateById(receiptDetail)){
  497 + throw new ServiceException("更新状态失败");
  498 + }
  499 + receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId());
443 } 500 }
  501 +
444 } 502 }
445 return AjaxResult.success("完成入库任务"); 503 return AjaxResult.success("完成入库任务");
446 } 504 }
@@ -847,7 +905,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -847,7 +905,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
847 905
848 /** 906 /**
849 * 创建上架任务 907 * 创建上架任务
850 - *  
851 * @param ids 908 * @param ids
852 * @return 909 * @return
853 */ 910 */
@@ -932,5 +989,108 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -932,5 +989,108 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
932 989
933 990
934 991
  992 + /**
  993 + *
  994 + * 完成出库任务
  995 + * */
  996 + @Override
  997 + public void completeShipmentTask(TaskHeader task) {
  998 + //获取所有子任务
  999 + TaskDetail condition = new TaskDetail();
  1000 + condition.setTaskId(task.getId());
  1001 + LambdaQueryWrapper<TaskDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(condition);
  1002 + List<TaskDetail> taskDetails = taskDetailService.list(lambdaQueryWrapper);
  1003 + List<Integer> shipmentHeadIds = new ArrayList<>();
  1004 + for(TaskDetail taskDetail : taskDetails){
  1005 + if(taskDetail.getStatus()<20){
  1006 + //获取出库子货箱
  1007 + ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getById(taskDetail.getAllocationId());
  1008 + //取出子单据
  1009 + ShipmentDetail shipmentDetail = shipmentDetailService.getById(taskDetail.getBillDetailId());
  1010 + //暂存id,为更新单据状态准备
  1011 + shipmentHeadIds.add(shipmentDetail.getShipmentId());
  1012 + //获取对应库存记录
  1013 + InventoryDetail inventoryDetail = inventoryDetailService.getById(taskDetail.getToInventoryId());
  1014 + if (inventoryDetail == null) {
  1015 + throw new ServiceException("任务明细对应的库存ID【" + taskDetail.getToInventoryId().toString() + "】不存在!");
  1016 + }
  1017 + BigDecimal orignalQty = inventoryDetail.getQty();
  1018 + //扣减库存
  1019 + inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().subtract(taskDetail.getQty()));
  1020 + inventoryDetail.setQty(inventoryDetail.getQty().subtract(taskDetail.getQty()));
  1021 + if(inventoryDetail.getQty().compareTo(new BigDecimal("0"))==0 && inventoryDetail.getTaskQty().compareTo(new BigDecimal("0"))==0){
  1022 + //如果库存没有了,就删除这个库存
  1023 + inventoryDetailService.removeById(inventoryDetail.getId());
  1024 + }else {
  1025 + //否则更新这个库存
  1026 + inventoryDetailService.updateById(inventoryDetail);
  1027 + }
  1028 + //设置子任务状态为已执行
  1029 + taskDetail.setStatus(100);
  1030 + taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
  1031 + taskDetail.setLastUpdated(new Date()); //完成时间
  1032 + taskDetailService.updateById(taskDetail);
  1033 + //记录库存交易记录
  1034 + InventoryTransaction inventoryTransaction = new InventoryTransaction();
  1035 + inventoryTransaction.setWarehouseCode(task.getWarehouseCode());
  1036 + inventoryTransaction.setCompanyCode(shipmentDetail.getCompanyCode());
  1037 + inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
  1038 + inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
  1039 + inventoryTransaction.setTransactionType(20);
  1040 + inventoryTransaction.setMaterialCode(shipmentDetail.getMaterialCode());
  1041 + //inventory.setMaterialName(DataUtils.getString(taskDetail.getMaterialName()));//物料名称
  1042 + inventoryTransaction.setBillCode(taskDetail.getBillCode());
  1043 + inventoryTransaction.setBillDetailId(shipmentDetail.getId());
  1044 + inventoryTransaction.setBatch(shipmentDetail.getBatch());
  1045 + inventoryTransaction.setLot(shipmentDetail.getLot());
  1046 + inventoryTransaction.setManufactureDate(shipmentDetail.getManufactureDate());
  1047 + inventoryTransaction.setExpirationDate(shipmentDetail.getExpirationDate());
  1048 + inventoryTransaction.setInventorySts(inventoryDetail.getInventorySts());
  1049 + //这里取反,更符合出库的语义,同时方便对记录进行统计
  1050 + inventoryTransaction.setTaskQty(taskDetail.getQty().intValue());
  1051 +// inventoryTransaction.setCostPrice(shipmentDetail.);
  1052 + inventoryTransaction.setCreated(null);
  1053 + inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName());
  1054 + inventoryTransactionService.save(inventoryTransaction);
  1055 +// //更新单据状态
  1056 +// shipmentHeaderService.updateShipmentStatus(shipmentHeader.getId());
  1057 + }
  1058 + }
  1059 + //设置主任务为已执行
  1060 + task.setStatus(100);
  1061 + task.setLastUpdatedBy(ShiroUtils.getLoginName());
  1062 + task.setLastUpdated(new Date());
  1063 + taskHeaderService.updateById(task);
  1064 + //将库位状态改为空闲,如果是整出的对应的容器也清空
  1065 + Location locationRecord = new Location();
  1066 + locationRecord.setStatus("empty");
  1067 + if(task.getTaskType()==300) {
  1068 + locationRecord.setContainerCode("");
  1069 + }
  1070 + LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate();
  1071 + locationLambdaUpdateWrapper.eq(Location::getCode,task.getToLocation());
  1072 + locationService.update(locationLambdaUpdateWrapper);
  1073 + //如果是整出,删掉这个库位上的这个托盘,否则更改托盘状态
  1074 + Container containerRecord = new Container();
  1075 +// if(task.getTaskType()==300) {
  1076 +// containerService.updateLocationCodeAndStatus(task.getContainerCode(),"","empty");
  1077 +// }
  1078 +// else{
  1079 +// //查询是否存在关联的库存,入如果没有就修改容器状态为empty
  1080 +// Inventory inventoryCondition = new Inventory();
  1081 +// inventoryCondition.setLocationCode(task.getSourceLocation());
  1082 +// Map<String, Object> map = inventoryService.selectFirstMap("id", inventoryCondition);
  1083 +// if (map == null) {
  1084 +// //如果没有库存就设置为empty
  1085 +// containerService.updateStatus(task.getContainerCode(), "empty");
  1086 +// }
  1087 +// }
  1088 +// //设置出库货箱状态为拣货任务完成
  1089 +// shipmentContainerHeaderService.resetStatusShipmentContainer(task.getAllocationHeadId(),(short)20);
  1090 + //最后更新单据状态
  1091 + shipmentHeadIds.stream().distinct().forEach(t->shipmentHeaderService.updateShipmentStatus(t));
  1092 +
  1093 + }
  1094 +
935 1095
936 } 1096 }
src/main/resources/templates/shipment/shippingCombination/shippingCombination.html
@@ -135,7 +135,12 @@ @@ -135,7 +135,12 @@
135 id:row.id 135 id:row.id
136 }, 136 },
137 success:res=>{ 137 success:res=>{
138 - $("#bootstrap-table1").bootstrapTable('load',res.data) 138 + if(res.code===200){
  139 + $("#bootstrap-table1").bootstrapTable('load',res.data)
  140 + }
  141 + else{
  142 + $.modal.alertError(res.msg)
  143 + }
139 } 144 }
140 }) 145 })
141 }, 146 },
src/main/resources/templates/task/taskDetail/taskDetail.html
@@ -72,12 +72,12 @@ @@ -72,12 +72,12 @@
72 sortable:true 72 sortable:true
73 }, 73 },
74 { 74 {
75 - field : 'sourceLocation', 75 + field : 'fromLocation',
76 title : '源库位', 76 title : '源库位',
77 sortable:true 77 sortable:true
78 }, 78 },
79 { 79 {
80 - field : 'destinationLocation', 80 + field : 'toLocation',
81 title : '目的库位', 81 title : '目的库位',
82 sortable:true 82 sortable:true
83 }, 83 },
src/main/resources/templates/task/taskHeader/taskHeader.html
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 </li> 32 </li>
33 33
34 <li> 34 <li>
35 - 库位编号:<input type="text" name="locationCode"/> 35 + 库位编号:<input type="text" name="toLocation"/>
36 </li> 36 </li>
37 <li class="time" style="height: 30px"> 37 <li class="time" style="height: 30px">
38 <label>创建时间: </label> 38 <label>创建时间: </label>
@@ -171,7 +171,7 @@ @@ -171,7 +171,7 @@
171 171
172 }, 172 },
173 { 173 {
174 - field : 'locationCode', 174 + field : 'toLocation',
175 title : '库位号', 175 title : '库位号',
176 visible:true 176 visible:true
177 }, 177 },
@@ -234,7 +234,7 @@ @@ -234,7 +234,7 @@
234 actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>取消</a> '); 234 actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>取消</a> ');
235 actions.push('<a class="btn btn-primary btn-xs ' + completeFlag + '" href="#" onclick="complete(\'' + row.id + '\')"><i class="fa fa-check"></i>完成</a>'); 235 actions.push('<a class="btn btn-primary btn-xs ' + completeFlag + '" href="#" onclick="complete(\'' + row.id + '\')"><i class="fa fa-check"></i>完成</a>');
236 } 236 }
237 - if (row.status >=10) { 237 + if (row.status >= 10 && row.status < 100) {
238 actions.push('<a class="btn btn-primary btn-xs ' + completeFlag + '" href="#" onclick="complete(\'' + row.id + '\')"><i class="fa fa-check"></i>完成</a>'); 238 actions.push('<a class="btn btn-primary btn-xs ' + completeFlag + '" href="#" onclick="complete(\'' + row.id + '\')"><i class="fa fa-check"></i>完成</a>');
239 } 239 }
240 return actions.join(''); 240 return actions.join('');