Browse Source

2024年3月25日17:34:51

纪新园 1 năm trước cách đây
mục cha
commit
bcd439a3d0
15 tập tin đã thay đổi với 834 bổ sung275 xóa
  1. 5 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjStockDesc.java
  2. 5 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/GoodsDescExportExcel.java
  3. 63 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/ProductLaunchImportCodeExcel.java
  4. 2 2
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/StockExportExcel.java
  5. 6 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
  6. 2 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java
  7. 26 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java
  8. 3 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/IProductLaunchService.java
  9. 267 31
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java
  10. 9 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/service/impl/LimitRecordServiceImpl.java
  11. 303 227
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  12. 1 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java
  13. 90 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java
  14. 42 12
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.xml
  15. 10 2
      blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamServiceController.java

+ 5 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjStockDesc.java

@@ -228,5 +228,10 @@ public class PjStockDesc implements Serializable {
 	 */
 	@TableField(exist = false)
 	private List<PjGoodsFiles> goodsFilesList;
+	/**
+	 * 是否上架
+	 */
+	@TableField(exist = false)
+	private String ifGrounding;
 
 }

+ 5 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/GoodsDescExportExcel.java

@@ -25,6 +25,11 @@ public class GoodsDescExportExcel implements Serializable {
 	 */
 	@ExcelProperty(value = "商品名称")
 	private String cname;
+	/**
+	 * 商品编码
+	 */
+	@ExcelProperty(value = "商品编码")
+	private String code;
 
 	/**
 	 * 商品分类名称

+ 63 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/ProductLaunchImportCodeExcel.java

@@ -0,0 +1,63 @@
+package org.springblade.salesPart.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+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 lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 产品导入导入模板实体类
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ProductLaunchImportCodeExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 商品编码
+	 */
+	@ExcelProperty(value = "*商品编码")
+	private String code;
+
+	/**
+	 * 所属公司名称
+	 */
+	@ExcelProperty(value = "*公司")
+	private String salesCompanyName;
+
+	/**
+	 * 售价1
+	 */
+	@ExcelProperty(value = "*售价1")
+	private BigDecimal priceOne;
+	/**
+	 * 售价2
+	 */
+	@ExcelProperty(value = "*售价2")
+	private BigDecimal priceTwo;
+	/**
+	 * 售价3
+	 */
+	@ExcelProperty(value = "*售价3")
+	private BigDecimal priceThree;
+	/**
+	 * 售价4
+	 */
+	@ExcelProperty(value = "*售价4")
+	private BigDecimal priceFour;
+
+	/**
+	 * 共享公司
+	 */
+	@ExcelProperty(value = "共享公司(英文逗号拼接)")
+	private String sharedCompany;
+
+
+}

+ 2 - 2
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/StockExportExcel.java

@@ -22,9 +22,9 @@ public class StockExportExcel implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	/**
-	 * 物料编号
+	 * 商品编码
 	 */
-	@ExcelProperty(value = "物料编号")
+	@ExcelProperty(value = "商品编码")
 	private String code;
 	/**
 	 * 商品名称

+ 6 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java

@@ -227,6 +227,12 @@ public class Dept implements Serializable {
 	private String address;
 
 	/**
+	 * 所属区域
+	 */
+	@ApiModelProperty(value = "所属区域")
+	private String region;
+
+	/**
 	 * 联系人
 	 */
 	@TableField(exist = false)

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -739,6 +739,7 @@ public class OrderController extends BladeController {
 		Map<String, Object> map = new HashMap<>();
 		LambdaQueryWrapper<PjOrder> lambdaQueryWrapperXS = new LambdaQueryWrapper<PjOrder>().eq(PjOrder::getIsDeleted, 0)
 			.eq(PjOrder::getTenantId, AuthUtil.getTenantId())
+			.eq(PjOrder::getSalesCompanyId, AuthUtil.getDeptId())
 			.ge(ObjectUtils.isNotNull(statusDate), PjOrder::getBusinesDate, statusDate)
 			.le(ObjectUtils.isNotNull(endDate), PjOrder::getBusinesDate, endDate)
 			.eq(PjOrder::getStatus, "已发货")
@@ -752,6 +753,7 @@ public class OrderController extends BladeController {
 		List<PjOrder> pjOrderListXS = orderService.list(lambdaQueryWrapperXS);
 		List<PjOrder> pjOrderListCG = orderService.list(new LambdaQueryWrapper<PjOrder>().eq(PjOrder::getIsDeleted, 0)
 			.eq(PjOrder::getTenantId, AuthUtil.getTenantId())
+			.eq(PjOrder::getSalesCompanyId, AuthUtil.getDeptId())
 			.ge(ObjectUtils.isNotNull(statusDate), PjOrder::getBusinesDate, statusDate)
 			.le(ObjectUtils.isNotNull(endDate), PjOrder::getBusinesDate, endDate)
 			.eq(PjOrder::getBsType, "CG"));

+ 26 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java

@@ -41,6 +41,7 @@ import org.springblade.salesPart.brand.service.IBrandFilesService;
 import org.springblade.salesPart.corps.service.ICorpsAttnService;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
+import org.springblade.salesPart.excel.ProductLaunchImportCodeExcel;
 import org.springblade.salesPart.excel.ProductLaunchImportExcel;
 import org.springblade.salesPart.goods.service.IGoodsDescService;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchFilesService;
@@ -319,6 +320,20 @@ public class ProductLaunchController extends BladeController {
 	}
 
 	/**
+	 * 导入产品上架(excel)
+	 */
+	@PostMapping("/import-productLaunch-code")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导入产品上架信息", notes = "传入excel")
+	public R importProductLaunchCode(MultipartFile file) {
+		List<ProductLaunchImportCodeExcel> excelList = ExcelUtil.read(file, ProductLaunchImportCodeExcel.class);
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+		return productLaunchService.importProductLaunchCode(excelList, false);
+	}
+
+	/**
 	 * 导入产品上架
 	 */
 	@PostMapping("/productLaunch")
@@ -343,6 +358,17 @@ public class ProductLaunchController extends BladeController {
 	}
 
 	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-productLaunch-code")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "导出模板")
+	public void exportPriceCode(HttpServletResponse response) {
+		List<ProductLaunchImportCodeExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-产品上架", "导入数据表", list, ProductLaunchImportCodeExcel.class);
+	}
+
+	/**
 	 * 导出数据
 	 */
 	@GetMapping("/exportList")

+ 3 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/IProductLaunchService.java

@@ -21,6 +21,7 @@ import org.springblade.salesPart.entity.PjBrandDesc;
 import org.springblade.salesPart.entity.PjProductLaunch;
 import org.springblade.salesPart.entity.PjShoppingCart;
 import org.springblade.salesPart.excel.GoodsExcel;
+import org.springblade.salesPart.excel.ProductLaunchImportCodeExcel;
 import org.springblade.salesPart.excel.ProductLaunchImportExcel;
 import org.springblade.salesPart.vo.ProductLaunchVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -106,4 +107,6 @@ public interface IProductLaunchService extends IService<PjProductLaunch> {
     R updateByIdNew(PjProductLaunch productLaunch);
 
     R updateBatchById(List<PjProductLaunch> productLaunch);
+
+	R importProductLaunchCode(List<ProductLaunchImportCodeExcel> excelList, boolean b);
 }

+ 267 - 31
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java

@@ -35,6 +35,7 @@ import org.springblade.salesPart.brand.service.IBrandFilesService;
 import org.springblade.salesPart.corps.service.ICorpsAttnService;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
+import org.springblade.salesPart.excel.ProductLaunchImportCodeExcel;
 import org.springblade.salesPart.excel.ProductLaunchImportExcel;
 import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
 import org.springblade.salesPart.goods.mapper.GoodsFilesMapper;
@@ -248,17 +249,28 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 		List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
 		List<PjProductLaunch> launchList = new ArrayList<>();
 		List<PjProductLaunch> pjProductLaunchList1 = new ArrayList<>();
-		String goodsName = data.stream().map(ProductLaunchImportExcel::getCname).collect(Collectors.joining(","));
+		List<String> goodsNames = data.stream().map(ProductLaunchImportExcel::getCname).collect(Collectors.toList());
 		List<PjGoodsDesc> pjGoodsDescsList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
-			.apply("find_in_set(cname,'" + goodsName + "')"));
+			.eq(PjGoodsDesc::getIsDeleted,0)
+			.in(PjGoodsDesc::getCname, goodsNames));
 		List<PjGoodsFiles> pjGoodsFilesList = new ArrayList<>();
+		List<PjStockDesc> pjStockDescList = new ArrayList<>();
 		if (!pjGoodsDescsList.isEmpty()) {
 			List<Long> goodsId = pjGoodsDescsList.stream().map(PjGoodsDesc::getId).collect(Collectors.toList());
 			pjGoodsFilesList = goodsFilesMapper.selectList(new LambdaQueryWrapper<PjGoodsFiles>()
 				.in(PjGoodsFiles::getPid, goodsId)
 				.eq(PjGoodsFiles::getMainImage, 0));
+			//获得库存
+			LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())
+				.in(PjStockDesc::getGoodsId, goodsId);
+
+			pjStockDescList = stockDescService.list(lambdaQueryWrapper);
 		}
-		data.forEach(e -> {
+		String status = iSysClient.getParamServiceNew("zero.inventory.grounding");
+		for (ProductLaunchImportExcel e : data) {
 			PjProductLaunch productLaunch = new PjProductLaunch();
 			BeanUtils.copyProperties(e, productLaunch);
 
@@ -283,19 +295,18 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 				productLaunch.setCnameInt(pjGoodsDesc.getCnameInt());
 				productLaunch.setSpecificationAndModel(pjGoodsDesc.getSpecificationAndModel());
 
-				//获得库存
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())
-					.eq(PjStockDesc::getGoodsId, pjGoodsDesc.getId());
-
-				List<PjStockDesc> list = stockDescService.list(lambdaQueryWrapper);
-				if (ObjectUtil.isNotEmpty(list)) {
-					if (new BigDecimal("0.00").compareTo(list.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)) == 0) {
+				List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(i -> i.getGoodsId().equals(pjGoodsDesc.getId())).collect(Collectors.toList());
+				if ("1".equals(status)) {
+					productLaunch.setInventory(BigDecimal.ZERO);
+				} else {
+					if (!stockDescList.isEmpty()) {
+						if (new BigDecimal("0.00").compareTo(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)) == 0) {
+							throw new RuntimeException("商品" + e.getCname() + "库存为零,请处理后重新导入");
+						}
+						productLaunch.setInventory(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					} else {
 						throw new RuntimeException("商品" + e.getCname() + "库存为零,请处理后重新导入");
 					}
-					productLaunch.setInventory(list.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				}
 			} else {
 				throw new RuntimeException("商品" + e.getCname() + "名称错误或商品不存在");
@@ -423,7 +434,7 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 				}
 			}
 			pjProductLaunchList.add(productLaunch);
-		});
+		}
 		this.saveOrUpdateBatch(launchList);
 		this.updateBatchById(pjProductLaunchList1);
 		this.saveOrUpdateBatch(pjProductLaunchList);
@@ -727,17 +738,28 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 		List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
 		List<PjProductLaunch> launchList = new ArrayList<>();
 		List<PjProductLaunch> pjProductLaunchList1 = new ArrayList<>();
-		String goodsName = list.stream().map(PjProductLaunch::getCname).collect(Collectors.joining(","));
+		List<String> goodsNames = list.stream().map(PjProductLaunch::getCname).collect(Collectors.toList());
 		List<PjGoodsDesc> pjGoodsDescsList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
-			.apply("find_in_set(cname,'" + goodsName + "')"));
+					.eq(PjGoodsDesc::getIsDeleted,0)
+			.in(PjGoodsDesc::getCname, goodsNames));
 		List<PjGoodsFiles> pjGoodsFilesList = new ArrayList<>();
+		List<PjStockDesc> pjStockDescList = new ArrayList<>();
 		if (!pjGoodsDescsList.isEmpty()) {
 			List<Long> goodsId = pjGoodsDescsList.stream().map(PjGoodsDesc::getId).collect(Collectors.toList());
 			pjGoodsFilesList = goodsFilesMapper.selectList(new LambdaQueryWrapper<PjGoodsFiles>()
 				.in(PjGoodsFiles::getPid, goodsId)
 				.eq(PjGoodsFiles::getMainImage, 0));
+			//获得库存
+			LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())
+				.in(PjStockDesc::getGoodsId, goodsId);
+
+			pjStockDescList = stockDescService.list(lambdaQueryWrapper);
 		}
-		list.forEach(productLaunch -> {
+		String status = iSysClient.getParamServiceNew("zero.inventory.grounding");
+		for (PjProductLaunch productLaunch : list) {
 
 			//获得商品信息
 			PjGoodsDesc pjGoodsDesc = pjGoodsDescsList.stream()
@@ -747,7 +769,7 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 				.eq(PjGoodsDesc::getCname, productLaunch.getCname()));*/
 
-			if (ObjectUtil.isNotEmpty(pjGoodsDesc)) {
+			if (pjGoodsDesc != null) {
 				//商品id
 				productLaunch.setGoodsId(pjGoodsDesc.getId());
 				productLaunch.setBrandId(pjGoodsDesc.getBrandId());
@@ -760,19 +782,18 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 				productLaunch.setCnameInt(pjGoodsDesc.getCnameInt());
 				productLaunch.setSpecificationAndModel(pjGoodsDesc.getSpecificationAndModel());
 
-				//获得库存
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())
-					.eq(PjStockDesc::getGoodsId, pjGoodsDesc.getId());
-
-				List<PjStockDesc> pjStockDescList = stockDescService.list(lambdaQueryWrapper);
-				if (ObjectUtil.isNotEmpty(pjStockDescList)) {
-					if (new BigDecimal("0.00").compareTo(pjStockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)) == 0) {
+				List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(i -> i.getGoodsId().equals(pjGoodsDesc.getId())).collect(Collectors.toList());
+				if ("1".equals(status)) {
+					productLaunch.setInventory(BigDecimal.ZERO);
+				} else {
+					if (!stockDescList.isEmpty()) {
+						if (new BigDecimal("0.00").compareTo(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)) == 0) {
+							throw new RuntimeException("商品" + productLaunch.getCname() + "库存为零,请处理后重新导入");
+						}
+						productLaunch.setInventory(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					} else {
 						throw new RuntimeException("商品" + productLaunch.getCname() + "库存为零,请处理后重新导入");
 					}
-					productLaunch.setInventory(pjStockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				}
 			} else {
 				throw new RuntimeException("商品" + productLaunch.getCname() + "名称错误或商品不存在");
@@ -887,7 +908,7 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 				}
 			}
 			pjProductLaunchList.add(productLaunch);
-		});
+		}
 		this.saveOrUpdateBatch(pjProductLaunchList);
 		this.saveOrUpdateBatch(launchList);
 		this.updateBatchById(pjProductLaunchList1);
@@ -936,4 +957,219 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 		return R.success("操作成功");
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R importProductLaunchCode(List<ProductLaunchImportCodeExcel> data, boolean b) {
+		if (CollectionUtils.isEmpty(data)) {
+			throw new SecurityException("导入数据不能为空");
+		}
+		List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
+		List<PjProductLaunch> launchList = new ArrayList<>();
+		List<PjProductLaunch> pjProductLaunchList1 = new ArrayList<>();
+		List<String> goodsNames = data.stream().map(ProductLaunchImportCodeExcel::getCode).collect(Collectors.toList());
+		List<PjGoodsDesc> pjGoodsDescsList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+			.eq(PjGoodsDesc::getIsDeleted,0)
+			.in(PjGoodsDesc::getCode, goodsNames));
+		List<PjGoodsFiles> pjGoodsFilesList = new ArrayList<>();
+		List<PjStockDesc> pjStockDescList = new ArrayList<>();
+		if (!pjGoodsDescsList.isEmpty()) {
+			List<Long> goodsId = pjGoodsDescsList.stream().map(PjGoodsDesc::getId).collect(Collectors.toList());
+			pjGoodsFilesList = goodsFilesMapper.selectList(new LambdaQueryWrapper<PjGoodsFiles>()
+				.in(PjGoodsFiles::getPid, goodsId)
+				.eq(PjGoodsFiles::getMainImage, 0));
+			//获得库存
+			LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())
+				.in(PjStockDesc::getGoodsId, goodsId);
+
+			pjStockDescList = stockDescService.list(lambdaQueryWrapper);
+		}
+		String status = iSysClient.getParamServiceNew("zero.inventory.grounding");
+		for (ProductLaunchImportCodeExcel e : data) {
+			PjProductLaunch productLaunch = new PjProductLaunch();
+			BeanUtils.copyProperties(e, productLaunch);
+
+			//获得商品信息
+			PjGoodsDesc pjGoodsDesc = pjGoodsDescsList.stream()
+				.filter(i -> i.getCname().equals(productLaunch.getCname())).findFirst().orElse(null);
+		/*	PjGoodsDesc pjGoodsDesc = goodsDescMapper.selectOne(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getCname, e.getCname()));
+*/
+			if (pjGoodsDesc != null) {
+				//商品id
+				productLaunch.setGoodsId(pjGoodsDesc.getId());
+				productLaunch.setBrandId(pjGoodsDesc.getBrandId());
+				productLaunch.setBrandName(pjGoodsDesc.getBrandName());
+				productLaunch.setBrandItem(pjGoodsDesc.getBrandItem());
+				productLaunch.setPlaceProduction(pjGoodsDesc.getPlaceProduction());
+				productLaunch.setExplosionProof(pjGoodsDesc.getExplosionProof());
+				productLaunch.setOriginalFactory(pjGoodsDesc.getOriginalFactory());
+				productLaunch.setSelfRecovery(pjGoodsDesc.getSelfRecovery());
+				productLaunch.setCnameInt(pjGoodsDesc.getCnameInt());
+				productLaunch.setSpecificationAndModel(pjGoodsDesc.getSpecificationAndModel());
+
+				List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(i -> i.getGoodsId().equals(pjGoodsDesc.getId())).collect(Collectors.toList());
+				if ("1".equals(status)) {
+					productLaunch.setInventory(BigDecimal.ZERO);
+				} else {
+					if (!stockDescList.isEmpty()) {
+						if (new BigDecimal("0.00").compareTo(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add)) == 0) {
+							throw new RuntimeException("商品" + e.getCode() + "库存为零,请处理后重新导入");
+						}
+						productLaunch.setInventory(stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+					} else {
+						throw new RuntimeException("商品" + e.getCode() + "库存为零,请处理后重新导入");
+					}
+				}
+			} else {
+				throw new RuntimeException("商品" + e.getCode() + "编码错误或商品不存在");
+			}
+
+			//获得所属公司
+			if (StringUtil.isNotBlank(e.getSalesCompanyName())) {
+				R<Dept> dept = iSysClient.getDeptIByName(AuthUtil.getTenantId(), e.getSalesCompanyName());
+				if (ObjectUtil.isNotEmpty(dept.getData())) {
+					productLaunch.setSalesCompanyId(dept.getData().getId());
+					productLaunch.setSalesCompanyName(dept.getData().getFullName());
+				} else {
+					throw new SecurityException("请输入正确的所属公司");
+				}
+			}
+			productLaunch.setBillType(0);
+			productLaunch.setPriceOne(e.getPriceOne());
+			productLaunch.setPriceTwo(e.getPriceTwo());
+			productLaunch.setPriceThree(e.getPriceThree());
+			productLaunch.setPriceFour(e.getPriceFour());
+
+			// 如果名称相等 就认为重复
+			LambdaQueryWrapper<PjProductLaunch> queryWrapper = new LambdaQueryWrapper<>();
+			queryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getCname, productLaunch.getCname())
+				.eq(PjProductLaunch::getSalesCompanyId, productLaunch.getSalesCompanyId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.eq(PjProductLaunch::getBillType, 0);
+			PjProductLaunch one = baseMapper.selectOne(queryWrapper);
+
+			if (one == null) {
+				productLaunch.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+				productLaunch.setCreateTime(new Date());
+				productLaunch.setCreateUser(AuthUtil.getUserId());
+				productLaunch.setTenantId(AuthUtil.getTenantId());
+				productLaunch.setUpAndDownShelves(1);
+//				baseMapper.insert(productLaunch);
+			} else {
+				productLaunch.setId(one.getId());
+				productLaunch.setUpdateUser(AuthUtil.getUserId());
+				productLaunch.setUpdateTime(new Date());
+				productLaunch.setSharedCompany(one.getSharedCompany());
+				productLaunch.setVersion(one.getVersion());
+//				baseMapper.updateById(productLaunch);
+			}
+			//获得共享公司
+			if (StringUtil.isNotBlank(e.getSharedCompany())) {
+				R<List<Dept>> dept = iSysClient.getDeptListIByName(AuthUtil.getTenantId(), e.getSharedCompany());
+				productLaunch.setSharedCompany("");
+				for (Dept item : dept.getData()) {
+					productLaunch.setSharedCompany(productLaunch.getSharedCompany() + "," + item.getId());
+					PjProductLaunch launch = new PjProductLaunch();
+					BeanUtils.copyProperties(productLaunch, launch);
+
+					LambdaQueryWrapper<PjProductLaunch> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
+					lambdaQueryWrapper1.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+						.eq(PjProductLaunch::getIsDeleted, 0)
+						.eq(PjProductLaunch::getBillType, 1)
+						.eq(PjProductLaunch::getGoodsId, productLaunch.getGoodsId())
+						.eq(PjProductLaunch::getSalesCompanyId, item.getId())
+						.eq(PjProductLaunch::getSourceCompanyId, productLaunch.getSalesCompanyId());
+					PjProductLaunch selOne = baseMapper.selectOne(lambdaQueryWrapper1);
+
+					if (ObjectUtil.isEmpty(selOne)) {
+						launch.setId(null);
+						launch.setBillType(1);
+						launch.setWhetherShare(0);
+						launch.setUpAndDownShelves(0);
+						launch.setCreateUser(AuthUtil.getUserId());
+						launch.setCreateTime(new Date());
+						launch.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						launch.setSourceId(productLaunch.getId());
+						launch.setSourceCompanyId(productLaunch.getSalesCompanyId());
+						launch.setSourceCompanyName(productLaunch.getSalesCompanyName());
+						launch.setTenantId(AuthUtil.getTenantId());
+						launch.setSharedCompany(null);
+						launch.setSalesCompanyId(item.getId());
+						launch.setSalesCompanyName(item.getFullName());
+						launch.setVersion(0);
+//						baseMapper.insert(launch);
+						launchList.add(launch);
+					} else {
+						selOne.setInventory(productLaunch.getInventory());
+						selOne.setPriceOne(productLaunch.getPriceOne());
+						selOne.setPriceTwo(productLaunch.getPriceTwo());
+						selOne.setPriceThree(productLaunch.getPriceThree());
+						selOne.setPriceFour(productLaunch.getPriceFour());
+						selOne.setBrandItem(productLaunch.getBrandItem());
+						selOne.setPlaceProduction(productLaunch.getPlaceProduction());
+						selOne.setExplosionProof(productLaunch.getExplosionProof());
+						selOne.setOriginalFactory(productLaunch.getOriginalFactory());
+						selOne.setSelfRecovery(productLaunch.getSelfRecovery());
+						selOne.setUpdateTime(new Date());
+						selOne.setUpdateUser(AuthUtil.getUserId());
+						selOne.setWhetherShare(0);
+						selOne.setUpAndDownShelves(0);
+						selOne.setSharedCompany(null);
+						selOne.setVersion(selOne.getVersion());
+//						baseMapper.updateById(selOne);
+						launchList.add(selOne);
+					}
+				}
+				if (ObjectUtils.isNotNull(productLaunch.getSharedCompany()) && productLaunch.getSharedCompany().length() > 1) {
+					productLaunch.setSharedCompany(productLaunch.getSharedCompany().substring(1, productLaunch.getSharedCompany().length()));
+				}
+				LambdaQueryWrapper<PjProductLaunch> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+				lambdaQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+					.eq(PjProductLaunch::getBillType, 1)
+					.eq(PjProductLaunch::getIsDeleted, 0)
+					.eq(PjProductLaunch::getGoodsId, productLaunch.getGoodsId())
+					.eq(PjProductLaunch::getSourceCompanyId, productLaunch.getSalesCompanyId());
+
+				List<PjProductLaunch> list = baseMapper.selectList(lambdaQueryWrapper);
+				if (ObjectUtil.isNotEmpty(list)) {
+					list.forEach(i -> {
+						i.setWhetherShare(1);
+						i.setPriceOne(productLaunch.getPriceOne());
+						i.setPriceTwo(productLaunch.getPriceTwo());
+						i.setPriceThree(productLaunch.getPriceThree());
+						i.setPriceFour(productLaunch.getPriceFour());
+						i.setVersion(i.getVersion());
+						pjProductLaunchList1.add(i);
+//						baseMapper.updateById(i);
+					});
+				}
+			}
+			pjProductLaunchList.add(productLaunch);
+		}
+		this.saveOrUpdateBatch(launchList);
+		this.updateBatchById(pjProductLaunchList1);
+		this.saveOrUpdateBatch(pjProductLaunchList);
+		List<PjProductLaunchFiles> filesList = new ArrayList<>();
+		for (PjProductLaunch item : pjProductLaunchList) {
+			PjProductLaunchFiles files = new PjProductLaunchFiles();
+			List<PjGoodsFiles> pjGoodsFilesList1 = pjGoodsFilesList.stream()
+				.filter(e -> e.getPid().equals(item.getGoodsId())).collect(Collectors.toList());
+			if (!pjGoodsFilesList1.isEmpty()) {
+				BeanUtil.copyProperties(pjGoodsFilesList1.get(0), files);
+				files.setPid(item.getId());
+				files.setVersion("0");
+				filesList.add(files);
+			}
+		}
+		productLaunchFilesService.saveOrUpdateBatch(filesList);
+		return R.success("ok");
+	}
+
 }

+ 9 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/service/impl/LimitRecordServiceImpl.java

@@ -22,6 +22,8 @@ import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.corps.service.ICorpsDescService;
+import org.springblade.salesPart.entity.PjCorpsDesc;
 import org.springblade.salesPart.record.entity.LimitRecord;
 import org.springblade.salesPart.record.mapper.LimitRecordMapper;
 import org.springblade.salesPart.record.service.ILimitRecordService;
@@ -41,6 +43,9 @@ import java.util.Date;
 @AllArgsConstructor
 public class LimitRecordServiceImpl extends ServiceImpl<LimitRecordMapper, LimitRecord> implements ILimitRecordService {
 
+
+	private final ICorpsDescService corpsDescService;
+
 	@Override
 	public IPage<LimitRecordVO> selectLimitRecordPage(IPage<LimitRecordVO> page, LimitRecordVO limitRecord) {
 		return page.setRecords(baseMapper.selectLimitRecordPage(page, limitRecord));
@@ -62,6 +67,10 @@ public class LimitRecordServiceImpl extends ServiceImpl<LimitRecordMapper, Limit
 			limitRecord.setTenantId(AuthUtil.getTenantId());
 		}
 		this.saveOrUpdate(limitRecord);
+		PjCorpsDesc pjCorpsDesc = new PjCorpsDesc();
+		pjCorpsDesc.setId(limitRecord.getPid());
+		pjCorpsDesc.setLimitAmount(limitRecord.getAmountNew());
+		corpsDescService.updateById(pjCorpsDesc);
 		return R.data(limitRecord);
 	}
 

+ 303 - 227
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -265,10 +265,25 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R outboundWorkOrder(String ids) {
 		List<Long> shipIds = Func.toLongList(ids);
+		List<PjShip> pjShipList = baseMapper.selectList(new LambdaQueryWrapper<PjShip>()
+			.eq(PjShip::getTenantId, AuthUtil.getTenantId())
+			.eq(PjShip::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + ids + "')"));
+		List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
+		List<PjShip> pjShips = new ArrayList<>();
+		if (!pjShipList.isEmpty()) {
+			List<Long> ordIds = pjShipList.stream().map(PjShip::getOrdId).filter(Objects::nonNull).collect(Collectors.toList());
+			pjOrderItemsList = orderItemsService.list(new QueryWrapper<PjOrderItems>()
+				.in("pid", ordIds)
+				.eq("is_deleted", 0)
+				.apply("goods_num != send_num")
+				.eq("tenant_id", AuthUtil.getTenantId()));
+		}
+
 		for (Long id : shipIds) {
 			//获得出库任务数据
-			PjShip rwShip = baseMapper.selectById(id);
-			if (ObjectUtil.isEmpty(rwShip)) {
+			PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
+			if (rwShip == null) {
 				throw new RuntimeException("数据异常 请联系管理员");
 			}
 
@@ -292,17 +307,22 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			gdShip.setCreateTime(new Date());
 			gdShip.setTaskId(rwShip.getId());
 			gdShip.setSendTotalNum(new BigDecimal("0.00"));
-			baseMapper.insert(gdShip);
+			pjShips.add(gdShip);
+		}
+		this.saveOrUpdateBatch(pjShips);
+		List<PjShipItems> shipItemsList = new ArrayList<>();
+		List<PjShip> rwShipList = new ArrayList<>();
+		for (PjShip item : pjShips) {
+			//获得出库任务数据
+			PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(item.getTaskId())).findFirst().orElse(null);
+			if (rwShip == null) {
+				throw new RuntimeException("数据异常 请联系管理员");
+			}
 			StringBuilder goodsNames = new StringBuilder();
 
 			//根据销售id获得销售明细数据
-			List<PjOrderItems> list = orderItemsService.list(new QueryWrapper<PjOrderItems>()
-				.eq("pid", rwShip.getOrdId())
-				.eq("is_deleted", 0)
-				.apply("goods_num != send_num")
-				.eq("tenant_id", AuthUtil.getTenantId()));
+			List<PjOrderItems> list = pjOrderItemsList.stream().filter(e -> e.getPid().equals(item.getOrdId())).collect(Collectors.toList());
 			if (ObjectUtil.isNotEmpty(list)) {
-				List<PjShipItems> shipItemsList = new ArrayList<>();
 				for (PjOrderItems e : list) {
 					goodsNames.append(e.getGoodsName()).append(",");
 					//根据销售明细创建出库工单明细
@@ -310,7 +330,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					BeanUtil.copyProperties(e, shipItems);
 
 					shipItems.setId(null);
-					shipItems.setPid(gdShip.getId());
+					shipItems.setPid(item.getId());
 					shipItems.setSrcItemId(e.getId());
 					shipItems.setCreateTime(new Date());
 					shipItems.setCreateUser(AuthUtil.getUserId());
@@ -319,18 +339,16 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					if (e.getGoodsNum().compareTo(e.getSendNum()) != 0) {
 						shipItemsList.add(shipItems);
 					}
-
 				}
-				shipItemsService.saveBatch(shipItemsList);
-				gdShip.setNumberRows(list.size());
+				item.setNumberRows(list.size());
 			}
 
 			//修改出库任务状态
 			rwShip.setStatusName(OrderTypeEnum.DISPATCHED.getType());
-			baseMapper.updateById(rwShip);
+			rwShipList.add(rwShip);
 
 			//生成出库工单历史记录
-			saveHistory(gdShip.getId(), OrderTypeEnum.TOBESHIPPEDOUT.getType());
+			saveHistory(item.getId(), OrderTypeEnum.TOBESHIPPEDOUT.getType());
 
 			LocalDateTime now = LocalDateTime.now();
 			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -338,7 +356,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			//给角色为派工的人发送消息
 			if (ObjectUtils.isNotNull(rwShip.getStockClerkId())) {
 				Message sendMessage = new Message();
-				sendMessage.setParameter(gdShip.getId() + "");
+				sendMessage.setParameter(item.getId() + "");
 				sendMessage.setUserName(AuthUtil.getUserName());
 				sendMessage.setUserId(null);
 				sendMessage.setToUserId(rwShip.getStockClerkId());
@@ -350,7 +368,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				sendMessage.setUrl("/tirePartsMall/salesManagement/outboundWorkOrder/index");
 				sendMessage.setPageLabel("出库工单");
 				sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-				sendMessage.setMessageBody("您有新的出库工单请及时处理!单号:" + gdShip.getBillno() + "时间:" + formatted);
+				sendMessage.setMessageBody("您有新的出库工单请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
 				R save = messageClient.save(sendMessage);
 				System.out.println("发送结果:" + save);
 				if (!save.isSuccess()) {
@@ -360,12 +378,12 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				//给角色为派工的人发送消息
 				R<String> clientDeptIds = sysClient.getRoleIds(AuthUtil.getTenantId(), "库管");
 				if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
-					R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), AuthUtil.getTenantId(), gdShip.getSalesCompanyId());
+					R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), AuthUtil.getTenantId(), item.getSalesCompanyId());
 					if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
 						for (User datum : userList.getData()) {
 							//循环发送消息
 							Message sendMessage = new Message();
-							sendMessage.setParameter(gdShip.getId() + "");
+							sendMessage.setParameter(item.getId() + "");
 							sendMessage.setUserName(AuthUtil.getUserName());
 							sendMessage.setUserId(null);
 							sendMessage.setToUserId(datum.getId());
@@ -377,7 +395,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							sendMessage.setUrl("/tirePartsMall/salesManagement/outboundWorkOrder/index");
 							sendMessage.setPageLabel("出库工单");
 							sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-							sendMessage.setMessageBody("您有新的出库工单请及时处理!单号:" + gdShip.getBillno() + "时间:" + formatted);
+							sendMessage.setMessageBody("您有新的出库工单请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
 							R save = messageClient.save(sendMessage);
 							System.out.println("发送结果:" + save);
 							if (!save.isSuccess()) {
@@ -387,7 +405,6 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					}
 				}
 			}
-
 			//给角色为财务的人发送消息
 			R<String> clientDeptIds = sysClient.getRoleIds(AuthUtil.getTenantId(), "客服");
 			StringBuilder openIds = new StringBuilder();
@@ -415,27 +432,27 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			if (ObjectUtils.isNotNull(openIds)) {
 				R<List<WechatMessageConfigurationItem>> res = wechatClient.getTemplateType("1", AuthUtil.getTenantId());
 				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-					gdShip.setDate(date1);
+					item.setDate(date1);
 					if (goodsNames.length() > 8) {
-						gdShip.setGoodsNames(goodsNames.substring(0, 8));
+						item.setGoodsNames(goodsNames.substring(0, 8));
 					} else {
-						gdShip.setGoodsNames(goodsNames.toString());
+						item.setGoodsNames(goodsNames.toString());
 					}
-					if (gdShip.getCustomerName().length() > 8) {
-						gdShip.setCustomerName(gdShip.getCustomerName().substring(0, 8));
+					if (item.getCustomerName().length() > 8) {
+						item.setCustomerName(item.getCustomerName().substring(0, 8));
 					}
 					List<WxMpTemplateData> data = new ArrayList<>();
-					for (WechatMessageConfigurationItem item : res.getData()) {
+					for (WechatMessageConfigurationItem items : res.getData()) {
 						try {
 							// 根据方法名获取对应的Method对象
-							Method method = gdShip.getClass().getMethod(item.getMethod());
+							Method method = item.getClass().getMethod(items.getMethod());
 							// 调用get方法并打印结果
-							Object result = method.invoke(gdShip);
+							Object result = method.invoke(item);
 							System.out.println(result);
 							if (ObjectUtils.isNotNull(result)) {
-								data.add(new WxMpTemplateData(item.getDataValue(), result.toString()));
+								data.add(new WxMpTemplateData(items.getDataValue(), result.toString()));
 							} else {
-								data.add(new WxMpTemplateData(item.getDataValue(), "无"));
+								data.add(new WxMpTemplateData(items.getDataValue(), "无"));
 							}
 						} catch (Exception e) {
 							e.printStackTrace();
@@ -451,11 +468,11 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 						System.out.println("=========发送返回值=========" + rest);
 					}
 				}
-				/*String rest = wechatClient.sendMessage(openIds.substring(0, openIds.length() - 1), "订单出库通知", "订单出库通知", date1, gdShip.getCustomerName(), gdShip.getBillno(),
-					"", "", goodsNames.toString(), new BigDecimal("0.00"), "1", AuthUtil.getTenantId());
-				System.out.println("=========发送返回值=========" + rest);*/
 			}
 		}
+		this.saveOrUpdateBatch(rwShipList);
+		shipItemsService.saveOrUpdateBatch(shipItemsList);
+
 		return R.success("操作成功");
 	}
 
@@ -523,6 +540,24 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			List<PjShipItems> shipItemsList = new ArrayList<>();
 			List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
 			List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
+			List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.in(PjGoodsDesc::getId, goodIds));
+			//修改库存账
+			LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
+				.eq(PjStockDesc::getStorageId, ship.getStorageId())
+				.in(PjStockDesc::getGoodsId, goodIds);
+			List<PjStockDesc> pjStockDescList = iStockDescService.list(lambdaQueryWrapper);
+			List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
+			List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
+				.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PjOrderItems::getIsDeleted, 0)
+				.in(PjOrderItems::getId, srcItemIds));
 			BigDecimal number = new BigDecimal("0.00");
 			for (PjShipItems item : ship.getShipItemsList()) {
 				number = number.add(item.getSendNum());
@@ -539,7 +574,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				}
 				shipItemsList.add(item);
 				//获得商品
-				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
 				if (ObjectUtil.isEmpty(goodsDesc)) {
 					throw new RuntimeException("商品数据异常");
 				}
@@ -547,9 +582,8 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					throw new RuntimeException("商品:" + goodsDesc.getCname() + ",请求选择批次号");
 				}
 
-				PjOrderItems orderItems = orderItemsService.getById(item.getSrcItemId());
-				if (ObjectUtil.isNotEmpty(orderItems)) {
-
+				PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+				if (orderItems != null) {
 					if (orderItems.getGoodsNum().compareTo(orderItems.getSendNum().add(item.getSendNum())) < 0) {
 						throw new RuntimeException(orderItems.getGoodsName() + "剩余应发货数量" + orderItems.getGoodsNum().subtract(orderItems.getSendNum()));
 					} else {
@@ -559,23 +593,18 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				} else {
 					throw new RuntimeException("数据异常请联系管理员");
 				}
-
-				//修改库存账
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, item.getGoodsId())
-					.eq(PjStockDesc::getStorageId, ship.getStorageId());
 				//管理批次号
+				PjStockDesc stockOne = null;
 				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
-					lambdaQueryWrapper.eq(PjStockDesc::getDot, item.getDot());
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getDot().equals(item.getDot())).findFirst().orElse(null);
 				} else {
-					lambdaQueryWrapper.and(i -> i.eq(PjStockDesc::getDot, "").or().isNull(PjStockDesc::getDot));
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
 				}
-
-				PjStockDesc stockOne = iStockDescService.getOne(lambdaQueryWrapper);
-				if (ObjectUtil.isNotEmpty(stockOne)) {
+				if (stockOne != null) {
 					if (stockOne.getBalanceQuantity().compareTo(item.getSendNum()) < 0) {
 						throw new RuntimeException("库存不足,出库失败");
 					}
@@ -667,11 +696,29 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			List<PjShipItems> itemsList = new ArrayList<>();
 			List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
 			List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
+			List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.in(PjGoodsDesc::getId, goodIds));
+			//修改库存账
+			LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
+				.eq(PjStockDesc::getStorageId, ship.getStorageId())
+				.in(PjStockDesc::getGoodsId, goodIds);
+			List<PjStockDesc> pjStockDescList = iStockDescService.list(lambdaQueryWrapper);
+			List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
+			List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
+				.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PjOrderItems::getIsDeleted, 0)
+				.in(PjOrderItems::getId, srcItemIds));
 			BigDecimal number = new BigDecimal("0.00");
 			for (PjShipItems item : ship.getShipItemsList()) {
 				number = number.add(item.getSendNum());
-				PjOrderItems orderItems = orderItemsService.getById(item.getSrcItemId());
-				if (ObjectUtil.isNotEmpty(orderItems)) {
+				PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+				if (orderItems != null) {
 					orderItems.setSendNum(orderItems.getSendNum().subtract(item.getSendNum()));
 					pjOrderItemsList.add(orderItems);
 				} else {
@@ -679,25 +726,22 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				}
 
 				//获得商品
-				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
 				if (ObjectUtil.isEmpty(goodsDesc)) {
 					throw new RuntimeException("商品数据异常");
 				}
-				//修改库存账
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, item.getGoodsId())
-					.eq(PjStockDesc::getStorageId, ship.getStorageId());
-				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {//管理批次号
-					lambdaQueryWrapper.eq(PjStockDesc::getDot, item.getDot());
+				//管理批次号
+				PjStockDesc stockOne = null;
+				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getDot().equals(item.getDot())).findFirst().orElse(null);
 				} else {
-					lambdaQueryWrapper.and(i -> i.eq(PjStockDesc::getDot, "").or().isNull(PjStockDesc::getDot));
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
 				}
-
-				PjStockDesc stockOne = iStockDescService.getOne(lambdaQueryWrapper);
-				if (ObjectUtil.isNotEmpty(stockOne)) {
+				if (stockOne != null) {
 					stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNum()));
 					stockOne.setStoreInventory(stockOne.getBalanceQuantity());
 					stockOne.setInventoryAmount(stockOne.getInventoryAmount().add(item.getSendNum().multiply(stockOne.getInventoryCostPrice())));
@@ -764,9 +808,23 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R generateWarehousing(String ids) {
 		List<Long> shipIds = Func.toLongList(ids);
+		List<PjShip> pjShipList = baseMapper.selectList(new LambdaQueryWrapper<PjShip>()
+			.eq(PjShip::getTenantId, AuthUtil.getTenantId())
+			.eq(PjShip::getIsDeleted, 0)
+			.apply("find_in_set(id,'" + ids + "')"));
+		List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
+		List<PjShip> pjShips = new ArrayList<>();
+		if (!pjShipList.isEmpty()) {
+			List<Long> ordIds = pjShipList.stream().map(PjShip::getOrdId).filter(Objects::nonNull).collect(Collectors.toList());
+			pjOrderItemsList = orderItemsService.list(new QueryWrapper<PjOrderItems>()
+				.in("pid", ordIds)
+				.eq("is_deleted", 0)
+				.apply("goods_num != send_num")
+				.eq("tenant_id", AuthUtil.getTenantId()));
+		}
 		for (Long id : shipIds) {
 			//获得出库任务数据
-			PjShip rwShip = baseMapper.selectById(id);
+			PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(null);
 			if (ObjectUtil.isEmpty(rwShip)) {
 				throw new RuntimeException("数据异常 请联系管理员");
 			}
@@ -790,32 +848,35 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			gdShip.setCreateUser(AuthUtil.getUserId());
 			gdShip.setCreateTime(new Date());
 			gdShip.setTaskId(rwShip.getId());
-			baseMapper.insert(gdShip);
-
+			pjShips.add(gdShip);
+		}
+		this.saveOrUpdateBatch(pjShips);
+		List<PjShipItems> shipItemsList = new ArrayList<>();
+		List<PjShip> rwShipList = new ArrayList<>();
+		for (PjShip item : pjShips) {
+			//获得出库任务数据
+			PjShip rwShip = pjShipList.stream().filter(e -> e.getId().equals(item.getTaskId())).findFirst().orElse(null);
+			if (ObjectUtil.isEmpty(rwShip)) {
+				throw new RuntimeException("数据异常 请联系管理员");
+			}
 			//根据采购id获得采购明细数据
-			List<PjOrderItems> list = orderItemsService.list(new QueryWrapper<PjOrderItems>()
-				.eq("pid", rwShip.getOrdId())
-				.eq("is_deleted", 0)
-				.apply("goods_num != send_num")
-				.eq("tenant_id", AuthUtil.getTenantId()));
+			List<PjOrderItems> list = pjOrderItemsList.stream().filter(e -> e.getPid().equals(item.getOrdId())).collect(Collectors.toList());
 			if (ObjectUtil.isNotEmpty(list)) {
-				List<PjShipItems> shipItemsList = new ArrayList<>();
-				list.forEach(e -> {
+				for (PjOrderItems e : list) {
 					//根据采购明细创建入库工单明细
 					PjShipItems shipItems = new PjShipItems();
 					BeanUtil.copyProperties(e, shipItems);
 
 					shipItems.setId(null);
-					shipItems.setPid(gdShip.getId());
+					shipItems.setPid(item.getId());
 					shipItems.setSrcItemId(e.getId());
 					shipItems.setCreateTime(new Date());
 					shipItems.setCreateUser(AuthUtil.getUserId());
 					shipItems.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 					shipItems.setSendNum(e.getGoodsNum().subtract(e.getSendNum()));
 					shipItemsList.add(shipItems);
-				});
-				shipItemsService.saveBatch(shipItemsList);
-				gdShip.setNumberRows(list.size());
+				}
+				item.setNumberRows(list.size());
 			}
 
 			//修改入库任务状态
@@ -823,7 +884,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			baseMapper.updateById(rwShip);
 
 			//生成入库工单历史记录
-			saveHistory(gdShip.getId(), OrderTypeEnum.TREATWAREHOUSING.getType());
+			saveHistory(item.getId(), OrderTypeEnum.TREATWAREHOUSING.getType());
 
 			LocalDateTime now = LocalDateTime.now();
 			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -831,7 +892,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			//给角色为派工的人发送消息
 			if (ObjectUtils.isNotNull(rwShip.getStockClerkId())) {
 				Message sendMessage = new Message();
-				sendMessage.setParameter(gdShip.getId() + "");
+				sendMessage.setParameter(item.getId() + "");
 				sendMessage.setUserName(AuthUtil.getUserName());
 				sendMessage.setUserId(null);
 				sendMessage.setToUserId(rwShip.getStockClerkId());
@@ -843,7 +904,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				sendMessage.setUrl("/tirePartsMall/purchasingManagement/warehouseEntryOrder/index");
 				sendMessage.setPageLabel("采购入库");
 				sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-				sendMessage.setMessageBody("您有新的采购入库请及时处理!单号:" + gdShip.getBillno() + "时间:" + formatted);
+				sendMessage.setMessageBody("您有新的采购入库请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
 				R save = messageClient.save(sendMessage);
 				System.out.println("发送结果:" + save);
 				if (!save.isSuccess()) {
@@ -853,12 +914,12 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				//给角色为派工的人发送消息
 				R<String> clientDeptIds = sysClient.getRoleIds(AuthUtil.getTenantId(), "库管");
 				if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
-					R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), AuthUtil.getTenantId(), gdShip.getSalesCompanyId());
+					R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), AuthUtil.getTenantId(), item.getSalesCompanyId());
 					if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
 						for (User datum : userList.getData()) {
 							//循环发送消息
 							Message sendMessage = new Message();
-							sendMessage.setParameter(gdShip.getId() + "");
+							sendMessage.setParameter(item.getId() + "");
 							sendMessage.setUserName(AuthUtil.getUserName());
 							sendMessage.setUserId(null);
 							sendMessage.setToUserId(datum.getId());
@@ -870,7 +931,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							sendMessage.setUrl("/tirePartsMall/purchasingManagement/warehouseEntryOrder/index");
 							sendMessage.setPageLabel("采购入库");
 							sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
-							sendMessage.setMessageBody("您有新的采购入库请及时处理!单号:" + gdShip.getBillno() + "时间:" + formatted);
+							sendMessage.setMessageBody("您有新的采购入库请及时处理!单号:" + item.getBillno() + "时间:" + formatted);
 							R save = messageClient.save(sendMessage);
 							System.out.println("发送结果:" + save);
 							if (!save.isSuccess()) {
@@ -881,7 +942,8 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				}
 			}
 		}
-
+		this.saveOrUpdateBatch(rwShipList);
+		shipItemsService.saveOrUpdateBatch(shipItemsList);
 		return R.success("操作成功");
 	}
 
@@ -921,7 +983,29 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
 			List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
 			List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
-			ship.getShipItemsList().forEach(item -> {
+			List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.in(PjGoodsDesc::getId, goodIds));
+			//修改库存账
+			List<PjStockDesc> pjStockDescList = iStockDescService.list(new LambdaQueryWrapper<PjStockDesc>().eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
+				.in(PjStockDesc::getGoodsId, goodIds));
+			List<PjGoodsType> pjGoodsTypeList = goodsTypeMapper.selectList(new LambdaQueryWrapper<PjGoodsType>()
+				.eq(PjGoodsType::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsType::getIsDeleted, 0)
+				.in(PjGoodsType::getId, goodIds)
+			);
+			List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
+			List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
+				.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PjOrderItems::getIsDeleted, 0)
+				.in(PjOrderItems::getId, srcItemIds));
+			//获得仓库
+			PjStorageDesc storageDesc = storageDescMapper.selectById(ship.getStorageId());
+			for (PjShipItems item : ship.getShipItemsList()) {
 				if (item.getId() == null) {
 					item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 					item.setCreateTime(new Date());
@@ -936,41 +1020,36 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				shipItemsList.add(item);
 
 				//获得商品
-				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
 				if (ObjectUtil.isEmpty(goodsDesc)) {
 					throw new RuntimeException("商品数据异常");
 				}
 
-				PjOrderItems orderItems = orderItemsService.getById(item.getSrcItemId());
-				if (ObjectUtil.isNotEmpty(orderItems)) {
+				PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+				if (orderItems != null) {
 					orderItems.setSendNum(orderItems.getSendNum().add(item.getSendNum()));
 					pjOrderItemsList.add(orderItems);
 				} else {
 					throw new RuntimeException("数据异常请联系管理员");
 				}
-
-
 				//生成库存账
 				PjStockDesc stockDesc = new PjStockDesc();
-
 				stockDesc.setSalesCompanyId(ship.getSalesCompanyId());
 				stockDesc.setSalesCompanyName(ship.getSalesCompanyName());
 				stockDesc.setGoodsTypeId(goodsDesc.getGoodsTypeId());
 				if (ObjectUtils.isNotNull(goodsDesc.getGoodsTypeId())) {
-					PjGoodsType goodsType = goodsTypeMapper.selectById(goodsDesc.getGoodsTypeId());
-					if (ObjectUtils.isNotNull(goodsType)) {
+
+					PjGoodsType goodsType = pjGoodsTypeList.stream().filter(e -> (e.getId() + "").equals(goodsDesc.getGoodsTypeId())).findFirst().orElse(null);
+					if (goodsType != null) {
 						stockDesc.setGoodsTypeName(goodsType.getCname());
 					}
 				}
-				//获得仓库
-				PjStorageDesc storageDesc = storageDescMapper.selectById(ship.getStorageId());
 				if (ObjectUtil.isNotEmpty(storageDesc)) {
 					stockDesc.setStorageId(storageDesc.getId());
 					stockDesc.setStorageName(storageDesc.getCname());
 				} else {
 					throw new RuntimeException("仓库数据异常");
 				}
-
 				stockDesc.setGoodsId(goodsDesc.getId());
 				stockDesc.setCode(item.getGoodsNo());
 				stockDesc.setCname(goodsDesc.getCname());
@@ -983,23 +1062,20 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				stockDesc.setDot(item.getDot());
 				stockDesc.setTenantId(AuthUtil.getTenantId());
 
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, goodsDesc.getId())
-					.eq(PjStockDesc::getStorageId, ship.getStorageId());
-				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {//管理批次号
-					if (ObjectUtil.isEmpty(item.getDot())) {
-						throw new RuntimeException(goodsDesc.getCname() + "已开启批次号管理,请填写批次号");
-					}
-					lambdaQueryWrapper.eq(PjStockDesc::getDot, item.getDot());
+				//管理批次号
+				PjStockDesc stockOne;
+				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getStorageId().equals(ship.getStorageId())
+							&& e.getDot().equals(item.getDot())).findFirst().orElse(null);
 				} else {
-					lambdaQueryWrapper.and(i -> i.eq(PjStockDesc::getDot, "").or().isNull(PjStockDesc::getDot));
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getStorageId().equals(ship.getStorageId())
+							&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
 				}
-
-				PjStockDesc stockOne = iStockDescService.getOne(lambdaQueryWrapper);
-				if (ObjectUtil.isEmpty(stockOne)) {
+				if (stockOne == null) {
 					stockDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 					stockDesc.setCreateTime(new Date());
 					stockDesc.setCreateUser(AuthUtil.getUserId());
@@ -1024,52 +1100,47 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					}
 					stockDesc.setVersion(stockOne.getVersion());
 				}
-				boolean count = iStockDescService.saveOrUpdate(stockDesc);
+				/*boolean count = iStockDescService.saveOrUpdate(stockDesc);
 				if (!count) {
 					throw new RuntimeException(stockOne.getCname() + "该产品库存正在操作,请稍后刷新在进行操作!");
-				}
+				}*/
 				pjStockDescArrayList.add(stockDesc);
-			});
+			}
 			shipItemsService.saveOrUpdateBatch(shipItemsList);
-//			iStockDescService.saveOrUpdateBatch(pjStockDescArrayList);
+			iStockDescService.saveOrUpdateBatch(pjStockDescArrayList);
 			orderItemsService.updateBatchById(pjOrderItemsList);
+			//查询所有上架商品
+			LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
+			productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.isNull(PjProductLaunch::getSourceId)
+				.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
+				.in(PjProductLaunch::getGoodsId, goodIds);
+			List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
 			for (PjShipItems item : ship.getShipItemsList()) {
 				number = number.add(item.getSendNum());
 				//获得商品
-				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
 				if (ObjectUtil.isEmpty(goodsDesc)) {
 					throw new RuntimeException("商品数据异常");
 				}
-				/** ----------------------修改上架库存---------------------- */
-
-				//查询所有该商品的库存
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapperList = new LambdaQueryWrapper<>();
-				lambdaQueryWrapperList.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, goodsDesc.getId());
-				List<PjStockDesc> stockDescList = iStockDescService.list(lambdaQueryWrapperList);
+				/* ----------------------修改上架库存---------------------- */
+				List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(goodsDesc.getId())).collect(Collectors.toList());
 
 				//库存总数量
 				BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				balanceQuantity = balanceQuantity.add(item.getSendNum());
 
-				//查询所有上架商品
-				LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
-				productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
-					.eq(PjProductLaunch::getIsDeleted, 0)
-					.isNull(PjProductLaunch::getSourceId)
-					.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjProductLaunch::getGoodsId, goodsDesc.getId());
-				List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
+				List<PjProductLaunch> pjProductLaunches = productLaunch.stream().filter(e -> e.getGoodsId().equals(goodsDesc.getId())).collect(Collectors.toList());
 				//修改上架数量
-				if (ObjectUtil.isNotEmpty(productLaunch)) {
-					productLaunch.forEach(e -> {
+				if (!pjProductLaunches.isEmpty()) {
+					for (PjProductLaunch e : pjProductLaunches) {
 						e.setInventory(balanceQuantity);
 						pjProductLaunchList.add(e);
-					});
+					}
 				}
 
-				/** ----------------------修改上架库存---------------------- */
+				/* ----------------------修改上架库存---------------------- */
 			}
 			R res = productLaunchService.updateBatchById(pjProductLaunchList);
 			if (!res.isSuccess()) {
@@ -1222,13 +1293,31 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			ship.setUpdateTime(new Date());
 			baseMapper.updateById(ship);
 		}
-
 		// 保存订单明细
 		if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
 			List<PjShipItems> shipItemsList = new ArrayList<>();
 			List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
 			List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
-			ship.getShipItemsList().forEach(item -> {
+			List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.in(PjGoodsDesc::getId, goodIds));
+			//修改库存账
+			List<PjStockDesc> pjStockDescList = iStockDescService.list(new LambdaQueryWrapper<PjStockDesc>().eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
+				.in(PjStockDesc::getGoodsId, goodIds));
+			//查询所有上架商品
+			LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
+			productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.isNull(PjProductLaunch::getSourceId)
+				.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
+				.in(PjProductLaunch::getGoodsId, goodIds);
+			List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
+
+			for (PjShipItems item : ship.getShipItemsList()) {
 				if (item.getId() == null) {
 					item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 					item.setCreateTime(new Date());
@@ -1242,29 +1331,24 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				}
 				shipItemsList.add(item);
 				//获得商品
-				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
 				if (ObjectUtil.isEmpty(goodsDesc)) {
 					throw new RuntimeException("商品数据异常");
 				}
-
-				//获得库存账
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, goodsDesc.getId())
-					.eq(PjStockDesc::getStorageId, ship.getStorageId());
-				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {//管理批次号
-					if (ObjectUtil.isEmpty(item.getDot())) {
-						throw new RuntimeException(goodsDesc.getCname() + "已开启批次号管理,请填写批次号");
-					}
-					lambdaQueryWrapper.eq(PjStockDesc::getDot, item.getDot());
+				//管理批次号
+				PjStockDesc stockOne;
+				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getStorageId().equals(ship.getStorageId())
+							&& e.getDot().equals(item.getDot())).findFirst().orElse(null);
 				} else {
-					lambdaQueryWrapper.and(i -> i.eq(PjStockDesc::getDot, "").or().isNull(PjStockDesc::getDot));
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getStorageId().equals(ship.getStorageId())
+							&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
 				}
-
-				PjStockDesc stockOne = iStockDescService.getOne(lambdaQueryWrapper);
-				if (ObjectUtil.isEmpty(stockOne)) {
+				if (stockOne == null) {
 					throw new RuntimeException("获取库存账失败");
 				} else {
 					stockOne.setUpdateTime(new Date());
@@ -1278,38 +1362,22 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockOne.setInventoryCostPrice(stockOne.getInventoryAmount().divide(stockOne.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 					pjStockDescArrayList.add(stockOne);
 				}
-
-				/** ----------------------修改上架库存---------------------- */
-
+				/* ----------------------修改上架库存---------------------- */
 				//查询所有该商品的库存
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapperList = new LambdaQueryWrapper<>();
-				lambdaQueryWrapperList.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, goodsDesc.getId());
-				List<PjStockDesc> stockDescList = iStockDescService.list(lambdaQueryWrapperList);
-
+				List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(goodsDesc.getId())).collect(Collectors.toList());
 				//库存总数量
 				BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
-
 				//查询所有上架商品
-				LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
-				productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
-					.eq(PjProductLaunch::getIsDeleted, 0)
-					.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjProductLaunch::getGoodsId, stockOne.getGoodsId());
-				List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
-
+				List<PjProductLaunch> pjProductLaunches = productLaunch.stream().filter(e -> e.getGoodsId().equals(goodsDesc.getId())).collect(Collectors.toList());
 				//修改上架数量
-				if (ObjectUtil.isNotEmpty(productLaunch)) {
-					productLaunch.forEach(e -> {
+				if (!pjProductLaunches.isEmpty()) {
+					for (PjProductLaunch e : pjProductLaunches) {
 						e.setInventory(balanceQuantity);
 						pjProductLaunchList.add(e);
-					});
+					}
 				}
-
-				/** ----------------------修改上架库存---------------------- */
-			});
+				/* ----------------------修改上架库存---------------------- */
+			}
 			shipItemsService.saveOrUpdateBatch(shipItemsList);
 			iStockDescService.saveOrUpdateBatch(pjStockDescArrayList);
 			R res = productLaunchService.updateBatchById(pjProductLaunchList);
@@ -1336,31 +1404,43 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		// 保存订单明细
 		BigDecimal number = new BigDecimal("0.00");
 		if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
+			List<Long> goodIds = ship.getShipItemsList().stream().map(PjShipItems::getGoodsId).distinct().collect(Collectors.toList());
+			List<PjGoodsDesc> pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.in(PjGoodsDesc::getId, goodIds));
+			//修改库存账
+			List<PjStockDesc> pjStockDescList = iStockDescService.list(new LambdaQueryWrapper<PjStockDesc>().eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjStockDesc::getIsDeleted, 0)
+				.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
+				.in(PjStockDesc::getGoodsId, goodIds));
+			List<Long> srcItemIds = ship.getShipItemsList().stream().map(PjShipItems::getSrcItemId).distinct().collect(Collectors.toList());
+			List<PjOrderItems> pjOrderItems = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
+				.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+				.eq(PjOrderItems::getIsDeleted, 0)
+				.in(PjOrderItems::getId, srcItemIds));
 			List<PjStockDesc> pjStockDescArrayList = new ArrayList<>();
 			for (PjShipItems item : ship.getShipItemsList()) {
 				number = number.add(item.getSendNum());
 				//获得商品
-				PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
+				PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(e -> e.getId().equals(item.getGoodsId())).findFirst().orElse(null);
 				if (ObjectUtil.isEmpty(goodsDesc)) {
 					throw new RuntimeException("商品数据异常");
 				}
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-				lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, goodsDesc.getId())
-					.eq(PjStockDesc::getStorageId, ship.getStorageId());
-				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {//管理批次号
-					if (ObjectUtil.isEmpty(item.getDot())) {
-						throw new RuntimeException(goodsDesc.getCname() + "已开启批次号管理,请填写批次号");
-					}
-					lambdaQueryWrapper.eq(PjStockDesc::getDot, item.getDot());
+				//管理批次号
+				PjStockDesc stockOne;
+				if (ObjectUtil.isNotEmpty(goodsDesc.getWhether()) && "1".equals(goodsDesc.getWhether())) {
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getStorageId().equals(ship.getStorageId())
+							&& e.getDot().equals(item.getDot())).findFirst().orElse(null);
 				} else {
-					lambdaQueryWrapper.and(i -> i.eq(PjStockDesc::getDot, "").or().isNull(PjStockDesc::getDot));
+					stockOne = pjStockDescList.stream()
+						.filter(e -> e.getGoodsId().equals(item.getGoodsId())
+							&& e.getStorageId().equals(ship.getStorageId())
+							&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
 				}
-
-				PjStockDesc stockOne = iStockDescService.getOne(lambdaQueryWrapper);
-				if (ObjectUtils.isNotNull(stockOne)) {
+				if (stockOne != null) {
 					if (stockOne.getBalanceQuantity().compareTo(item.getSendNum()) < 0) {
 						throw new RuntimeException(goodsDesc.getCname() + "库存不足,禁止撤销");
 					}
@@ -1375,28 +1455,30 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 						stockOne.setInventoryCostPrice(stockOne.getInventoryAmount().divide(stockOne.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 					}
 					stockOne.setVersion(stockOne.getVersion());
-					R res = iStockDescService.updateByIdNew(stockOne);
+					/*R res = iStockDescService.updateByIdNew(stockOne);
 					if (!res.isSuccess()) {
 						throw new RuntimeException(res.getMsg());
-					}
+					}*/
 					pjStockDescArrayList.add(stockOne);
 				}
 			}
+			iStockDescService.saveOrUpdateBatch(pjStockDescArrayList);
 			List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
 			List<PjOrderItems> pjOrderItemsList = new ArrayList<>();
-			ship.getShipItemsList().forEach(item -> {
-				/** ----------------------修改上架库存---------------------- */
-
-				//查询所有该商品的库存
-				LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapperList = new LambdaQueryWrapper<>();
-				lambdaQueryWrapperList.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
-					.eq(PjStockDesc::getIsDeleted, 0)
-					.eq(PjStockDesc::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjStockDesc::getGoodsId, item.getGoodsId());
-				List<PjStockDesc> stockDescList = iStockDescService.list(lambdaQueryWrapperList);
+			//查询所有上架商品
+			LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
+			productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.isNull(PjProductLaunch::getSourceId)
+				.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
+				.in(PjProductLaunch::getGoodsId, goodIds);
+			List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
 
-				PjOrderItems orderItems = orderItemsService.getById(item.getSrcItemId());
-				if (ObjectUtil.isNotEmpty(orderItems)) {
+			for (PjShipItems item : ship.getShipItemsList()) {
+				/* ----------------------修改上架库存---------------------- */
+				List<PjStockDesc> stockDescList = pjStockDescList.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
+				PjOrderItems orderItems = pjOrderItems.stream().filter(e -> e.getId().equals(item.getSrcItemId())).findFirst().orElse(null);
+				if (orderItems != null) {
 					orderItems.setSendNum(orderItems.getSendNum().subtract(item.getSendNum()));
 					pjOrderItemsList.add(orderItems);
 				} else {
@@ -1406,22 +1488,16 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				//库存总数量
 				BigDecimal balanceQuantity = stockDescList.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 
-				//查询所有上架商品
-				LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
-				productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
-					.eq(PjProductLaunch::getIsDeleted, 0)
-					.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
-					.eq(PjProductLaunch::getGoodsId, item.getGoodsId());
-				List<PjProductLaunch> productLaunch = productLaunchService.list(productLaunchQueryWrapper);
+				List<PjProductLaunch> pjProductLaunches = productLaunch.stream().filter(e -> e.getGoodsId().equals(item.getGoodsId())).collect(Collectors.toList());
 				//修改上架数量
-				if (ObjectUtil.isNotEmpty(productLaunch)) {
-					productLaunch.forEach(e -> {
+				if (!pjProductLaunches.isEmpty()) {
+					for (PjProductLaunch e : pjProductLaunches) {
 						e.setInventory(balanceQuantity);
 						pjProductLaunchList.add(e);
-					});
+					}
 				}
-				/** ----------------------修改上架库存---------------------- */
-			});
+				/* ----------------------修改上架库存---------------------- */
+			}
 			orderItemsService.updateBatchById(pjOrderItemsList);
 			R res = productLaunchService.updateBatchById(pjProductLaunchList);
 			if (!res.isSuccess()) {

+ 1 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java

@@ -569,7 +569,7 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 					order.setBusinesDate(new Date());
 					order.setSrcOrdNo((String) billNo.getData());
 					order.setCreateUser(AuthUtil.getUserId());
-
+					order.setBsType("XS");
 					//处理部门
 					int index = AuthUtil.getDeptId().indexOf(",");
 					Long deptId = null;

+ 90 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java

@@ -46,8 +46,11 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -101,6 +104,20 @@ public class StockDescController extends BladeController {
 		if ("0".equals(stockDesc.getWhether())) {
 			lambdaQueryWrapper.ne(PjStockDesc::getStoreInventory, 0);
 		}
+		if ("0".equals(stockDesc.getIfGrounding()) || "1".equals(stockDesc.getIfGrounding())) {
+			List<PjProductLaunch> pjProductLaunchList = productLaunchService.list(new LambdaQueryWrapper<PjProductLaunch>()
+				.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.eq(PjProductLaunch::getSalesCompanyId, AuthUtil.getDeptId()));
+			if (!pjProductLaunchList.isEmpty()) {
+				List<Long> ids = pjProductLaunchList.stream().map(PjProductLaunch::getGoodsId).collect(Collectors.toList());
+				if ("0".equals(stockDesc.getIfGrounding())) {
+					lambdaQueryWrapper.in(PjStockDesc::getGoodsId, ids);
+				} else {
+					lambdaQueryWrapper.ne(PjStockDesc::getGoodsId, ids);
+				}
+			}
+		}
 		if (ObjectUtil.isNotEmpty(stockDesc.getCname())) {
 			List<PjGoodsDesc> pjGoodsDescs = goodsDescService.list(new LambdaQueryWrapper<PjGoodsDesc>()
 				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
@@ -326,6 +343,20 @@ public class StockDescController extends BladeController {
 		if ("0".equals(stockDesc.getWhether())) {
 			lambdaQueryWrapper.ne(PjStockDesc::getStoreInventory, 0);
 		}
+		if ("0".equals(stockDesc.getIfGrounding()) || "1".equals(stockDesc.getIfGrounding())) {
+			List<PjProductLaunch> pjProductLaunchList = productLaunchService.list(new LambdaQueryWrapper<PjProductLaunch>()
+				.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.eq(PjProductLaunch::getSalesCompanyId, AuthUtil.getDeptId()));
+			if (!pjProductLaunchList.isEmpty()) {
+				List<Long> ids = pjProductLaunchList.stream().map(PjProductLaunch::getGoodsId).collect(Collectors.toList());
+				if ("0".equals(stockDesc.getIfGrounding())) {
+					lambdaQueryWrapper.in(PjStockDesc::getGoodsId, ids);
+				} else {
+					lambdaQueryWrapper.ne(PjStockDesc::getGoodsId, ids);
+				}
+			}
+		}
 		if (ObjectUtil.isNotEmpty(stockDesc.getCname())) {
 			List<PjGoodsDesc> pjGoodsDescs = goodsDescService.list(new LambdaQueryWrapper<PjGoodsDesc>()
 				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
@@ -345,6 +376,65 @@ public class StockDescController extends BladeController {
 	}
 
 	/**
+	 * 配件批发库存合计
+	 */
+	@GetMapping("/stockSum")
+	@ApiOperationSupport(order = 9)
+	public R stockSum(PjStockDesc stockDesc) {
+		LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjStockDesc::getIsDeleted, 0)
+			.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())//公司
+			.like(ObjectUtil.isNotEmpty(stockDesc.getCode()), PjStockDesc::getCode, stockDesc.getCode())
+			.like(ObjectUtil.isNotEmpty(stockDesc.getTypeno()), PjStockDesc::getTypeno, stockDesc.getTypeno())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageId()), PjStockDesc::getStorageId, stockDesc.getStorageId())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getBrandId()), PjStockDesc::getBrandId, stockDesc.getBrandId())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getGoodsTypeId()), PjStockDesc::getGoodsTypeId, stockDesc.getGoodsTypeId())
+			.like(ObjectUtil.isNotEmpty(stockDesc.getDot()), PjStockDesc::getDot, stockDesc.getDot())
+			.orderByAsc(PjStockDesc::getCreateTime);
+		if ("0".equals(stockDesc.getWhether())) {
+			lambdaQueryWrapper.ne(PjStockDesc::getStoreInventory, 0);
+		}
+		if ("0".equals(stockDesc.getIfGrounding()) || "1".equals(stockDesc.getIfGrounding())) {
+			List<PjProductLaunch> pjProductLaunchList = productLaunchService.list(new LambdaQueryWrapper<PjProductLaunch>()
+				.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
+				.eq(PjProductLaunch::getIsDeleted, 0)
+				.eq(PjProductLaunch::getSalesCompanyId, AuthUtil.getDeptId()));
+			if (!pjProductLaunchList.isEmpty()) {
+				List<Long> ids = pjProductLaunchList.stream().map(PjProductLaunch::getGoodsId).collect(Collectors.toList());
+				if ("0".equals(stockDesc.getIfGrounding())) {
+					lambdaQueryWrapper.in(PjStockDesc::getGoodsId, ids);
+				} else {
+					lambdaQueryWrapper.ne(PjStockDesc::getGoodsId, ids);
+				}
+			}
+		}
+		if (ObjectUtil.isNotEmpty(stockDesc.getCname())) {
+			List<PjGoodsDesc> pjGoodsDescs = goodsDescService.list(new LambdaQueryWrapper<PjGoodsDesc>()
+				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.like(PjGoodsDesc::getCnameInt, stockDesc.getCname()));
+			if (!pjGoodsDescs.isEmpty()) {
+				List<Long> ids = pjGoodsDescs.stream().map(PjGoodsDesc::getId).collect(Collectors.toList());
+				lambdaQueryWrapper.and(i -> i.like(PjStockDesc::getCname, stockDesc.getCname())
+					.or().in(PjStockDesc::getGoodsId, ids));
+			} else {
+				lambdaQueryWrapper.like(PjStockDesc::getCname, stockDesc.getCname());
+			}
+		}
+		List<PjStockDesc> list = stockDescService.list(lambdaQueryWrapper);
+		Map<String, BigDecimal> map = new HashMap<>();
+		if (!list.isEmpty()) {
+			map.put("balanceQuantity", list.stream().map(PjStockDesc::getBalanceQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
+			map.put("inventoryAmount", list.stream().map(PjStockDesc::getInventoryAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+		} else {
+			map.put("balanceQuantity", BigDecimal.ZERO);
+			map.put("inventoryAmount", BigDecimal.ZERO);
+		}
+		return R.data(map);
+	}
+
+	/**
 	 * 根据仓库和商品id获得所有批次号
 	 */
 	@GetMapping("/dotList")

+ 42 - 12
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.xml

@@ -149,39 +149,69 @@
     </select>
     <select id="selectStockDescPageZero" resultType="org.springblade.salesPart.entity.PjStockDesc">
         SELECT
-        *
-        FROM pjpf_goods_desc
+        goods.id AS goodsId,
+        goods.CODE AS CODE,
+        goods.cname AS cname,
+        goods.brand_id AS brandId,
+        goods.brand_name AS brandName,
+        goods.specification_and_model AS typeno,
+        goods.brand_item AS brandItem,
+        goods.goods_description AS productDescription,
+        goods.goods_type_id AS goodsTypeId,
+        SUM( IF ( stock.balance_quantity, stock.balance_quantity, 0 ) ) AS balanceQuantity,
+        goods.sales_company_id AS salesCompanyId,
+        goods.sales_company_name AS salesCompanyName,
+        stock.dot AS dot,
+        IF
+        ( stock.store_inventory, stock.store_inventory, 0 ) AS storeInventory,
+        IF
+        ( stock.inventory_amount, stock.inventory_amount, 0 ) AS inventoryAmount,
+        IF
+        ( stock.inventory_cost_price, stock.inventory_cost_price, 0 ) AS inventoryCostPrice,
+        IF
+        ( stock.inventory_alert, stock.inventory_alert, 0 ) AS inventoryAlert,
+        IF
+        ( stock.version, stock.version, 0 ) AS version
+        FROM
+        pjpf_goods_desc goods
+        LEFT JOIN pjpf_stock_desc stock ON goods.id = stock.goods_id
         <where>
-            is_deleted = 0
+            goods.is_deleted = 0
+            <if test="stockDesc.whether == null or stockDesc.whether == ''">
+                and stock.balance_quantity != 0
+            </if>
+            <if test="stockDesc.brandId != null and stockDesc.brandId != ''">
+                and goods.brand_id = #{stockDesc.brandId}
+            </if>
             <if test='stockDesc.cname != null and stockDesc.cname != ""'>
-                and cname like CONCAT(CONCAT('%', #{stockDesc.cname}), '%')
+                and goods.cname like CONCAT(CONCAT('%', #{stockDesc.cname}), '%')
             </if>
             <if test='stockDesc.code != null and stockDesc.code != ""'>
-                and code like CONCAT(CONCAT('%', #{stockDesc.code}), '%')
+                and goods.code like CONCAT(CONCAT('%', #{stockDesc.code}), '%')
             </if>
             <if test='stockDesc.salesCompanyIds != null'>
-                and find_in_set(sales_company_id,#{stockDesc.salesCompanyIds})
+                and find_in_set(goods.sales_company_id,#{stockDesc.salesCompanyIds})
             </if>
             <if test='stockDesc.brandId != null'>
-                and brand_id = #{stockDesc.brandId}
+                and goods.brand_id = #{stockDesc.brandId}
             </if>
             <if test='stockDesc.goodsTypeId != null'>
-                and goods_type_id = #{stockDesc.goodsTypeId}
+                and goods.goods_type_id = #{stockDesc.goodsTypeId}
             </if>
             <if test='stockDesc.typeno != null and stockDesc.typeno != ""'>
-                and specification_and_model like CONCAT(CONCAT('%', #{stockDesc.typeno}), '%')
+                and goods.specification_and_model like CONCAT(CONCAT('%', #{stockDesc.typeno}), '%')
             </if>
             <if test='stockDesc.goodsIds != null and stockDesc.goodsIds'>
-                and id not IN
+                and goods.id not IN
                 <foreach collection="stockDesc.goodsIds" item="ids" index="index" open="(" close=")" separator=",">
                     #{ids}
                 </foreach>
             </if>
         </where>
         GROUP BY
-        goods_id
+        goods.id
         order By
-        create_time
+        goods.create_time
     </select>
 
 </mapper>

+ 10 - 2
blade-service/blade-system/src/main/java/org/springblade/system/controller/ParamServiceController.java

@@ -33,6 +33,8 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.system.entity.ParamService;
 import org.springblade.system.service.IParamServiceService;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.vo.ParamServiceVO;
 import org.springframework.web.bind.annotation.*;
 
@@ -52,6 +54,8 @@ public class ParamServiceController extends BladeController {
 
 	private final IParamServiceService paramServiceService;
 
+	private final IUserClient userClient;
+
 	/**
 	 * 详情
 	 */
@@ -71,6 +75,10 @@ public class ParamServiceController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入paramService")
 	public R<IPage<ParamService>> list(ParamService paramService, Query query) {
+		R<User> res = userClient.userInfoById(AuthUtil.getUserId());
+		if (res.isSuccess()) {
+			paramService.setSalesCompanyId(Long.parseLong(res.getData().getDeptPid()));
+		}
 		IPage<ParamService> pages = paramServiceService.page(Condition.getPage(query), Condition.getQueryWrapper(paramService));
 		return R.data(pages);
 	}
@@ -100,9 +108,9 @@ public class ParamServiceController extends BladeController {
 			if (!"681169".equals(paramService.getTenantId())) {
 				return R.data(paramService.getParamValue());
 			} else {
-				if("whether.display.member".equals(param)){
+				if ("whether.display.member".equals(param)) {
 					return R.data(paramService.getParamValue());
-				}else{
+				} else {
 					return R.data(true);
 				}
 			}