Просмотр исходного кода

创融峻合 2023年6月7日11:16:34

纪新园 2 лет назад
Родитель
Сommit
ff83ef5f6a
29 измененных файлов с 744 добавлено и 294 удалено
  1. 13 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java
  2. 6 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java
  3. 4 1
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderDescClient.java
  4. 12 0
      blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/entity/StockGoods.java
  5. 7 2
      blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/feign/IStockGoodsClient.java
  6. 59 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java
  7. 1 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/ImportDeliveryController.java
  8. 2 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/receiving/ReCeVingController.java
  9. 0 1
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/IDeliveryItemsService.java
  10. 112 128
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java
  11. 74 58
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  12. 5 5
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/PriceItemClient.java
  13. 3 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java
  14. 2 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderItemsController.java
  15. 3 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/dealer/DealerOrderController.java
  16. 6 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java
  17. 3 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.java
  18. 20 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  19. 1 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderItemsService.java
  20. 2 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  21. 7 6
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingItemsServiceImpl.java
  22. 12 9
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderItemsServiceImpl.java
  23. 95 34
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  24. 101 6
      blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java
  25. 140 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsExportExcel.java
  26. 46 20
      blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java
  27. 1 1
      blade-service/blade-stock/src/main/java/org/springblade/stock/service/IStockGoodsService.java
  28. 5 4
      blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java
  29. 2 2
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

+ 13 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java

@@ -336,4 +336,17 @@ public class DeliveryItems implements Serializable {
 	private String createUserName;
 
 
+	/**
+	 * 库区id
+	 */
+	@ApiModelProperty(value = "库区id")
+	private Long storageId;
+
+	/**
+	 * 库区
+	 */
+	@TableField(exist = false)
+	private String storageName;
+
+
 }

+ 6 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java

@@ -812,6 +812,12 @@ public class OrderItems implements Serializable {
 	@ApiModelProperty(value = "明细类型(主表明细,配件)")
 	private String detailType;
 
+	/**
+	 * 库区
+	 */
+	@TableField(exist = false)
+	private String storageName;
+
 
 
 }

+ 4 - 1
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderDescClient.java

@@ -132,5 +132,8 @@ public interface IOrderDescClient {
 	boolean save(Order orderNew);
 
 	@GetMapping(ORDER_INVENTORY_LIST)
-	List<OrderVO> orderInventoryList( @RequestParam("billType") String billType, @RequestParam("itemId") Long itemId, @RequestParam("corpId") Long corpId);
+	List<OrderVO> orderInventoryList( @RequestParam("billType") String billType,
+									  @RequestParam("itemId") Long itemId,
+									  @RequestParam("corpId") Long corpId,
+									  @RequestParam("storageId") Long storageId);
 }

+ 12 - 0
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/entity/StockGoods.java

@@ -362,5 +362,17 @@ public class StockGoods implements Serializable {
 	@TableField(exist = false)
 	private GoodsDescDto goodsDescDto;
 
+	/**
+	 * 仓库id
+	 */
+	@ApiModelProperty(value = "仓库id")
+	private Long warehouseId;
+
+	/**
+	 * 仓库名称
+	 */
+	@TableField(exist = false)
+	private String storageName;
+
 
 }

+ 7 - 2
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/feign/IStockGoodsClient.java

@@ -30,6 +30,7 @@ public interface IStockGoodsClient {
 	String GET_ONE = API_PREFIX + "/getOne";
 	String GET_STOCK_BY_CONDITIONS = API_PREFIX + "/getStockByCondition";
 	String LIST_STOCK_BY_CONDITIONS = API_PREFIX + "/listStockByCondition";
+	String GET_LIST_STOCK = API_PREFIX + "/getListStock";
 	String POST_LIST_STOCK_BY_CONDITIONS = API_PREFIX + "/postListStockByCondition";
 	String GET_STOCK_NUMBER = API_PREFIX + "/getStockNumber";
 	String UPDATE_STOCK_GOODS = API_PREFIX + "/updateStockGoods";
@@ -75,6 +76,7 @@ public interface IStockGoodsClient {
 	@GetMapping(SELECT_STOKE)
 	R<StockGoodsVO> selectStock(@RequestParam(value = "corpId", required = false) Long corpId,
 								@RequestParam(value = "storageId", required = false) Long storageId,
+								@RequestParam(value = "warehouseId", required = false) Long warehouseId,
 								@RequestParam("goodId") Long goodId,
 								@RequestParam(value = "itemType", required = false) String itemType,
 								@RequestParam(value = "lotNo", required = false) String lotNo,
@@ -152,7 +154,7 @@ public interface IStockGoodsClient {
 	 * @return
 	 */
 	@GetMapping(GET_STOCK)
-	R<? extends Object> getStock(StockGoods stockGoods);
+	R<List<StockGoods>> getStock(StockGoods stockGoods);
 
 	@GetMapping(GET_STOCK_BY_CONDITIONS)
 	R<StockGoods> getStockByCondition(StockGoods stockGoods);
@@ -213,8 +215,11 @@ public interface IStockGoodsClient {
 	@PostMapping(GET_ONE)
 	StockGoods getOneStock(@RequestBody StockGoods stockGoods);
 
+	@PostMapping(GET_LIST_STOCK)
+	List<StockGoods> selectStockList(@RequestBody StockGoods stockGoods);
+
 	@GetMapping(LIST_STOCK_BY_CONDITIONS)
-	List<StockGoods> listStockByCondition(StockGoods stockGoods);
+	List<StockGoods> listStockByCondition(@RequestBody StockGoods stockGoods);
 
 	@PostMapping(POST_LIST_STOCK_BY_CONDITIONS)
 	List<StockGoods> postListStockByCondition(@RequestBody StockGoods stockGoods);

+ 59 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java

@@ -418,4 +418,63 @@ public class CorpsDescPartsController extends BladeController {
 		return corpsDescService.preserve(corpsAddr);
 	}
 
+
+	/**
+	 * app客户分析(达沃特)
+	 *
+	 * @return
+	 */
+	@GetMapping("/corpAnalysisDWT")
+	@ApiOperation(value = "app客户分析", notes = "传入参数")
+	public R<Map<String, Object>> corpAnalysisDWT() {
+		Map<String, Object> map = new HashMap<>();
+		//核心客户
+		int coreCorp = 0;
+		//半年内没有销售记录客户
+		int unsales = 0;
+		//流失率
+		BigDecimal lossRate = new BigDecimal("0.00");
+		//平均客单产值
+		BigDecimal averageAmount = new BigDecimal("0.00");
+
+		LambdaQueryWrapper<CorpsDesc> corpsDescQueryWrapper = new LambdaQueryWrapper<>();
+		corpsDescQueryWrapper.eq(CorpsDesc::getIsDeleted, 0).eq(CorpsDesc::getTenantId, AuthUtil.getTenantId()).eq(CorpsDesc::getCorpType, "KH");
+		//客户总数量
+		List<CorpsDesc> corpsDescList = corpsDescService.list(corpsDescQueryWrapper);
+		for (CorpsDesc corpsDesc : corpsDescList) {
+			Order order = new Order();
+			order.setCorpId(corpsDesc.getId());
+			order.setBillType("XS");
+			order.setTradeType("GN");
+			order.setCorpType("1");
+			int count = orderDescClient.corpAnalysisDWT(order);
+			if (count == 0 ){
+				unsales ++;
+			}
+			order.setCorpType("2");
+			int count1 = orderDescClient.corpAnalysisDWT(order);
+			if (count1 > 0 ){
+				coreCorp ++;
+			}
+		}
+		if (unsales > 0){
+			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()),MathContext.DECIMAL32));
+		}
+		/*Order order = new Order();
+		order.setBillType("XS");
+		order.setTradeType("YPJ");
+		List<Order> orderList = orderDescClient.getByBillNo(order);
+
+		//平均客单产值
+		if(orderList.size() != 0){
+			averageAmount = averageAmount.add(new BigDecimal(corpsDescList.size()/orderList.size(),MathContext.DECIMAL32));
+		}*/
+
+		map.put("sumNumber", corpsDescList.size());
+		map.put("coreCorp", coreCorp);
+		map.put("lossRate", lossRate);
+//		map.put("averageAmount", averageAmount);
+		return R.data(map);
+	}
+
 }

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

@@ -221,7 +221,7 @@ public class ImportDeliveryController extends BladeController {
 									  @ApiParam(value = "订单号", required = true) @RequestParam String billNo,
 									  @ApiParam(value = "合同号", required = true) @RequestParam String contractNumber) {
 
-		R<StockGoodsVO> stockGoodsVOR = stockGoodsClient.selectStock(corpId, storageId, goodId, null, null, cntrNo, billNo, contractNumber,"JK");
+		R<StockGoodsVO> stockGoodsVOR = stockGoodsClient.selectStock(corpId, null,storageId, goodId, null, null, cntrNo, billNo, contractNumber,"JK");
 		if(stockGoodsVOR.isSuccess())
 		{
 			StockGoodsVO data = stockGoodsVOR.getData();

+ 2 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/receiving/ReCeVingController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.deliver.goods.receiving;
 
+import org.springblade.client.entity.StorageType;
 import org.springblade.core.excel.util.ExcelUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -139,7 +140,7 @@ public class ReCeVingController extends BladeController {
 					e.setSalesCompanyName(company.getData().getCname());
 				}
 				//仓库信息
-				StorageDesc storageDesc = iStorageClient.findById(e.getStorageId());
+				StorageType storageDesc = iStorageClient.getStorageType(e.getStorageId());
 				if (storageDesc != null) {
 					e.setStorageName(storageDesc.getCname());
 				}

+ 0 - 1
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/IDeliveryItemsService.java

@@ -84,5 +84,4 @@ public interface IDeliveryItemsService extends IService<DeliveryItems> {
 
     void receivingInventory(String tradeType, Long id, OrderItems e);
 
-	void saveStockInventory(String tradeType, Long corpId, Long storageId, OrderItems e, String orderType);
 }

+ 112 - 128
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java

@@ -248,7 +248,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 						s.getGoodsId().equals(deliveryItems.getItemId())
 							&& s.getTradeType().equals("GN")
 							&& s.getCorpId().equals(deliveryItems.getCorpId())
-							&& s.getStorageId().equals(delivery.getStorageId())
+							&& s.getStorageId().equals(deliveryItems.getStorageId())
 					).findFirst().orElse(null);
 				} else {
 					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
@@ -256,8 +256,8 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 						goods = stockGoodsList.stream().filter(s ->
 							s.getGoodsId().equals(deliveryItems.getItemId())
 								&& s.getTradeType().equals("GN")
-								&& s.getCorpId().equals(deliveryItems.getCorpId())
-								&& s.getStorageId().equals(delivery.getStorageId())
+								&& s.getWarehouseId().equals(delivery.getStorageId())
+								&& s.getStorageId().equals(deliveryItems.getStorageId())
 						).findFirst().orElse(null);
 						stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
 					} else {
@@ -270,10 +270,10 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 					// 发货
 					if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
 						// 更新库存账
-						stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+						stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems, null);
 						// 撤销发货
 					} else if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
-						stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+						stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems, null);
 					} else {
 						//新增库存账
 						throw new RuntimeException("库存为空");
@@ -284,10 +284,10 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 						// 发货
 						if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
 							// 更新库存账
-							stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+							stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems, delivery.getDeliveryType());
 							// 撤销发货
 						} else if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
-							stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+							stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems, delivery.getDeliveryType());
 						} else {
 							//新增库存账
 							throw new RuntimeException("库存为空");
@@ -409,6 +409,14 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 			billNo = deliveryItems.getBillNo();//提单号
 			contractNumber = deliveryItems.getContractNumber();//合同号
 		} else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {//国内
+			if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+				R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, storageId, deliveryItems.getStorageId(), deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber, tradeType);
+				if (goodsVOR.isSuccess()) {
+					return goodsVOR.getData();
+				} else {
+					return null;
+				}
+			}
 			//corpId = null;
 			//storageId = null;
 		} else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())) {//出口
@@ -418,7 +426,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 			corpId = null;
 			itemType = null;
 		}
-		R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, storageId, deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber, tradeType);
+		R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, null, storageId, deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber, tradeType);
 		if (goodsVOR.isSuccess()) {
 			return goodsVOR.getData();
 		}
@@ -432,7 +440,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	 * @param stockId       库存账id
 	 * @param deliveryItems 货物明细信息
 	 */
-	public StockGoods deliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems) {
+	public StockGoods deliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems, Integer deliveryType) {
 		//查询库存账
 		R<StockGoods> stockById = stockGoodsClient.getStockById(stockId);
 		if (!stockById.isSuccess()) {
@@ -450,15 +458,24 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 			throw new RuntimeException("当前可用数量为:" + stockGoods.getSurplusRouteQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
 		}
 		stockGoods.setOutQuantity(stockGoods.getOutQuantity().add(deliveryItems.getActualQuantity()));//出库数量 加
-		if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
-			stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
-			stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
-			stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
+		if (DeliveryEnum.DELIVER.getType().equals(deliveryType)) {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+				stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getArrivalQuantity()));//结余数量 减
+				stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()).subtract(deliveryItems.getArrivalQuantity()));//可用数量 减
+				stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
+			} else {
+				stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getArrivalQuantity()));//结余数量 减
+				stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()).subtract(deliveryItems.getArrivalQuantity()));//可用数量 减
+			}
 		} else {
-			stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
-			stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
+			if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+				stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
+				stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
+			} else {
+				stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
+				stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
+			}
 		}
-//		stockGoods.setOutAmount(stockGoods.getOutAmount().add(deliveryItems.getDeliveryAmount()));//出库金额加
 		stockGoods.setOutAmount(stockGoods.getOutAmount().add(deliveryItems.getContractAmount()));//出库金额加
 		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			//判断出库发票重量和结余发票重量
@@ -492,7 +509,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	 * @param stockId       库存账id
 	 * @param deliveryItems 货物明细信息
 	 */
-	public StockGoods revocationDeliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems) {
+	public StockGoods revocationDeliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems, Integer deliveryType) {
 		//查询库存账
 		R<StockGoods> stockById = stockGoodsClient.getStockById(stockId);
 		if (!stockById.isSuccess()) {
@@ -506,34 +523,39 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		if (stockGoods.getOutQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
 			throw new RuntimeException("当前可减少出库数量为:" + stockGoods.getOutQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
 		}
-		stockGoods.setOutQuantity(stockGoods.getOutQuantity().subtract(deliveryItems.getActualQuantity()));//出库数量 减
-		//stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().add(deliveryItems.getActualQuantity()));//锁定数量 加
-		stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().add(deliveryItems.getActualQuantity()));//结余数量 加
-		stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
-		if ("681169".equals(AuthUtil.getTenantId())) {
-			stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
+		if (DeliveryEnum.REPEAL.getType().equals(deliveryType)) {
+			stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().add(deliveryItems.getArrivalQuantity()));//结余数量 加
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().add(deliveryItems.getActualQuantity()));//锁定数量 加
+				stockGoods.setSurplusRouteQuantity(stockGoods.getBalanceQuantity().subtract(stockGoods.getLockingQuantity()));//可用数量 加
+			}
 		} else {
+			stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getArrivalQuantity()));//结余数量 加
 			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
 				&& "1".equals(sysClient.getParamService("synchronous"))) {
-				stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
-			} else {
-				stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getContractAmount()));//出库金额减
+				stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 加
+				stockGoods.setSurplusRouteQuantity(stockGoods.getBalanceQuantity().subtract(stockGoods.getLockingQuantity()));//可用数量 加
 			}
 		}
+		if ("681169".equals(AuthUtil.getTenantId())) {
+			stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
+		} else {
+			stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getContractAmount()));//出库金额减
+		}
+		stockGoods.setOutQuantity(stockGoods.getOutQuantity().subtract(deliveryItems.getActualQuantity()));//出库数量 减
 		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			//判断出库发票重量和结余发票重量
 			if (stockGoods.getOutWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0) {
 				throw new RuntimeException("当前出库发票重量为:" + stockGoods.getOutWeight() + "小于发货发票重量,发货发票重量为:" + deliveryItems.getInvoiceWeight());
 			}
 			stockGoods.setOutWeight(stockGoods.getOutWeight().subtract(deliveryItems.getInvoiceWeight()));//出库发票重量 减
-			//stockGoods.setLockingWeight(stockGoods.getLockingWeight().add(deliveryItems.getInvoiceWeight()));//锁定发票重量 加
 			stockGoods.setBalanceWeight(stockGoods.getBalanceWeight().add(deliveryItems.getInvoiceWeight()));//结余发票重量 加
 			//判断出库码单重量和结余码单重量
 			if (stockGoods.getOutVolumn().compareTo(deliveryItems.getBillWeight()) < 0) {
 				throw new RuntimeException("当前出库码单重量为:" + stockGoods.getOutVolumn() + "小于发货码单重量,发货码单重量为:" + deliveryItems.getBillWeight());
 			}
 			stockGoods.setOutVolumn(stockGoods.getOutVolumn().subtract(deliveryItems.getBillWeight()));//出库码单重量 减
-			//stockGoods.setLockingVolumn(stockGoods.getLockingVolumn().add(deliveryItems.getBillWeight()));//锁定码单重量 加
 			stockGoods.setBalanceVolumn(stockGoods.getBalanceVolumn().add(deliveryItems.getBillWeight()));//结余码单重量 加
 		}
 		stockGoods.setUpdateTime(new Date());
@@ -561,8 +583,12 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		if (stockById.getData() == null) {
 			throw new RuntimeException("库存账不存在");
 		}
-
-		BigDecimal actualQuantity = deliveryItems.getActualQuantity() == null ? new BigDecimal("0") : deliveryItems.getActualQuantity();
+		BigDecimal actualQuantity = new BigDecimal("0.00");
+		if ("681169".equals(AuthUtil.getTenantId())){
+			actualQuantity = deliveryItems.getActualQuantity() == null ? new BigDecimal("0") : deliveryItems.getArrivalQuantity();
+		}else{
+			actualQuantity = deliveryItems.getActualQuantity() == null ? new BigDecimal("0") : deliveryItems.getActualQuantity();
+		}
 		BigDecimal invoiceWeight = deliveryItems.getInvoiceWeight() == null ? new BigDecimal("0") : deliveryItems.getInvoiceWeight();
 		BigDecimal billWeight = deliveryItems.getBillWeight() == null ? new BigDecimal("0") : deliveryItems.getBillWeight();
 
@@ -587,7 +613,19 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 				stockGoods.setBalanceVolumn(stockGoods.getBalanceVolumn().subtract(billWeight));//结余码单重量 减
 			}
 		} else {
-			stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().add(deliveryItems.getActualQuantity()));
+			stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(actualQuantity));//结余数量 减
+			stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(actualQuantity));//可用数量 减
+			if (ObjectUtils.isNotNull(stockGoods.getBalanceAmount())) {
+				stockGoods.setBalanceAmount(stockGoods.getBalanceAmount().subtract(deliveryItems.getDeliveryAmount()));
+			} else {
+				stockGoods.setBalanceAmount(deliveryItems.getDeliveryAmount());
+			}
+			if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
+				!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())) {
+				stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
+			} else {
+				stockGoods.setStockPrice(new BigDecimal("0.00"));
+			}
 		}
 
 		stockGoods.setUpdateTime(new Date());
@@ -629,29 +667,36 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 				stockGoods.setBalanceVolumn(stockGoods.getBalanceVolumn() != null ? stockGoods.getBalanceVolumn().add(deliveryItems.getBillWeight()) : new BigDecimal("0").add(deliveryItems.getBillWeight()));//结余码单重量 加
 			}
 		} else {
-			if (!"681169".equals(AuthUtil.getTenantId())) {
-				if (stockGoods.getLockingQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
-					throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败,锁定库存不足");
+			if ("CG".equals(deliveryItems.getBillType())) {
+				if ("681169".equals(AuthUtil.getTenantId())) {
+					stockGoods.setBalanceQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getArrivalQuantity()));//结余数量
+					stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getArrivalQuantity()));//可用数量
 				} else {
-					if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
-						stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));
+					//入库数量
+					stockGoods.setInDate(new Date());//入库日期
+					stockGoods.setInQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//入库数量
+					stockGoods.setBalanceQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//结余数量
+					stockGoods.setInAmount(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getDeliveryAmount()));//入库金额
+					stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量
+					//库存金额
+					if (ObjectUtils.isNotNull(stockGoods.getBalanceAmount())) {
+						stockGoods.setBalanceAmount(stockGoods.getBalanceAmount().add(deliveryItems.getDeliveryAmount()));
+					} else {
+						stockGoods.setBalanceAmount(deliveryItems.getDeliveryAmount());
+					}
+					if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
+						!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())) {
+						stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
+					} else {
+						stockGoods.setStockPrice(new BigDecimal("0.00"));
 					}
 				}
 			}
-			stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));
 		}
 		stockGoods.setOrderType(deliveryItems.getOrderType());
 		stockGoods.setCntrNo(deliveryItems.getCntrNo());
 		stockGoods.setUpdateTime(new Date());
 		stockGoods.setUpdateUser(SecureUtil.getUserId());
-		if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
-			!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())) {
-			//库存金额
-			stockGoods.setBalanceAmount(stockGoods.getBalanceAmount().subtract(deliveryItems.getDeliveryAmount()));
-			stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
-		} else {
-			stockGoods.setStockPrice(new BigDecimal("0.00"));
-		}
 		boolean updateStock = stockGoodsClient.updateStock(stockGoods);
 		if (!updateStock) {
 			throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败");
@@ -677,10 +722,10 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setInQuantity(deliveryItems.getActualQuantity());//入库数量
 		stockGoods.setOutQuantity(BigDecimal.ZERO);//出库数量
 		stockGoods.setLockingQuantity(BigDecimal.ZERO);//锁定数量
-		stockGoods.setBalanceQuantity(deliveryItems.getActualQuantity());//结余数量
+		stockGoods.setBalanceQuantity(deliveryItems.getArrivalQuantity());//结余数量
 		stockGoods.setEnRouteQuantity(BigDecimal.ZERO);//在途数量
 		stockGoods.setInAmount(deliveryItems.getDeliveryAmount());//入库金额
-		stockGoods.setSurplusRouteQuantity(deliveryItems.getActualQuantity());//可用数量
+		stockGoods.setSurplusRouteQuantity(deliveryItems.getArrivalQuantity());//可用数量
 		//进口贸易 还需要追加码单重量 和 发票重量
 		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			stockGoods.setBillNo(deliveryItems.getBillNo());//提单号
@@ -708,7 +753,8 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		//国内
 		else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {
 			stockGoods.setCorpId(corpId);
-			stockGoods.setStorageId(storageId);
+			stockGoods.setWarehouseId(storageId);
+			stockGoods.setStorageId(deliveryItems.getStorageId());
 			stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
 			stockGoods.setTradeType("GN");
 			//商品 规格 供应商 仓库
@@ -728,7 +774,11 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setTenantId(SecureUtil.getTenantId());
 		stockGoods.setCreateTime(new Date());
 		//库存金额
-		stockGoods.setBalanceAmount(deliveryItems.getDeliveryAmount());
+		if (ObjectUtils.isNotNull(stockGoods.getBalanceAmount())) {
+			stockGoods.setBalanceAmount(stockGoods.getBalanceAmount().add(deliveryItems.getDeliveryAmount()));
+		} else {
+			stockGoods.setBalanceAmount(deliveryItems.getDeliveryAmount());
+		}
 		if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
 			!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())) {
 			stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
@@ -1058,16 +1108,24 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 			throw new RuntimeException("库存账不存在");
 		}
 		StockGoods stockGoods = stockById.getData();
-		if (!"681169".equals(AuthUtil.getTenantId())) {
-			if (stockGoods.getLockingQuantity().compareTo(e.getOrderQuantity()) < 0) {
-				throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败,锁定库存不足");
-			} else {
+		/*if (!"681169".equals(AuthUtil.getTenantId())) {
+			 else {
 				if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
 					stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(e.getOrderQuantity()));
 				}
 			}
+		}*/
+		if (stockGoods.getLockingQuantity().compareTo(e.getOrderQuantity()) < 0) {
+			throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败,锁定库存不足");
+		} else {
+			stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(e.getOrderQuantity()));
+			// todo
+				/*if (ObjectUtils.isNotNull(stockGoods.getSurplusRouteQuantity())) {
+					stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(e.getOrderQuantity()));
+				} else {
+					stockGoods.setSurplusRouteQuantity(e.getOrderQuantity());
+				}*/
 		}
-		stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(e.getOrderQuantity()));
 		stockGoods.setUpdateTime(new Date());
 		stockGoods.setUpdateUser(SecureUtil.getUserId());
 		boolean updateStock = stockGoodsClient.updateStock(stockGoods);
@@ -1076,80 +1134,6 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		}
 	}
 
-	@Override
-	public void saveStockInventory(String tradeType, Long corpId, Long storageId, OrderItems deliveryItems, String orderType) {
-		StockGoods stockGoods = new StockGoods();
-		stockGoods.setGoodsId(deliveryItems.getItemId());//商品id
-		//入库数量
-		stockGoods.setInDate(new Date());//入库日期
-		stockGoods.setInQuantity(deliveryItems.getActualQuantity());//入库数量
-		stockGoods.setOutQuantity(BigDecimal.ZERO);//出库数量
-		stockGoods.setLockingQuantity(BigDecimal.ZERO);//锁定数量
-		stockGoods.setBalanceQuantity(deliveryItems.getActualQuantity());//结余数量
-		stockGoods.setEnRouteQuantity(BigDecimal.ZERO);//在途数量
-		stockGoods.setInAmount(deliveryItems.getAmount());//入库金额
-		stockGoods.setSurplusRouteQuantity(deliveryItems.getActualQuantity());//可用数量
-		//进口贸易 还需要追加码单重量 和 发票重量
-		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
-			stockGoods.setBillNo(deliveryItems.getBillNo());//提单号
-			stockGoods.setContractNumber(deliveryItems.getBillNo());//合同号
-			stockGoods.setStorageId(storageId);//仓库id
-			stockGoods.setCntrNo(deliveryItems.getCntrNo());//箱号
-
-
-			stockGoods.setInWeight(deliveryItems.getInvoiceWeight());//入库发票重量
-			stockGoods.setOutWeight(new BigDecimal(0.00));//出库发票重量
-			stockGoods.setLockingWeight(new BigDecimal(0.00));//锁定发票重量
-			stockGoods.setBalanceWeight(deliveryItems.getInvoiceWeight());//结余发票重量
-			stockGoods.setInVolumn(deliveryItems.getBillWeight());//入库码单重量
-			stockGoods.setOutVolumn(new BigDecimal(0.00));//出库码单重量
-			stockGoods.setLockingVolumn(new BigDecimal(0.00));//锁定码单重量
-			stockGoods.setBalanceVolumn(deliveryItems.getBillWeight());//结余码单重量
-
-			stockGoods.setTradeType("JK");
-			if (ObjectUtil.isNotEmpty(orderType)) {
-				stockGoods.setOrderType(orderType);
-			} else {
-				stockGoods.setOrderType(deliveryItems.getBillType());
-			}
-		}
-		//国内
-		else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {
-			stockGoods.setCorpId(corpId);
-			stockGoods.setStorageId(storageId);
-			stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
-			stockGoods.setTradeType("GN");
-			//商品 规格 供应商 仓库
-		}
-		//出口
-		else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())) {
-			stockGoods.setTradeType("CK");
-			stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
-		}
-		//经销商
-		else if (tradeType.equals(OrderTypeEnum.DEALER.getType())) {
-			stockGoods.setTradeType("JXS");
-			stockGoods.setStorageId(storageId);
-		}
-		stockGoods.setCntrNo(deliveryItems.getCntrNo());
-		stockGoods.setCreateUser(SecureUtil.getUserId());
-		stockGoods.setTenantId(SecureUtil.getTenantId());
-		stockGoods.setCreateTime(new Date());
-		//库存金额
-		stockGoods.setBalanceAmount(deliveryItems.getAmount());
-		if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
-			!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())) {
-			stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
-		} else {
-			stockGoods.setStockPrice(new BigDecimal("0.00"));
-		}
-
-		R saveStock = stockGoodsClient.saveStock(stockGoods);
-		if (!saveStock.isSuccess()) {
-			throw new SecurityException("插入库存失败");
-		}
-	}
-
 	/**
 	 * 将Object转换成List类型
 	 *

+ 74 - 58
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -112,10 +112,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	 * 发货文件信息
 	 */
 	private final DeliveryFilesServiceImpl deliveryFilesService;
-	/**
-	 * 获取用户信息
-	 */
-	private final IUserClient userClient;
+
+	private final IStorageClient storageClient;
 	/**
 	 * 获取客户信息
 	 */
@@ -251,6 +249,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		List<DeliveryItems> deliveryItemsList = delivery.getDeliveryItemsList();
 		if (!CollectionUtils.isNotEmpty(deliveryItemsList)) {
 			BigDecimal totalActualQuantity = deliveryItemsList.stream().map(DeliveryItems::getActualQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			if (ObjectUtils.isNull(delivery.getPurchaseAmount())){
+				delivery.setPurchaseAmount(deliveryItemsList.stream().map(DeliveryItems::getPurchaseAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			}
 			delivery.setTotalQuantity(totalActualQuantity);
 			baseMapper.updateById(delivery);
 		}
@@ -338,6 +339,17 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 		//获取发货明细表数据
 		List<DeliveryItems> deliveryItemsList = deliveryItemsService.getDeliveryItems(delivery);
+		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
+			StringBuilder ids = new StringBuilder();
+			deliveryItemsList.forEach(item -> {
+				ids.append(item.getStorageId()).append(",");
+			});
+			List<StorageDesc> storageDescList = storageClient.selectStorageIds(ids.toString());
+			for (DeliveryItems deliveryItems : deliveryItemsList) {
+				String name = storageDescList.stream().filter(e -> deliveryItems.getStorageId().equals(e.getId())).findFirst().orElse(new StorageDesc()).getCname();
+				deliveryItems.setStorageName(name);
+			}
+		}
 		selectById.setDeliveryItemsList(deliveryItemsList);
 		//获取发货费用信息
 		List<DeliveryFees> deliveryFeesList = deliveryFeesService.getDeliveryFeesList(delivery);
@@ -480,6 +492,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				}
 				orderTemp.setDeliverQuantity(delivery.getTotalQuantity());
 				orderTemp.setDeliverTime(date);
+				orderTemp.setActualDeliveryDate(date);
 			} else {
 				if ("681169".equals(AuthUtil.getTenantId())) {
 					orderTemp.setReceivingStatus("已收货");
@@ -491,6 +504,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						orderTemp.setOrderStatus("待发货");
 					}
 				}
+				orderTemp.setActualDeliveryDate(null);
 				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
 			}
 			baseMapper.updateById(delivery);
@@ -521,7 +535,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			List<DeliveryFiles> deliveryFilesList = deliveryFilesService.saveDeliveryFilesList(delivery.getId(), delivery.getDeliveryFilesList());
 			delivery.setDeliveryFilesList(deliveryFilesList);
 		}
-
+		if (ObjectUtils.isNotNull(delivery.getStorageId())){
+			StorageType storageType = iStorageClient.getStorageType(delivery.getStorageId());
+			if (storageType != null ){
+				delivery.setStorageName(storageType.getCname());
+			}
+		}
 		return R.data(delivery);
 	}
 
@@ -792,6 +811,49 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		}
 
 		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
+			if ((ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory")))
+				|| "681169".equals(AuthUtil.getTenantId())) {
+				R<List<OrderItems>> r = iOrderItemsClient.selectList(select.getSrcId());
+				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+					//从缓存中获得库存
+					List<StockGoods> stockGoodsList1 = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+					if (stockGoodsList1.size() == 0) {
+						stockGoodsList1 = stockGoodsClient.selectStockGoodsAll();
+					}
+					List<StockGoods> finalStockGoodsList1 = stockGoodsList1;
+					r.getData().forEach(e -> {
+						//实际库存有没有库存
+						StockGoods model = new StockGoods();
+						model.setGoodsId(e.getItemId());
+						//不同的出口对应不同的查询条件
+						if ("GN".equals(select.getTradeType())) {
+							model = finalStockGoodsList1.stream().filter(s ->
+								s.getGoodsId().equals(e.getItemId())
+									&& s.getTradeType().equals("GN")
+									&& s.getCorpId().equals(select.getCorpId())
+									&& s.getStorageId().equals(e.getStorageId())
+									&& s.getItemType().equals(e.getItemType())
+							).findFirst().orElse(null);
+						} else {
+							throw new SecurityException("贸易类型未指定");
+						}
+						StockGoods stock = model;
+						//达沃特新需求-禅道860中体现-国内-采购确认-不增加库存
+						if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+							//修改库存单 只修改库存  添加库存在上边
+							if (stock != null) {
+								iDeliveryItemsService.receivingInventory(select.getTradeType(), stock.getId(), e);
+							}
+						} else {
+							if (stock == null) {
+								throw new SecurityException("更新库存失败,未找到库存");
+							} else {
+								iDeliveryItemsService.receivingInventory(select.getTradeType(), stock.getId(), e);
+							}
+						}
+					});
+				}
+			}
 			List<BusinessOverpaymentItem> list = new ArrayList<>();
 			List<StockGoods> finalStockGoodsList = stockGoodsList;
 			deliveryItemsList.forEach(e -> {
@@ -864,7 +926,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						s.getGoodsId().equals(e.getItemId())
 							&& s.getTradeType().equals("GN")
 							&& s.getCorpId().equals(select.getCorpId())
-							&& s.getStorageId().equals(select.getStorageId())
+							&& s.getStorageId().equals(e.getStorageId())
 							&& s.getItemType().equals(e.getSpecificationAndModel())
 					).findFirst().orElse(null);
 				} else {
@@ -932,53 +994,6 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			});
 			//更新库存内容
 			iDeliveryItemsService.updateBatchById(deliveryItemsList);
-			if ((ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory")))
-				|| "681169".equals(AuthUtil.getTenantId())) {
-				R<List<OrderItems>> r = iOrderItemsClient.selectList(select.getSrcId());
-				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
-					//从缓存中获得库存
-					List<StockGoods> stockGoodsList1 = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
-					if (stockGoodsList1.size() == 0) {
-						stockGoodsList1 = stockGoodsClient.selectStockGoodsAll();
-					}
-					List<StockGoods> finalStockGoodsList1 = stockGoodsList1;
-					r.getData().forEach(e -> {
-						//实际库存有没有库存
-						StockGoods model = new StockGoods();
-						model.setGoodsId(e.getItemId());
-						//不同的出口对应不同的查询条件
-						if ("GN".equals(select.getTradeType())) {
-							model = finalStockGoodsList1.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.getItemType())
-							).findFirst().orElse(null);
-						} else {
-							throw new SecurityException("贸易类型未指定");
-						}
-						StockGoods stock = model;
-						//达沃特新需求-禅道860中体现-国内-采购确认-不增加库存
-						if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
-							//新增库存单
-							if (stock == null) {
-								iDeliveryItemsService.saveStockInventory(select.getTradeType(), select.getCorpId(), select.getStorageId(), e, select.getOrderType());
-							}
-							//修改库存单
-							else {
-								iDeliveryItemsService.receivingInventory(select.getTradeType(), stock.getId(), e);
-							}
-						} else {
-							if (stock == null) {
-								throw new SecurityException("更新库存失败,未找到库存");
-							} else {
-								iDeliveryItemsService.receivingInventory(select.getTradeType(), stock.getId(), e);
-							}
-						}
-					});
-				}
-			}
 			if ("681169".equals(AuthUtil.getTenantId())) {
 				// ===================增加益付款逻辑=========================
 				if (CollectionUtils.isNotEmpty(list)) {
@@ -1004,7 +1019,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						BigDecimal itemTotal = list.stream().map(BusinessOverpaymentItem::getOverpayment).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 						//益付款
 						Overpayment overpayment = new Overpayment();
-						overpayment.setCorpId(select.getSalesCompany());
+						overpayment.setCorpId(select.getCorpId());
 						overpayment.setType("add");
 						overpayment.setSrcPid(deliveryId);
 						overpayment.setAmount(itemTotal);
@@ -1059,8 +1074,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			orderDescClient.updateOrder(orderTemp);
 
 		} else {
-			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
-				&& "1".equals(sysClient.getParamService("synchronous"))) {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("inventory"))
+				&& "1".equals(sysClient.getParamService("inventory"))) {
 				delivery.setDeliveryStatus("已发货");
 				delivery.setFreightQuantity(select.getTotalQuantity());
 				delivery.setFreightTime(date);
@@ -1193,7 +1208,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 					// ===================撤回益付款逻辑=========================
 					if (e.getPurchaseQuantity().compareTo(e.getActualQuantity()) > 0) {
 						BigDecimal number = e.getPurchaseQuantity().subtract(e.getActualQuantity());
-						BigDecimal price = e.getPrice();
+						BigDecimal price = e.getPurchaseAmount();
 						//需要处理的益付款=(差额数量 * 单价)
 						BigDecimal total = number.multiply(price);
 						//益付款明细
@@ -1213,7 +1228,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						// ===================撤回益付款逻辑=========================
 						if (e.getPurchaseQuantity().compareTo(e.getActualQuantity()) > 0) {
 							BigDecimal number = e.getPurchaseQuantity().subtract(e.getActualQuantity());
-							BigDecimal price = e.getPrice();
+							BigDecimal price = e.getPurchaseAmount();
 							//需要处理的益付款=(差额数量 * 单价)
 							BigDecimal total = number.multiply(price);
 							//益付款明细
@@ -1263,6 +1278,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				} else if ("GN".equals(delivery.getTradeType())) {
 					model = stockGoodsList.stream().filter(s ->
 						s.getItemType().equals(e.getSpecificationAndModel())
+							&& s.getStorageId().equals(e.getStorageId())//库区
 					).findFirst().orElse(null);
 				} else {
 					throw new SecurityException("贸易类型未指定");

+ 5 - 5
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/PriceItemClient.java

@@ -10,7 +10,6 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.Func;
 import org.springblade.mocha.entity.PriceItem;
 import org.springblade.mocha.service.IPriceItemService;
 import org.springblade.stock.entity.StockGoods;
@@ -84,11 +83,12 @@ public class PriceItemClient implements IPriceItemClient {
 			if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 				StockGoods stockGoods = new StockGoods();
 				stockGoods.setGoodsId(r.getData().getId());
-				StockGoods stock = stockGoodsClient.getOneStock(stockGoods);
-				if (ObjectUtils.isNotNull(stock)) {
+				stockGoods.setTenantId(AuthUtil.getTenantId());
+				List<StockGoods> stock = stockGoodsClient.postListStockByCondition(stockGoods);
+				for (StockGoods stockGoods1 : stock) {
 					Map<String, BigDecimal> map = new HashMap<>();
-					map.put("purchasePrice", stock.getStockPrice());
-					map.put("purchaseRebatePrice", stock.getStockPrice());
+					map.put("purchasePrice", stockGoods1.getStockPrice());
+					map.put("purchaseRebatePrice", stockGoods1.getStockPrice());
 					mapList.add(map);
 				}
 			}

+ 3 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -945,8 +945,9 @@ public class OrderController extends BladeController {
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "库存账查询锁定库存订单信息", notes = "传入order")
 	public R<IPage<OrderVO>> ListMessage(Query query, @RequestParam("itemId") Long itemId,
-										 @RequestParam("corpId") Long corpId) {
-		IPage<OrderVO> pages = orderService.orderInventory(Condition.getPage(query), SecureUtil.getTenantId(), OrderTypeEnum.DOMESTIC.getType(), OrderTypeEnum.SALES.getType(), itemId, corpId);
+										 @RequestParam("corpId") Long corpId,
+										 @RequestParam("storageId") Long storageId) {
+		IPage<OrderVO> pages = orderService.orderInventory(Condition.getPage(query), SecureUtil.getTenantId(), OrderTypeEnum.DOMESTIC.getType(), OrderTypeEnum.SALES.getType(), itemId, corpId,storageId);
 		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 			pages.getRecords().stream().forEach(item -> {
 				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());

+ 2 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderItemsController.java

@@ -237,12 +237,12 @@ public class OrderItemsController extends BladeController {
 	@PostMapping("/importPrice")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "导入订单明细", notes = "传入excel")
-	public R importUser(MultipartFile file) {
+	public R importUser(MultipartFile file,Long warehouseId) {
 		List<OrderItemsExcel> excelList = ExcelUtil.read(file, OrderItemsExcel.class);
 		if (CollectionUtils.isEmpty(excelList)) {
 			throw new SecurityException("数据不能为空");
 		}
-		return orderItemsService.importUser(excelList, false);
+		return orderItemsService.importUser(excelList, false,warehouseId);
 	}
 
 	/**

+ 3 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/dealer/DealerOrderController.java

@@ -443,8 +443,9 @@ public class DealerOrderController extends BladeController {
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "库存账查询锁定库存订单信息", notes = "传入order")
 	public R<IPage<OrderVO>> ListMessage(Query query, @RequestParam("itemId") Long itemId,
-										 @RequestParam("corpId") Long corpId) {
-		IPage<OrderVO> pages = orderService.orderInventory(Condition.getPage(query), SecureUtil.getTenantId(), OrderTypeEnum.DEALER.getType(), OrderTypeEnum.SALES.getType(), itemId, corpId);
+										 @RequestParam("corpId") Long corpId,
+										 @RequestParam("storageId") Long storageId) {
+		IPage<OrderVO> pages = orderService.orderInventory(Condition.getPage(query), SecureUtil.getTenantId(), OrderTypeEnum.DEALER.getType(), OrderTypeEnum.SALES.getType(), itemId, corpId,storageId);
 		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 			pages.getRecords().stream().forEach(item -> {
 				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());

+ 6 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -80,6 +80,7 @@ public class OrderDescClient implements IOrderDescClient {
 				if (order.getDeliverQuantity().compareTo(BigDecimal.ZERO) == 0) {
 					iOrderService.update(null, new LambdaUpdateWrapper<Order>()
 						.set(Order::getDeliverTime, null)
+						.set(Order::getActualDeliveryDate, null)
 						.eq(Order::getId, order.getId())
 					);
 				}
@@ -88,6 +89,7 @@ public class OrderDescClient implements IOrderDescClient {
 				if (order.getReceiveQuantity().compareTo(BigDecimal.ZERO) == 0) {
 					iOrderService.update(null, new LambdaUpdateWrapper<Order>()
 						.set(Order::getReceiveTime, null)
+						.set(Order::getActualDeliveryDate, null)
 						.eq(Order::getId, order.getId())
 					);
 				}
@@ -100,6 +102,7 @@ public class OrderDescClient implements IOrderDescClient {
 					if (order.getDeliverQuantity().compareTo(BigDecimal.ZERO) == 0) {
 						iOrderService.update(null, new LambdaUpdateWrapper<Order>()
 							.set(Order::getDeliverTime, null)
+							.set(Order::getActualDeliveryDate, null)
 							.eq(Order::getId, order.getId())
 						);
 					}
@@ -108,6 +111,7 @@ public class OrderDescClient implements IOrderDescClient {
 					if (order.getReceiveQuantity().compareTo(BigDecimal.ZERO) == 0) {
 						iOrderService.update(null, new LambdaUpdateWrapper<Order>()
 							.set(Order::getReceiveTime, null)
+							.set(Order::getActualDeliveryDate, null)
 							.eq(Order::getId, order.getId())
 						);
 					}
@@ -438,8 +442,8 @@ public class OrderDescClient implements IOrderDescClient {
 	}
 
 	@Override
-	public List<OrderVO> orderInventoryList( String billType, Long itemId, Long corpId) {
-		return iOrderService.orderInventoryList(billType,itemId,corpId);
+	public List<OrderVO> orderInventoryList( String billType, Long itemId, Long corpId,Long storageId) {
+		return iOrderService.orderInventoryList(billType,itemId,corpId,storageId);
 	}
 
 

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

@@ -65,7 +65,7 @@ public interface OrderMapper extends BaseMapper<Order> {
 								 @Param("tradeType") String tradeType,
 								 @Param("billType") String billType,
 								 @Param("itemId") Long itemId,
-								 @Param("corpId") Long corpId);
+								 @Param("corpId") Long corpId,@Param("storageId") Long storageId);
 
 	/**
 	 * 首页获取销售趋势
@@ -369,7 +369,8 @@ public interface OrderMapper extends BaseMapper<Order> {
 									 @Param("tradeType") String tradeType,
 									 @Param("billType") String billType,
 									 @Param("itemId") Long itemId,
-									 @Param("corpId") Long corpId);
+									 @Param("corpId") Long corpId,
+									 @Param("storageId") Long storageId);
 
     Map<String, BigDecimal> turnoverAnalysisDWT(@Param("billType")String billType, @Param("type")String type,
 												@Param("statusDate")String statusDate, @Param("endDate")String endDate);

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

@@ -455,12 +455,11 @@
     </select>
     <select id="orderInventory"  resultType="org.springblade.purchase.sales.vo.OrderVO">
         SELECT
-            DISTINCT
             bo.id,
             bo.order_no,
             bo.busines_date,
             item.corp_id,
-            item.order_quantity as orderQuantity
+            SUM(item.order_quantity) as orderQuantity
         FROM
             business_order bo
             LEFT JOIN business_order_items item ON bo.id = item.pid
@@ -473,10 +472,22 @@
             AND bo.bill_type = #{billType}
             AND item.item_id = #{itemId}
             AND item.corp_id = #{corpId}
+            <if test='storageId != null'>
+                AND item.storage_id = #{storageId}
+            </if>
             <if test='tenantId != null and tenantId != "" and tenantId == "681169"'>
                 and bo.actual_delivery_date is NULL
                 AND bo.order_status NOT IN ('录入')
             </if>
+        <if test='tenantId != null and tenantId != "" and tenantId == "941197"'>
+            and bo.actual_delivery_date is NULL
+            AND bo.order_status NOT IN ('录入')
+        </if>
+        GROUP BY bo.id,
+        bo.actual_delivery_date,
+        bo.order_no,
+        bo.busines_date,
+        item.corp_id
     </select>
     <select id="salesTrend"  resultType="org.springblade.purchase.sales.vo.SalesTrend">
         SELECT
@@ -3573,10 +3584,17 @@ ORDER BY
         AND bo.bill_type = #{billType}
         AND item.item_id = #{itemId}
         AND item.corp_id = #{corpId}
+        <if test='storageId != null'>
+            and item.storage_id = #{storageId}
+        </if>
         <if test='tenantId != null and tenantId != "" and tenantId == "681169"'>
             and bo.actual_delivery_date is NULL
             AND bo.order_status NOT IN ('录入')
         </if>
+        <if test='tenantId != null and tenantId != "" and tenantId == "941197"'>
+            and bo.actual_delivery_date is NULL
+            AND bo.order_status NOT IN ('录入')
+        </if>
     </select>
     <select id="turnoverAnalysisDWT" resultType="java.util.Map">
         SELECT

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderItemsService.java

@@ -70,7 +70,7 @@ public interface IOrderItemsService extends IService<OrderItems> {
 	 * @param isCovered
 	 * @return
 	 */
-	R<Map<String, Object>> importUser(List<OrderItemsExcel> data, Boolean isCovered);
+	R<Map<String, Object>> importUser(List<OrderItemsExcel> data, Boolean isCovered,Long warehouseId);
 
 	/**
 	 * 经销商导入订单明细

+ 2 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -165,9 +165,9 @@ public interface IOrderService extends IService<Order> {
 	 * @param corpId    供应商
 	 * @return
 	 */
-	IPage<OrderVO> orderInventory(IPage<OrderVO> page, String tenantId, String tradeType, String billType, Long itemId, Long corpId);
+	IPage<OrderVO> orderInventory(IPage<OrderVO> page, String tenantId, String tradeType, String billType, Long itemId, Long corpId,Long storageId);
 
-	List<OrderVO> orderInventoryList( String billType, Long itemId, Long corpId);
+	List<OrderVO> orderInventoryList( String billType, Long itemId, Long corpId,Long storageId);
 	/**
 	 * 经销商确认销售订单
 	 * @param order

+ 7 - 6
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingItemsServiceImpl.java

@@ -10,14 +10,11 @@ import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsAttnClient;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IWechatClient;
-import org.springblade.common.constant.LauncherConstant;
-import org.springblade.core.launch.BladeApplication;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
-import org.springblade.purchase.sales.PurchaseSalesApplication;
 import org.springblade.purchase.sales.entity.Biding;
 import org.springblade.purchase.sales.entity.BidingAgent;
 import org.springblade.purchase.sales.entity.BidingItems;
@@ -105,18 +102,22 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 		if (1 == distinguish) {
 			//获得标书明细
 			List<BidingItems> bidingItemsList = baseMapper.selectListByPid(pid);
-			list.addAll(bidingItemsList);
+			for (BidingItems bidingItems : bidingItemsList) {
+				if (list.stream().noneMatch(e -> e.getId().equals(bidingItems.getId()))) {
+					list.add(bidingItems);
+				}
+			}
+//			list.addAll(bidingItemsList);
 			List<BidingItems> sortedList = list.stream().filter(e -> ObjectUtils.isNotNull(e.getSeaFreight()))
 				.sorted(Comparator.comparing(BidingItems::getSeaFreight))
 				.collect(Collectors.toList());
 			int sort = 1;
 			List<BidingItems> list1 = new ArrayList<>();
 			BigDecimal seaFreight = new BigDecimal("0.00");
-			int ranking = 1;
 			for (int i = 0; i < sortedList.size(); i++) {
 				if (i > 0) {
 					if (sortedList.get(i).getSeaFreight().equals(seaFreight)) {
-						sortedList.get(i).setRanking(ranking);
+						sortedList.get(i).setRanking(sort);
 					} else {
 						sort = sort + 1;
 						sortedList.get(i).setRanking(sort);

+ 12 - 9
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderItemsServiceImpl.java

@@ -103,9 +103,6 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 
 	private final IPriceItemClient iPriceItemClient;
 
-	private final IStockGoodsClient iStockGoodsClient;
-
-
 	@Override
 	public IPage<OrderItemsVO> selectOrderItemsPage(IPage<OrderItemsVO> page, OrderItemsVO orderItems) {
 		return page.setRecords(baseMapper.selectOrderItemsPage(page, orderItems));
@@ -117,7 +114,7 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 	}
 
 	@Override
-	public R<Map<String, Object>> importUser(List<OrderItemsExcel> data, Boolean isCovered) {
+	public R<Map<String, Object>> importUser(List<OrderItemsExcel> data, Boolean isCovered,Long warehouseId) {
 		Map<String, Object> map = new HashMap<>();
 		List<OrderItems> list = new ArrayList<>();//导入成功
 		List<String> lose = new ArrayList<>();//导入失败的
@@ -144,9 +141,13 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 				StockGoods stockGoods = new StockGoods();
 				stockGoods.setGoodsId(goods.getData().getId());
 				stockGoods.setItemType(goods.getData().getTypeno());
-				StockGoods stock = stockGoodsClient.getOneStock(stockGoods);
-				if (stock != null) {
-					orderItems.setStorageQuantity(stock.getSurplusRouteQuantity());
+				stockGoods.setWarehouseId(warehouseId);
+				List<StockGoods> stock = stockGoodsClient.selectStockList(stockGoods);
+				if (stock != null && stock.size()>0) {
+					orderItems.setStorageQuantity(stock.get(0).getSurplusRouteQuantity());
+					orderItems.setStorageId(stock.get(0).getStorageId());
+					orderItems.setStorageName(stock.get(0).getStockName());
+					orderItems.setPurchaseAmount(stock.get(0).getStockPrice());
 				} else {
 					orderItems.setStorageQuantity(new BigDecimal(BigInteger.ZERO));
 				}
@@ -229,6 +230,7 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 	 * @param pid  订单主表id
 	 * @return
 	 */
+	@Override
 	public List<OrderItems> saveOrderItemsMessage(List<OrderItems> list, Date date, Long pid) {
 		list.forEach(item -> {
 
@@ -445,13 +447,14 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 				orderDateVo.setOrderNumber(orderDateVoList.stream().filter(e -> e.getBelongToCorpId().longValue() == corpsDesc.getId().longValue()).map(OrderDateVo::getOrderNumber).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(0, BigDecimal.ROUND_HALF_UP));
 				list.add(orderDateVo);
 			}
-		} else if (CollectionUtils.isNotEmpty(corpsType) && CollectionUtils.isEmpty(orderDateVoList))
+		} else if (CollectionUtils.isNotEmpty(corpsType) && CollectionUtils.isEmpty(orderDateVoList)) {
 			for (CorpsDesc corpsDesc : corpsType) {
 				OrderDateVo orderDateVo = new OrderDateVo();
 				orderDateVo.setBelongToCorpName(corpsDesc.getGoodtypes());
 				orderDateVo.setOrderNumber(BigDecimal.ZERO);
 				list.add(orderDateVo);
 			}
+		}
 		return list;
 	}
 
@@ -694,7 +697,7 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, OrderIt
 			stockGoods.setGoodsId(salesOrderEntry.getItemId());
 			stockGoods.setTradeType(salesOrderEntryDto.getTradeType());
 			stockGoods.setStorageId(salesOrderEntryDto.getStorageId());
-			StockGoods detail = iStockGoodsClient.getOneStock(stockGoods);
+			StockGoods detail = stockGoodsClient.getOneStock(stockGoods);
 
 			Map<String, Object> map = new HashMap<>();
 

+ 95 - 34
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -53,7 +53,6 @@ import org.springblade.finance.vojo.Acc;
 import org.springblade.finance.vojo.Items;
 import org.springblade.finance.vojo.Settlement;
 import org.springblade.land.entity.LandOrder;
-import org.springblade.land.entity.OrderItem;
 import org.springblade.land.feign.ILandClient;
 import org.springblade.pay.tonglianPayment.dto.PaymentDTO;
 import org.springblade.pay.tonglianPayment.entity.Parameters;
@@ -82,7 +81,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
-import javax.sql.rowset.serial.SerialException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.MathContext;
@@ -174,7 +172,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	//收发货
 	private final IDeliveryClient deliveryClient;
 
-	private final IOrderPartsService orderPartsService;
+	private final IStorageClient storageClient;
 
 
 	@Override
@@ -743,6 +741,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				orderMessage.setBelongToCorpList(corpMessage.getData());
 			}
 		}
+		// 获取销售公司中文名
+		if (orderMessage.getStorageId() != null) {
+			StorageType storageType = storageClient.getStorageType(orderMessage.getStorageId());
+			if (ObjectUtils.isNotNull(storageType)) {
+				orderMessage.setStorageName(storageType.getCname());
+			}
+		}
 		if (orderMessage.getProductionPlant() != null) {
 			R<List<Map<String, Object>>> corpMessage = corpsDescClient.getCorpsMessage(orderMessage.getProductionPlant().toString());
 			if (corpMessage.isSuccess() && corpMessage.getData() != null) {
@@ -758,6 +763,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			orderMessage.setOrderQuantity(orderQuantity);
 			// 销售金额
 			orderMessage.setAmount(orderItemsList.stream().map(OrderItems::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			StringBuilder ids = new StringBuilder();
+			orderItemsList.forEach(item -> {
+				ids.append(item.getStorageId()).append(",");
+			});
+			List<StorageDesc> storageDescList = storageClient.selectStorageIds(ids.toString());
+			for (OrderItems orderItems : orderItemsList) {
+				String name = storageDescList.stream().filter(e -> orderItems.getStorageId().equals(e.getId())).findFirst().orElse(new StorageDesc()).getCname();
+				orderItems.setStorageName(name);
+			}
 		}
 		orderMessage.setOrderItemsList(orderItemsList);
 		// 获取订单费用信息
@@ -805,6 +819,37 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		}
 		// 获取销售单明细数据
 		List<OrderItems> orderItemsList = orderItemsService.getOrderItems(order);
+		if (CollectionUtils.isNotEmpty(orderItemsList)) {
+			StringBuilder ids = new StringBuilder();
+			orderItemsList.forEach(item -> {
+				ids.append(item.getStorageId()).append(",");
+			});
+			List<StorageDesc> storageDescList = storageClient.selectStorageDescAll();
+			for (OrderItems orderItems : orderItemsList) {
+				if (ObjectUtils.isNotNull(orderItems.getStorageId())) {
+					if (ObjectUtils.isNotNull(storageDescList) && storageDescList.size() > 0) {
+						String name = storageDescList.stream().filter(e -> orderItems.getStorageId().equals(e.getId())).findFirst().orElse(new StorageDesc()).getCname();
+						orderItems.setStorageName(name);
+					}
+				} else {
+					orderItems.setStorageId(storageDescList.get(0).getId());
+					orderItems.setStorageName(storageDescList.get(0).getCname());
+				}
+
+			}
+		}
+		if (ObjectUtils.isNull(orderMessage.getStorageId())) {
+			List<StorageType> storageTypeList = storageClient.selectStorageTypeAll();
+			if (ObjectUtils.isNotNull(storageTypeList) && storageTypeList.size() > 0) {
+				orderMessage.setStorageId(storageTypeList.get(0).getId());
+				orderMessage.setStorageName(storageTypeList.get(0).getCname());
+			}
+		} else {
+			StorageType storageType = storageClient.getStorageType(orderMessage.getStorageId());
+			if (ObjectUtils.isNotNull(storageType)) {
+				orderMessage.setStorageName(storageType.getCname());
+			}
+		}
 		orderMessage.setOrderItemsList(orderItemsList);
 		// 获取订单费用明细数据
 		List<OrderFees> orderFeesList = orderFeesService.getOrderFees(order);
@@ -1138,20 +1183,21 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				//从缓存中获得库存
 				redisClient.basicData("all");
 				List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
-
+				List<StockGoods> stockGoods = new ArrayList<>();
 				if (CollectionUtils.isNotEmpty(orderItems)) {
-					orderItems.forEach(e -> {
+					for (OrderItems item : orderItems) {
 						// 开始锁定库存,减少可用
 						StockGoods oneStock = stockGoodsList.stream().filter(s ->
-							s.getGoodsId().equals(e.getItemId())
-								&& s.getCorpId().equals(e.getCorpId())
+							s.getGoodsId().equals(item.getItemId())
+								&& s.getCorpId().equals(item.getCorpId())
+								&& s.getStorageId().equals(item.getStorageId())
 								&& s.getTenantId().equals(SecureUtil.getTenantId())
 						).findFirst().orElse(null);
 						if (oneStock == null) {
 							throw new SecurityException("锁定库存失败:未查询到库存信息");
 						}
 						// 原单据的订货数量
-						BigDecimal orderQuantity = e.getOrderQuantity();
+						BigDecimal orderQuantity = item.getOrderQuantity();
 						// 可用库存
 						BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
 						// 锁定库存
@@ -1168,12 +1214,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						oneStock.setSurplusRouteQuantity(surplusRouteQuantity.subtract(orderQuantity));
 						// 增加锁定库存
 						oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0").add(orderQuantity) : lockingQuantity.add(orderQuantity));
-						// 更新库存
-						boolean goods = stockGoodsClient.updateStock(oneStock);
-						if (!goods) {
-							throw new SecurityException("锁定库存失败: " + oneStock.getCode() + "更新失败");
-						}
-					});
+						stockGoods.add(oneStock);
+					}
+					// 更新库存
+					boolean goods = stockGoodsClient.updateStockList(stockGoods);
+					if (!goods) {
+						throw new SecurityException("锁定库存失败: " + salesOrder.getOrderNo() + "更新失败");
+					}
 				}
 			}
 		}
@@ -1664,6 +1711,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					StockGoods oneStock = stockGoodsList.stream().filter(s ->
 						s.getGoodsId().equals(e.getItemId())
 							&& s.getCorpId().equals(e.getCorpId())
+							&& s.getStorageId().equals(e.getStorageId())
 							&& s.getTenantId().equals(SecureUtil.getTenantId())
 					).findFirst().orElse(null);
 					if (oneStock == null) {
@@ -1872,15 +1920,28 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 				if (CollectionUtils.isNotEmpty(orderItems)) {
 					List<StockGoods> stockGoods = new ArrayList<>();
-					orderItems.forEach(e -> {
-						// 开始锁定库存,减少可用
-						StockGoods oneStock = stockGoodsList.stream().filter(s ->
-							s.getGoodsId().equals(e.getItemId())
-								&& s.getCorpId().equals(e.getCorpId())
-								&& s.getTenantId().equals(SecureUtil.getTenantId())
-						).findFirst().orElse(null);
+					StockGoods oneStock = null;
+					boolean status = ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"));
+					for (OrderItems e : orderItems) {
+						if (status) {
+							// 开始锁定库存,减少可用
+							oneStock = stockGoodsList.stream().filter(s ->
+								s.getGoodsId().equals(e.getItemId())
+									&& s.getWarehouseId().equals(order.getStorageId())
+									&& s.getStorageId().equals(e.getStorageId())
+									&& s.getTenantId().equals(SecureUtil.getTenantId())
+							).findFirst().orElse(null);
+						} else {
+							// 开始锁定库存,减少可用
+							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("编号:" + oneStock.getCode() + "撤销失败:未查询到库存信息");
+							throw new SecurityException("编号:" + e.getCode() + "撤销失败:未查询到库存信息");
 						}
 						// 原单据的订货数量
 						BigDecimal orderQuantity = e.getOrderQuantity();
@@ -1898,11 +1959,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						// 减少锁定库存
 						oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0") : lockingQuantity.subtract(orderQuantity));
 						stockGoods.add(oneStock);
-					});
+					}
 					// 更新库存
 					boolean r = stockGoodsClient.updateStockList(stockGoods);
 					if (!r) {
-						throw new SecurityException("撤销失败:更新库存失败");
+						throw new SecurityException("撤销失败:" + order.getOrderNo() + "更新库存失败");
 					}
 				}
 			}
@@ -1937,13 +1998,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
-	public IPage<OrderVO> orderInventory(IPage<OrderVO> page, String tenantId, String tradeType, String billType, Long itemId, Long corpId) {
-		return page.setRecords(baseMapper.orderInventory(page, tenantId, tradeType, billType, itemId, corpId));
+	public IPage<OrderVO> orderInventory(IPage<OrderVO> page, String tenantId, String tradeType, String billType, Long itemId, Long corpId, Long storageId) {
+		return page.setRecords(baseMapper.orderInventory(page, tenantId, tradeType, billType, itemId, corpId, storageId));
 	}
 
 	@Override
-	public List<OrderVO> orderInventoryList(String billType, Long itemId, Long corpId) {
-		return baseMapper.orderInventoryList(AuthUtil.getTenantId(), "GN", billType, itemId, corpId);
+	public List<OrderVO> orderInventoryList(String billType, Long itemId, Long corpId, Long storageId) {
+		return baseMapper.orderInventoryList(AuthUtil.getTenantId(), "GN", billType, itemId, corpId, storageId);
 	}
 
 	/**
@@ -1975,7 +2036,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (order.getDealer() == 1 && CollectionUtils.isNotEmpty(list)) {
 			// 查询库存
 			for (OrderItems item : list) {
-				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
+				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null, null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
 					null, null, OrderTypeEnum.DEALER.getType());
 				if (!stock.isSuccess()) {
 					throw new RuntimeException("查询库存出错");
@@ -2011,7 +2072,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		} else if (order.getDealer() == 2 && CollectionUtils.isNotEmpty(list)) {
 			// 查询库存
 			for (OrderItems item : list) {
-				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
+				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null, null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
 					null, null, OrderTypeEnum.DEALER.getType());
 				if (!stock.isSuccess()) {
 					throw new RuntimeException("查询库存出错");
@@ -2678,7 +2739,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				BigDecimal balanceAmount = new BigDecimal("0.00");
 				orderItems.setPurchaseCost(orderItems.getPurchasePrice());
 				//获取本商品库存
-				R<StockGoodsVO> r = stockGoodsClient.selectStock(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
+				R<StockGoodsVO> r = stockGoodsClient.selectStock(null, null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
 				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 					if ("XS".equals(order.getBillType())) {
 						surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
@@ -2772,7 +2833,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		List<OrderItems> orderItemsList = orderItemsService.list(orderItemsLambdaQueryWrapper);
 		for (OrderItems orderItems : orderItemsList) {
 			//获取本商品库存
-			R<StockGoodsVO> r = stockGoodsClient.selectStock(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
+			R<StockGoodsVO> r = stockGoodsClient.selectStock(null, null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
 			if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
 				if ("XS".equals(order.getBillType())) {
 					if (r.getData().getSurplusRouteQuantity().compareTo(orderItems.getStorageInQuantity()) < 0) {
@@ -2811,7 +2872,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				BigDecimal balanceQuantity = new BigDecimal("0.00");
 				BigDecimal balanceAmount = new BigDecimal("0.00");
 				//获取本商品库存
-				R<StockGoodsVO> r = stockGoodsClient.selectStock(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
+				R<StockGoodsVO> r = stockGoodsClient.selectStock(null, null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
 				GoodsDesc goodsDesc = goodsDescClient.getGoodsDescDetail(orderItems.getItemId());
 				if (ObjectUtils.isNotNull(goodsDesc)) {
 					orderItems.setCname(goodsDesc.getCname());
@@ -6842,7 +6903,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 	@Override
 	public Map<String, BigDecimal> turnoverAnalysisDWT(String billType, String type, String statusDate, String endDate) {
-		return baseMapper.turnoverAnalysisDWT(billType,type,statusDate,endDate);
+		return baseMapper.turnoverAnalysisDWT(billType, type, statusDate, endDate);
 	}
 
 	@Override

+ 101 - 6
blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java

@@ -27,10 +27,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
-import org.springblade.client.entity.CorpsAttn;
-import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.GoodsType;
-import org.springblade.client.entity.StorageDesc;
+import org.springblade.client.entity.*;
 import org.springblade.client.feign.ICorpsAttnClient;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
@@ -48,6 +45,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.excel.StockGoodsExcel;
+import org.springblade.stock.excel.StockGoodsExportExcel;
 import org.springblade.stock.service.IStockGoodsService;
 import org.springblade.stock.vo.*;
 import org.springblade.system.entity.Tenant;
@@ -159,6 +157,7 @@ public class StockGoodsController extends BladeController {
 			lambdaQueryWrapper.ge(Func.isNotEmpty(stockGoods.getCreateStartTime()), StockGoods::getCreateTime, stockGoods.getCreateStartTime());//制单日期开始
 			lambdaQueryWrapper.le(Func.isNotEmpty(stockGoods.getCreateEndTime()), StockGoods::getCreateTime, stockGoods.getCreateEndTime());//制单日期结束
 			IPage<StockGoods> pages = stockGoodsService.page(Condition.getPage(query), lambdaQueryWrapper);
+			List<StorageType> storageTypeList = iStorageClient.selectStorageTypeAll();
 			if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 				pages.getRecords().forEach(item -> {
 					//获取商品信息
@@ -190,13 +189,20 @@ public class StockGoodsController extends BladeController {
 							item.setCreateUserName(createUser.getData().getName());
 						}
 					}
-					//获取库信息
+					//获取库信息
 					if (item.getStorageId() != null) {
-						//库信息
+						//库信息
 						StorageDesc storageDesc = iStorageClient.findById(item.getStorageId());
 						if (storageDesc != null) {
 							item.setStockName(storageDesc.getCname());
 						}
+					}
+					//获取仓库信息
+					if (item.getWarehouseId() != null && storageTypeList.size() > 0) {
+						StorageType storageType = storageTypeList.stream().filter(e -> e.getId().equals(item.getWarehouseId())).findFirst().orElse(new StorageType());
+						if (ObjectUtils.isNotNull(storageType.getCname())) {
+							item.setStorageName(storageType.getCname());
+						}
 
 					}
 					if (item.getUpdateUser() != null) {
@@ -727,4 +733,93 @@ public class StockGoodsController extends BladeController {
 		return R.data(iPage);
 	}
 
+
+	/**
+	 * 分页 库存账
+	 */
+	@GetMapping("/export")
+	public void list(StockGoodsVO stockGoods,HttpServletResponse response) {
+
+		LambdaQueryWrapper<StockGoods> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(StockGoods::getTenantId, SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(StockGoods::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(Func.isNotEmpty(stockGoods.getOrderType()), StockGoods::getOrderType, stockGoods.getOrderType());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(stockGoods.getBillNo()), StockGoods::getBillNo, stockGoods.getBillNo());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(stockGoods.getContractNumber()), StockGoods::getContractNumber, stockGoods.getContractNumber());
+		if (Func.isNotEmpty(stockGoods.getCname()) || Func.isNotEmpty(stockGoods.getCode())) {
+			List<Long> goodId = goodsDescClient.getGoodId(stockGoods.getCode(), stockGoods.getCname(), null, null, null, null, null);
+			if (CollectionUtils.isNotEmpty(goodId)) {
+				lambdaQueryWrapper.in(StockGoods::getGoodsId, goodId);
+			} else {
+				lambdaQueryWrapper.eq(Func.isNotEmpty(stockGoods.getCode()),StockGoods::getCode, stockGoods.getCode());
+				lambdaQueryWrapper.eq(Func.isNotEmpty(stockGoods.getCname()),StockGoods::getCname, stockGoods.getCname());
+			}
+		}
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getLotNo()), StockGoods::getLotNo, stockGoods.getLotNo());
+		lambdaQueryWrapper.eq(Func.isNotEmpty(stockGoods.getStorageId()), StockGoods::getStorageId, stockGoods.getStorageId());
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getBrandItem()), StockGoods::getBrandItem, stockGoods.getBrandItem());//花纹
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getPlaceProduction()), StockGoods::getPlaceProduction, stockGoods.getPlaceProduction());//产地
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getBrand()), StockGoods::getBrand, stockGoods.getBrand());//品牌
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getTypeno()), StockGoods::getTypeno, stockGoods.getTypeno());//规格
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getTypenoOne()), StockGoods::getTypenoOne, stockGoods.getTypenoOne());//规格1
+		lambdaQueryWrapper.like(Func.isNotEmpty(stockGoods.getTypenoTwo()), StockGoods::getTypenoTwo, stockGoods.getTypenoTwo());//速级
+		lambdaQueryWrapper.ge(Func.isNotEmpty(stockGoods.getCreateStartTime()), StockGoods::getCreateTime, stockGoods.getCreateStartTime());//制单日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(stockGoods.getCreateEndTime()), StockGoods::getCreateTime, stockGoods.getCreateEndTime());//制单日期结束
+		List<StockGoods> pages = stockGoodsService.list(lambdaQueryWrapper);
+		List<StorageType> storageTypeList = iStorageClient.selectStorageTypeAll();
+		pages.forEach(item -> {
+			//获取商品信息
+			R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(item.getGoodsId());
+			if (goodsMessage.isSuccess() && goodsMessage.getData() != null) {
+				if (StringUtils.isNotBlank(goodsMessage.getData().getBrand())) {
+					item.setBrand(goodsMessage.getData().getBrand());
+				}
+				if (StringUtils.isNotBlank(goodsMessage.getData().getBrandItem())) {
+					item.setBrandItem(goodsMessage.getData().getBrandItem());
+				}
+				if (StringUtils.isNotBlank(goodsMessage.getData().getTypeno())) {
+					item.setTypeno(goodsMessage.getData().getTypeno());
+				}
+				item.setCname(goodsMessage.getData().getCname());
+				item.setCode(goodsMessage.getData().getCode());
+				item.setGoodsType(goodsMessage.getData().getGoodsTypeName());
+				item.setUrl(goodsMessage.getData().getUrl());
+			}
+			//获取客户信息
+			R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
+			if (corpMessage.isSuccess() && corpMessage.getData() != null) {
+				item.setCorpName(corpMessage.getData().getCname());
+			}
+			//获取用户信息
+			if (item.getCreateUser() != null) {
+				R<User> createUser = userClient.userInfoById(item.getCreateUser());
+				if (createUser.isSuccess() && createUser.getData() != null) {
+					item.setCreateUserName(createUser.getData().getName());
+				}
+			}
+			//获取库区信息
+			if (item.getStorageId() != null) {
+				//库区信息
+				StorageDesc storageDesc = iStorageClient.findById(item.getStorageId());
+				if (storageDesc != null) {
+					item.setStockName(storageDesc.getCname());
+				}
+			}
+			//获取仓库信息
+			if (item.getWarehouseId() != null && storageTypeList.size() > 0) {
+				StorageType storageType = storageTypeList.stream().filter(e -> e.getId().equals(item.getWarehouseId())).findFirst().orElse(new StorageType());
+				if (ObjectUtils.isNotNull(storageType.getCname())) {
+					item.setStorageName(storageType.getCname());
+				}
+			}
+			if (item.getUpdateUser() != null) {
+				R<User> updateUser = userClient.userInfoById(item.getUpdateUser());
+				if (updateUser.isSuccess() && updateUser.getData() != null) {
+					item.setUpdateUserName(updateUser.getData().getName());
+				}
+			}
+		});
+		ExcelUtil.export(response, "库存账数据导出", "库存账数据表", BeanUtil.copy(pages, StockGoodsExportExcel.class), StockGoodsExportExcel.class);
+	}
+
 }

+ 140 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsExportExcel.java

@@ -0,0 +1,140 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.stock.excel;
+
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class StockGoodsExportExcel {
+	/**
+	 * 品号
+	 */
+	@ExcelProperty("品号")
+	private String code;
+	/**
+	 * 名称
+	 */
+	@ExcelProperty("名称")
+	private String cname;
+	/**
+	 * 花纹
+	 */
+	@ExcelProperty("花纹")
+	private String brandItem;
+	/**
+	 * 产地
+	 */
+	@ExcelProperty("产地")
+	private String placeProduction;
+	/**
+	 * 规格
+	 */
+	@ExcelProperty("规格")
+	private String typeno;
+	/**
+	 * 规格
+	 */
+	@ExcelProperty("负荷指数")
+	private String typenoOne;
+	/**
+	 * 速级
+	 */
+	@ExcelProperty("速级")
+	private String typenoTwo;
+	/**
+	 * 仓库名称
+	 */
+	@ExcelProperty("仓库")
+	private String storageName;
+	/**
+	 * 库区
+	 */
+	@ExcelProperty("库区")
+	private String stockName;
+	/**
+	 * 供应商名称
+	 */
+	@ExcelProperty("供应商名称")
+	private String corpName;
+	/**
+	 * 品牌
+	 */
+	@ExcelProperty("品牌")
+	private String brand;
+	/**
+	 * 总库存
+	 */
+	@ExcelProperty("总库存")
+	private BigDecimal balanceQuantity;
+
+	/**
+	 * 内贸锁定
+	 */
+	@ExcelProperty("内贸锁定")
+	private BigDecimal lockingQuantity;
+
+	/**
+	 * 可用库存
+	 */
+	@ExcelProperty("可用库存")
+	private BigDecimal surplusRouteQuantity;
+	/**
+	 * 库存均价
+	 */
+	@ExcelProperty("库存均价")
+	private BigDecimal stockPrice;
+
+	/**
+	 * 创建时间
+	 */
+	@ExcelProperty("创建时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	/**
+	 * 创建人
+	 */
+	@ExcelProperty("创建人")
+	private String createUserName;
+	/**
+	 * 更新时间
+	 */
+	@ExcelProperty("更新时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+	/**
+	 * 更新人
+	 */
+	@ExcelProperty("更新人")
+	private String updateUserName;
+
+}

+ 46 - 20
blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java

@@ -9,7 +9,6 @@ import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.client.entity.StorageDesc;
-import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.client.feign.IRedisClient;
 import org.springblade.client.feign.IStorageClient;
@@ -26,8 +25,6 @@ import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.service.IStockGoodsService;
 import org.springblade.stock.vo.StockGoodsVO;
 import org.springblade.system.feign.ISysClient;
-import org.springblade.system.user.feign.IUserClient;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -38,6 +35,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Slf4j
@@ -59,6 +57,8 @@ public class StockGoodsClient implements IStockGoodsClient {
 
 	private final ISysClient sysClient;
 
+	private final IStorageClient storageClient;
+
 	@Override
 	@GetMapping("stockgoods/stocklist")
 	public List<StockGoods> list(String code, String cname, String brandItem, String placeProduction, String typeno, String typenoOne, String typenoTwo, String stockName,
@@ -144,8 +144,8 @@ public class StockGoodsClient implements IStockGoodsClient {
 	 */
 	@Override
 	@GetMapping(SELECT_STOKE)
-	public R<StockGoodsVO> selectStock(Long corpId, Long storageId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType) {
-		return R.data(stockGoodsService.selectStock(corpId, storageId, goodId, itemType, lotNo, cntrNo, billNo, contractNumber, tradeType));
+	public R<StockGoodsVO> selectStock(Long corpId, Long storageId, Long warehouseId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType) {
+		return R.data(stockGoodsService.selectStock(corpId, storageId, warehouseId, goodId, itemType, lotNo, cntrNo, billNo, contractNumber, tradeType));
 	}
 
 	/**
@@ -170,8 +170,8 @@ public class StockGoodsClient implements IStockGoodsClient {
 	@Override
 	@GetMapping(SELECT_STOCK_PARTS_YCP)
 	@TenantIgnore
-	public R<StockGoodsVO> selectStockPartsYCP(Long corpId, Long storageId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType,String tenantId) {
-		return R.data(stockGoodsService.selectStockPartsYCP(corpId, storageId, goodId, itemType, lotNo, cntrNo, billNo, contractNumber, tradeType,tenantId));
+	public R<StockGoodsVO> selectStockPartsYCP(Long corpId, Long storageId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType, String tenantId) {
+		return R.data(stockGoodsService.selectStockPartsYCP(corpId, storageId, goodId, itemType, lotNo, cntrNo, billNo, contractNumber, tradeType, tenantId));
 	}
 
 	/**
@@ -212,17 +212,26 @@ public class StockGoodsClient implements IStockGoodsClient {
 	 */
 	@Override
 	@GetMapping(GET_STOCK)
-	public R<? extends Object> getStock(StockGoods stockGoods) {
+	public R<List<StockGoods>> getStock(StockGoods stockGoods) {
 		stockGoods.setTenantId(SecureUtil.getTenantId());
 		stockGoods.setIsDeleted(0);
 		List<StockGoods> list = stockGoodsService.list(new QueryWrapper<StockGoods>().setEntity(stockGoods));
-		BigDecimal reduce = null;
+		StringBuilder ids = new StringBuilder();
+		list.forEach(item -> {
+			ids.append(item.getStorageId()).append(",");
+		});
+		List<StorageDesc> storageDescList = storageClient.selectStorageIds(ids.toString());
+		for (StockGoods stockGoods1 : list) {
+			String name = storageDescList.stream().filter(e -> stockGoods1.getStorageId().equals(e.getId())).findFirst().orElse(new StorageDesc()).getCname();
+			stockGoods1.setStorageName(name);
+		}
+		/*BigDecimal reduce = null;
 		if (CollectionUtils.isNotEmpty(list)) {
 			reduce = list.stream().filter(e -> e.getSurplusRouteQuantity() != null).map(StockGoods::getSurplusRouteQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
 		} else {
 			reduce = new BigDecimal("0");
-		}
-		return R.data(reduce);
+		}*/
+		return R.data(list);
 	}
 
 	@Override
@@ -257,7 +266,6 @@ public class StockGoodsClient implements IStockGoodsClient {
 	@Override
 	@PostMapping(UPDATE_STOCK_LIST)
 	@Transactional(rollbackFor = Exception.class)
-	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public boolean updateStockList(List<StockGoods> stockGoods) {
 		stockGoodsService.updateBatchById(stockGoods);
 		return redisClient.basicData("stockGoods");
@@ -299,6 +307,24 @@ public class StockGoodsClient implements IStockGoodsClient {
 	}
 
 	@Override
+	public List<StockGoods> selectStockList(StockGoods stockGoods) {
+		stockGoods.setTenantId(AuthUtil.getTenantId());
+		QueryWrapper<StockGoods> queryWrapper = Condition.getQueryWrapper(stockGoods);
+		List<StockGoods> list = stockGoodsService.list(queryWrapper);
+		list.forEach(e -> {
+			//获取仓库信息
+			if (e.getStorageId() != null) {
+				//仓库信息
+				StorageDesc storageDesc = iStorageClient.findById(e.getStorageId());
+				if (storageDesc != null) {
+					e.setStockName(storageDesc.getCname());
+				}
+			}
+		});
+		return list;
+	}
+
+	@Override
 	public StockGoods getOneStock(StockGoods stockGoods) {
 		stockGoods.setTenantId(AuthUtil.getTenantId());
 		QueryWrapper<StockGoods> queryWrapper = Condition.getQueryWrapper(stockGoods);
@@ -356,16 +382,16 @@ public class StockGoodsClient implements IStockGoodsClient {
 			.eq(StringUtils.isNotBlank(stockGoods.getBillNo()), StockGoods::getBillNo, stockGoods.getBillNo())
 			.eq(StringUtils.isNotBlank(stockGoods.getCntrNo()), StockGoods::getCntrNo, stockGoods.getCntrNo())
 			.eq(StockGoods::getIsDeleted, 0);
-			if(ObjectUtil.isNotEmpty(stockGoods.getTenantId()) && stockGoods.getTenantId().equals("681169")){
+		if (ObjectUtil.isNotEmpty(stockGoods.getTenantId()) && stockGoods.getTenantId().equals("681169")) {
+			stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, stockGoods.getTenantId());
+		} else {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
 				stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, stockGoods.getTenantId());
-			}else {
-				if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
-					&& "1".equals(sysClient.getParamService("synchronous"))) {
-					stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, stockGoods.getTenantId());
-				}else{
-					stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, AuthUtil.getTenantId());
-				}
+			} else {
+				stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, AuthUtil.getTenantId());
 			}
+		}
 
 		List<StockGoods> goodsList = stockGoodsService.list(stockGoodsLambdaQueryWrapper);
 		if (CollectionUtils.isNotEmpty(goodsList)) {

+ 1 - 1
blade-service/blade-stock/src/main/java/org/springblade/stock/service/IStockGoodsService.java

@@ -60,7 +60,7 @@ public interface IStockGoodsService extends IService<StockGoods> {
 	 * @param contractNumber 合同号
 	 * @return
 	 */
-	StockGoodsVO selectStock(Long corpId, Long storageId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType);
+	StockGoodsVO selectStock(Long corpId, Long storageId,Long warehouseId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType);
 
 	/**
 	 * 查询库存总账 是否存在

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

@@ -103,11 +103,12 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 	 * @return
 	 */
 	@Override
-	public StockGoodsVO selectStock(Long corpId, Long storageId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType) {
+	public StockGoodsVO selectStock(Long corpId, Long storageId,Long warehouseId, Long goodId, String itemType, String lotNo, String cntrNo, String billNo, String contractNumber, String tradeType) {
 		LambdaQueryWrapper<StockGoods> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(Func.isNotEmpty(corpId), StockGoods::getCorpId, corpId);//客户id
-		lambdaQueryWrapper.eq(Func.isNotEmpty(storageId), StockGoods::getStorageId, storageId);//仓库id
-		lambdaQueryWrapper.isNull(Func.isNull(storageId), StockGoods::getStorageId);//仓库id
+		lambdaQueryWrapper.eq(Func.isNotEmpty(storageId), StockGoods::getWarehouseId, storageId);//仓库id
+		lambdaQueryWrapper.eq(Func.isNotEmpty(warehouseId), StockGoods::getStorageId, warehouseId);//仓库id
+		lambdaQueryWrapper.isNull(Func.isNull(warehouseId), StockGoods::getStorageId);//仓库id
 		lambdaQueryWrapper.eq(Func.isNotEmpty(goodId), StockGoods::getGoodsId, goodId);//商品id
 		lambdaQueryWrapper.eq(Func.isNotEmpty(itemType), StockGoods::getItemType, itemType);//产品型号
 		lambdaQueryWrapper.isNull(Func.isEmpty(itemType), StockGoods::getItemType);//产品型号
@@ -406,7 +407,7 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 	public R<Void> batchModifyLockingQuantity() {
 		List<StockGoods> list = baseMapper.selectList(new LambdaQueryWrapper<>());
 		for (StockGoods stockGoods : list) {
-			List<OrderVO> orderVOList = orderDescClient.orderInventoryList("XS", stockGoods.getGoodsId(), stockGoods.getCorpId());
+			List<OrderVO> orderVOList = orderDescClient.orderInventoryList("XS", stockGoods.getGoodsId(), stockGoods.getCorpId(),stockGoods.getStorageId());
 			if (ObjectUtils.isNull(orderVOList) || orderVOList.size() == 0) {
 				stockGoods.setLockingQuantity(new BigDecimal("0"));
 				stockGoods.setSurplusRouteQuantity(stockGoods.getBalanceQuantity().subtract(stockGoods.getLockingQuantity()));

+ 2 - 2
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

@@ -667,7 +667,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (order.getDealer() == 1 && CollectionUtils.isNotEmpty(list)) {
 			//查询库存
 			for (OrderItems item : list) {
-				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
+				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null,null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
 					null, null, OrderTypeEnum.DEALER.getType());
 				if (!stock.isSuccess()) {
 					throw new RuntimeException("查询库存出错");
@@ -738,7 +738,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		} else if (order.getDealer() == 2 && CollectionUtils.isNotEmpty(list)) {
 			//查询库存
 			for (OrderItems item : list) {
-				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
+				R<StockGoodsVO> stock = stockGoodsClient.selectStock(null,null, selectById.getStorageId(), item.getItemId(), null, item.getLotNo(), null,
 					null, null, OrderTypeEnum.DEALER.getType());
 				if (!stock.isSuccess()) {
 					throw new RuntimeException("查询库存出错");