src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java
@@ -1,7 +1,6 @@ package com.ruoyi.purchase.dto; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.sales.dto.SalesLedgerProductImportDto; import lombok.Data; import java.math.BigDecimal; @@ -17,16 +16,6 @@ private String purchaseContractNumber; /** * é¢è¦æ°é */ @Excel(name = "åºåé¢è¦æ°é") private BigDecimal warnNum; @Excel(name = "éå®åå·") private String salesContractNo; /** * 产å大类 */ @Excel(name = "产å大类") @@ -39,16 +28,22 @@ private String specificationModel; /** * UIDç */ @Excel(name = "UIDç ") private String uidNo; /** * æ¹æ¬¡å· */ @Excel(name = "æ¹æ¬¡å·") private String batchNo; /** * åä½ */ @Excel(name = "åä½") private String unit; /** * æ°é */ @Excel(name = "æ°é") private BigDecimal quantity; /** * ç¨ç @@ -63,6 +58,12 @@ private BigDecimal taxInclusiveUnitPrice; /** * æ°é */ @Excel(name = "æ°é") private BigDecimal quantity; /** * å«ç¨æ»ä»· */ @Excel(name = "å«ç¨æ»ä»·") @@ -75,6 +76,12 @@ private String invoiceType; /** * é¢è¦æ°é */ @Excel(name = "åºåé¢è¦æ°é") private BigDecimal warnNum; /** * æ¯å¦è´¨æ£ */ @Excel(name = "æ¯å¦è´¨æ£", readConverterExp = "0=å¦,1=æ¯") src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -246,7 +246,7 @@ qualityInspect.setQuantity(saleProduct.getQuantity()); qualityInspectMapper.insert(qualityInspect); List<QualityTestStandard> qualityTestStandard = qualityTestStandardMapper.getQualityTestStandardByProductId(saleProduct.getProductId(), 0,null); if (qualityTestStandard.size()>0){ if (!qualityTestStandard.isEmpty()) { qualityInspect.setTestStandardId(qualityTestStandard.get(0).getId()); qualityInspectMapper.updateById(qualityInspect); qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery() @@ -745,6 +745,24 @@ for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) { SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct(); // æ¥è¯¢äº§å Product product = productMapper.selectOne(new LambdaQueryWrapper<Product>() .eq(Product::getProductName, salesLedgerProductImportDto.getProductCategory())); if (product == null) { throw new RuntimeException("请维æ¤äº§åï¼" + salesLedgerProductImportDto.getProductCategory()); } // æ¥è¯¢äº§ååå· ProductModel productModel = productModelMapper.selectOne(new LambdaQueryWrapper<ProductModel>() .eq(ProductModel::getProductId, product.getId()) .eq(ProductModel::getModel, salesLedgerProductImportDto.getSpecificationModel()) .eq(ProductModel::getUidNo, salesLedgerProductImportDto.getUidNo())); if (productModel == null) { throw new RuntimeException("请维æ¤äº§åã" + salesLedgerProductImportDto.getProductCategory() + "ãçåå·ã" + salesLedgerProductImportDto.getSpecificationModel() + "ãåUIDç ã" + salesLedgerProductImportDto.getUidNo() + "ã"); } salesLedgerProduct.setProductModelId(productModel.getId()); salesLedgerProduct.setProductId(product.getId()); BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); salesLedgerProduct.setSalesLedgerId(salesLedger.getId()); salesLedgerProduct.setType(2); @@ -764,21 +782,25 @@ salesLedgerProduct.setApproveStatus(0); salesLedgerProduct.setPendingTicketsTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice()); // æ¯å¦è´¨æ£å¤æ if (salesLedgerProductImportDto.getIsChecked() == null) { throw new RuntimeException("è¯·å¡«åæ¯å¦è´¨æ£ï¼"); } salesLedgerProduct.setIsChecked(salesLedgerProductImportDto.getIsChecked() == 1); if(salesLedgerProductImportDto.getIsChecked() == 1){ addQualityInspect(salesLedger, salesLedgerProduct); } else { //ç´æ¥å ¥åº stockUtils.addStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockInQualifiedRecordTypeEnum.PURCHASE_STOCK_IN.getCode(), salesLedger.getId(), salesLedgerProduct.getBatchNo(), salesLedger.getSupplierName(), LocalDate.now()); } salesLedgerProductMapper.insert(salesLedgerProduct); } // éè´å®¡æ ¸ addApproveByPurchase(loginUser,salesLedger); } return AjaxResult.success("å¯¼å ¥æå"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } return AjaxResult.success("å¯¼å ¥å¤±è´¥"); } @Override src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java
@@ -1,12 +1,9 @@ package com.ruoyi.sales.dto; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * @author :yys @@ -32,6 +29,18 @@ private String specificationModel; /** * æ¹å· */ @Excel(name = "æ¹å·") private String batchNo; /** * UIDç */ @Excel(name = "UIDç ") private String uniNo; /** * åä½ */ @Excel(name = "åä½") src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -285,7 +285,7 @@ List<ProcessRoute> processRoutes = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda() .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()) .orderByDesc(ProcessRoute::getCreateTime)); if (processRoutes.size()>0){ if (!processRoutes.isEmpty()){ ProcessRoute processRoute = processRoutes.get(0); //æ°å¢ç产订åå·¥èºè·¯çº¿ä¸»è¡¨ ProductProcessRoute productProcessRoute = new ProductProcessRoute(); src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -429,6 +429,10 @@ for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) { SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct(); List<StockInventory> stockInventories = stockInventoryMapper.selectList(new LambdaQueryWrapper<StockInventory>().in(StockInventory::getBatchNo, salesLedgerProductImportDto.getBatchNo())); if (CollectionUtils.isEmpty(stockInventories)) { throw new RuntimeException("äº§åæ¹å·:" + salesLedgerProductImportDto.getBatchNo() + ",åºåæ 对åºäº§åæ°æ®ï¼"); } BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct); salesLedgerProduct.setSalesLedgerId(salesLedger.getId()); salesLedgerProduct.setType(1); @@ -458,16 +462,13 @@ salesLedgerProduct.setApproveStatus(0); salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProductImportDto.getTaxInclusiveTotalPrice()); salesLedgerProductMapper.insert(salesLedgerProduct); // æ·»å çäº§æ°æ® salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct); } } return AjaxResult.success("å¯¼å ¥æå"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } return AjaxResult.success("å¯¼å ¥å¤±è´¥"); } @Override src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -5,15 +5,22 @@ <mapper namespace="com.ruoyi.sales.mapper.SalesLedgerProductMapper"> <select id="selectSalesLedgerProductList" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct"> WITH stock_summary AS ( SELECT product_model_id, SUM(qualitity) AS total_quantity, SUM(locked_quantity) AS total_locked FROM stock_inventory GROUP BY product_model_id ) SELECT T1.*, CASE WHEN (IFNULL(t2.qualitity, 0) - IFNULL(t2.locked_quantity, 0)) >= IFNULL(T1.quantity, 0) THEN 1 WHEN (IFNULL(s.total_quantity, 0) - IFNULL(s.total_locked, 0)) >= IFNULL(T1.quantity, 0) THEN 1 ELSE 0 END as has_sufficient_stock FROM sales_ledger_product T1 LEFT JOIN stock_inventory t2 ON T1.product_model_id = t2.product_model_id FROM sales_ledger_product T1 LEFT JOIN stock_summary s ON T1.product_model_id = s.product_model_id <where> <if test="salesLedgerProduct.salesLedgerId != null"> AND T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId} src/main/resources/static/²É¹ºÌ¨Õ˵¼ÈëÄ£°å.xlsxBinary files differ
src/main/resources/static/ÏúÊŲ̂Õ˵¼ÈëÄ£°å.xlsxBinary files differ