Explorar el Código

20230228 17:12

wangzhuo hace 2 años
padre
commit
303c0d9b9f

+ 5 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java

@@ -292,6 +292,7 @@ public class DeliveryController extends BladeController {
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增", notes = "传入delivery")
+	@RepeatSubmit
 	public R save(@Valid @RequestBody Delivery delivery) {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());
@@ -305,6 +306,7 @@ public class DeliveryController extends BladeController {
 	@PostMapping("/repeal")
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "新增", notes = "传入delivery")
+	@RepeatSubmit
 	public R repeal(@Valid @RequestBody Delivery delivery) {
 		delivery.setBillType(OrderTypeEnum.SHIP.getType());
 		delivery.setTradeType(OrderTypeEnum.DOMESTIC.getType());
@@ -409,7 +411,8 @@ public class DeliveryController extends BladeController {
 
 	@PostMapping("comfire")
 	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "确认收货", notes = "确认收货")
+	@ApiOperation(value = "确认发货", notes = "确认发货")
+	@RepeatSubmit
 	public R comfire(@RequestBody Delivery delivery)
 	{
 		deliveryService.comfire(delivery);
@@ -420,6 +423,7 @@ public class DeliveryController extends BladeController {
 	@PostMapping("cancel")
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "撤回收货", notes = "撤回收货")
+	@RepeatSubmit
 	public R cancel(@RequestBody Delivery delivery)
 	{
 		deliveryService.cancel(delivery);

+ 64 - 18
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java

@@ -19,13 +19,16 @@ package org.springblade.deliver.goods.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
+import org.springblade.client.feign.IRedisClient;
 import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
@@ -40,10 +43,7 @@ import org.springblade.deliver.goods.mapper.DeliveryItemsMapper;
 import org.springblade.deliver.goods.service.IDeliveryItemsService;
 import org.springblade.deliver.goods.vo.*;
 import org.springblade.finance.feign.IFinanceClient;
-import org.springblade.mocha.entity.BusinessOverpaymentItem;
-import org.springblade.mocha.entity.BusinessPointsItem;
-import org.springblade.mocha.entity.Overpayment;
-import org.springblade.mocha.entity.Points;
+import org.springblade.mocha.entity.*;
 import org.springblade.mocha.enums.OverpaymentEnum;
 import org.springblade.mocha.feign.IBusinessOverpaymentClient;
 import org.springblade.mocha.feign.IBusinessPointsClient;
@@ -88,6 +88,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	//获取客户信息
 	private final ICorpsDescClient corpsDescClient;
 	private final RedisTemplate<String, Object> redisTemplate;
+	private final IRedisClient redisClient;//redis缓存处理
 	@Override
 	public IPage<DeliveryItemsVO> selectDeliveryItemsPage(IPage<DeliveryItemsVO> page, DeliveryItemsVO deliveryItems) {
 		return page.setRecords(baseMapper.selectDeliveryItemsPage(page, deliveryItems));
@@ -127,16 +128,37 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	public List<DeliveryItems> getDeliveryItems(Delivery delivery){
 		List<DeliveryItems> deliveryItemsList = baseMapper.selectList(new QueryWrapper<DeliveryItems>().eq("pid", delivery.getId())
 			.eq("tenant_id", SecureUtil.getTenantId()).eq("is_deleted", 0).orderByAsc("id"));
+
+		String updateUserIds = "";//修改人id拼接
+		String createUserIds = "";//创建人id拼接
+		for (DeliveryItems items : deliveryItemsList){
+			if (ObjectUtil.isNotEmpty(items.getUpdateUser())){
+				updateUserIds = updateUserIds + items.getUpdateUser() + ",";
+			}
+			if (ObjectUtil.isNotEmpty(items.getCreateUser())){
+				createUserIds = createUserIds + items.getCreateUser() + ",";
+			}
+		}
+
+		//获得修改人信息
+		List<User> updateUserList = iUserClient.selectUserIds(updateUserIds);
+		//获得创建人信息
+		List<User> createUserList = iUserClient.selectUserIds(createUserIds);
+
 		if (CollectionUtils.isNotEmpty(deliveryItemsList)){
 			for (DeliveryItems deliveryItems : deliveryItemsList) {
-
-				R<User> user1 = iUserClient.userInfoById(deliveryItems.getUpdateUser());
-				if (user1.isSuccess() && user1.getData() != null){
-					deliveryItems.setUpdateUserName(user1.getData().getName());
+				if (ObjectUtil.isNotEmpty(updateUserList)) {
+					User user = updateUserList.stream().anyMatch(e -> e.getId().equals(deliveryItems.getUpdateUser())) ? updateUserList.stream().filter(e -> e.getId().equals(deliveryItems.getUpdateUser())).findFirst().get() : null;
+					if (ObjectUtils.isNotNull(user)) {
+						deliveryItems.setUpdateUserName(user.getName());
+					}
 				}
-				R<User> user = iUserClient.userInfoById(deliveryItems.getCreateUser());
-				if (user.isSuccess() && user.getData() != null){
-					deliveryItems.setCreateUserName(user.getData().getName());
+
+				if (ObjectUtil.isNotEmpty(createUserList)) {
+					User user = createUserList.stream().anyMatch(e -> e.getId().equals(deliveryItems.getCreateUser())) ? createUserList.stream().filter(e -> e.getId().equals(deliveryItems.getCreateUser())).findFirst().get() : null;
+					if (ObjectUtils.isNotNull(user)) {
+						deliveryItems.setUpdateUserName(user.getName());
+					}
 				}
 
 				if (deliveryItems.getItemId() != null){
@@ -186,6 +208,10 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 			}
 		}
 
+		//从缓存中获得库存
+		redisClient.basicData("all");
+		List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+
 		if (CollectionUtils.isNotEmpty(collect)) {
 			for (DeliveryItems deliveryItems : collect) {
 				if (deliveryItems.getItemId() == null) {
@@ -206,7 +232,19 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 					baseMapper.updateById(deliveryItems);
 				}
 				StockGoods stockGoods = null;
-				StockGoodsVO stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
+				StockGoodsVO stock = null;
+				StockGoods goods = null;
+				if ("681169".equals(AuthUtil.getTenantId())){
+					goods = stockGoodsList.stream().filter(s ->
+						s.getGoodsId().equals(deliveryItems.getItemId())
+						&& s.getTradeType().equals("GN")
+						&& s.getCorpId().equals(deliveryItems.getCorpId())
+						&& s.getStorageId().equals(delivery.getStorageId())
+					).findFirst().orElse(null);
+				}else {
+					stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
+				}
+
 				// todo 国内贸易暂定不更新库存
 				if (!delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())) {
 					// 发货
@@ -235,12 +273,20 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 					}
 				}
 				//更新发货明细库存字段
-				if (stockGoods != null) {
-					deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
-				} else if (stock != null) {
-					deliveryItems.setInventoryNumber(stock.getSurplusRouteQuantity());
-				} else {
-					deliveryItems.setInventoryNumber(BigDecimal.ZERO);
+				if ("681169".equals(AuthUtil.getTenantId())){
+					if (goods != null) {
+						deliveryItems.setInventoryNumber(goods.getSurplusRouteQuantity());
+					}else {
+						deliveryItems.setInventoryNumber(BigDecimal.ZERO);
+					}
+				}else {
+					if (stockGoods != null) {
+						deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
+					} else if (stock != null) {
+						deliveryItems.setInventoryNumber(stock.getSurplusRouteQuantity());
+					} else {
+						deliveryItems.setInventoryNumber(BigDecimal.ZERO);
+					}
 				}
 				baseMapper.updateById(deliveryItems);
 			}

+ 42 - 32
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -645,6 +645,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			}
 		}
 		Long corpId = select.getCorpId();
+		redisClient.basicData("all");
 
 		//计算明细的入库金额(明细的总采购价)
 		LambdaQueryWrapper<DeliveryItems> deliveryItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -667,13 +668,16 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		String wareHouse = null;
 		String brand = null;
 		//客户信息
-		R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
-		if (corpMessage.isSuccess() && corpMessage.getData() != null) {
-			corpName = corpMessage.getData().getCname();
-			corpNumber = corpMessage.getData().getCode();
+		List<CorpsDesc> corpsDescList = castToList(redisTemplate.opsForValue().get("corps"), CorpsDesc.class);
+		CorpsDesc corpsDesc = corpsDescList.stream().filter( c -> c.getId().equals(corpId)).findFirst().orElse(null);
+		if (corpsDesc != null) {
+			corpName = corpsDesc.getCname();
+			corpNumber = corpsDesc.getCode();
 		}
 		//仓库信息
-		StorageDesc storageDesc = iStorageClient.findById(select.getStorageId());
+		List<StorageDesc> storageDescList = castToList(redisTemplate.opsForValue().get("storageDesc"), StorageDesc.class);
+		StorageDesc storageDesc = storageDescList.stream().filter( c -> c.getId().equals(select.getStorageId())).findFirst().orElse(null);
+		//StorageDesc storageDesc = iStorageClient.findById(select.getStorageId());
 		if (storageDesc != null) {
 			wareHouse = storageDesc.getCname();
 		}
@@ -697,8 +701,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		//验证收货单库存与传入库存是否一致,如果一直则修改库存
 		List<DeliveryItems> deliveryItemsList = select.getDeliveryItemsList();
 		//从缓存中获得库存
-		/*redisClient.basicData("all");
-		List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);*/
+		List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
 		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
 			List<BusinessOverpaymentItem> list = new ArrayList<>();
 			deliveryItemsList.forEach(e -> {
@@ -730,31 +733,32 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				model.setGoodsId(e.getItemId());
 				//不同的出口对应不同的查询条件
 				if ("JK".equals(select.getTradeType())) {
-					model.setCntrNo(e.getCntrNo());//箱号
-					model.setBillNo(e.getBillNo());//提单号
-					/*model.setCorpId(delivery.getCorpId());*/
-					model.setStorageId(select.getStorageId());//仓库
-					model.setContractNumber(e.getContractNumber());//采购订单号
-					model.setTradeType("JK");
+					model = stockGoodsList.stream().filter(s ->
+						s.getGoodsId().equals(e.getItemId())
+							&& s.getTradeType().equals("JK")
+							&& s.getCntrNo().equals(e.getCntrNo())//箱号
+							&& s.getBillNo().equals(e.getBillNo())//提单号
+							&& s.getStorageId().equals(select.getStorageId())//仓库
+							&& s.getContractNumber().equals(e.getContractNumber())//采购订单号
+					).findFirst().orElse(null);
 				} else if ("CK".equals(select.getTradeType())) {
-					model.setTradeType("CK");
-					model.setItemType(e.getSpecificationAndModel());
+					model = stockGoodsList.stream().filter(s ->
+						s.getGoodsId().equals(e.getItemId())
+							&& s.getTradeType().equals("CK")
+							&& s.getItemType().equals(e.getSpecificationAndModel())
+					).findFirst().orElse(null);
 				} else if ("GN".equals(select.getTradeType())) {
-					model.setTradeType("GN");
-					model.setCorpId(select.getCorpId());
-					model.setStorageId(select.getStorageId());//仓库
-					model.setItemType(e.getSpecificationAndModel());
-					/*model = stockGoodsList.stream().filter(s ->
+					model = stockGoodsList.stream().filter(s ->
 						s.getGoodsId().equals(e.getItemId())
 						&& s.getTradeType().equals("GN")
 						&& s.getCorpId().equals(select.getCorpId())
 						&& s.getStorageId().equals(select.getStorageId())
 						&& s.getItemType().equals(e.getSpecificationAndModel())
-					).findFirst().orElse(null);*/
+					).findFirst().orElse(null);
 				} else {
 					throw new SecurityException("贸易类型未指定");
 				}
-				StockGoods stock = stockGoodsClient.getOneStock(model);
+				StockGoods stock = model;
 
 				// 比较2个库存值是否相等
 				//BigDecimal surplusRouteQuantity = stockGoodsVOR.getData().getSurplusRouteQuantity();
@@ -936,6 +940,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 
 		List<DeliveryItems> deliveryItemsList = delivery.getDeliveryItemsList();
+		//从缓存中获得库存
+		redisClient.basicData("all");
+		List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
 		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
 			List<BusinessOverpaymentItem> list = new ArrayList<>();
 			deliveryItemsList.forEach(e -> {
@@ -978,22 +985,25 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				model.setGoodsId(e.getItemId());
 				//不同的出口对应不同的查询条件
 				if ("JK".equals(delivery.getTradeType())) {
-					model.setCntrNo(e.getCntrNo());//箱号
-					model.setBillNo(e.getBillNo());//提单号
-					/*	model.setCorpId(delivery.getCorpId());*/
-					model.setStorageId(delivery.getStorageId());//仓库
-					model.setContractNumber(e.getContractNumber());//采购订单号
+					model = stockGoodsList.stream().filter(s ->
+						s.getCntrNo().equals(e.getCntrNo())//箱号
+						&& s.getBillNo().equals(e.getBillNo())//提单号
+						&& s.getStorageId().equals(select.getStorageId())//仓库
+						&& s.getContractNumber().equals(e.getContractNumber())//采购订单号
+					).findFirst().orElse(null);
 				} else if ("CK".equals(delivery.getTradeType())) {
-
-					model.setItemType(e.getSpecificationAndModel());
+					model = stockGoodsList.stream().filter(s ->
+						s.getItemType().equals(e.getSpecificationAndModel())
+					).findFirst().orElse(null);
 				} else if ("GN".equals(delivery.getTradeType())) {
-
-					model.setItemType(e.getSpecificationAndModel());
+					model = stockGoodsList.stream().filter(s ->
+						s.getItemType().equals(e.getSpecificationAndModel())
+					).findFirst().orElse(null);
 				} else {
 					throw new SecurityException("贸易类型未指定");
 				}
 
-				StockGoods stock = stockGoodsClient.getOneStock(model);
+				StockGoods stock = model;
 				//达沃特新需求-禅道860中体现-国内-采购确认-不增加库存
 				if (!"GN".equals(delivery.getTradeType())) {
 					//更新stock库存数量

+ 6 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/SpecificationsProfitExcel.java

@@ -21,6 +21,12 @@ public class SpecificationsProfitExcel implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
+	 * 客户
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpName;
+
+	/**
 	 * 品号
 	 */
 	@ExcelProperty(value = "品号")

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderItemsMapper.xml

@@ -508,7 +508,7 @@ WHERE
                 and t1.receipt_time &gt;= #{dataset.receiptTimeList[0]}
             </if>
             <if test="dataset.receiptTimeList !=null and dataset.receiptTimeList[1] !=null and dataset.receiptTimeList[1] != ''">
-                and t1.receipt_time &gt;= #{dataset.receiptTimeList[1]}
+                and t1.receipt_time &lt;= #{dataset.receiptTimeList[1]}
             </if>
         </where>
         order by t2.create_time desc

+ 6 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml

@@ -1864,7 +1864,11 @@ ORDER BY
             SUM( BO.debit_amount ) - SUM( BOI.purchaseAmount ) AS grossProfit,
             SUM( BO.predict_ocean_freight ) AS predictOceanFreight,
             SUM( BO.debit_amount ) - SUM( BOI.purchaseAmount ) - SUM( BO.predict_ocean_freight ) AS netGrossProfit,
-            FORMAT((SUM( BO.debit_amount ) - SUM( BOI.purchaseAmount )) / SUM( BO.debit_amount ) * 100,2) AS grossProfitRate
+            cast(
+                FORMAT(
+                    ( sum( BO.debit_amount ) - sum( BOI.purchaseAmount ) ) / sum( BO.debit_amount ) * 100,2
+                ) as DECIMAL ( 64, 10 )
+            ) AS grossProfitRate
         FROM
         business_order BO
         LEFT JOIN (
@@ -2342,7 +2346,7 @@ ORDER BY
                     '${item}'
                 </foreach>
             </if>
-            <if test="statisticsVo.chargeMember != null and statisticsVo.chargeMember != ''">
+            <if test="statisticsVo.chargeMember != null and statisticsVo.chargeMember != '' and statisticsVo.chargeMember != 'undefined'">
                 and BO.charge_member in
                 <foreach item="member" index="index" collection="chargeMember.split(',')" open="(" separator="," close=")">
                     '${member}'

+ 11 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1810,6 +1810,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					.eq(OrderItems::getPid, order.getId())
 					.eq(OrderItems::getIsDeleted, 0);
 				List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+
+				//从缓存中获得库存
+				redisClient.basicData("all");
+				List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+
 				if (CollectionUtils.isNotEmpty(orderItems)) {
 					orderItems.forEach(e -> {
 						StockGoods stockGoods = new StockGoods();
@@ -1821,7 +1826,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 							throw new SecurityException("撤销失败:未查询到库存 或者 存在多条库存记录");
 						}
 						// 开始锁定库存,减少可用
-						StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+						//StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+						StockGoods oneStock = stockGoodsList.stream().filter(s ->
+							s.getGoodsId().equals(e.getItemId())
+							&& s.getCorpId().equals(e.getCorpId())
+							&& s.getTenantId().equals(SecureUtil.getTenantId())
+						).findFirst().orElse(null);
 						if (oneStock == null) {
 							throw new SecurityException("撤销失败:未查询到库存信息");
 						}