| 8 天以前 | gongchunyi | ![]() |
| 8 天以前 | gongchunyi | ![]() |
| 8 天以前 | gongchunyi | ![]() |
src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -2,19 +2,12 @@ import javax.servlet.http.HttpServletResponse; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto; import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper; import com.ruoyi.purchase.pojo.PurchaseReturnOrderProducts; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerProductService; @@ -30,12 +23,8 @@ import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 产åä¿¡æ¯Controller @@ -53,9 +42,6 @@ private ProcurementRecordService procurementRecordService; @Autowired private StockUtils stockUtils; @Autowired private PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper; /** @@ -84,43 +70,10 @@ @GetMapping("/list") public AjaxResult list(SalesLedgerProduct salesLedgerProduct) { List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct); if (CollUtil.isEmpty(list)) { return AjaxResult.success(list); } // List<Long> productIds = list.stream().map(SalesLedgerProduct::getId).collect(Collectors.toList()); List<SimpleReturnOrderGroupDto> groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds); Map<Long, BigDecimal> returnOrderGroupDtoMap = groupListByProductIds.stream().collect(Collectors.toMap(SimpleReturnOrderGroupDto::getSalesLedgerProductId, item -> item.getSumReturnQuantity())); list.forEach(item -> { if (item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTickets(BigDecimal.ZERO); } if (item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTicketsAmount(BigDecimal.ZERO); } // ProcurementPageDto procurementDto = new ProcurementPageDto(); // procurementDto.setSalesLedgerProductId(item.getId()); // procurementDto.setProductCategory(item.getProductCategory()); // IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto); // BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity"); // ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0); if (item.getApproveStatus() != 2) { if (item.getHasSufficientStock() == 0) { item.setApproveStatus(0); } else { item.setApproveStatus(1); } } // ç»è®¡éè´§æ°é BigDecimal returnQuality = returnOrderGroupDtoMap.getOrDefault(item.getId(), BigDecimal.ZERO); item.setReturnQuality(returnQuality); item.setAvailableQuality(item.getQuantity().subtract(returnQuality)); }); return AjaxResult.success(list); } /** * 导åºäº§åä¿¡æ¯å表 */ src/main/java/com/ruoyi/sales/dto/SalesLedgerImportDto.java
@@ -7,6 +7,7 @@ import com.ruoyi.sales.pojo.SalesLedgerProduct; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; import java.time.LocalDate; @@ -18,34 +19,45 @@ * @date : 2026/1/19 9:50 */ @Data public class SalesLedgerImportDto extends SalesLedgerProductImportDto{ @EqualsAndHashCode(callSuper = false) public class SalesLedgerImportDto extends SalesLedgerProductImportDto { @Excel(name = "éå®åå·") private String salesContractNo; @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "å½å ¥æ¥æ", width = 30, dateFormat = "yyyy-MM-dd") private Date entryDate; @Excel(name = "项ç®åç§°") private String projectName; @Excel(name = "ä¸å¡å") private String salesman; @Excel(name = "客æ·åç§°") private String customerName; @Excel(name = "项ç®åç§°") private String projectName; @Excel(name = "å½å ¥äºº") private String entryPerson; @Excel(name = "夿³¨") private String remarks; @ApiModelProperty(value = "ç¾è®¢æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "ç¾è®¢æ¥æ", width = 30, dateFormat = "yyyy-MM-dd") private Date executionDate; @ApiModelProperty(value = "äº¤è´§æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "äº¤è´§æ¥æ", width = 30, dateFormat = "yyyy-MM-dd") private Date deliveryDate; @Excel(name = "å½å ¥äºº") private String entryPerson; @JsonFormat(pattern = "yyyy-MM-dd") @Excel(name = "å½å ¥æ¥æ", width = 30, dateFormat = "yyyy-MM-dd") private Date entryDate; @ApiModelProperty(value = "仿¬¾æ¹å¼") @Excel(name = "仿¬¾æ¹å¼") private String paymentMethod; @Excel(name = "夿³¨") private String remarks; } @Excel(name = "客æ·å¤æ³¨") private String customerRemarks; } src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java
@@ -18,61 +18,55 @@ @Excel(name = "éå®åå·") private String salesContractNo; /** * 产å大类 */ @Excel(name = "产å大类") private String productCategory; /** * è§æ ¼åå· */ @Excel(name = "è§æ ¼åå·") private String specificationModel; @Excel(name = "宽(mm)") private BigDecimal width; @Excel(name = "é«(mm)") private BigDecimal height; @Excel(name = "ç¨ç") private BigDecimal taxRate; @Excel(name = "å«ç¨åä»·") private BigDecimal taxInclusiveUnitPrice; @Excel(name = "æ°é") private BigDecimal quantity; @Excel(name = "å«ç¨æ»ä»·") private BigDecimal taxInclusiveTotalPrice; @Excel(name = "å票类å") private String invoiceType; @Excel(name = "楼å±ç¼å·") private String floorNo; @Excel(name = "å å·¥è¦æ±") private String processingRequirements; @Excel(name = "夿³¨") private String remarks; @Excel(name = "é¢å¤å å·¥") private String extraProcessing; /** * åä½ */ @Excel(name = "åä½") // @Excel(name = "åä½") private String unit; /** * æ°é */ @Excel(name = "æ°é") private BigDecimal quantity; /** * ç¨ç */ @Excel(name = "ç¨ç") private BigDecimal taxRate; /** * å«ç¨åä»· */ @Excel(name = "å«ç¨åä»·") private BigDecimal taxInclusiveUnitPrice; /** * å«ç¨æ»ä»· */ @Excel(name = "å«ç¨æ»ä»·") private BigDecimal taxInclusiveTotalPrice; /** * å票类å */ @Excel(name = "å票类å") private String invoiceType; /** * æ¯å¦è´¨æ£ */ @Excel(name = "æ¯å¦è´¨æ£", readConverterExp = "0=å¦,1=æ¯") // @Excel(name = "æ¯å¦è´¨æ£", readConverterExp = "0=å¦,1=æ¯") private Boolean isChecked; } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -234,6 +234,10 @@ @ApiModelProperty(value = "æ¯å¦è´¨æ£") private Boolean isChecked; @TableField(exist = false) @ApiModelProperty("éç®±") private BigDecimal thickness; @ApiModelProperty("宽") private BigDecimal width; src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum; import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum; import com.ruoyi.framework.web.domain.R; @@ -14,7 +16,9 @@ import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.impl.ProductOrderServiceImpl; import com.ruoyi.purchase.dto.SimpleReturnOrderGroupDto; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; @@ -61,6 +65,7 @@ private SalesLedgerMapper salesLedgerMapper; private PurchaseLedgerMapper purchaseLedgerMapper; private PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper; private ProductOrderMapper productOrderMapper; @@ -72,6 +77,7 @@ private ProcessRouteMapper processRouteMapper; private ProductProcessRouteMapper productProcessRouteMapper; private ProductModelMapper productModelMapper; private ProductWorkOrderMapper productWorkOrderMapper; private ProductionProductMainMapper productionProductMainMapper; @@ -103,50 +109,103 @@ // queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId()) // .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct); if (!CollectionUtils.isEmpty(salesLedgerProducts)) { salesLedgerProducts.forEach(item -> { // åè´§ä¿¡æ¯ ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>() .eq(ShippingInfo::getSalesLedgerProductId, item.getId()) .orderByDesc(ShippingInfo::getCreateTime) .last("limit 1")); if (shippingInfo != null) { item.setShippingDate(shippingInfo.getShippingDate()); item.setShippingCarNumber(shippingInfo.getShippingCarNumber()); item.setShippingStatus(shippingInfo.getStatus()); item.setExpressCompany(shippingInfo.getExpressCompany()); item.setExpressNumber(shippingInfo.getExpressNumber()); } }); // å¼ç¥¨ if (CollectionUtils.isEmpty(salesLedgerProducts)) { return salesLedgerProducts; } salesLedgerProducts.forEach(item -> { ShippingInfo shippingInfo = shippingInfoMapper.selectOne(new LambdaQueryWrapper<ShippingInfo>() .eq(ShippingInfo::getSalesLedgerProductId, item.getId()) .orderByDesc(ShippingInfo::getCreateTime) .last("limit 1")); if (shippingInfo != null) { item.setShippingDate(shippingInfo.getShippingDate()); item.setShippingCarNumber(shippingInfo.getShippingCarNumber()); item.setShippingStatus(shippingInfo.getStatus()); item.setExpressCompany(shippingInfo.getExpressCompany()); item.setExpressNumber(shippingInfo.getExpressNumber()); } }); if (salesLedgerProduct.getSalesLedgerId() != null) { InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto(); invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue()); List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto); // ç»è®¡å¼ç¥¨ç»è®°äº§åçå·²å¼ç¥¨æ°/å·²å¼ç¥¨éé¢ if (!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)) { for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) { BigDecimal invoiceNum = BigDecimal.ZERO; BigDecimal invoiceAmount = BigDecimal.ZERO; BigDecimal noInvoiceNum = BigDecimal.ZERO; BigDecimal noInvoiceAmount = BigDecimal.ZERO; for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) { if (ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()) { invoiceNum = invoiceNum.add(registrationProductDto.getInvoiceNum()); invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount()); } } noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum); noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount); BigDecimal ledgerQuantity = ledgerProduct.getQuantity() == null ? BigDecimal.ZERO : ledgerProduct.getQuantity(); BigDecimal ledgerTotalPrice = ledgerProduct.getTaxInclusiveTotalPrice() == null ? BigDecimal.ZERO : ledgerProduct.getTaxInclusiveTotalPrice(); ledgerProduct.setInvoiceNum(invoiceNum); ledgerProduct.setInvoiceAmount(invoiceAmount); ledgerProduct.setNoInvoiceNum(noInvoiceNum); ledgerProduct.setNoInvoiceAmount(noInvoiceAmount); ledgerProduct.setNoInvoiceNum(ledgerQuantity.subtract(invoiceNum)); ledgerProduct.setNoInvoiceAmount(ledgerTotalPrice.subtract(invoiceAmount)); } } } List<Long> productIds = salesLedgerProducts.stream() .map(SalesLedgerProduct::getId) .filter(Objects::nonNull) .collect(Collectors.toList()); Map<Long, BigDecimal> returnOrderGroupDtoMap = Collections.emptyMap(); if (!CollectionUtils.isEmpty(productIds)) { List<SimpleReturnOrderGroupDto> groupListByProductIds = purchaseReturnOrderProductsMapper.getReturnOrderGroupListByProductIds(productIds); if (!CollectionUtils.isEmpty(groupListByProductIds)) { returnOrderGroupDtoMap = groupListByProductIds.stream() .collect(Collectors.toMap(SimpleReturnOrderGroupDto::getSalesLedgerProductId, SimpleReturnOrderGroupDto::getSumReturnQuantity, BigDecimal::add)); } } List<Long> productModelIds = salesLedgerProducts.stream() .map(SalesLedgerProduct::getProductModelId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); Map<Long, ProductModel> productModelMap = Collections.emptyMap(); if (!CollectionUtils.isEmpty(productModelIds)) { List<ProductModel> productModels = productModelMapper.selectBatchIds(productModelIds); if (!CollectionUtils.isEmpty(productModels)) { productModelMap = productModels.stream() .collect(Collectors.toMap(ProductModel::getId, Function.identity())); } } Map<Long, BigDecimal> finalReturnOrderGroupDtoMap = returnOrderGroupDtoMap; Map<Long, ProductModel> finalProductModelMap = productModelMap; salesLedgerProducts.forEach(item -> { if (item.getFutureTickets() == null || item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTickets(BigDecimal.ZERO); } if (item.getFutureTicketsAmount() == null || item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTicketsAmount(BigDecimal.ZERO); } if (item.getApproveStatus() == null || item.getApproveStatus() != 2) { Integer hasSufficientStock = item.getHasSufficientStock(); if (hasSufficientStock != null && hasSufficientStock == 0) { item.setApproveStatus(0); } else { item.setApproveStatus(1); } } BigDecimal returnQuality = finalReturnOrderGroupDtoMap.getOrDefault(item.getId(), BigDecimal.ZERO); item.setReturnQuality(returnQuality); BigDecimal quantity = item.getQuantity() == null ? BigDecimal.ZERO : item.getQuantity(); item.setAvailableQuality(quantity.subtract(returnQuality)); ProductModel productModel = finalProductModelMap.get(item.getProductModelId()); if (productModel != null) { item.setThickness(productModel.getThickness()); } }); return salesLedgerProducts; } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -14,6 +14,7 @@ import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.pojo.CustomerRegions; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.basic.service.ICustomerRegionsService; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.SaleEnum; @@ -197,6 +198,20 @@ productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()); productWrapper.eq(SalesLedgerProduct::getType, 1); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); Map<Long, ProductModel> productModelMap = Collections.emptyMap(); if (CollectionUtils.isNotEmpty(products)) { List<Long> productModelIds = products.stream() .map(SalesLedgerProduct::getProductModelId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(productModelIds)) { List<ProductModel> productModels = productModelMapper.selectBatchIds(productModelIds); if (CollectionUtils.isNotEmpty(productModels)) { productModelMap = productModels.stream().collect(Collectors.toMap(ProductModel::getId, Function.identity())); } } } for (SalesLedgerProduct product : products) { product.setOriginalNoInvoiceNum(product.getNoInvoiceNum()); // æä¾ä¸´æ¶æªå¼ç¥¨æ°ï¼æªå¼ç¥¨éé¢ä¾åæ®µè®¡ç® @@ -228,6 +243,20 @@ List<SalesLedgerProductProcess> processList = salesLedgerProductProcessService.listByIds(processIds); processList.forEach(p -> p.setQuantity(processQuantityMap.get(p.getId()))); product.setSalesProductProcessList(processList); } ProductModel productModel = productModelMap.get(product.getProductModelId()); if (productModel != null) { product.setThickness(productModel.getThickness()); } if (product.getWidth() != null && product.getHeight() != null) { BigDecimal pieceArea = product.getWidth().multiply(product.getHeight()).divide(new BigDecimal(1000000), 2, RoundingMode.HALF_UP); if (product.getActualPieceArea() == null) { product.setActualPieceArea(pieceArea); } BigDecimal quantity = product.getQuantity() == null ? BigDecimal.ZERO : product.getQuantity(); if (product.getActualTotalArea() == null) { product.setActualTotalArea(pieceArea.multiply(quantity).setScale(2, RoundingMode.HALF_UP)); } } } @@ -389,12 +418,6 @@ // å®¢æ·æ°æ® List<Customer> customers = customerMapper.selectList(new LambdaQueryWrapper<Customer>().in(Customer::getCustomerName, salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getCustomerName).collect(Collectors.toList()))); // // è§æ ¼åå·æ°æ® // List<ProductModel> productModels = productModelMapper.selectList(new LambdaQueryWrapper<ProductModel>().in(ProductModel::getModel, // salesLedgerProductImportDtoList.stream().map(SalesLedgerImportDto::getSpecificationModel).collect(Collectors.toList()))); // // 产åå¤§ç±»æ°æ® // List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>().in(Product::getProductName, // salesLedgerProductImportDtoList.stream().map(SalesLedgerImportDto::getProductCategory).collect(Collectors.toList()))); List<Map<String, Object>> list = productModelMapper.getProductAndModelList(); // å½å ¥äººæ°æ® List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName, @@ -404,7 +427,7 @@ .eq(SalesLedger::getSalesContractNo, salesLedgerImportDto.getSalesContractNo()) .last("LIMIT 1")); if (salesLedger1 != null) { continue; throw new ServiceException("å¯¼å ¥å¤±è´¥ï¼ååå· [" + salesLedgerImportDto.getSalesContractNo() + "] å·²åå¨ï¼è¯·æ£æ¥åéæ°å¯¼å ¥"); } SalesLedger salesLedger = new SalesLedger(); BeanUtils.copyProperties(salesLedgerImportDto, salesLedger); @@ -426,7 +449,7 @@ .map(SysUser::getUserId) .orElse(null); if (aLong == null) throw new RuntimeException("å½å ¥äºº:" + salesLedger.getEntryPerson() + ",æ 对åºç¨æ·ï¼"); throw new ServiceException("å½å ¥äºº:" + salesLedger.getEntryPerson() + ",æ 对åºç¨æ·ï¼"); salesLedger.setEntryPerson(aLong.toString()); // éå®äº§åæ°æ®ç»å®ï¼éè¿éå®åå·è·å对åºéå®äº§åæ°æ® List<SalesLedgerProductImportDto> salesLedgerProductImportDtos = salesLedgerProductImportDtoList.stream() @@ -439,10 +462,12 @@ .reduce(BigDecimal.ZERO, BigDecimal::add)); salesLedgerMapper.insert(salesLedger); for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) { SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct(); BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); salesLedgerProduct.setFloorCode(salesLedgerProductImportDto.getFloorNo()); salesLedgerProduct.setProcessRequirement(salesLedgerProductImportDto.getProcessingRequirements()); salesLedgerProduct.setRemark(salesLedgerProductImportDto.getRemarks()); salesLedgerProduct.setSalesLedgerId(salesLedger.getId()); salesLedgerProduct.setType(1); // 计ç®ä¸å«ç¨æ»ä»· @@ -456,21 +481,48 @@ salesLedgerProduct.setProductModelId(Long.parseLong(map.get("modelId").toString())); salesLedgerProduct.setProductId(Long.parseLong(map.get("id").toString())); }); // salesLedgerProduct.setProductId(productList.stream() // .filter(product -> product.getProductName().equals(salesLedgerProduct.getProductCategory())) // .findFirst() // .map(Product::getId) // .orElse(null)); // salesLedgerProduct.setProductModelId(productModels.stream() // .filter(productModel -> productModel.getModel().equals(salesLedgerProduct.getSpecificationModel())) // .findFirst() // .map(ProductModel::getId) // .orElse(null)); salesLedgerProduct.setRegister(loginUser.getNickName()); salesLedgerProduct.setRegisterDate(LocalDateTime.now()); salesLedgerProduct.setApproveStatus(0); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice()); salesLedgerProductMapper.insert(salesLedgerProduct); // å¤çé¢å¤å å·¥ä¿¡æ¯ String extraProcessing = salesLedgerProductImportDto.getExtraProcessing(); if (StringUtils.hasText(extraProcessing)) { List<SalesLedgerProductProcess> processList = new ArrayList<>(); // ä¸è±æåå· String[] items = extraProcessing.split("[;ï¼]"); for (String item : items) { if (StringUtils.hasText(item)) { String[] parts = item.split("[-â~ï½]"); if (parts.length >= 2) { String processName = parts[0].trim(); String qtyStr = parts[1].trim(); try { BigDecimal quantity = new BigDecimal(qtyStr); SalesLedgerProductProcess process = salesLedgerProductProcessService.getOne( new LambdaQueryWrapper<SalesLedgerProductProcess>() .eq(SalesLedgerProductProcess::getProcessName, processName) .last("LIMIT 1") ); if (process != null) { SalesLedgerProductProcess p = new SalesLedgerProductProcess(); p.setId(process.getId()); p.setQuantity(quantity.intValue()); processList.add(p); } } catch (Exception e) { log.error("è§£æé¢å¤å å·¥æ°é失败: {}", qtyStr); } } } } if (!processList.isEmpty()) { salesLedgerProductProcessBindService.updateProductProcessBind(processList, salesLedgerProduct.getId()); } } // æ·»å çäº§æ°æ® salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct); } src/main/resources/static/ÏúÊŲ̂Õ˵¼ÈëÄ£°å.xlsxBinary files differ