Ver código fonte

20230523 17:57

wangzhuo 2 anos atrás
pai
commit
f08b46408a
14 arquivos alterados com 265 adições e 25 exclusões
  1. 7 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjGoodsDesc.java
  2. 1 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java
  3. 0 12
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/ProductLaunchImportExcel.java
  4. 53 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/ShipItemImportExcel.java
  5. 1 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/controller/GoodsDescController.java
  6. 10 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java
  7. 18 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  8. 3 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java
  9. 15 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/service/impl/ProductLaunchServiceImpl.java
  10. 35 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java
  11. 10 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java
  12. 80 10
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  13. 10 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java
  14. 22 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java

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

@@ -218,4 +218,11 @@ public class PjGoodsDesc implements Serializable {
 	@TableField(exist = false)
 	private List<PjGoodsFiles> goodsFilesList;
 
+	/**
+	 * 是否可修改(0 否,1 是)
+	 * 有库存不能修改详情
+	 */
+	@TableField(exist = false)
+	private Integer modifiable;
+
 }

+ 1 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java

@@ -232,7 +232,7 @@ public class PjOrder implements Serializable {
 	 * 应结日期
 	 */
 	@ApiModelProperty(value = "应结日期")
-	private String dueDate;
+	private Date dueDate;
 
 	/**
 	 * 所属公司id

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

@@ -28,24 +28,12 @@ public class ProductLaunchImportExcel implements Serializable {
 	private String cname;
 
 	/**
-	 * 规格型号
-	 */
-	@ExcelProperty(value = "规格型号")
-	private String specificationAndModel;
-
-	/**
 	 * 所属公司名称
 	 */
 	@ExcelProperty(value = "公司")
 	private String salesCompanyName;
 
 	/**
-	 * 库存
-	 */
-	@ExcelProperty(value = "库存")
-	private BigDecimal inventory;
-
-	/**
 	 * 售价1
 	 */
 	@ExcelProperty(value = "售价1")

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

@@ -0,0 +1,53 @@
+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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 入库明细导入模板实体类
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ShipItemImportExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称(必填)")
+	private String goodsName;
+
+	/**
+	 * 数量
+	 */
+	@ExcelProperty(value = "数量(必填)")
+	private BigDecimal goodsNum;
+
+	/**
+	 * 单价
+	 */
+	@ExcelProperty(value = "单价(必填)")
+	private BigDecimal price;
+
+	/**
+	 * 批次号
+	 */
+	@ExcelProperty(value = "批次号")
+	private String dot;
+
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+}

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/controller/GoodsDescController.java

@@ -311,6 +311,7 @@ public class GoodsDescController extends BladeController {
 		LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjGoodsDesc::getIsDeleted, 0)
+			.eq(PjGoodsDesc::getSalesCompanyId, AuthUtil.getDeptId())
 			.like(StringUtils.isNotBlank(goods.getCname()), PjGoodsDesc::getCname, goods.getCname());//商品名称
 		List<PjGoodsDesc> list = goodsService.list(lambdaQueryWrapper);
 

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java

@@ -40,6 +40,7 @@ import org.springblade.salesPart.goods.mapper.GoodsTypeDescMapper;
 import org.springblade.salesPart.goods.mapper.GoodsTypeMapper;
 import org.springblade.salesPart.goods.service.IGoodsDescService;
 import org.springblade.salesPart.goods.service.IGoodsFilesService;
+import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.salesPart.vo.GoodsDescVO;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
@@ -69,6 +70,7 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 	private final ICorpsDescService corpsDescService;
 	private final IGoodsFilesService goodsFilesService;
 	private final BrandDescMapper brandDescMapper;
+	private final IStockDescService stockDescService;
 
 	private final ISysClient iSysClient;
 
@@ -86,6 +88,14 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 			desc.setGoodsTypeId(String.join(",", list));
 		}
 
+		//获得库存
+		List<PjStockDesc> stockDescList = stockDescService.list(new QueryWrapper<PjStockDesc>().eq("goods_id", goodsDesc.getId()).eq("is_deleted", 0));
+		if (ObjectUtils.isNotNull(stockDescList)){
+			desc.setModifiable(0);
+		}else {
+			desc.setModifiable(1);
+		}
+
 		return desc;
 	}
 

+ 18 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -50,6 +50,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 
@@ -135,7 +136,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	public R saveOrderMessage(PjOrder order) {
 
 		//客户名称
-		order.setCustomerName(corpsDescMapper.selectById(order.getCustomerId()).getCname());
+		PjCorpsDesc corpsDesc = corpsDescMapper.selectById(order.getCustomerId());
+		order.setCustomerName(corpsDesc.getCname());
+
 		//仓库名称
 		order.setStorageName(storageDescMapper.selectById(order.getStorageId()).getCname());
 		// 获取系统编号
@@ -154,6 +157,20 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setTenantId(AuthUtil.getTenantId());
 				order.setStatus(OrderTypeEnum.XSLR.getType());
 				order.setBusinessSource(OrderTypeEnum.WEB.getType());
+				//根据客户账期计算应结日期
+				if (ObjectUtil.isNotEmpty(corpsDesc.getAccountPeriod())){
+
+					Date now = new Date(); // 获取当前时间
+					System.out.println("当前时间: " + now);
+
+					long sevenDays = corpsDesc.getAccountPeriod() * 24 * 60 * 60 * 1000L;
+					Date afterSevenDays = new Date(now.getTime() + sevenDays);
+					System.out.println("加账期后的时间: " + afterSevenDays);
+					order.setDueDate(afterSevenDays);
+
+				}else {
+					order.setDueDate(new Date());
+				}
 				baseMapper.insert(order);
 			}else {
 				order.setUpdateUser(AuthUtil.getUserId());

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

@@ -99,9 +99,11 @@ public class ProductLaunchController extends BladeController {
 			.eq(PjProductLaunch::getBillType, productLaunch.getBillType())
 			.eq(PjProductLaunch::getSalesCompanyId, AuthUtil.getDeptId())//公司
 			.eq(ObjectUtil.isNotEmpty(productLaunch.getBrandId()), PjProductLaunch::getBrandId, productLaunch.getBrandId())
-			.like(ObjectUtils.isNotEmpty(productLaunch.getCname()), PjProductLaunch::getCname, productLaunch.getCname())//名称
 			.like(ObjectUtils.isNotEmpty(productLaunch.getSpecificationAndModel()), PjProductLaunch::getSpecificationAndModel, productLaunch.getSpecificationAndModel())//规格型号
 			.like(ObjectUtils.isNotEmpty(productLaunch.getSalesCompanyName()), PjProductLaunch::getSalesCompanyName, productLaunch.getSalesCompanyName());
+		if (ObjectUtil.isNotEmpty(productLaunch.getCname())){
+			lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, productLaunch.getCname()).or().like(PjProductLaunch::getCnameInt, productLaunch.getCname()));
+		}
 		if (productLaunch.getBillType() == 1){
 			lambdaQueryWrapper.eq(PjProductLaunch::getWhetherShare, 0);
 		}

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

@@ -25,6 +25,7 @@ import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.purchase.sales.entity.Order;
 import org.springblade.salesPart.corps.service.ICorpsAttnService;
 import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
@@ -32,6 +33,7 @@ import org.springblade.salesPart.excel.ProductLaunchImportExcel;
 import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchFilesService;
 import org.springblade.salesPart.shoppingCart.mapper.ShoppingCartMapper;
+import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.salesPart.vo.ProductLaunchVO;
 import org.springblade.salesPart.productLaunch.mapper.ProductLaunchMapper;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
@@ -64,6 +66,7 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 	private final ICorpsDescService corpsDescService;//客户
 	private final ISerialClient serialClient;//生成系统编号
 	private final ShoppingCartMapper shoppingCartMapper;
+	private final IStockDescService stockDescService;
 
 	/**
 	 * 获取详情
@@ -253,6 +256,18 @@ public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, P
 				productLaunch.setOriginalFactory(pjGoodsDesc.getOriginalFactory());
 				productLaunch.setSelfRecovery(pjGoodsDesc.getSelfRecovery());
 				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::getGoodsId, pjGoodsDesc.getId());
+
+				List<PjStockDesc> list = stockDescService.list(lambdaQueryWrapper);
+				if (ObjectUtil.isNotEmpty(list)){
+					productLaunch.setInventory(list.stream().map(PjStockDesc::getBalanceQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				}
 			}else {
 				throw new RuntimeException("商品"+e.getCname()+"名称错误或商品不存在");
 			}

+ 35 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java

@@ -24,8 +24,11 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -34,6 +37,8 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.excel.GoodsExcel;
+import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.ship.service.IShipItemsService;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -42,7 +47,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.salesPart.vo.ShipVO;
 import org.springblade.salesPart.ship.service.IShipService;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -259,4 +266,32 @@ public class ShipController extends BladeController {
 		return shipService.warehousingComplete(ship);
 	}
 
+	/**
+	 * 入库明细导入
+	 */
+	@PostMapping("/import-item")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "入库明细导入", notes = "传入excel")
+	public R<List<PjShipItems>> importItem(@RequestParam("file") MultipartFile file) {
+		//导入数据
+		List<ShipItemImportExcel> excelList = ExcelUtil.read(file, ShipItemImportExcel.class);
+		if(CollectionUtils.isEmpty(excelList))
+		{
+			throw new SecurityException("数据不能为空");
+		}
+
+		return shipService.importItem(excelList);
+	}
+
+	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-item")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "导出模板")
+	public void exportItem(HttpServletResponse response) {
+		List<ShipItemImportExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导出模板-明细信息", "导出模板-明细信息", list, ShipItemImportExcel.class);
+	}
+
 }

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java

@@ -19,9 +19,14 @@ package org.springblade.salesPart.ship.service;
 import org.springblade.core.tool.api.R;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjShip;
+import org.springblade.salesPart.entity.PjShipItems;
+import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.vo.ShipVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 /**
  * 配件收发货表 服务类
@@ -88,4 +93,9 @@ public interface IShipService extends IService<PjShip> {
 	 */
 	R warehousingComplete(PjShip ship);
 
+	/**
+	 * 入库明细导入
+	 */
+	R<List<PjShipItems>> importItem(List<ShipItemImportExcel> excelList);
+
 }

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

@@ -19,8 +19,11 @@ package org.springblade.salesPart.ship.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -30,6 +33,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
 import org.springblade.salesPart.history.mapper.HistoryMapper;
 import org.springblade.salesPart.order.mapper.OrderItemsMapper;
@@ -50,6 +54,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
 import java.math.MathContext;
@@ -149,6 +154,12 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		ship.setStockClerkName(userClient.userInfoById(ship.getStockClerkId()).getData().getRealName());
 		ship.setStorageName(storageDescMapper.selectById(ship.getStorageId()).getCname());
 
+		if (ship.getBizTypeName().equals(OrderTypeEnum.SHGD.getType())){
+			ship.setStatusName(OrderTypeEnum.TREATWAREHOUSING.getType());
+		}else {
+			ship.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
+		}
+
 		if (ship.getId() == null){
 			// 获取系统编号
 			R billNo = serialClient.getBillNo(ship.getBizTypeName(), ship.getBizTypeName(), ship.getBizTypeName());
@@ -161,18 +172,8 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			ship.setCreateUser(AuthUtil.getUserId());
 			ship.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 			ship.setTenantId(AuthUtil.getTenantId());
-			if (ship.getBizTypeName().equals(OrderTypeEnum.SHGD.getType())){
-				ship.setStatusName(OrderTypeEnum.TREATWAREHOUSING.getType());
-			}else {
-				ship.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
-			}
 			baseMapper.insert(ship);
 		}else {
-			if (ship.getBizTypeName().equals(OrderTypeEnum.SHGD.getType())){
-				ship.setStatusName(OrderTypeEnum.TREATWAREHOUSING.getType());
-			}else {
-				ship.setStatusName(OrderTypeEnum.TOBESHIPPEDOUT.getType());
-			}
 			ship.setUpdateUser(AuthUtil.getUserId());
 			ship.setUpdateTime(new Date());
 			baseMapper.updateById(ship);
@@ -602,6 +603,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				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 = stockDescMapper.selectList(lambdaQueryWrapperList);
 
@@ -612,6 +614,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				LambdaQueryWrapper<PjProductLaunch> productLaunchQueryWrapper = new LambdaQueryWrapper<>();
 				productLaunchQueryWrapper.eq(PjProductLaunch::getTenantId, AuthUtil.getTenantId())
 					.eq(PjProductLaunch::getIsDeleted, 0)
+					.eq(PjProductLaunch::getSalesCompanyId, ship.getSalesCompanyId())
 					.eq(PjProductLaunch::getGoodsId, stockDesc.getGoodsId());
 				List<PjProductLaunch> productLaunch = productLaunchMapper.selectList(productLaunchQueryWrapper);
 
@@ -648,6 +651,73 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 	}
 
 	/**
+	 * 入库明细导入
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R<List<PjShipItems>> importItem(List<ShipItemImportExcel> excelList) {
+		if(CollectionUtils.isEmpty(excelList)){
+			throw new SecurityException("导入数据不能为空");
+		}
+		List<PjShipItems> list = new ArrayList<>();
+		for(int i = 0; i < excelList.size(); i++)
+		{
+			//判断必填项是否为空
+			ShipItemImportExcel itemExcel = excelList.get(i);
+			if (ObjectUtil.isEmpty(itemExcel.getGoodsName())){
+				throw new SecurityException("第"+(i+2)+"行,商品名称为空");
+			}
+			if (ObjectUtil.isEmpty(itemExcel.getPrice())){
+				throw new SecurityException("第"+(i+2)+"行,价格为空");
+			}
+			if (ObjectUtil.isEmpty(itemExcel.getGoodsNum())){
+				throw new SecurityException("第"+(i+2)+"行,数量为空");
+			}
+
+			PjShipItems item = new PjShipItems();
+			BeanUtil.copy(itemExcel,item);
+
+			//查询商品信息
+			LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsDesc::getIsDeleted, 0)
+				.eq(PjGoodsDesc::getSalesCompanyId, AuthUtil.getDeptId())
+				.eq(PjGoodsDesc::getCname, itemExcel.getGoodsName());
+			PjGoodsDesc goodsDesc = goodsDescMapper.selectOne(lambdaQueryWrapper);
+
+			if (ObjectUtil.isNotEmpty(goodsDesc)){
+				item.setGoodsId(goodsDesc.getId());
+				item.setGoodsName(goodsDesc.getCname());
+				item.setGoodsNo(goodsDesc.getCode());
+				item.setBrandId(goodsDesc.getBrandId());
+				item.setBrandName(goodsDesc.getBrandName());
+				item.setPropertyName(goodsDesc.getSpecificationAndModel());
+				item.setPattern(goodsDesc.getBrandItem());
+				item.setGoodsDescription(goodsDesc.getGoodsDescription());
+
+				if (goodsDesc.getWhether().equals("0")){//未开启管理批次号
+					if (ObjectUtil.isNotEmpty(itemExcel.getDot())){
+						item.setDot(null);
+					}
+				}else {//已开启批次号管理
+					if (ObjectUtil.isEmpty(itemExcel.getDot())){
+						throw new RuntimeException("第"+(i+2)+"行,商品已开启管理批次号,请填写批次号");
+					}
+				}
+
+				item.setUnits(goodsDesc.getUnit());
+				item.setSendNum(itemExcel.getGoodsNum());
+			}else {
+				throw new RuntimeException("第"+(i+2)+"行,商品名称不存在");
+			}
+
+			list.add(item);
+		}
+		return R.data(list);
+	}
+
+	/**
 	 * 生成工单历史记录
 	 */
 	public void saveHistory(Long pid, String status){

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

@@ -174,6 +174,16 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 						deptId = (Long.valueOf(AuthUtil.getDeptId()));
 					}
 
+					//根据客户账期计算应结日期
+					if (ObjectUtil.isNotEmpty(corpsDesc.getAccountPeriod())){
+						Date now = new Date(); // 获取当前时间
+						long sevenDays = corpsDesc.getAccountPeriod() * 24 * 60 * 60 * 1000L;
+						Date afterSevenDays = new Date(now.getTime() + sevenDays);
+						order.setDueDate(afterSevenDays);
+					}else {
+						order.setDueDate(new Date());
+					}
+
 					order.setCreateTime(new Date());
 					order.setCreateDept(deptId);
 					order.setTenantId(AuthUtil.getTenantId());

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

@@ -35,9 +35,12 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.entity.PjGoodsDesc;
+import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjProductLaunch;
 import org.springblade.salesPart.excel.CorpsDescExportExcel;
 import org.springblade.salesPart.excel.StockExportExcel;
+import org.springblade.salesPart.goods.service.IGoodsDescService;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.salesPart.entity.PjStockDesc;
@@ -45,6 +48,7 @@ import org.springblade.salesPart.vo.StockDescVO;
 import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -60,6 +64,7 @@ import java.util.List;
 public class StockDescController extends BladeController {
 
 	private final IStockDescService stockDescService;
+	private final IGoodsDescService goodsDescService;
 
 	/**
 	 * 详情
@@ -168,4 +173,21 @@ public class StockDescController extends BladeController {
 
 		ExcelUtil.export(response, "库存信息", "库存信息", BeanUtil.copy(list, StockExportExcel.class), StockExportExcel.class);
 	}
+
+	/**
+	 * 根据仓库和商品id获得所有批次号
+	 */
+	@GetMapping("/dotList")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "根据仓库和商品id获得所有批次号", notes = "传入stockDesc")
+	public R<List<PjStockDesc>> dotList(PjStockDesc stockDesc) {
+		LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjStockDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjStockDesc::getIsDeleted, 0)
+			.eq(PjStockDesc::getSalesCompanyId, AuthUtil.getDeptId())//公司
+			.eq(PjStockDesc::getStorageId, stockDesc.getStorageId())
+			.eq(PjStockDesc::getGoodsId, stockDesc.getGoodsId());
+		List<PjStockDesc> list = stockDescService.list(lambdaQueryWrapper);
+		return R.data(list);
+	}
 }