Commit ecc829a3f0b9d55bc64c761a0614f8ae0df04eac

Authored by DESKTOP-AO0VKC8\mahua
1 parent 2617d92b

修改 空容器入库与空容器出库任务创建,空容器入库支持定位规则

src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java
@@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl; @@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl;
25 import com.huaheng.pc.task.taskHeader.domain.TaskHeader; 25 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
26 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; 26 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
27 import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl; 27 import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl;
  28 +import com.huaheng.pc.task.taskHeader.service.WorkTaskService;
28 import org.springframework.stereotype.Service; 29 import org.springframework.stereotype.Service;
29 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 30 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
30 import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper; 31 import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper;
@@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe @@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
54 private InventoryDetailService inventoryDetailService; 55 private InventoryDetailService inventoryDetailService;
55 @Resource 56 @Resource
56 private MaterialService materialService; 57 private MaterialService materialService;
  58 + @Resource
  59 + private WorkTaskService workTaskService;
57 60
58 61
59 /** 62 /**
@@ -89,97 +92,17 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe @@ -89,97 +92,17 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
89 /** 92 /**
90 * 空托入库 93 * 空托入库
91 * */ 94 * */
92 - @Transactional  
93 @Override 95 @Override
94 public AjaxResult createEmptyIn(String containerCode, String destinationLocation) { 96 public AjaxResult createEmptyIn(String containerCode, String destinationLocation) {
95 -  
96 - return AjaxResult.success(); 97 + return workTaskService.createEmptyIn(containerCode, destinationLocation);
97 } 98 }
98 99
99 /** 100 /**
100 *空托出库 101 *空托出库
101 * */ 102 * */
102 - @Transactional  
103 @Override 103 @Override
104 public AjaxResult createEmptyOut(String containerCode, String sourceLocation) { 104 public AjaxResult createEmptyOut(String containerCode, String sourceLocation) {
105 - // 检查容器  
106 - Container temp3 = new Container();  
107 - temp3.setCode(containerCode);  
108 - temp3.setWarehouseCode(ShiroUtils.getWarehouseCode());  
109 - LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery(temp3);  
110 - Container container = containerService.getOne(lambda3);  
111 - if(container==null){  
112 - return AjaxResult.error("托盘不存在");  
113 - }  
114 - if (StringUtils.isEmpty(container.getLocationCode())|| !(container.getLocationCode().equals(sourceLocation))) {  
115 - return AjaxResult.error("容器不在库位[" + sourceLocation + "]上");  
116 - }  
117 - //检查库位  
118 - Location temp4 = new Location();  
119 - temp4.setCode(sourceLocation);  
120 - temp4.setWarehouseCode(ShiroUtils.getWarehouseCode());  
121 - LambdaQueryWrapper lamda4 = Wrappers.lambdaQuery(temp4);  
122 - Location loc = locationService.getOne(lamda4);  
123 - if(loc==null){  
124 - return AjaxResult.error("源货位不存在");  
125 - }  
126 - if(StringUtils.isEmpty(loc.getContainerCode())){  
127 - return AjaxResult.error("源货位没有托盘");  
128 - }  
129 - if(!"empty".equals(loc.getStatus())){  
130 - return AjaxResult.error("源货位非空闲");  
131 - }  
132 - //检查库存,有库存不给生成任务。  
133 - LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();  
134 - inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode,loc.getWarehouseCode())  
135 - .eq(InventoryDetail::getLocationCode, loc.getCode());  
136 - List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);  
137 - if(inventoryDetailList != null && inventoryDetailList.size() > 0){  
138 - return AjaxResult.error("该容器上有库存,无法空托出库!");  
139 - }  
140 - //判断托盘是否已经存在任务  
141 - Integer taskCount = taskHeaderService.UncompleteCount(containerCode);  
142 - if (taskCount != null && taskCount.intValue() > 0) {  
143 - return AjaxResult.error("容器已存在任务");  
144 - }  
145 - //生成任务  
146 - TaskHeader taskHeader = new TaskHeader();  
147 - taskHeader.setWarehouseCode(loc.getWarehouseCode());  
148 - taskHeader.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));//货主  
149 - taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); //出库内部类型都给200  
150 - taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT);  
151 - taskHeader.setContainerCode(container.getCode());  
152 - taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);  
153 - taskHeader.setFromLocation(sourceLocation);  
154 - taskHeader.setToLocation("");  
155 - taskHeader.setCreated(new Date());  
156 - taskHeader.setCreatedBy(ShiroUtils.getLoginName());  
157 - taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName());  
158 - taskHeader.setLastUpdated(new Date());  
159 - if(taskHeaderService.save(taskHeader)){  
160 - //锁定库位状态  
161 - locationService.updateStatus(loc.getCode(),"lock");  
162 - }else{  
163 - throw new ServiceException("空托出库主表生成失败!");  
164 - }  
165 - //写入任务细表  
166 - TaskDetail taskDetail = new TaskDetail();  
167 - taskDetail.setTaskId(taskHeader.getId());//主单ID  
168 - taskDetail.setTaskType(taskHeader.getTaskType());  
169 - taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());  
170 - taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());  
171 - taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));  
172 - taskDetail.setFromLocation(taskHeader.getFromLocation());  
173 - taskDetail.setToLocation(taskHeader.getToLocation());  
174 - taskDetail.setContainerCode(taskHeader.getContainerCode());  
175 - taskDetail.setCreated(new Date());  
176 - taskDetail.setCreatedBy(ShiroUtils.getLoginName());  
177 - taskDetail.setLastUpdated(new Date());  
178 - taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());  
179 - if(taskDetailService.save(taskDetail) == false){  
180 - throw new ServiceException("空托出库任务明细生成失败!");  
181 - }  
182 - return AjaxResult.success(taskHeader.getId()); 105 + return workTaskService.createEmptyOut(containerCode, sourceLocation);
183 } 106 }
184 107
185 /** 108 /**
src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
@@ -18,9 +18,14 @@ import com.huaheng.pc.config.location.domain.Location; @@ -18,9 +18,14 @@ import com.huaheng.pc.config.location.domain.Location;
18 import com.huaheng.pc.config.location.service.LocationService; 18 import com.huaheng.pc.config.location.service.LocationService;
19 import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference; 19 import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
20 import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService; 20 import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
  21 +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
  22 +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
  23 +import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
  24 +import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
21 import com.huaheng.pc.task.taskDetail.domain.TaskDetail; 25 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
22 import com.huaheng.pc.task.taskDetail.service.TaskDetailService; 26 import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
23 import com.huaheng.pc.task.taskHeader.domain.TaskHeader; 27 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
  28 +import org.aspectj.weaver.loadtime.Aj;
24 import org.springframework.stereotype.Service; 29 import org.springframework.stereotype.Service;
25 import org.springframework.transaction.annotation.Transactional; 30 import org.springframework.transaction.annotation.Transactional;
26 31
@@ -47,6 +52,10 @@ public class WorkTaskService { @@ -47,6 +52,10 @@ public class WorkTaskService {
47 private ReceiptPreferenceService preferenceService; 52 private ReceiptPreferenceService preferenceService;
48 @Resource 53 @Resource
49 private FilterConfigDetailService filterConfigDetailService; 54 private FilterConfigDetailService filterConfigDetailService;
  55 + @Resource
  56 + private InventoryDetailService inventoryDetailService;
  57 + @Resource
  58 + private InventoryHeaderService inventoryHeaderService;
50 59
51 /** 60 /**
52 * 创建入库任务 61 * 创建入库任务
@@ -61,7 +70,7 @@ public class WorkTaskService { @@ -61,7 +70,7 @@ public class WorkTaskService {
61 return AjaxResult.error("容器不存在"); 70 return AjaxResult.error("容器不存在");
62 } 71 }
63 if (StringUtils.isNotEmpty(container.getLocationCode())) { 72 if (StringUtils.isNotEmpty(container.getLocationCode())) {
64 - return AjaxResult.error("容器已在库位[" + container.getLocationCode() + "]上"); 73 + return AjaxResult.error("容器已在库位" + container.getLocationCode() + "上");
65 } 74 }
66 75
67 if (StringUtils.isNotEmpty(destinationLocation)) { 76 if (StringUtils.isNotEmpty(destinationLocation)) {
@@ -72,7 +81,7 @@ public class WorkTaskService { @@ -72,7 +81,7 @@ public class WorkTaskService {
72 if (StringUtils.isNotEmpty(location.getContainerCode())) { 81 if (StringUtils.isNotEmpty(location.getContainerCode())) {
73 return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode()); 82 return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode());
74 } 83 }
75 - if ("empty".equals(location.getStatus())) { 84 + if (!"empty".equals(location.getStatus())) {
76 return AjaxResult.error("目标库位非空闲"); 85 return AjaxResult.error("目标库位非空闲");
77 } 86 }
78 } 87 }
@@ -109,10 +118,15 @@ public class WorkTaskService { @@ -109,10 +118,15 @@ public class WorkTaskService {
109 return AjaxResult.error("容器已存在任务"); 118 return AjaxResult.error("容器已存在任务");
110 } 119 }
111 120
  121 + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
  122 + queryWrapper.eq(InventoryDetail::getContainerCode, containerCode);
  123 + if (inventoryDetailService.count(queryWrapper) > 0) {
  124 + return AjaxResult.error("该容器上已有库存");
  125 + }
112 LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate(); 126 LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate();
113 containerUpdateWrapper.eq(Container::getCode, container.getCode()) 127 containerUpdateWrapper.eq(Container::getCode, container.getCode())
114 .set(Container::getStatus, "lock"); 128 .set(Container::getStatus, "lock");
115 - if (containerService.update(container, containerUpdateWrapper)) { 129 + if (!containerService.update(container, containerUpdateWrapper)) {
116 throw new ServiceException("容器状态更新失败"); 130 throw new ServiceException("容器状态更新失败");
117 } 131 }
118 132
@@ -144,7 +158,7 @@ public class WorkTaskService { @@ -144,7 +158,7 @@ public class WorkTaskService {
144 taskDetail.setToLocation(taskHeader.getToLocation()); 158 taskDetail.setToLocation(taskHeader.getToLocation());
145 taskDetail.setContainerCode(taskHeader.getContainerCode()); 159 taskDetail.setContainerCode(taskHeader.getContainerCode());
146 160
147 - if(taskDetailService.save(taskDetail)){ 161 + if(!taskDetailService.save(taskDetail)){
148 throw new ServiceException("空托入库任务明细生成失败!"); 162 throw new ServiceException("空托入库任务明细生成失败!");
149 } 163 }
150 //锁库位 164 //锁库位
@@ -153,4 +167,99 @@ public class WorkTaskService { @@ -153,4 +167,99 @@ public class WorkTaskService {
153 } 167 }
154 return AjaxResult.success(taskHeader.getId()); 168 return AjaxResult.success(taskHeader.getId());
155 } 169 }
  170 +
  171 + /**
  172 + * 创建空托出库任务
  173 + * 容器编码与源库位只需要填一个
  174 + * @param containerCode 容器编码
  175 + * @param sourceLocation 源库位
  176 + * @return
  177 + */
  178 + @Transactional(rollbackFor = Exception.class)
  179 + public AjaxResult createEmptyOut(String containerCode, String sourceLocation) {
  180 + /* 容器编码*/
  181 + String conCode = null;
  182 + /* 库位编码*/
  183 + String locationCode = null;
  184 + //验证容器
  185 + if (StringUtils.isNotEmpty(containerCode)) {
  186 + Container container = containerService.findAllByCode(containerCode);
  187 + if (StringUtils.isNull(container)) {
  188 + return AjaxResult.error(containerCode+"容器不存在");
  189 + }
  190 + if (!"empty".equals(container.getStatus())) {
  191 + return AjaxResult.error(containerCode+"容器状态不为空,不能执行空托出库");
  192 + }
  193 + if (StringUtils.isEmpty(container.getLocationCode())) {
  194 + return AjaxResult.error("该容器不在库位上");
  195 + }
  196 + if (StringUtils.isNotEmpty(sourceLocation)) {
  197 + if (!container.getLocationCode().equals(sourceLocation)) {
  198 + return AjaxResult.error("该容器所在库位与源库位不同");
  199 + }
  200 + }
  201 + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
  202 + queryWrapper.eq(InventoryDetail::getContainerCode, containerCode);
  203 + if (inventoryDetailService.count(queryWrapper) > 0) {
  204 + return AjaxResult.error("该容器上有库存,无法空托出库!");
  205 + }
  206 + conCode = containerCode;
  207 + locationCode = container.getLocationCode();
  208 + }
  209 + //验证库位
  210 + if (StringUtils.isNotEmpty(sourceLocation)) {
  211 + Location location = locationService.findLocationByCode(sourceLocation);
  212 + if (StringUtils.isNull(location)) {
  213 + return AjaxResult.error(sourceLocation+"库位不存在");
  214 + }
  215 + if (!"empty".equals(location.getStatus())) {
  216 + return AjaxResult.error(location.getCode()+"库位状态不为空闲不能执行出库");
  217 + }
  218 + if (StringUtils.isEmpty(location.getContainerCode())) {
  219 + return AjaxResult.error(location.getCode()+"库位上没有容器");
  220 + }
  221 + if (StringUtils.isNotEmpty(containerCode)) {
  222 + if (!location.getContainerCode().equals(sourceLocation)) {
  223 + return AjaxResult.error("该库位上容器编码与输入容器编码不同");
  224 + }
  225 + }
  226 + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
  227 + queryWrapper.eq(InventoryDetail::getLocationCode, sourceLocation);
  228 + if (inventoryDetailService.count(queryWrapper) > 0) {
  229 + return AjaxResult.error("该库位上有库存,无法空托出库!");
  230 + }
  231 +
  232 + locationCode = location.getCode();
  233 + conCode = location.getContainerCode();
  234 + }
  235 +
  236 + TaskHeader taskHeader = new TaskHeader();
  237 + taskHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
  238 + taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_WORK);
  239 + taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT);
  240 + taskHeader.setContainerCode(conCode);
  241 + taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
  242 + taskHeader.setFromLocation(locationCode);
  243 + taskHeader.setToLocation("");
  244 + if(taskHeaderService.save(taskHeader)){
  245 + //锁定库位状态
  246 + locationService.updateStatus(locationCode,"lock");
  247 + } else {
  248 + throw new ServiceException("空托出库主表生成失败!");
  249 + }
  250 + //写入任务细表
  251 + TaskDetail taskDetail = new TaskDetail();
  252 + taskDetail.setTaskId(taskHeader.getId());
  253 + taskDetail.setTaskType(taskHeader.getTaskType());
  254 + taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
  255 + taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
  256 + taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
  257 + taskDetail.setFromLocation(taskHeader.getFromLocation());
  258 + taskDetail.setToLocation(taskHeader.getToLocation());
  259 + taskDetail.setContainerCode(taskHeader.getContainerCode());
  260 + if(taskDetailService.save(taskDetail)){
  261 + throw new ServiceException("空托出库任务明细生成失败!");
  262 + }
  263 + return AjaxResult.success(taskHeader.getId());
  264 + }
156 } 265 }