Commit 2572be5523f2a5ff9cb3b2d971631d9fc87fb2d2

Authored by 周峰
2 parents 5e4a7e1e dc0d7d5e

Merge branch 'develop' of http://172.16.29.40:8010/wms/wms2 into develop

src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java
... ... @@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl;
25 25 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
26 26 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
27 27 import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl;
  28 +import com.huaheng.pc.task.taskHeader.service.WorkTaskService;
28 29 import org.springframework.stereotype.Service;
29 30 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
30 31 import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper;
... ... @@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
54 55 private InventoryDetailService inventoryDetailService;
55 56 @Resource
56 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 92 /**
90 93 * 空托入库
91 94 * */
92   - @Transactional
93 95 @Override
94 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 103 @Override
104 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 18 import com.huaheng.pc.config.location.service.LocationService;
19 19 import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
20 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 25 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
22 26 import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
23 27 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
  28 +import org.aspectj.weaver.loadtime.Aj;
24 29 import org.springframework.stereotype.Service;
25 30 import org.springframework.transaction.annotation.Transactional;
26 31  
... ... @@ -47,6 +52,10 @@ public class WorkTaskService {
47 52 private ReceiptPreferenceService preferenceService;
48 53 @Resource
49 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 70 return AjaxResult.error("容器不存在");
62 71 }
63 72 if (StringUtils.isNotEmpty(container.getLocationCode())) {
64   - return AjaxResult.error("容器已在库位[" + container.getLocationCode() + "]上");
  73 + return AjaxResult.error("容器已在库位" + container.getLocationCode() + "上");
65 74 }
66 75  
67 76 if (StringUtils.isNotEmpty(destinationLocation)) {
... ... @@ -72,7 +81,7 @@ public class WorkTaskService {
72 81 if (StringUtils.isNotEmpty(location.getContainerCode())) {
73 82 return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode());
74 83 }
75   - if ("empty".equals(location.getStatus())) {
  84 + if (!"empty".equals(location.getStatus())) {
76 85 return AjaxResult.error("目标库位非空闲");
77 86 }
78 87 }
... ... @@ -109,10 +118,15 @@ public class WorkTaskService {
109 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 126 LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate();
113 127 containerUpdateWrapper.eq(Container::getCode, container.getCode())
114 128 .set(Container::getStatus, "lock");
115   - if (containerService.update(container, containerUpdateWrapper)) {
  129 + if (!containerService.update(container, containerUpdateWrapper)) {
116 130 throw new ServiceException("容器状态更新失败");
117 131 }
118 132  
... ... @@ -144,7 +158,7 @@ public class WorkTaskService {
144 158 taskDetail.setToLocation(taskHeader.getToLocation());
145 159 taskDetail.setContainerCode(taskHeader.getContainerCode());
146 160  
147   - if(taskDetailService.save(taskDetail)){
  161 + if(!taskDetailService.save(taskDetail)){
148 162 throw new ServiceException("空托入库任务明细生成失败!");
149 163 }
150 164 //锁库位
... ... @@ -153,4 +167,99 @@ public class WorkTaskService {
153 167 }
154 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 }
... ...