Commit 63e6b8736d1dcebcecd473a58eb39acb7797d444

Authored by 肖超群
1 parent e52db63a

增加取消组盘 取消配盘功能

Showing 14 changed files with 273 additions and 196 deletions
ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
@@ -122,8 +122,8 @@ @@ -122,8 +122,8 @@
122 <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)">生成任务</a> 122 <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)">生成任务</a>
123 <a v-else-if="record.status == 0" @click="createTask(record)">生成任务</a> 123 <a v-else-if="record.status == 0" @click="createTask(record)">生成任务</a>
124 <a-divider type="vertical"/> 124 <a-divider type="vertical"/>
125 - <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">  
126 - <a>取消配盘</a> 125 + <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消组盘吗?" @confirm="() => handleDelete(record.id)">
  126 + <a>取消组盘</a>
127 </a-popconfirm> 127 </a-popconfirm>
128 <a-divider type="vertical"/> 128 <a-divider type="vertical"/>
129 <a-dropdown> 129 <a-dropdown>
ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
@@ -124,17 +124,17 @@ @@ -124,17 +124,17 @@
124 </template> 124 </template>
125 125
126 <span slot="action" slot-scope="text, record"> 126 <span slot="action" slot-scope="text, record">
127 - <a v-has="'shipmentContainerHeader:edit'" @click="handleEdit(record)">编辑</a>  
128 - <a-divider type="vertical"/>  
129 <a v-if="record.status == 0" @click="selectPort(record)">生成任务</a> 127 <a v-if="record.status == 0" @click="selectPort(record)">生成任务</a>
130 <a-divider type="vertical"/> 128 <a-divider type="vertical"/>
  129 + <a-popconfirm v-if="record.status == 0" v-has="'shipmentContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
  130 + <a>取消配盘</a>
  131 + </a-popconfirm>
  132 + <a-divider type="vertical"/>
131 <a-dropdown> 133 <a-dropdown>
132 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a> 134 <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
133 - <a-menu slot="overlay" v-has="'shipmentContainerHeader:delete'"> 135 + <a-menu slot="overlay" >
134 <a-menu-item> 136 <a-menu-item>
135 - <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">  
136 - <a>删除</a>  
137 - </a-popconfirm> 137 + <a v-has="'receiptContainerHeader:edit'" @click="handleEdit(record)">编辑</a>
138 </a-menu-item> 138 </a-menu-item>
139 </a-menu> 139 </a-menu>
140 </a-dropdown> 140 </a-dropdown>
huaheng-wms-core/pom.xml
1 <?xml version="1.0"?> 1 <?xml version="1.0"?>
2 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" 2 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
3 - xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 3 + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4 <modelVersion>4.0.0</modelVersion> 4 <modelVersion>4.0.0</modelVersion>
5 5
6 <parent> 6 <parent>
@@ -79,6 +79,12 @@ @@ -79,6 +79,12 @@
79 <artifactId>jimureport-spring-boot-starter</artifactId> 79 <artifactId>jimureport-spring-boot-starter</artifactId>
80 <version>1.4.32</version> 80 <version>1.4.32</version>
81 </dependency> 81 </dependency>
  82 +
  83 + <dependency>
  84 + <groupId>org.springframework.boot</groupId>
  85 + <artifactId>spring-boot-starter-validation</artifactId>
  86 + </dependency>
  87 +
82 </dependencies> 88 </dependencies>
83 89
84 <build> 90 <build>
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
@@ -338,12 +338,13 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -338,12 +338,13 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
338 List<ReceiptContainerDetail> receiptContainerDetailList = receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(id); 338 List<ReceiptContainerDetail> receiptContainerDetailList = receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(id);
339 for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) { 339 for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) {
340 ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()); 340 ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
341 - if (receiptDetail != null) {  
342 - receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD);  
343 - receiptDetail.setTaskQty(receiptDetail.getTaskQty().subtract(receiptContainerDetail.getQty()));  
344 - if (!receiptDetailService.updateById(receiptDetail)) {  
345 - throw new ServiceException("取消组盘失败, 更新入库明细失败id是" + receiptContainerDetail.getReceiptDetailId());  
346 - } 341 + if (receiptDetail == null) {
  342 + throw new ServiceException("取消组盘失败, 没有找到入库组盘详情id是" + receiptContainerDetail.getReceiptDetailId());
  343 + }
  344 + receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
  345 + receiptDetail.setTaskQty(receiptDetail.getTaskQty().subtract(receiptContainerDetail.getQty()));
  346 + if (!receiptDetailService.updateById(receiptDetail)) {
  347 + throw new ServiceException("取消组盘失败, 更新入库明细失败id是" + receiptContainerDetail.getReceiptDetailId());
347 } 348 }
348 if (!receiptContainerDetailService.removeById(receiptContainerDetail.getId())) { 349 if (!receiptContainerDetailService.removeById(receiptContainerDetail.getId())) {
349 throw new ServiceException("取消组盘失败, 删除入库组盘明细表失败id是" + receiptContainerDetail.getId()); 350 throw new ServiceException("取消组盘失败, 删除入库组盘明细表失败id是" + receiptContainerDetail.getId());
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
@@ -42,7 +42,6 @@ import org.springframework.web.multipart.MultipartFile; @@ -42,7 +42,6 @@ import org.springframework.web.multipart.MultipartFile;
42 import org.springframework.web.multipart.MultipartHttpServletRequest; 42 import org.springframework.web.multipart.MultipartHttpServletRequest;
43 import org.springframework.web.servlet.ModelAndView; 43 import org.springframework.web.servlet.ModelAndView;
44 44
45 -import com.aliyun.oss.ServiceException;  
46 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 45 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
47 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 46 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
48 import com.baomidou.mybatisplus.core.metadata.IPage; 47 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -142,7 +141,6 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec @@ -142,7 +141,6 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec
142 @DeleteMapping(value = "/delete") 141 @DeleteMapping(value = "/delete")
143 public Result<String> delete(@RequestParam(name = "id", required = true) String id) { 142 public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
144 receiptHeaderService.delMain(id, QuantityConstant.WMS_DELETE_RECEIPT); 143 receiptHeaderService.delMain(id, QuantityConstant.WMS_DELETE_RECEIPT);
145 -  
146 return Result.OK("删除成功!"); 144 return Result.OK("删除成功!");
147 } 145 }
148 146
@@ -251,26 +249,7 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec @@ -251,26 +249,7 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec
251 @RequiresPermissions("receiptDetail:delete") 249 @RequiresPermissions("receiptDetail:delete")
252 @DeleteMapping(value = "/deleteReceiptDetail") 250 @DeleteMapping(value = "/deleteReceiptDetail")
253 public Result<String> deleteReceiptDetail(@RequestParam(name = "id", required = true) String id) { 251 public Result<String> deleteReceiptDetail(@RequestParam(name = "id", required = true) String id) {
254 - ReceiptDetail receiptDetail = receiptDetailService.getById(id);  
255 - if (receiptDetail == null) {  
256 - return Result.error("删除失败, 没有找到入库单详情");  
257 - }  
258 - ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());  
259 - if (receiptHeader == null) {  
260 - return Result.error("删除失败, 没有找到入库单");  
261 - }  
262 - if (receiptHeader.getFirstStatus().intValue() != QuantityConstant.RECEIPT_HEADER_BUILD) {  
263 - return Result.error("删除失败, 入库单必须是新建状态才能删除详情");  
264 - }  
265 - boolean success = receiptDetailService.removeById(id);  
266 - if (!success) {  
267 - throw new ServiceException("删除详情失败");  
268 - }  
269 - success = receiptHeaderService.updateReceiptHeader(receiptDetail.getReceiptId());  
270 - if (!success) {  
271 - throw new ServiceException("更新入库单头数量失败");  
272 - }  
273 - return Result.OK("删除成功!"); 252 + return receiptDetailService.removeDetailById(id);
274 } 253 }
275 254
276 /** 255 /**
@@ -283,8 +262,7 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec @@ -283,8 +262,7 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec
283 @RequiresPermissions("receiptDetail:deleteBatch") 262 @RequiresPermissions("receiptDetail:deleteBatch")
284 @DeleteMapping(value = "/deleteBatchReceiptDetail") 263 @DeleteMapping(value = "/deleteBatchReceiptDetail")
285 public Result<String> deleteBatchReceiptDetail(@RequestParam(name = "ids", required = true) String ids) { 264 public Result<String> deleteBatchReceiptDetail(@RequestParam(name = "ids", required = true) String ids) {
286 - this.receiptDetailService.removeByIds(Arrays.asList(ids.split(",")));  
287 - return Result.OK("批量删除成功!"); 265 + return receiptDetailService.removeDetailListById(Arrays.asList(ids.split(",")));
288 } 266 }
289 267
290 /** 268 /**
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/entity/ReceiptDetail.java
1 package org.jeecg.modules.wms.receipt.receiptHeader.entity; 1 package org.jeecg.modules.wms.receipt.receiptHeader.entity;
2 2
3 import java.io.Serializable; 3 import java.io.Serializable;
  4 +import java.util.Date;
  5 +
  6 +import org.jeecg.common.aspect.annotation.Dict;
  7 +import org.jeecgframework.poi.excel.annotation.Excel;
  8 +
4 import com.baomidou.mybatisplus.annotation.IdType; 9 import com.baomidou.mybatisplus.annotation.IdType;
5 import com.baomidou.mybatisplus.annotation.TableId; 10 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 11 import com.baomidou.mybatisplus.annotation.TableName;
7 -import org.jeecg.common.aspect.annotation.Dict;  
8 -import lombok.Data;  
9 -import com.fasterxml.jackson.annotation.JsonFormat;  
10 -import org.springframework.format.annotation.DateTimeFormat;  
11 -import org.jeecgframework.poi.excel.annotation.Excel;  
12 -import java.util.Date; 12 +
13 import io.swagger.annotations.ApiModel; 13 import io.swagger.annotations.ApiModel;
14 import io.swagger.annotations.ApiModelProperty; 14 import io.swagger.annotations.ApiModelProperty;
15 -import java.io.UnsupportedEncodingException; 15 +import lombok.Data;
16 16
17 /** 17 /**
18 * @Description: 入库单详情 18 * @Description: 入库单详情
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/IReceiptDetailService.java
1 package org.jeecg.modules.wms.receipt.receiptHeader.service; 1 package org.jeecg.modules.wms.receipt.receiptHeader.service;
2 2
3 -import com.baomidou.mybatisplus.extension.service.IService; 3 +import java.util.List;
  4 +
4 import org.jeecg.common.api.vo.Result; 5 import org.jeecg.common.api.vo.Result;
5 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; 6 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
6 -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;  
7 7
8 -import java.util.List; 8 +import com.baomidou.mybatisplus.extension.service.IService;
9 9
10 /** 10 /**
11 * @Description: 入库单详情 11 * @Description: 入库单详情
@@ -18,4 +18,8 @@ public interface IReceiptDetailService extends IService&lt;ReceiptDetail&gt; { @@ -18,4 +18,8 @@ public interface IReceiptDetailService extends IService&lt;ReceiptDetail&gt; {
18 public List<ReceiptDetail> selectByMainId(String mainId); 18 public List<ReceiptDetail> selectByMainId(String mainId);
19 19
20 public Result saveReceiptDetail(ReceiptDetail receiptDetail); 20 public Result saveReceiptDetail(ReceiptDetail receiptDetail);
  21 +
  22 + public Result removeDetailById(String id);
  23 +
  24 + public Result removeDetailListById(List<String> idList);
21 } 25 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptDetailServiceImpl.java
1 package org.jeecg.modules.wms.receipt.receiptHeader.service.impl; 1 package org.jeecg.modules.wms.receipt.receiptHeader.service.impl;
2 2
3 -import com.alibaba.fastjson.JSON;  
4 -import com.aliyun.oss.ServiceException; 3 +import java.math.BigDecimal;
  4 +import java.util.ArrayList;
  5 +import java.util.List;
  6 +
  7 +import javax.annotation.Resource;
  8 +
5 import org.jeecg.common.api.vo.Result; 9 import org.jeecg.common.api.vo.Result;
6 import org.jeecg.modules.wms.config.material.entity.Material; 10 import org.jeecg.modules.wms.config.material.entity.Material;
7 import org.jeecg.modules.wms.config.material.service.IMaterialService; 11 import org.jeecg.modules.wms.config.material.service.IMaterialService;
@@ -13,19 +17,17 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService @@ -13,19 +17,17 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService
13 import org.jeecg.utils.HuahengJwtUtil; 17 import org.jeecg.utils.HuahengJwtUtil;
14 import org.jeecg.utils.StringUtils; 18 import org.jeecg.utils.StringUtils;
15 import org.jeecg.utils.constant.QuantityConstant; 19 import org.jeecg.utils.constant.QuantityConstant;
  20 +import org.springframework.beans.factory.annotation.Autowired;
16 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
  22 +import org.springframework.transaction.annotation.Transactional;
17 23
18 -import java.util.ArrayList;  
19 -import java.util.List; 24 +import com.alibaba.fastjson.JSON;
  25 +import com.aliyun.oss.ServiceException;
20 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 26 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
21 27
22 import cn.monitor4all.logRecord.annotation.OperationLog; 28 import cn.monitor4all.logRecord.annotation.OperationLog;
23 import cn.monitor4all.logRecord.context.LogRecordContext; 29 import cn.monitor4all.logRecord.context.LogRecordContext;
24 30
25 -import org.springframework.beans.factory.annotation.Autowired;  
26 -  
27 -import javax.annotation.Resource;  
28 -  
29 /** 31 /**
30 * @Description: 入库单详情 32 * @Description: 入库单详情
31 * @Author: jeecg-boot 33 * @Author: jeecg-boot
@@ -50,6 +52,16 @@ public class ReceiptDetailServiceImpl extends ServiceImpl&lt;ReceiptDetailMapper, R @@ -50,6 +52,16 @@ public class ReceiptDetailServiceImpl extends ServiceImpl&lt;ReceiptDetailMapper, R
50 } 52 }
51 53
52 @Override 54 @Override
  55 + public boolean save(ReceiptDetail entity) {
  56 + BigDecimal qty = entity.getQty();
  57 + if (qty.compareTo(BigDecimal.ZERO) < 0) {
  58 + throw new ServiceException("单据数量不能小于0");
  59 + }
  60 + return super.save(entity);
  61 + }
  62 +
  63 + @Override
  64 + @Transactional(rollbackFor = ServiceException.class)
53 @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库详情添加'", extra = "#extraJsonString", msg = "''", operatorId = "#username", recordReturnValue = true) 65 @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库详情添加'", extra = "#extraJsonString", msg = "''", operatorId = "#username", recordReturnValue = true)
54 public Result saveReceiptDetail(ReceiptDetail receiptDetail) { 66 public Result saveReceiptDetail(ReceiptDetail receiptDetail) {
55 ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId()); 67 ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
@@ -95,4 +107,43 @@ public class ReceiptDetailServiceImpl extends ServiceImpl&lt;ReceiptDetailMapper, R @@ -95,4 +107,43 @@ public class ReceiptDetailServiceImpl extends ServiceImpl&lt;ReceiptDetailMapper, R
95 LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(receiptDetailList)); 107 LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(receiptDetailList));
96 return Result.OK("添加成功!"); 108 return Result.OK("添加成功!");
97 } 109 }
  110 +
  111 + @Override
  112 + @Transactional(rollbackFor = ServiceException.class)
  113 + public Result removeDetailById(String id) {
  114 + ReceiptDetail receiptDetail = receiptDetailService.getById(id);
  115 + if (receiptDetail == null) {
  116 + return Result.error("删除失败, 没有找到入库单详情");
  117 + }
  118 + BigDecimal taskQty = receiptDetail.getTaskQty();
  119 + if (taskQty.compareTo(BigDecimal.ZERO) != 0) {
  120 + return Result.error("删除失败, 收货数量不为0");
  121 + }
  122 + ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
  123 + if (receiptHeader == null) {
  124 + return Result.error("删除失败, 没有找到入库单");
  125 + }
  126 + if (receiptHeader.getFirstStatus().intValue() != QuantityConstant.RECEIPT_HEADER_BUILD) {
  127 + return Result.error("删除失败, 入库单必须是新建状态才能删除详情");
  128 + }
  129 + boolean success = receiptDetailService.removeById(id);
  130 + if (!success) {
  131 + throw new ServiceException("删除详情失败");
  132 + }
  133 + success = receiptHeaderService.updateReceiptHeader(receiptDetail.getReceiptId());
  134 + if (!success) {
  135 + throw new ServiceException("更新入库单头数量失败");
  136 + }
  137 + return Result.OK("删除成功!");
  138 + }
  139 +
  140 + @Override
  141 + @Transactional(rollbackFor = ServiceException.class)
  142 + public Result removeDetailListById(List<String> idList) {
  143 + Result result = null;
  144 + for (String id : idList) {
  145 + result = removeDetailById(id);
  146 + }
  147 + return result;
  148 + }
98 } 149 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
1 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.controller; 1 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.controller;
2 2
3 -import org.apache.shiro.authz.annotation.RequiresPermissions;  
4 -import org.jeecg.common.system.query.QueryGenerator;  
5 -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;  
6 -import com.baomidou.mybatisplus.core.metadata.IPage;  
7 -import com.baomidou.mybatisplus.extension.plugins.pagination.Page;  
8 -import lombok.extern.slf4j.Slf4j;  
9 -import org.jeecg.common.system.base.controller.JeecgController;  
10 -import org.jeecg.common.api.vo.Result;  
11 -import org.springframework.beans.factory.annotation.Autowired;  
12 -import org.springframework.web.bind.annotation.*; 3 +import java.io.IOException;
  4 +import java.util.Arrays;
  5 +import java.util.List;
  6 +import java.util.Map;
  7 +import java.util.stream.Collectors;
  8 +
13 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse; 10 import javax.servlet.http.HttpServletResponse;
15 -import org.springframework.web.servlet.ModelAndView;  
16 -import java.util.Arrays; 11 +
  12 +import org.apache.shiro.SecurityUtils;
  13 +import org.apache.shiro.authz.annotation.RequiresPermissions;
  14 +import org.jeecg.common.api.vo.Result;
  15 +import org.jeecg.common.aspect.annotation.AutoLog;
  16 +import org.jeecg.common.system.base.controller.JeecgController;
  17 +import org.jeecg.common.system.query.QueryGenerator;
  18 +import org.jeecg.common.system.vo.LoginUser;
17 import org.jeecg.common.util.oConvertUtils; 19 import org.jeecg.common.util.oConvertUtils;
18 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail; 20 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
19 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader; 21 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
20 -import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService;  
21 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService; 22 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService;
22 -import io.swagger.annotations.Api;  
23 -import io.swagger.annotations.ApiOperation;  
24 -import org.jeecg.common.aspect.annotation.AutoLog;  
25 -import org.apache.shiro.SecurityUtils;  
26 -import org.jeecg.common.system.vo.LoginUser; 23 +import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService;
27 import org.jeecgframework.poi.excel.ExcelImportUtil; 24 import org.jeecgframework.poi.excel.ExcelImportUtil;
28 import org.jeecgframework.poi.excel.def.NormalExcelConstants; 25 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
29 import org.jeecgframework.poi.excel.entity.ExportParams; 26 import org.jeecgframework.poi.excel.entity.ExportParams;
30 import org.jeecgframework.poi.excel.entity.ImportParams; 27 import org.jeecgframework.poi.excel.entity.ImportParams;
31 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; 28 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
  29 +import org.springframework.beans.factory.annotation.Autowired;
  30 +import org.springframework.web.bind.annotation.*;
32 import org.springframework.web.multipart.MultipartFile; 31 import org.springframework.web.multipart.MultipartFile;
33 import org.springframework.web.multipart.MultipartHttpServletRequest; 32 import org.springframework.web.multipart.MultipartHttpServletRequest;
34 -import java.io.IOException;  
35 -import java.util.List;  
36 -import java.util.Map;  
37 -import java.util.stream.Collectors; 33 +import org.springframework.web.servlet.ModelAndView;
  34 +
  35 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  36 +import com.baomidou.mybatisplus.core.metadata.IPage;
  37 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  38 +
  39 +import io.swagger.annotations.Api;
  40 +import io.swagger.annotations.ApiOperation;
  41 +import lombok.extern.slf4j.Slf4j;
38 42
39 /** 43 /**
40 * @Description: 出库组盘 44 * @Description: 出库组盘
@@ -114,8 +118,8 @@ public class ShipmentContainerHeaderController extends JeecgController&lt;ShipmentC @@ -114,8 +118,8 @@ public class ShipmentContainerHeaderController extends JeecgController&lt;ShipmentC
114 @RequiresPermissions("shipmentContainerHeader:delete") 118 @RequiresPermissions("shipmentContainerHeader:delete")
115 @DeleteMapping(value = "/delete") 119 @DeleteMapping(value = "/delete")
116 public Result<String> delete(@RequestParam(name = "id", required = true) String id) { 120 public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
117 - shipmentContainerHeaderService.delMain(id);  
118 - return Result.OK("删除成功!"); 121 + Result result = shipmentContainerHeaderService.cancelCombine(Integer.parseInt(id));
  122 + return result;
119 } 123 }
120 124
121 /** 125 /**
@@ -128,8 +132,10 @@ public class ShipmentContainerHeaderController extends JeecgController&lt;ShipmentC @@ -128,8 +132,10 @@ public class ShipmentContainerHeaderController extends JeecgController&lt;ShipmentC
128 @RequiresPermissions("shipmentContainerHeader:deleteBatch") 132 @RequiresPermissions("shipmentContainerHeader:deleteBatch")
129 @DeleteMapping(value = "/deleteBatch") 133 @DeleteMapping(value = "/deleteBatch")
130 public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { 134 public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
131 - this.shipmentContainerHeaderService.delBatchMain(Arrays.asList(ids.split(",")));  
132 - return Result.OK("批量删除成功!"); 135 + List<String> idList = Arrays.asList(ids.split(","));
  136 + List<Integer> idInterList = idList.stream().map(Integer::parseInt).collect(Collectors.toList());
  137 + Result result = shipmentContainerHeaderService.cancelCombine(idInterList);
  138 + return result;
133 } 139 }
134 140
135 /** 141 /**
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java
1 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service; 1 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service;
2 2
3 -import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;  
4 -import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;  
5 -import com.baomidou.mybatisplus.extension.service.IService;  
6 -import org.springframework.beans.factory.annotation.Autowired;  
7 import java.io.Serializable; 3 import java.io.Serializable;
8 import java.util.Collection; 4 import java.util.Collection;
9 import java.util.List; 5 import java.util.List;
10 6
  7 +import org.jeecg.common.api.vo.Result;
  8 +import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
  9 +
  10 +import com.baomidou.mybatisplus.extension.service.IService;
  11 +
11 /** 12 /**
12 * @Description: 出库组盘 13 * @Description: 出库组盘
13 * @Author: jeecg-boot 14 * @Author: jeecg-boot
@@ -41,4 +42,16 @@ public interface IShipmentContainerHeaderService extends IService&lt;ShipmentContai @@ -41,4 +42,16 @@ public interface IShipmentContainerHeaderService extends IService&lt;ShipmentContai
41 * @return 42 * @return
42 */ 43 */
43 boolean cancelShipmentTask(Integer shipmentContainerHeaderId); 44 boolean cancelShipmentTask(Integer shipmentContainerHeaderId);
  45 +
  46 + /**
  47 + * 取消配盘
  48 + * @return
  49 + */
  50 + Result cancelCombine(Integer id);
  51 +
  52 + /**
  53 + * 取消配盘
  54 + * @return
  55 + */
  56 + Result cancelCombine(List<Integer> ids);
44 } 57 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java
1 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.impl; 1 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.impl;
2 2
3 -import com.aliyun.oss.ServiceException;  
4 -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
5 -import com.baomidou.mybatisplus.core.toolkit.Wrappers;  
6 -import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail;  
7 -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;  
8 -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;  
9 -import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader; 3 +import java.io.Serializable;
  4 +import java.util.ArrayList;
  5 +import java.util.Collection;
  6 +import java.util.List;
  7 +import java.util.stream.Collectors;
  8 +
  9 +import javax.annotation.Resource;
  10 +
  11 +import org.jeecg.common.api.vo.Result;
  12 +import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
  13 +import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
10 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail; 14 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
  15 +import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
11 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.mapper.ShipmentContainerDetailMapper; 16 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.mapper.ShipmentContainerDetailMapper;
12 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.mapper.ShipmentContainerHeaderMapper; 17 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.mapper.ShipmentContainerHeaderMapper;
13 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService; 18 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService;
14 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService; 19 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService;
15 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail; 20 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
16 -import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;  
17 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService; 21 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
18 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService; 22 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
19 import org.jeecg.utils.constant.QuantityConstant; 23 import org.jeecg.utils.constant.QuantityConstant;
20 -import org.springframework.stereotype.Service;  
21 -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;  
22 import org.springframework.beans.factory.annotation.Autowired; 24 import org.springframework.beans.factory.annotation.Autowired;
  25 +import org.springframework.stereotype.Service;
23 import org.springframework.transaction.annotation.Transactional; 26 import org.springframework.transaction.annotation.Transactional;
24 27
25 -import javax.annotation.Resource;  
26 -import java.io.Serializable;  
27 -import java.util.ArrayList;  
28 -import java.util.List;  
29 -import java.util.Collection;  
30 -import java.util.stream.Collectors; 28 +import com.aliyun.oss.ServiceException;
  29 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  30 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  31 +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
31 32
32 /** 33 /**
33 * @Description: 出库组盘 34 * @Description: 出库组盘
@@ -49,6 +50,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -49,6 +50,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
49 private IShipmentHeaderService shipmentHeaderService; 50 private IShipmentHeaderService shipmentHeaderService;
50 @Resource 51 @Resource
51 private IShipmentContainerDetailService shipmentContainerDetailService; 52 private IShipmentContainerDetailService shipmentContainerDetailService;
  53 + @Resource
  54 + private IInventoryDetailService inventoryDetailService;
52 55
53 @Override 56 @Override
54 @Transactional 57 @Transactional
@@ -164,4 +167,53 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont @@ -164,4 +167,53 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl&lt;ShipmentCont
164 return true; 167 return true;
165 } 168 }
166 169
  170 + @Override
  171 + @Transactional(rollbackFor = ServiceException.class)
  172 + public Result cancelCombine(Integer id) {
  173 + ShipmentContainerHeader shipmentContainerHeader = this.getById(id);
  174 + if (shipmentContainerHeader == null) {
  175 + return Result.error("取消出库配盘失败, 没有找到出库组盘头id是" + id);
  176 + }
  177 + int status = shipmentContainerHeader.getStatus();
  178 + if (status >= QuantityConstant.SHIPMENT_CONTAINER_TASK) {
  179 + return Result.error("取消出库配盘失败,已经生成出库任务");
  180 + }
  181 + List<ShipmentContainerDetail> shipmentContainerDetailList = shipmentContainerDetailService.getShipmentContainerDetailListByHeaderId(id);
  182 + for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetailList) {
  183 + ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentContainerDetail.getShipmentDetailId());
  184 + if (shipmentDetail == null) {
  185 + throw new ServiceException("取消出库配盘失败, 没有找到出库单详情id是" + shipmentContainerDetail.getShipmentDetailId());
  186 + }
  187 + shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_BUILD);
  188 + shipmentDetail.setTaskQty(shipmentDetail.getTaskQty().subtract(shipmentContainerDetail.getQty()));
  189 + if (!shipmentDetailService.updateById(shipmentDetail)) {
  190 + throw new ServiceException("取消出库配盘失败, 更新出库明细失败id是" + shipmentContainerDetail.getShipmentDetailId());
  191 + }
  192 + if (!shipmentContainerDetailService.removeById(shipmentContainerDetail.getId())) {
  193 + throw new ServiceException("取消出库配盘失败, 删除出库组盘明细表失败id是" + shipmentContainerDetail.getId());
  194 + }
  195 + if (!shipmentHeaderService.updateShipmentHeaderStatus(shipmentDetail.getShipmentId())) {
  196 + throw new ServiceException("取消出库配盘失败, 更新出库单头失败");
  197 + }
  198 + InventoryDetail inventoryDetail = inventoryDetailService.getById(shipmentContainerDetail.getInventoryDetailId());
  199 + inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().subtract(shipmentContainerDetail.getQty()));
  200 + if (!inventoryDetailService.updateById(inventoryDetail)) {
  201 + throw new ServiceException("取消出库配盘失败, 解锁库存详情失败");
  202 + }
  203 + }
  204 + if (!this.removeById(id)) {
  205 + throw new ServiceException("取消出库配盘失败, 删除出库组盘头表失败id是" + id);
  206 + }
  207 + return Result.ok("取消配盘成功");
  208 + }
  209 +
  210 + @Override
  211 + public Result cancelCombine(List<Integer> ids) {
  212 + Result result = null;
  213 + for (Integer id : ids) {
  214 + result = cancelCombine(id);
  215 + }
  216 + return result;
  217 + }
  218 +
167 } 219 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
@@ -3,6 +3,8 @@ package org.jeecg.modules.wms.task.taskHeader.entity; @@ -3,6 +3,8 @@ package org.jeecg.modules.wms.task.taskHeader.entity;
3 import java.io.Serializable; 3 import java.io.Serializable;
4 import java.util.Date; 4 import java.util.Date;
5 5
  6 +import javax.validation.constraints.NotEmpty;
  7 +
6 import org.jeecg.common.aspect.annotation.Dict; 8 import org.jeecg.common.aspect.annotation.Dict;
7 import org.jeecgframework.poi.excel.annotation.Excel; 9 import org.jeecgframework.poi.excel.annotation.Excel;
8 10
@@ -45,6 +47,7 @@ public class TaskHeader implements Serializable { @@ -45,6 +47,7 @@ public class TaskHeader implements Serializable {
45 /** 仓库 */ 47 /** 仓库 */
46 @Excel(name = "仓库", width = 15) 48 @Excel(name = "仓库", width = 15)
47 @ApiModelProperty(value = "仓库") 49 @ApiModelProperty(value = "仓库")
  50 + @NotEmpty(message = "仓库编码不能为空")
48 private String warehouseCode; 51 private String warehouseCode;
49 /** 货主 */ 52 /** 货主 */
50 @Excel(name = "货主", width = 15) 53 @Excel(name = "货主", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -6,16 +6,13 @@ import java.util.ArrayList; @@ -6,16 +6,13 @@ import java.util.ArrayList;
6 import java.util.Collection; 6 import java.util.Collection;
7 import java.util.Date; 7 import java.util.Date;
8 import java.util.List; 8 import java.util.List;
9 -import java.util.concurrent.CopyOnWriteArrayList;  
10 import java.util.stream.Collectors; 9 import java.util.stream.Collectors;
11 10
12 import javax.annotation.Resource; 11 import javax.annotation.Resource;
13 12
14 -import org.apache.poi.hpsf.Decimal;  
15 import org.apache.shiro.SecurityUtils; 13 import org.apache.shiro.SecurityUtils;
16 import org.jeecg.common.api.vo.Result; 14 import org.jeecg.common.api.vo.Result;
17 import org.jeecg.common.system.vo.LoginUser; 15 import org.jeecg.common.system.vo.LoginUser;
18 -import org.jeecg.modules.system.entity.SysDepartRolePermission;  
19 import org.jeecg.modules.wms.api.wcs.service.LocationAllocationService; 16 import org.jeecg.modules.wms.api.wcs.service.LocationAllocationService;
20 import org.jeecg.modules.wms.api.wcs.service.WcsService; 17 import org.jeecg.modules.wms.api.wcs.service.WcsService;
21 import org.jeecg.modules.wms.config.container.entity.Container; 18 import org.jeecg.modules.wms.config.container.entity.Container;
@@ -26,7 +23,6 @@ import org.jeecg.modules.wms.config.locationHigh.entity.LocationHigh; @@ -26,7 +23,6 @@ import org.jeecg.modules.wms.config.locationHigh.entity.LocationHigh;
26 import org.jeecg.modules.wms.config.locationHigh.service.ILocationHighService; 23 import org.jeecg.modules.wms.config.locationHigh.service.ILocationHighService;
27 import org.jeecg.modules.wms.config.locationType.entity.LocationType; 24 import org.jeecg.modules.wms.config.locationType.entity.LocationType;
28 import org.jeecg.modules.wms.config.locationType.service.ILocationTypeService; 25 import org.jeecg.modules.wms.config.locationType.service.ILocationTypeService;
29 -import org.jeecg.modules.wms.config.material.service.IMaterialService;  
30 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; 26 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
31 import org.jeecg.modules.wms.config.port.entity.Port; 27 import org.jeecg.modules.wms.config.port.entity.Port;
32 import org.jeecg.modules.wms.config.port.service.IPortService; 28 import org.jeecg.modules.wms.config.port.service.IPortService;
@@ -63,7 +59,6 @@ import org.jeecg.modules.wms.task.taskHeader.mapper.TaskDetailMapper; @@ -63,7 +59,6 @@ import org.jeecg.modules.wms.task.taskHeader.mapper.TaskDetailMapper;
63 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper; 59 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper;
64 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService; 60 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
65 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; 61 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
66 -import org.jeecg.utils.HuahengJwtUtil;  
67 import org.jeecg.utils.StringUtils; 62 import org.jeecg.utils.StringUtils;
68 import org.jeecg.utils.constant.QuantityConstant; 63 import org.jeecg.utils.constant.QuantityConstant;
69 import org.springframework.beans.factory.annotation.Autowired; 64 import org.springframework.beans.factory.annotation.Autowired;
@@ -1395,7 +1390,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1395,7 +1390,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1395 if (!success) { 1390 if (!success) {
1396 throw new ServiceException("完成分拣出库任务,更新目标库位失败"); 1391 throw new ServiceException("完成分拣出库任务,更新目标库位失败");
1397 } 1392 }
1398 - success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, containerStatus, warehouseCode); 1393 + success = containerService.updateStatus(containerCode, containerStatus, warehouseCode);
1399 if (!success) { 1394 if (!success) {
1400 throw new ServiceException("完成分拣出库任务,更新容器失败"); 1395 throw new ServiceException("完成分拣出库任务,更新容器失败");
1401 } 1396 }
@@ -1515,73 +1510,62 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1515,73 +1510,62 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1515 return Result.OK("完成空托盘入库成功"); 1510 return Result.OK("完成空托盘入库成功");
1516 } 1511 }
1517 1512
1518 -  
1519 -  
1520 -  
1521 /** 1513 /**
1522 * 盘点完成 1514 * 盘点完成
1523 - *盘点有差异完成时状态为105  
1524 - * @param taskHeader 1515 + * 盘点有差异完成时状态为105
  1516 + * @param taskHeader
1525 * @return 1517 * @return
1526 */ 1518 */
1527 @Transactional(rollbackFor = Exception.class) 1519 @Transactional(rollbackFor = Exception.class)
1528 public Result completeCycleCountTask(TaskHeader taskHeader) { 1520 public Result completeCycleCountTask(TaskHeader taskHeader) {
1529 - /*盘点完成,传入任务主单,查出任务明细,通过任务明细查找盘点的明细单,  
1530 - 完成任务同时,修改盘点细单和主单的状态,完成后库存锁复位*/ 1521 + /*
  1522 + * 盘点完成,传入任务主单,查出任务明细,通过任务明细查找盘点的明细单,
  1523 + * 完成任务同时,修改盘点细单和主单的状态,完成后库存锁复位
  1524 + */
1531 1525
1532 - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); 1526 + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
1533 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); 1527 taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
1534 - //更新用户 1528 + // 更新用户
1535 taskHeader.setUpdateBy(sysUser.getUsername()); 1529 taskHeader.setUpdateBy(sysUser.getUsername());
1536 - //更新时间 1530 + // 更新时间
1537 taskHeader.setUpdateTime(new Date()); 1531 taskHeader.setUpdateTime(new Date());
1538 1532
1539 -  
1540 - //1.先拿到盘点单主单据 1533 + // 1.先拿到盘点单主单据
1541 CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(taskHeader.getShipmentContainerHeaderId()); 1534 CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(taskHeader.getShipmentContainerHeaderId());
1542 1535
1543 - if ((cycleCountDetail.getCountedQty().add(cycleCountDetail.getGapQty())).compareTo(BigDecimal.ZERO)==0)  
1544 - {  
1545 - return Result.error("盘点单据系统实盘数量跟差异数量0,不能完成 单据号" +cycleCountDetail.getCycleCountHeadCode()); 1536 + if ((cycleCountDetail.getCountedQty().add(cycleCountDetail.getGapQty())).compareTo(BigDecimal.ZERO) == 0) {
  1537 + return Result.error("盘点单据系统实盘数量跟差异数量0,不能完成 单据号" + cycleCountDetail.getCycleCountHeadCode());
1546 } 1538 }
1547 1539
1548 - //2.盘点单主单据查明细单据list 1540 + // 2.盘点单主单据查明细单据list
1549 LambdaQueryWrapper<CycleCountDetailChild> childLambdaQueryWrapper = new LambdaQueryWrapper<CycleCountDetailChild>(); 1541 LambdaQueryWrapper<CycleCountDetailChild> childLambdaQueryWrapper = new LambdaQueryWrapper<CycleCountDetailChild>();
1550 - childLambdaQueryWrapper.eq(CycleCountDetailChild::getCycleCountDetailid,cycleCountDetail.getId()); 1542 + childLambdaQueryWrapper.eq(CycleCountDetailChild::getCycleCountDetailid, cycleCountDetail.getId());
1551 List<CycleCountDetailChild> children = cycleCountDetailChildService.list(childLambdaQueryWrapper); 1543 List<CycleCountDetailChild> children = cycleCountDetailChildService.list(childLambdaQueryWrapper);
1552 1544
1553 - //3.单据list如果差异数量+生成入库单,差异数-生成出库单进行回传类型其他出库单  
1554 - 1545 + // 3.单据list如果差异数量+生成入库单,差异数-生成出库单进行回传类型其他出库单
1555 1546
1556 InventoryHeader inventoryHeader = inventoryHeaderService.getById(cycleCountDetail.getInventoryHeaderId()); 1547 InventoryHeader inventoryHeader = inventoryHeaderService.getById(cycleCountDetail.getInventoryHeaderId());
1557 1548
1558 - int outboundOrderId=0;  
1559 - String outboundOrderCode=null;  
1560 - int warehousingOrderId=0;  
1561 - String warehousingOrderCode=null; 1549 + int outboundOrderId = 0;
  1550 + String outboundOrderCode = null;
  1551 + int warehousingOrderId = 0;
  1552 + String warehousingOrderCode = null;
1562 1553
1563 -  
1564 - for (CycleCountDetailChild child : children)  
1565 - {  
1566 - if (!child.getChildStatus().equals(QuantityConstant.CYCLECOUNT_STATUS_REGISTERED))  
1567 - { 1554 + for (CycleCountDetailChild child : children) {
  1555 + if (!child.getChildStatus().equals(QuantityConstant.CYCLECOUNT_STATUS_REGISTERED)) {
1568 throw new ServiceException("当前任务里面还有没有进行登记的数据,不能完成任务"); 1556 throw new ServiceException("当前任务里面还有没有进行登记的数据,不能完成任务");
1569 } 1557 }
1570 1558
1571 -  
1572 - if (child.getInventoryDetaiId()!=null)  
1573 - { 1559 + if (child.getInventoryDetaiId() != null) {
1574 InventoryDetail inventoryDetail = inventoryDetailService.getById(child.getInventoryDetaiId()); 1560 InventoryDetail inventoryDetail = inventoryDetailService.getById(child.getInventoryDetaiId());
1575 - if (inventoryDetail==null)  
1576 - { 1561 + if (inventoryDetail == null) {
1577 throw new ServiceException("盘点还没完成 库存明细单据就不存在了 可能出现了问题或者所容器没成功"); 1562 throw new ServiceException("盘点还没完成 库存明细单据就不存在了 可能出现了问题或者所容器没成功");
1578 } 1563 }
1579 inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(child.getGapQty())); 1564 inventoryHeader.setTotalQty(inventoryHeader.getTotalQty().add(child.getGapQty()));
1580 inventoryDetail.setQty(child.getCountedQty()); 1565 inventoryDetail.setQty(child.getCountedQty());
1581 inventoryDetailService.updateById(inventoryDetail); 1566 inventoryDetailService.updateById(inventoryDetail);
1582 - }else  
1583 - {  
1584 - InventoryDetail inventoryDetail=new InventoryDetail(); 1567 + } else {
  1568 + InventoryDetail inventoryDetail = new InventoryDetail();
1585 inventoryDetail.setInventoryHeaderId(inventoryHeader.getId()); 1569 inventoryDetail.setInventoryHeaderId(inventoryHeader.getId());
1586 inventoryDetail.setWarehouseCode(inventoryHeader.getWarehouseCode()); 1570 inventoryDetail.setWarehouseCode(inventoryHeader.getWarehouseCode());
1587 inventoryDetail.setCompanyCode(inventoryHeader.getCompanyCode()); 1571 inventoryDetail.setCompanyCode(inventoryHeader.getCompanyCode());
@@ -1600,30 +1584,27 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1600,30 +1584,27 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1600 child.setInventoryDetaiId(inventoryDetail.getId()); 1584 child.setInventoryDetaiId(inventoryDetail.getId());
1601 } 1585 }
1602 1586
1603 -  
1604 child.setChildStatus(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED); 1587 child.setChildStatus(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED);
1605 - if (child.getGapQty().compareTo(BigDecimal.ZERO) == 1)  
1606 - {  
1607 - if (warehousingOrderId==0) { 1588 + if (child.getGapQty().compareTo(BigDecimal.ZERO) == 1) {
  1589 + if (warehousingOrderId == 0) {
1608 ReceiptHeader receiptHeader = new ReceiptHeader(); 1590 ReceiptHeader receiptHeader = new ReceiptHeader();
1609 receiptHeader.setWarehouseCode(taskHeader.getWarehouseCode()); 1591 receiptHeader.setWarehouseCode(taskHeader.getWarehouseCode());
1610 receiptHeader.setCompanyCode(taskHeader.getCompanyCode()); 1592 receiptHeader.setCompanyCode(taskHeader.getCompanyCode());
1611 receiptHeader.setType(QuantityConstant.RECEIPT_BILL_TYPE_OR); 1593 receiptHeader.setType(QuantityConstant.RECEIPT_BILL_TYPE_OR);
1612 - receiptHeader.setRemark("盘盈 单号"+cycleCountDetail.getCycleCountHeadCode()); 1594 + receiptHeader.setRemark("盘盈 单号" + cycleCountDetail.getCycleCountHeadCode());
1613 Result result = receiptHeaderService.saveReceiptHeader(receiptHeader); 1595 Result result = receiptHeaderService.saveReceiptHeader(receiptHeader);
1614 - if (result.getCode() != 200)  
1615 - { 1596 + if (result.getCode() != 200) {
1616 return result; 1597 return result;
1617 } 1598 }
1618 receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); 1599 receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
1619 receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); 1600 receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
1620 receiptHeaderService.updateById(receiptHeader); 1601 receiptHeaderService.updateById(receiptHeader);
1621 - //生成入库单并且赋值给warehousingOrderId  
1622 - warehousingOrderId=receiptHeader.getId();  
1623 - warehousingOrderCode=receiptHeader.getCode(); 1602 + // 生成入库单并且赋值给warehousingOrderId
  1603 + warehousingOrderId = receiptHeader.getId();
  1604 + warehousingOrderCode = receiptHeader.getCode();
1624 } 1605 }
1625 1606
1626 - //生成明细 1607 + // 生成明细
1627 ReceiptDetail receiptDetail = new ReceiptDetail(); 1608 ReceiptDetail receiptDetail = new ReceiptDetail();
1628 receiptDetail.setReceiptId(warehousingOrderId); 1609 receiptDetail.setReceiptId(warehousingOrderId);
1629 receiptDetail.setReceiptCode(warehousingOrderCode); 1610 receiptDetail.setReceiptCode(warehousingOrderCode);
@@ -1641,8 +1622,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1641,8 +1622,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1641 receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); 1622 receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
1642 receiptDetailService.save(receiptDetail); 1623 receiptDetailService.save(receiptDetail);
1643 1624
1644 - //增加库存交易记录  
1645 - InventoryTransaction inventoryTransaction=new InventoryTransaction(); 1625 + // 增加库存交易记录
  1626 + InventoryTransaction inventoryTransaction = new InventoryTransaction();
1646 inventoryTransaction.setWarehouseCode(taskHeader.getWarehouseCode()); 1627 inventoryTransaction.setWarehouseCode(taskHeader.getWarehouseCode());
1647 inventoryTransaction.setCompanyCode(taskHeader.getCompanyCode()); 1628 inventoryTransaction.setCompanyCode(taskHeader.getCompanyCode());
1648 inventoryTransaction.setContainerCode(child.getContainerCode()); 1629 inventoryTransaction.setContainerCode(child.getContainerCode());
@@ -1662,38 +1643,31 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1662,38 +1643,31 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1662 1643
1663 } 1644 }
1664 1645
  1646 + if (child.getGapQty().compareTo(BigDecimal.ZERO) == -1) {
1665 1647
1666 -  
1667 - if (child.getGapQty().compareTo(BigDecimal.ZERO) == -1)  
1668 - {  
1669 -  
1670 - if (child.getGapQty().abs().compareTo(child.getSystemQty()) > -1)  
1671 - { 1648 + if (child.getGapQty().abs().compareTo(child.getSystemQty()) > -1) {
1672 inventoryDetailService.removeById(child.getInventoryDetaiId()); 1649 inventoryDetailService.removeById(child.getInventoryDetaiId());
1673 } 1650 }
1674 1651
1675 -  
1676 - if (outboundOrderId==0)  
1677 - { 1652 + if (outboundOrderId == 0) {
1678 ShipmentHeader shipmentHeader = new ShipmentHeader(); 1653 ShipmentHeader shipmentHeader = new ShipmentHeader();
1679 shipmentHeader.setWarehouseCode(taskHeader.getWarehouseCode()); 1654 shipmentHeader.setWarehouseCode(taskHeader.getWarehouseCode());
1680 shipmentHeader.setCompanyCode(taskHeader.getCompanyCode()); 1655 shipmentHeader.setCompanyCode(taskHeader.getCompanyCode());
1681 shipmentHeader.setType(QuantityConstant.SHIPMENT_BILL_TYPE_OS); 1656 shipmentHeader.setType(QuantityConstant.SHIPMENT_BILL_TYPE_OS);
1682 - shipmentHeader.setRemark("盘亏 单号"+cycleCountDetail.getCycleCountHeadCode()); 1657 + shipmentHeader.setRemark("盘亏 单号" + cycleCountDetail.getCycleCountHeadCode());
1683 Result result = shipmentHeaderService.saveShipmentHeader(shipmentHeader); 1658 Result result = shipmentHeaderService.saveShipmentHeader(shipmentHeader);
1684 - if (result.getCode() != 200)  
1685 - { 1659 + if (result.getCode() != 200) {
1686 return result; 1660 return result;
1687 } 1661 }
1688 shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); 1662 shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
1689 shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); 1663 shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
1690 shipmentHeaderService.updateById(shipmentHeader); 1664 shipmentHeaderService.updateById(shipmentHeader);
1691 - //生成出库单并且赋值给outboundOrderId  
1692 - outboundOrderId=shipmentHeader.getId();  
1693 - outboundOrderCode=shipmentHeader.getCode(); 1665 + // 生成出库单并且赋值给outboundOrderId
  1666 + outboundOrderId = shipmentHeader.getId();
  1667 + outboundOrderCode = shipmentHeader.getCode();
1694 1668
1695 } 1669 }
1696 - //生成明细 1670 + // 生成明细
1697 ShipmentDetail shipmentDetail = new ShipmentDetail(); 1671 ShipmentDetail shipmentDetail = new ShipmentDetail();
1698 shipmentDetail.setShipmentId(outboundOrderId); 1672 shipmentDetail.setShipmentId(outboundOrderId);
1699 shipmentDetail.setShipmentCode(outboundOrderCode); 1673 shipmentDetail.setShipmentCode(outboundOrderCode);
@@ -1711,7 +1685,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1711,7 +1685,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1711 shipmentDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED); 1685 shipmentDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
1712 shipmentDetailService.save(shipmentDetail); 1686 shipmentDetailService.save(shipmentDetail);
1713 1687
1714 - InventoryTransaction inventoryTransaction=new InventoryTransaction(); 1688 + InventoryTransaction inventoryTransaction = new InventoryTransaction();
1715 inventoryTransaction.setWarehouseCode(taskHeader.getWarehouseCode()); 1689 inventoryTransaction.setWarehouseCode(taskHeader.getWarehouseCode());
1716 inventoryTransaction.setCompanyCode(taskHeader.getCompanyCode()); 1690 inventoryTransaction.setCompanyCode(taskHeader.getCompanyCode());
1717 inventoryTransaction.setContainerCode(child.getContainerCode()); 1691 inventoryTransaction.setContainerCode(child.getContainerCode());
@@ -1732,45 +1706,33 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1732,45 +1706,33 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1732 cycleCountDetailChildService.updateById(child); 1706 cycleCountDetailChildService.updateById(child);
1733 } 1707 }
1734 1708
1735 -  
1736 - if (inventoryHeader.getTotalQty().compareTo(BigDecimal.ZERO)<1)  
1737 - { 1709 + if (inventoryHeader.getTotalQty().compareTo(BigDecimal.ZERO) < 1) {
1738 inventoryHeaderService.removeById(inventoryHeader); 1710 inventoryHeaderService.removeById(inventoryHeader);
1739 } 1711 }
1740 1712
1741 inventoryHeaderService.updateById(inventoryHeader); 1713 inventoryHeaderService.updateById(inventoryHeader);
1742 1714
1743 - //4.完成当前任务 1715 + // 4.完成当前任务
1744 if (!taskHeaderService.saveOrUpdate(taskHeader)) { 1716 if (!taskHeaderService.saveOrUpdate(taskHeader)) {
1745 throw new ServiceException("盘点任务单据状态更新失败!"); 1717 throw new ServiceException("盘点任务单据状态更新失败!");
1746 } 1718 }
1747 - //盘点明细状态 1719 + // 盘点明细状态
1748 cycleCountDetail.setEnableStatus(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED); 1720 cycleCountDetail.setEnableStatus(QuantityConstant.CYCLECOUNT_STATUS_COMPLETED);
1749 cycleCountDetail.setCompletedBy(sysUser.getUsername()); 1721 cycleCountDetail.setCompletedBy(sysUser.getUsername());
1750 cycleCountDetail.setCompletedAt(new Date()); 1722 cycleCountDetail.setCompletedAt(new Date());
1751 cycleCountDetailService.updateById(cycleCountDetail); 1723 cycleCountDetailService.updateById(cycleCountDetail);
1752 - //更新主单状态 1724 + // 更新主单状态
1753 cycleCountHeaderService.updataHeaderStatus(cycleCountDetail.getCycleCountHeadCode()); 1725 cycleCountHeaderService.updataHeaderStatus(cycleCountDetail.getCycleCountHeadCode());
1754 1726
  1727 + // 释放库位
  1728 + locationService.updateStatus(cycleCountDetail.getLocationCode(), QuantityConstant.STATUS_LOCATION_EMPTY, taskHeader.getWarehouseCode());
1755 1729
1756 - //释放库位  
1757 - locationService.updateStatus(cycleCountDetail.getLocationCode(),  
1758 - QuantityConstant.STATUS_LOCATION_EMPTY, taskHeader.getWarehouseCode());  
1759 -  
1760 -  
1761 - //还原容器状态  
1762 - containerService.restoreContainer(cycleCountDetail.getContainerCode(),taskHeader.getWarehouseCode()); 1730 + // 还原容器状态
  1731 + containerService.restoreContainer(cycleCountDetail.getContainerCode(), taskHeader.getWarehouseCode());
1763 1732
1764 return Result.OK("完成盘点任务成功"); 1733 return Result.OK("完成盘点任务成功");
1765 } 1734 }
1766 1735
1767 -  
1768 -  
1769 -  
1770 -  
1771 -  
1772 -  
1773 -  
1774 /** 1736 /**
1775 * 完成空托盘出库任务 1737 * 完成空托盘出库任务
1776 * @param taskHeader 任务 1738 * @param taskHeader 任务
huaheng-wms-core/src/main/java/org/jeecg/utils/interceptor/HuahengBatisInterceptor.java
@@ -12,6 +12,7 @@ import org.apache.ibatis.plugin.*; @@ -12,6 +12,7 @@ import org.apache.ibatis.plugin.*;
12 import org.apache.shiro.SecurityUtils; 12 import org.apache.shiro.SecurityUtils;
13 import org.jeecg.common.system.vo.LoginUser; 13 import org.jeecg.common.system.vo.LoginUser;
14 import org.jeecg.common.util.oConvertUtils; 14 import org.jeecg.common.util.oConvertUtils;
  15 +import org.jeecg.utils.HuahengJwtUtil;
15 import org.springframework.stereotype.Component; 16 import org.springframework.stereotype.Component;
16 17
17 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
@@ -113,7 +114,7 @@ public class HuahengBatisInterceptor implements Interceptor { @@ -113,7 +114,7 @@ public class HuahengBatisInterceptor implements Interceptor {
113 if (sysUser != null) { 114 if (sysUser != null) {
114 // 登录账号 115 // 登录账号
115 field.setAccessible(true); 116 field.setAccessible(true);
116 - field.set(parameter, sysUser.getRealname()); 117 + field.set(parameter, HuahengJwtUtil.getCurrentOperator());
117 field.setAccessible(false); 118 field.setAccessible(false);
118 } 119 }
119 } 120 }