|
|
@@ -30,6 +30,7 @@ import com.trade.purchase.order.enums.OrderTypeEnum;
|
|
|
import io.seata.spring.annotation.GlobalTransactional;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import net.logstash.logback.encoder.org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
import org.springblade.check.dto.AuditProecessDTO;
|
|
|
import org.springblade.check.entity.AuditPathsActs;
|
|
|
import org.springblade.check.entity.AuditPathsLevels;
|
|
|
@@ -272,9 +273,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
} else {
|
|
|
substring = substring + corpMessage.getData().getCode();
|
|
|
}
|
|
|
+ Date date1 = new Date();
|
|
|
+ String yyyyMM = DateFormatUtils.format(date1, "yy");
|
|
|
List<DocumentRecovery> documentRecovery = documentRecoveryService.list(new LambdaQueryWrapper<DocumentRecovery>()
|
|
|
.eq(DocumentRecovery::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(DocumentRecovery::getIsDeleted, 0)
|
|
|
+ .eq(DocumentRecovery::getSerialType, order.getBillType())
|
|
|
+ .eq(DocumentRecovery::getBillPrefix, yyyyMM)
|
|
|
.eq(DocumentRecovery::getCorpCode, corpMessage.getData().getCode())
|
|
|
.orderByDesc(DocumentRecovery::getCreateTime));
|
|
|
if (documentRecovery.size() > 0) {
|
|
|
@@ -1229,17 +1234,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
.eq(OrderItems::getPid, salesOrder.getId())
|
|
|
.eq(OrderItems::getIsDeleted, 0);
|
|
|
List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
|
|
|
-
|
|
|
- //从缓存中获得库存
|
|
|
-// redisClient.basicData("all");
|
|
|
-// List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
|
|
|
+ //去重
|
|
|
+ List<Long> list = orderItems.stream().map(OrderItems::getItemId).distinct().collect(Collectors.toList());
|
|
|
+ //获取去重之后数据
|
|
|
+ List<OrderItems> reducelList = orderItems.stream().filter(e -> list.contains(e.getItemId())).collect(Collectors.toList());
|
|
|
+ //获得库存
|
|
|
List<StockGoods> stockGoodsList = stockGoodsClient.selectStockGoodsAll();
|
|
|
List<StockGoods> stockGoods = new ArrayList<>();
|
|
|
List<StockGoodsLog> stockGoodsLogList = new ArrayList<>();
|
|
|
Date date = new Date();
|
|
|
- if (CollectionUtils.isNotEmpty(orderItems)) {
|
|
|
- int i = 1;
|
|
|
- for (OrderItems item : orderItems) {
|
|
|
+ if (CollectionUtils.isNotEmpty(reducelList)) {
|
|
|
+ for (OrderItems item : reducelList) {
|
|
|
StockGoodsLog stockGoodsLog = new StockGoodsLog();
|
|
|
stockGoodsLog.setTime(date);
|
|
|
stockGoodsLog.setSrcOrderId(salesOrder.getId());
|
|
|
@@ -1258,8 +1263,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if (oneStock == null) {
|
|
|
throw new SecurityException("锁定库存失败:未查询到库存信息");
|
|
|
}
|
|
|
- // 原单据的订货数量
|
|
|
- BigDecimal orderQuantity = item.getOrderQuantity();
|
|
|
+ // 原单据的订货数量(和)
|
|
|
+ BigDecimal orderQuantity = orderItems.stream().filter(e->e.getItemId().equals(item.getItemId()))
|
|
|
+ .collect(Collectors.toList()).stream().map(OrderItems::getOrderQuantity)
|
|
|
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 可用库存
|
|
|
BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
|
|
|
// 锁定库存
|
|
|
@@ -1273,7 +1280,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
|
|
|
// 判断比较大小
|
|
|
if (orderQuantity.compareTo(surplusRouteQuantity) > 0) {
|
|
|
- throw new SecurityException("锁定库存失败:第" + i + "行订货数量大于可用库存,无法锁定");
|
|
|
+ throw new SecurityException("锁定库存失败:" + oneStock.getCode() + "订货数量大于可用库存,无法锁定");
|
|
|
}
|
|
|
if (surplusRouteQuantity == null) {
|
|
|
throw new SecurityException("锁定库存失败:可用库存为空,禁止操作");
|
|
|
@@ -1290,7 +1297,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
stockGoodsLog.setSurplusRouteQuantity(oneStock.getSurplusRouteQuantity());
|
|
|
stockGoodsLog.setLockingQuantity(oneStock.getLockingQuantity());
|
|
|
stockGoodsLogList.add(stockGoodsLog);
|
|
|
- i++;
|
|
|
}
|
|
|
// 更新库存
|
|
|
R goods = stockGoodsClient.updateStockList(stockGoods);
|
|
|
@@ -1750,15 +1756,20 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
.eq(OrderItems::getPid, orderMessage.getId())
|
|
|
.eq(OrderItems::getIsDeleted, 0);
|
|
|
List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
|
|
|
+ //去重
|
|
|
+ List<Long> list = orderItems.stream().map(OrderItems::getItemId).distinct().collect(Collectors.toList());
|
|
|
+ //获取去重之后数据
|
|
|
+ List<OrderItems> reducelList = orderItems.stream().filter(e -> list.contains(e.getItemId())).collect(Collectors.toList());
|
|
|
|
|
|
//从缓存中获得库存
|
|
|
redisClient.basicData("all");
|
|
|
List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
|
|
|
|
|
|
- if (CollectionUtils.isNotEmpty(orderItems)) {
|
|
|
+ if (CollectionUtils.isNotEmpty(reducelList)) {
|
|
|
List<StockGoodsLog> stockGoodsLogList = new ArrayList<>();
|
|
|
+ List<StockGoods> stockGoodsArrayList = new ArrayList<>();
|
|
|
Date date = new Date();
|
|
|
- orderItems.forEach(e -> {
|
|
|
+ reducelList.forEach(e -> {
|
|
|
StockGoodsLog stockGoodsLog = new StockGoodsLog();
|
|
|
stockGoodsLog.setTime(date);
|
|
|
stockGoodsLog.setSrcOrderId(orderMessage.getId());
|
|
|
@@ -1779,7 +1790,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
throw new SecurityException("撤销失败:未查询到库存信息");
|
|
|
}
|
|
|
// 原单据的订货数量
|
|
|
- BigDecimal orderQuantity = e.getOrderQuantity();
|
|
|
+ BigDecimal orderQuantity = orderItems.stream().filter(i->i.getItemId().equals(e.getItemId()))
|
|
|
+ .collect(Collectors.toList()).stream().map(OrderItems::getOrderQuantity)
|
|
|
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 可用库存
|
|
|
BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
|
|
|
// 锁定库存
|
|
|
@@ -1801,18 +1814,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
oneStock.setThisLockingQuantity(new BigDecimal("0").subtract(orderQuantity));
|
|
|
// 减少锁定库存
|
|
|
oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0") : lockingQuantity.subtract(orderQuantity));
|
|
|
- // 更新库存
|
|
|
- R res = stockGoodsClient.updateStock(oneStock);
|
|
|
- if (!res.isSuccess()) {
|
|
|
-// throw new SecurityException("撤销失败: " + oneStock.getCode() + "更新库存失败");
|
|
|
- throw new SecurityException(res.getMsg());
|
|
|
- }
|
|
|
+ stockGoodsArrayList.add(oneStock);
|
|
|
stockGoodsLog.setBalanceQuantity(oneStock.getBalanceQuantity());
|
|
|
stockGoodsLog.setSurplusRouteQuantity(oneStock.getSurplusRouteQuantity());
|
|
|
stockGoodsLog.setLockingQuantity(oneStock.getLockingQuantity());
|
|
|
stockGoodsLogList.add(stockGoodsLog);
|
|
|
|
|
|
});
|
|
|
+ // 更新库存
|
|
|
+ R res = stockGoodsClient.updateStockList(stockGoodsArrayList);
|
|
|
+ if (!res.isSuccess()) {
|
|
|
+// throw new SecurityException("撤销失败: " + oneStock.getCode() + "更新库存失败");
|
|
|
+ throw new SecurityException(res.getMsg());
|
|
|
+ }
|
|
|
stockGoodsClient.saveOrUpdateBatchListLog(stockGoodsLogList);
|
|
|
}
|
|
|
}
|
|
|
@@ -1989,17 +2003,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
.eq(OrderItems::getIsDeleted, 0);
|
|
|
List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
|
|
|
|
|
|
+ //去重
|
|
|
+ List<Long> list = orderItems.stream().map(OrderItems::getItemId).distinct().collect(Collectors.toList());
|
|
|
+ //获取去重之后数据
|
|
|
+ List<OrderItems> reducelList = orderItems.stream().filter(e -> list.contains(e.getItemId())).collect(Collectors.toList());
|
|
|
+
|
|
|
//从缓存中获得库存
|
|
|
// redisClient.basicData("all");
|
|
|
// List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
|
|
|
List<StockGoods> stockGoodsList = stockGoodsClient.selectStockGoodsAll();
|
|
|
- if (CollectionUtils.isNotEmpty(orderItems)) {
|
|
|
+ if (CollectionUtils.isNotEmpty(reducelList)) {
|
|
|
List<StockGoods> stockGoods = new ArrayList<>();
|
|
|
StockGoods oneStock = null;
|
|
|
List<StockGoodsLog> stockGoodsLogList = new ArrayList<>();
|
|
|
Date date = new Date();
|
|
|
boolean status = ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"));
|
|
|
- for (OrderItems e : orderItems) {
|
|
|
+ for (OrderItems e : reducelList) {
|
|
|
StockGoodsLog stockGoodsLog = new StockGoodsLog();
|
|
|
stockGoodsLog.setTime(date);
|
|
|
stockGoodsLog.setSrcOrderId(order.getId());
|
|
|
@@ -2029,7 +2048,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
throw new SecurityException("编号:" + e.getCode() + "撤销失败:未查询到库存信息");
|
|
|
}
|
|
|
// 原单据的订货数量
|
|
|
- BigDecimal orderQuantity = e.getOrderQuantity();
|
|
|
+ BigDecimal orderQuantity = orderItems.stream().filter(i->i.getItemId().equals(e.getItemId()))
|
|
|
+ .collect(Collectors.toList()).stream().map(OrderItems::getOrderQuantity)
|
|
|
+ .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 可用库存
|
|
|
BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
|
|
|
// 锁定库存
|