Explorar o código

2024年4月10日17:35:50

纪新园 hai 1 ano
pai
achega
87e8fa8ffe

+ 11 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/stl/dto/FinStlBillsItemsReports.java

@@ -96,4 +96,15 @@ public class FinStlBillsItemsReports implements Serializable {
 	private String podCnName;
 
 
+	/**
+	 * 未收金额
+	 */
+	private BigDecimal amountD;
+
+	/**
+	 * 未收金额usd
+	 */
+	private BigDecimal amountUsdD;
+
+
 }

+ 6 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetailDto.java

@@ -60,6 +60,12 @@ public class SaleDetailDto {
 	 */
 	@ExcelProperty(value = "商品名称")
 	private String goodsName;
+
+	/**
+	 * 商品编码
+	 */
+	@ExcelProperty(value = "商品编码")
+	private String code;
 	/**
 	 * 规格型号
 	 */

+ 18 - 0
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -968,6 +968,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 				if (!finStlBillsItems.isEmpty()) {
 					List<FinStlBillsItems> reducelList = finStlBillsItems.stream().filter(distinctByKey(FinStlBillsItems::getMblno)).collect(Collectors.toList());
 					List<Bills> billsList = new ArrayList<>();
+					List<FeeCenter> feeCenterListAll = new ArrayList<>();
 					if (!reducelList.isEmpty()) {
 						String mblno = reducelList.stream().map(FinStlBillsItems::getMblno).collect(Collectors.joining(","));
 						billsList = billsService.list(new LambdaQueryWrapper<Bills>()
@@ -1012,6 +1013,11 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 							finStlBills.setBillCorpName(billCorpName.toString());
 							finStlBills.setBillCorpNameAgreement(billCorpNameAgreement.toString());
 						}
+						 feeCenterListAll = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
+							.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
+							.eq(FeeCenter::getIsDeleted, 0)
+							.eq(FeeCenter::getDc, "D")
+							.apply("find_in_set(mblno,'" + mblno + "')"));
 					}
 					for (FinStlBillsItems item : reducelList) {
 						FinStlBillsItemsReports finStlBillsItemsReports = new FinStlBillsItemsReports();
@@ -1021,6 +1027,18 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 						}
 						finStlBillsItemsReports.setMblno(item.getMblno());
 						finStlBillsItemsReports.setBillNo(item.getBillNo());
+						if (!feeCenterListAll.isEmpty()){
+							BigDecimal amountDSum = feeCenterListAll.stream().filter(e-> e.getCurCode().equals("CNY"))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+							BigDecimal amountDStl = feeCenterListAll.stream().filter(e-> e.getCurCode().equals("CNY"))
+								.map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+							BigDecimal amountDSumUsd = feeCenterListAll.stream().filter(e-> e.getCurCode().equals("USD"))
+								.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+							BigDecimal amountDStlUsd = feeCenterListAll.stream().filter(e-> e.getCurCode().equals("USD"))
+								.map(FeeCenter::getStlTtlAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+							finStlBillsItemsReports.setAmountD(amountDSum.subtract(amountDStl));
+							finStlBillsItemsReports.setAmountUsdD(amountDSumUsd.subtract(amountDStlUsd));
+						}
 						BigDecimal currentStlAmountD = finStlBillsItems.stream()
 							.filter(e -> e.getMblno().equals(item.getMblno()) && MagicValues.D.equals(e.getDc()) && MagicValues.CNY.equals(e.getCurCode()))
 							.map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);

+ 7 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -107,9 +107,6 @@ public class BillsController extends BladeController {
 				.like(Bills::getLineEnName, bills.getLineCnName()))
 			.and(ObjectUtils.isNotNull(bills.getCyCode()), i -> i.like(Bills::getCyCode, bills.getCyCode()).or()
 				.like(Bills::getCyCnName, bills.getCyCode()).or().like(Bills::getCyEnName, bills.getCyCode()))
-			.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
-			.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()
-				.like(Bills::getSrcEnName, bills.getSrcCnName()))
 			.apply(ObjectUtils.isNotNull(bills.getCreateDeptName()), "find_in_set('" + bills.getCreateDeptName() + "',create_dept_name)");
 		if (ObjectUtils.isNotNull(bills.getEtdList()) && !bills.getEtdList().isEmpty()) {
 			lambdaQueryWrapper.ge(Bills::getEtd, bills.getEtdList().get(0));
@@ -119,6 +116,13 @@ public class BillsController extends BladeController {
 			lambdaQueryWrapper.ge(Bills::getEta, bills.getEtaList().get(0));
 			lambdaQueryWrapper.le(Bills::getEta, bills.getEtaList().get(1));
 		}
+		if (AuthUtil.getUserRole().contains("业务员")) {
+			lambdaQueryWrapper.eq(Bills::getSrcId,AuthUtil.getUserId());
+		}else{
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(bills.getSrcType()), Bills::getSrcType, bills.getSrcType())
+				.and(ObjectUtils.isNotNull(bills.getSrcCnName()), i -> i.like(Bills::getSrcCnName, bills.getSrcCnName()).or()
+					.like(Bills::getSrcEnName, bills.getSrcCnName()));
+		}
 		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
 			lambdaQueryWrapper.apply("find_in_set(team_id,'" + AuthUtil.getPostId() + "')");
 		}

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -194,7 +194,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				return R.fail(500, "生成订单编号失败");
 			}
 			finStlBills.setBillNo((String) clientBillNo.getData());
-			finStlBills.setBillDate(new Date());
+//			finStlBills.setBillDate(new Date());
 			finStlBills.setCreateTime(new Date());
 			finStlBills.setCreateUser(AuthUtil.getUserId());
 			finStlBills.setCreateUserName(AuthUtil.getUserName());

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

@@ -59,6 +59,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -114,7 +115,9 @@ public class GoodsDescController extends BladeController {
 			lambdaQueryWrapper.in(PjGoodsDesc::getGoodsTypeId, goodsIdList);
 		}
 
-		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+		lambdaQueryWrapper.select(PjGoodsDesc::getId,PjGoodsDesc::getCname,PjGoodsDesc::getCode,PjGoodsDesc::getSpecificationAndModel,PjGoodsDesc::getBrandItem,
+				PjGoodsDesc::getBrandName,PjGoodsDesc::getGoodsSize,PjGoodsDesc::getInventoryAlert,PjGoodsDesc::getGoodsDescription,
+				PjGoodsDesc::getStatus).eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjGoodsDesc::getIsDeleted, 0)
 			.eq(PjGoodsDesc::getSalesCompanyId, AuthUtil.getDeptId())//公司
 			.like(StringUtils.isNotBlank(goods.getSpecificationAndModel()), PjGoodsDesc::getSpecificationAndModel, goods.getSpecificationAndModel())//规格型号
@@ -131,7 +134,7 @@ public class GoodsDescController extends BladeController {
 		}
 		lambdaQueryWrapper.orderByDesc(PjGoodsDesc::getCreateTime);
 		IPage<PjGoodsDesc> pages = goodsDescService.page(Condition.getPage(query), lambdaQueryWrapper);
-		if (!pages.getRecords().isEmpty()) {
+		/*if (!pages.getRecords().isEmpty()) {
 			String typeId = pages.getRecords().stream().map(PjGoodsDesc::getGoodsTypeId).collect(Collectors.joining(","));
 //			String typeId = e.getGoodsTypeId();
 			String[] split = typeId.split(",");
@@ -146,7 +149,7 @@ public class GoodsDescController extends BladeController {
 				}
 
 			});
-		}
+		}*/
 		return R.data(pages);
 	}
 
@@ -455,47 +458,62 @@ public class GoodsDescController extends BladeController {
 		} else {
 			return R.data(new Page<>());
 		}
+
 		IPage<PjGoodsDesc> list = goodsDescService.page(Condition.getPage(query), lambdaQueryWrapper);
-		for (PjGoodsDesc item : list.getRecords()) {
-			if (!pjProductLaunchList.isEmpty()) {
-				PjProductLaunch pjProductLaunch = pjProductLaunchList.stream().filter(e -> e.getGoodsId().equals(item.getId())).findFirst().orElse(new PjProductLaunch());
-				if ("售价1".equals(priceSystem)) {
-					item.setPrice(pjProductLaunch.getPriceOne());
-				} else if ("售价2".equals(priceSystem)) {
-					item.setPrice(pjProductLaunch.getPriceTwo());
-				} else if ("售价3".equals(priceSystem)) {
-					item.setPrice(pjProductLaunch.getPriceThree());
-				} else if ("售价4".equals(priceSystem)) {
-					item.setPrice(pjProductLaunch.getPriceFour());
-				}
-				item.setSharedCompanyId(pjProductLaunch.getSourceCompanyId());
-				item.setSharedCompanyName(pjProductLaunch.getSourceCompanyName());
-				item.setInventory(pjProductLaunch.getInventory());
-			}
-			String typeId = item.getGoodsTypeId();
+		if (!list.getRecords().isEmpty()){
+			String typeId = list.getRecords().stream().map(PjGoodsDesc::getGoodsTypeId).filter(Objects::nonNull).collect(Collectors.joining(","));
 			String[] split = typeId.split(",");
 			List<String> stringList = Arrays.asList(split);
 			LambdaQueryWrapper<PjGoodsType> goodsTypeLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			goodsTypeLambdaQueryWrapper.in(PjGoodsType::getId, stringList);
-			List<PjGoodsType> types = goodsDescType.list(goodsTypeLambdaQueryWrapper);
-			if (CollectionUtils.isNotEmpty(types)) {
-				List<String> typeStr = types.stream().map(PjGoodsType::getCname).collect(Collectors.toList());
-				item.setGoodsTypeName(typeStr.toString().replace("[", "").replace("]", ""));
-			}
+			List<PjGoodsType> pjGoodsTypeList = goodsDescType.list(goodsTypeLambdaQueryWrapper);
 			List<PjGoodsFiles> goodsFilesList = new ArrayList<>();
+			List<PjBrandFiles> pjBrandFilesList = new ArrayList<>();
+			List<Long> goodsId = list.getRecords().stream().map(PjGoodsDesc::getId).filter(Objects::nonNull).collect(Collectors.toList());
+			List<Long> brandIds = list.getRecords().stream().map(PjGoodsDesc::getBrandId).filter(Objects::nonNull).collect(Collectors.toList());
 			goodsFilesList = goodsFilesService.list(new LambdaQueryWrapper<PjGoodsFiles>()
 				.eq(PjGoodsFiles::getMainImage, 0)
-				.eq(PjGoodsFiles::getPid, item.getId())
+				.in(PjGoodsFiles::getPid, goodsId)
 				.eq(PjGoodsFiles::getTenantId, AuthUtil.getTenantId())
 				.eq(PjGoodsFiles::getIsDeleted, 0));
-			if (goodsFilesList.size() == 0 && ObjectUtils.isNotNull(item.getBrandId())) {
-				goodsFilesList = BeanUtil.copy(brandFilesService.list(new LambdaQueryWrapper<PjBrandFiles>()
+			if (goodsFilesList.isEmpty()) {
+				pjBrandFilesList = brandFilesService.list(new LambdaQueryWrapper<PjBrandFiles>()
 					.eq(PjBrandFiles::getMainImage, 0)
-					.eq(PjBrandFiles::getPid, item.getBrandId())
+					.in(PjBrandFiles::getPid, brandIds)
 					.eq(PjBrandFiles::getTenantId, AuthUtil.getTenantId())
-					.eq(PjBrandFiles::getIsDeleted, 0)), PjGoodsFiles.class);
+					.eq(PjBrandFiles::getIsDeleted, 0));
+			}
+			for (PjGoodsDesc item : list.getRecords()) {
+				if (!pjProductLaunchList.isEmpty()) {
+					PjProductLaunch pjProductLaunch = pjProductLaunchList.stream().filter(e -> e.getGoodsId().equals(item.getId())).findFirst().orElse(new PjProductLaunch());
+					if ("售价1".equals(priceSystem)) {
+						item.setPrice(pjProductLaunch.getPriceOne());
+					} else if ("售价2".equals(priceSystem)) {
+						item.setPrice(pjProductLaunch.getPriceTwo());
+					} else if ("售价3".equals(priceSystem)) {
+						item.setPrice(pjProductLaunch.getPriceThree());
+					} else if ("售价4".equals(priceSystem)) {
+						item.setPrice(pjProductLaunch.getPriceFour());
+					}
+					item.setSharedCompanyId(pjProductLaunch.getSourceCompanyId());
+					item.setSharedCompanyName(pjProductLaunch.getSourceCompanyName());
+					item.setInventory(pjProductLaunch.getInventory());
+				}
+				String typeIds = item.getGoodsTypeId();
+				String[] typeIdsArry = typeIds.split(",");
+				List<String> typeList = Arrays.asList(typeIdsArry);
+				List<PjGoodsType> types = pjGoodsTypeList.stream().filter(e-> typeList.contains(e.getId()+"")).collect(Collectors.toList());
+				if (CollectionUtils.isNotEmpty(types)) {
+					List<String> typeStr = types.stream().map(PjGoodsType::getCname).collect(Collectors.toList());
+					item.setGoodsTypeName(typeStr.toString().replace("[", "").replace("]", ""));
+				}
+				List<PjGoodsFiles> goodsFilesList1 = new ArrayList<>();
+				goodsFilesList1 = goodsFilesList.stream().filter(e-> e.getPid().equals(item.getId())).collect(Collectors.toList());
+				if (goodsFilesList1.isEmpty() && ObjectUtils.isNotNull(item.getBrandId())) {
+					goodsFilesList1 = BeanUtil.copy(pjBrandFilesList.stream().filter(e->e.getPid().equals(item.getBrandId())).collect(Collectors.toList()), PjGoodsFiles.class);
+				}
+				item.setGoodsFilesList(goodsFilesList1);
 			}
-			item.setGoodsFilesList(goodsFilesList);
 		}
 		return R.data(list);
 	}

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

@@ -151,6 +151,7 @@ public class OrderController extends BladeController {
 		StringBuilder createUserIds = new StringBuilder();//创建人id拼接
 		for (PjOrder items : pages.getRecords()) {
 			if (ObjectUtil.isNotEmpty(items.getUpdateUser())) {
+
 				updateUserIds.append(items.getUpdateUser()).append(",");
 			}
 			if (ObjectUtil.isNotEmpty(items.getCreateUser())) {

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.xml

@@ -46,6 +46,7 @@
         po.customer_name AS customerName,
         bu.real_name AS salerName,
         po.storage_name AS storageName,
+        poi.goods_no AS code,
         po.ord_no AS ordNo,
         DATE_FORMAT(po.busines_date,'%Y-%m-%d') AS businesDate,
         CASE
@@ -124,6 +125,7 @@
         po.customer_name AS customerName,
         po.saler_name AS salerName,
         po.storage_name AS storageName,
+        poi.goods_no AS code,
         po.ord_no AS ordNo,
         DATE_FORMAT(po.busines_date,'%Y-%m-%d') AS businesDate,
         CASE

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

@@ -1104,10 +1104,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				}
 				baseMapper.insert(order);
 			} else {
-				PjOrder order1 = baseMapper.selectById(order.getId());
-				if (order1.getStatus().equals(order.getStatus())) {
-					throw new RuntimeException("单据状态已修改,请刷新数据在操作");
-				}
 				order.setUpdateUser(AuthUtil.getUserId());
 				order.setUpdateTime(new Date());
 				baseMapper.updateById(order);

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

@@ -198,13 +198,6 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			ship.setTenantId(AuthUtil.getTenantId());
 			baseMapper.insert(ship);
 		} else {
-			PjShip ship1 = baseMapper.selectById(ship.getId());
-			if ("已入库".equals(ship1.getStatusName())) {
-				throw new RuntimeException("该单据已入库,请刷新页面");
-			}
-			if ("已出库".equals(ship1.getStatusName())) {
-				throw new RuntimeException("该单据已出库,请刷新页面");
-			}
 			ship.setUpdateUser(AuthUtil.getUserId());
 			ship.setUpdateTime(new Date());
 			baseMapper.updateById(ship);
@@ -565,6 +558,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				.eq(PjOrderItems::getIsDeleted, 0)
 				.in(PjOrderItems::getId, srcItemIds));
 			BigDecimal number = new BigDecimal("0.00");
+			String msg = "";
 			for (PjShipItems item : ship.getShipItemsList()) {
 				number = number.add(item.getSendNum());
 				if (item.getId() == null) {
@@ -613,7 +607,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				if (stockOne != null) {
 					if (stockOne.getBalanceQuantity().compareTo(item.getSendNum()) < 0) {
 						System.err.println("商品:"+goodsDesc.getCname());
-						throw new RuntimeException("商品:"+goodsDesc.getCname()+"库存不足,出库失败");
+						msg += goodsDesc.getCname()+",";
 					}
 					stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().subtract(item.getSendNum()));
 					stockOne.setStoreInventory(stockOne.getBalanceQuantity());
@@ -628,6 +622,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					throw new RuntimeException("未查到库存账");
 				}
 			}
+			if (!msg.isEmpty()){
+				throw new RuntimeException("商品:"+msg+"库存不足,出库失败");
+			}
 			R res = iStockDescService.updateBatchByIdNew(pjStockDescArrayList);
 			if (!res.isSuccess()) {
 				throw new RuntimeException(res.getMsg());

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

@@ -201,7 +201,8 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R importUser(List<StockGoodsExcel> data, Boolean isCovered) {
 		StringBuffer good = new StringBuffer();//未找到商品信息的商品
 		StringBuffer corp = new StringBuffer();//未找到供应商的商品