Browse Source

2023年9月21日17:43:15

纪新园 2 years ago
parent
commit
6a0049be8e

+ 14 - 5
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/document/entity/DocumentRecovery.java

@@ -17,15 +17,13 @@
 package org.springblade.purchase.sales.document.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
 /**
  * 福达单据号回收表实体类
  *
@@ -46,6 +44,17 @@ public class DocumentRecovery implements Serializable {
 	@ApiModelProperty(value = "客户编码")
 	private String corpCode;
 	/**
+	 * 单据前缀
+	 */
+	@ApiModelProperty(value = "单据前缀")
+	private String billPrefix;
+	/**
+	 * 模块类型
+	 */
+	@ApiModelProperty(value = "模块类型")
+	private String serialType;
+
+	/**
 	 * 单据编号
 	 */
 	@ApiModelProperty(value = "单据编号")

+ 21 - 8
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -820,12 +820,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		//验证收货单库存与传入库存是否一致,如果一直则修改库存
 		List<DeliveryItems> deliveryItemsList = select.getDeliveryItemsList();
-		//从缓存中获得库存
-		/*List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
-		if (stockGoodsList.size() == 0) {
-			List<StockGoods> stockGoodsList = stockGoodsClient.selectStockGoodsAll();
-		}*/
-
+		//获得库存
 		List<StockGoods> stockGoodsList = stockGoodsClient.selectStockGoodsAll();
 
 		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
@@ -835,7 +830,16 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 					List<StockGoods> finalStockGoodsList1 = stockGoodsList;
 					List<StockGoods> stockGoodsList2 = new ArrayList<>();
-					r.getData().forEach(e -> {
+					//去重
+					List<Long> list = r.getData().stream().map(OrderItems::getItemId).distinct().collect(Collectors.toList());
+					//获取去重之后数据
+					List<OrderItems> reducelList = r.getData().stream().filter(e -> list.contains(e.getItemId())).collect(Collectors.toList());
+					reducelList.forEach(e -> {
+						// 原单据的订货数量
+						BigDecimal orderQuantity = r.getData().stream().filter(i -> i.getItemId().equals(e.getItemId()))
+							.collect(Collectors.toList()).stream().map(OrderItems::getOrderQuantity)
+							.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+						e.setOrderQuantity(orderQuantity);
 						//实际库存有没有库存
 						StockGoods model = new StockGoods();
 						model.setGoodsId(e.getItemId());
@@ -880,8 +884,17 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			List<StockGoods> finalStockGoodsList = stockGoodsClient.selectStockGoodsAll();
 			List<StockGoods> stockGoodsList1 = new ArrayList<>();
 			List<StockGoodsLog> stockGoodsLogList = new ArrayList<>();
+			//去重
+			List<Long> listDelivery = deliveryItemsList.stream().map(DeliveryItems::getItemId).distinct().collect(Collectors.toList());
+			//获取去重之后数据
+			List<DeliveryItems> reducelList = deliveryItemsList.stream().filter(e -> listDelivery.contains(e.getItemId())).collect(Collectors.toList());
 			Date date = new Date();
-			deliveryItemsList.forEach(e -> {
+			reducelList.forEach(e -> {
+				// 原单据的订货数量
+				BigDecimal orderQuantity = deliveryItemsList.stream().filter(i -> i.getItemId().equals(e.getItemId()))
+					.collect(Collectors.toList()).stream().map(DeliveryItems::getActualQuantity)
+					.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				e.setActualQuantity(orderQuantity);
 				StockGoodsLog stockGoodsLog = new StockGoodsLog();
 				stockGoodsLog.setTime(date);
 				stockGoodsLog.setSrcDeliveryId(select.getId());

+ 5 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import net.logstash.logback.encoder.org.apache.commons.lang3.time.DateFormatUtils;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -265,8 +266,12 @@ public class ExportOrderController extends BladeController {
 		orderModifyService.updateByPid(order.getId());
 		orderPartsService.updateByPid(order.getId());
 		if ("577435".equals(AuthUtil.getTenantId())) {
+			Date date = new Date();
+			String yyyyMM = DateFormatUtils.format(date, "yy");
 			DocumentRecovery documentRecovery = new DocumentRecovery();
 			documentRecovery.setCreateTime(new Date());
+			documentRecovery.setBillPrefix(yyyyMM);
+			documentRecovery.setSerialType(order.getBillType());
 			documentRecovery.setCreateUser(AuthUtil.getUserId());
 			documentRecovery.setCreateUserName(AuthUtil.getUserName());
 			documentRecovery.setTenantId(AuthUtil.getTenantId());

+ 44 - 23
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -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();
 						// 锁定库存

+ 3 - 3
blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java

@@ -483,20 +483,20 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 	@Transactional(rollbackFor = Exception.class)
 	public R updateByIdNew(StockGoods stockGoods) {
 //		StockGoods detail = baseMapper.selectById(stockGoods.getId());
-		int version = baseMapper.selectById(stockGoods.getId()).getVersion();
+//		int version = baseMapper.selectById(stockGoods.getId()).getVersion();
 //		stockGoods.setLockingQuantity(detail.getLockingQuantity().add(stockGoods.getThisLockingQuantity()));
 //		stockGoods.setBalanceQuantity(detail.getBalanceQuantity());
 //		stockGoods.setSurplusRouteQuantity(detail.getBalanceQuantity().subtract(stockGoods.getLockingQuantity()));
 		int count = baseMapper.update(stockGoods, new LambdaQueryWrapper<StockGoods>()
 			.eq(StockGoods::getId, stockGoods.getId())
-			.eq(StockGoods::getVersion, version)
+			.eq(StockGoods::getVersion, stockGoods.getVersion())
 			.setEntity(new StockGoods()));
 		if (count == 0) {
 			return R.fail(stockGoods.getCode() + "系统正忙,请稍后再试");
 		} else {
 			StockGoods stockGoods1 = new StockGoods();
 			stockGoods1.setId(stockGoods.getId());
-			stockGoods1.setVersion(version + 1);
+			stockGoods1.setVersion(ObjectUtils.isNull(stockGoods.getVersion()) ? 0 : stockGoods.getVersion() + 1);
 			baseMapper.updateById(stockGoods1);
 			return R.success("操作成功");
 		}