doc/20260317_Åô´´µç×Ó.sql
@@ -3,4 +3,4 @@ add defective_reason varchar(255) default '' not null comment 'ä¸è¯åå '; alter table quality_unqualified add quarantine_lifted boolean not null default false comment 'æ¯å¦å·²åæ¶é离'; add quarantine_lifted boolean not null default true comment 'æ¯å¦å·²åæ¶é离'; src/main/java/com/ruoyi/basic/dto/ProductModelExportDto.java
@@ -14,6 +14,8 @@ */ @Data public class ProductModelExportDto { @Excel(name = "ç©æç¼å·") private String materialCode; @Excel(name = "è§æ ¼åå·") private String model; src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -31,6 +31,12 @@ private String productName; /** * ç©æç¼å· */ @Excel(name = "ç©æç¼å·") private String materialCode; /** * è§æ ¼åå· */ @Excel(name = "è§æ ¼åå·") src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -118,6 +118,10 @@ ProductModel item = productModelList.get(i); int rowNum = i + 2; if (StringUtils.isEmpty(item.getMaterialCode())) { return AjaxResult.error("第 " + rowNum + " è¡å¯¼å ¥å¤±è´¥: [ç©æç¼å·] ä¸è½ä¸ºç©º"); } if (StringUtils.isEmpty(item.getModel())) { return AjaxResult.error("第 " + rowNum + " è¡å¯¼å ¥å¤±è´¥: [è§æ ¼åå·] ä¸è½ä¸ºç©º"); } src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -11,6 +11,9 @@ @Data public class ProductWorkOrderDto extends ProductWorkOrder { @ApiModelProperty(value = "产åID") private String productId; //产ååç§° @ApiModelProperty(value = "产ååç§°") private String productName; src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -35,4 +35,12 @@ ArrayList<Long> listMain(List<Long> idList); List<ProductionProductMainDto> getByProductWorkOrderId(Long productWorkOrderId); /** * æ£æ¥ä¹åçå·¥åºæ¯å¦æè¢«é离çä¸åæ ¼è®°å½ * @param productRouteId å½åå·¥åºçè·¯ç±ID * @param currentDragSort å½åå·¥åºçæåº * @return æ¯å¦æé离çä¸åæ ¼è®°å½ */ boolean checkPreviousProcessReported(@Param("productRouteId") Long productRouteId, @Param("currentDragSort") Integer currentDragSort); } src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -14,6 +14,10 @@ import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductWorkOrderService; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityUnqualifiedMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.quality.pojo.QualityUnqualified; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -39,9 +43,13 @@ @Autowired private ProductProcessRouteItemMapper productProcessRouteItemMapper; @Autowired private ProductProcessMapper productProcessMapper; @Autowired private ProductionProductMainMapper productionProductMainMapper; @Autowired private ProductionProductOutputMapper productionProductOutputMapper; @Autowired private QualityUnqualifiedMapper qualityUnqualifiedMapper; @Value("${file.temp-dir}") private String tempDir; @@ -50,27 +58,43 @@ public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) { IPage<ProductWorkOrderDto> productWorkOrderDtoIPage = productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder); productWorkOrderDtoIPage.getRecords().forEach(record -> { //æ£æ¥ä¸ä¸ä¸ªå·¥åºæ¯å¦å·²æ¥å·¥ // æ¯å¦è½æ¥å·¥ï¼ 1. 第ä¸ä¸ªå·¥åºè½æ¥å·¥ 2. ä¸ä¸ä¸ªå·¥åºå·²æ¥å·¥ 3. ä¹åçå·¥åºæªè¢«é离 Integer currentDragSort = record.getDragSort(); if (currentDragSort == null || currentDragSort == 1) { record.setIsCanReport(true); } else { //æ¥æ¾ä¸ä¸ä¸ªå·¥åº ProductProcessRouteItem previousItem = productProcessRouteItemMapper.selectOne( Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, record.getProductRouteId()) .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1) // ä¸ä¸ä¸ªå·¥åºæ¯å¦å·²æ¥å·¥ boolean isPreviousReported = productionProductMainMapper.checkPreviousProcessReported( record.getProductRouteId(), currentDragSort ); record.setIsCanReport(isPreviousReported); if (previousItem != null) { //æ£æ¥ä¸ä¸ä¸ªå·¥åºæ¯å¦ææ¥å·¥è®°å½ Long count = productionProductMainMapper.selectCount( Wrappers.<ProductionProductMain>lambdaQuery() .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId()) // ä¹åçå·¥åºæ¯å¦è¢«é离 if (record.getIsCanReport()) { // æ¥è¯¢ææä¹åçå·¥åºï¼æåºå·å°äºå½åå·¥åºï¼ List<ProductProcessRouteItem> previousItems = productProcessRouteItemMapper.selectList( Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, record.getProductRouteId()) .lt(ProductProcessRouteItem::getDragSort, currentDragSort) ); record.setIsCanReport(count > 0); } else { record.setIsCanReport(true); if (CollectionUtils.isNotEmpty(previousItems)) { // æåä¹åå·¥åºçåç§°å表 List<String> previousProcessNames = new ArrayList<>(); for (ProductProcessRouteItem item : previousItems) { ProductProcess process = productProcessMapper.selectById(item.getProcessId()); if (process != null) { previousProcessNames.add(process.getName()); } } // æ£æ¥ä¹åçå·¥åºæ¯å¦æè¢«é离çä¸åæ ¼è®°å½ List<QualityUnqualified> unqualifiedList = qualityUnqualifiedMapper.selectUnqualifiedByProcessNames(previousProcessNames); if (CollectionUtils.isNotEmpty(unqualifiedList)) { record.setIsCanReport(false); } } } } @@ -183,4 +207,4 @@ } return productWorkOrderDtos; } } } src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -100,24 +101,38 @@ if (productProcessRouteItem == null) { throw new RuntimeException("å·¥èºè·¯çº¿é¡¹ä¸åå¨"); } // æ¯å¦è½æ¥å·¥ï¼ 1. 第ä¸ä¸ªå·¥åºè½æ¥å·¥ 2. ä¸ä¸ä¸ªå·¥åºå·²æ¥å·¥ 3. ä¹åçå·¥åºæªè¢«é离 //æ£æ¥ä¸ä¸ä¸ªå·¥åºæ¯å¦å·²æ¥å·¥ Integer currentDragSort = productProcessRouteItem.getDragSort(); if (currentDragSort != null && currentDragSort > 1) { ProductProcessRouteItem previousItem = productProcessRouteItemMapper.selectOne( boolean isPreviousReported = productionProductMainMapper.checkPreviousProcessReported( productProcessRouteItem.getProductRouteId(), currentDragSort ); if (!isPreviousReported) { throw new RuntimeException("ä¸ä¸ä¸ªå·¥åºå°æªæ¥å·¥ï¼ä¸è½è¿è¡å½åå·¥åºæ¥å·¥"); } // æ¥è¯¢ææä¹åçå·¥åºï¼æåºå·å°äºå½åå·¥åºï¼ List<ProductProcessRouteItem> previousItems = productProcessRouteItemMapper.selectList( Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()) .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1) .lt(ProductProcessRouteItem::getDragSort, currentDragSort) ); if (CollectionUtils.isNotEmpty(previousItems)) { // æåä¹åå·¥åºçåç§°å表 List<String> previousProcessNames = new ArrayList<>(); for (ProductProcessRouteItem item : previousItems) { ProductProcess process = productProcessMapper.selectById(item.getProcessId()); if (process != null) { previousProcessNames.add(process.getName()); } } if (previousItem != null) { //æ£æ¥ä¸ä¸ä¸ªå·¥åºæ¯å¦ææ¥å·¥è®°å½ Long count = productionProductMainMapper.selectCount( Wrappers.<ProductionProductMain>lambdaQuery() .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId()) ); if (count == 0) { throw new RuntimeException("ä¸ä¸ä¸ªå·¥åºå°æªæ¥å·¥ï¼ä¸è½è¿è¡å½åå·¥åºæ¥å·¥"); // æ£æ¥ä¹åçå·¥åºæ¯å¦æè¢«é离çä¸åæ ¼è®°å½ List<QualityUnqualified> unqualifiedList = qualityUnqualifiedMapper.selectUnqualifiedByProcessNames(previousProcessNames); if (CollectionUtils.isNotEmpty(unqualifiedList)) { throw new RuntimeException("ä¹åçå·¥åºå·²è¢«é离ï¼ä¸è½è¿è¡å½åå·¥åºæ¥å·¥"); } } } @@ -170,7 +185,7 @@ productStructureDtos.add(productStructureDto); } for (ProductStructureDto productStructureDto : productStructureDtos) { System.out.println(productStructureDto.getProductModelId()); ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); @@ -193,18 +208,6 @@ //åæ ¼æ°é=æ¥å·¥æ°é-æ¥åºæ°é BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty()); // åæ ¼ç=åæ ¼æ°é/æ¥å·¥æ°é BigDecimal productQtyRate = productQty.divide(productionProductOutput.getQuantity(), 2, RoundingMode.HALF_UP) .multiply(new BigDecimal("100")); // 该工åºçåæ ¼ç < åæ ¼ç if (productQtyRate.compareTo(productProcess.getQualifiedRate()) < 0) { // åééç¥ç»ç®¡çå sysNoticeService.simpleNoticeByUser("æ¥å·¥æç¤º", String.format("%sç产订åï¼%så·¥åºåæ ¼ç%.2f%%ä½äºæ å%.2f%%", productOrder.getNpsNo(), productProcess.getName(), productQtyRate, productProcess.getQualifiedRate()), Arrays.asList(Long.valueOf(1L)), "/productionManagement/productionReporting"); } List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())); //åªæåæ ¼æ°é>0æè½å¢å ç¸åºæ°æ® if (productQty.compareTo(BigDecimal.ZERO) > 0) { @@ -228,7 +231,7 @@ qualityInspect.setProcess(process); qualityInspect.setInspectState(0); qualityInspect.setInspectType(inspectType); qualityInspect.setDefectiveQuantity(productionProductOutput.getScrapQty()); qualityInspect.setDefectiveQuantity(BigDecimal.ZERO); qualityInspect.setProductMainId(productionProductMain.getId()); qualityInspect.setProductModelId(productModel.getId()); qualityInspectMapper.insert(qualityInspect); src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -290,11 +290,13 @@ Long productId = product.getProductId(); if (productId != null && productMap.containsKey(productId)) { product.setProductCategory(productMap.get(productId)); product.setProductId(productId); } Long productModelId = product.getProductModelId(); if (productModelId != null && modelMap.containsKey(productModelId)) { product.setSpecificationModel(modelMap.get(productModelId)); product.setProductModelId(productModelId); } } src/main/java/com/ruoyi/quality/mapper/QualityUnqualifiedMapper.java
@@ -22,4 +22,7 @@ //æå¨æ°å¢ä¸åæ ¼çæ¶å,æ ¹æ®äº§ååç§°åè§æ ¼åå·æ¥åºå¯¹åºçè§æ ¼åå·id Long getModelId(@Param("productName") String productName, @Param("model") String model); } //æ ¹æ®å·¥åºåç§°å表æ¥è¯¢è¢«é离çä¸åæ ¼è®°å½ List<QualityUnqualified> selectUnqualifiedByProcessNames(@Param("processNames") List<String> processNames); } src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -99,6 +99,10 @@ @Excel(name = "æ°é") private BigDecimal quantity; @Excel(name = "åæ ¼æ°é") @TableField(exist = false) private BigDecimal qualifiedQuantity; /** * ä¸è¯æ°é */ src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.quality.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -13,6 +14,15 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.mapper.ProductOrderMapper; import com.ruoyi.production.mapper.ProductProcessMapper; import com.ruoyi.production.mapper.ProductWorkOrderMapper; import com.ruoyi.production.mapper.ProductionProductMainMapper; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.pojo.ProductProcess; import com.ruoyi.production.pojo.ProductWorkOrder; import com.ruoyi.production.pojo.ProductionProductMain; import com.ruoyi.project.system.service.ISysNoticeService; import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.mapper.QualityTestStandardMapper; @@ -23,15 +33,20 @@ import com.ruoyi.quality.service.IQualityInspectParamService; import com.ruoyi.quality.service.IQualityInspectService; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.stock.pojo.StockUninventory; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -53,6 +68,16 @@ private SalesLedgerProductMapper salesLedgerProductMapper; private ProcurementRecordService procurementRecordService; @Autowired private ProductProcessMapper productProcessMapper; @Autowired private ProductWorkOrderMapper productWorkOrderMapper; @Autowired private ProductionProductMainMapper productionProductMainMapper; @Autowired private ProductOrderMapper productOrderMapper; @Autowired private ISysNoticeService sysNoticeService; @Override public int add(QualityInspectDto qualityInspectDto) { @@ -85,6 +110,33 @@ if (ObjectUtils.isNull(qualityInspect.getCheckResult())) { throw new RuntimeException("请å 夿æ¯å¦åæ ¼"); } // è´¨æ£æ»æ° BigDecimal quantity = qualityInspect.getQuantity(); // åæ ¼æ°é = è´¨æ£æ»æ° - ä¸è¯æ°é BigDecimal productQty = quantity.subtract(qualityInspect.getDefectiveQuantity()); // åæ ¼ç=åæ ¼æ°é/è´¨æ£æ»æ° BigDecimal productQtyRate = productQty.divide(quantity, 2, RoundingMode.HALF_UP) .multiply(new BigDecimal("100")); // æ¥è¯¢å·¥åºçåæ ¼ç ProductProcess productProcess = productProcessMapper.selectOne(new LambdaQueryWrapper<ProductProcess>().eq(ProductProcess::getName, qualityInspect.getProcess())); if (!ObjectUtils.isNull(productProcess)) { // åæ ¼ç < 该工åºçåæ ¼ç if (productQtyRate.compareTo(productProcess.getQualifiedRate()) < 0) { // æ¥è¯¢ç产订å ProductionProductMain productionProductMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId()); ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId()); ProductOrder productOrder = productOrderMapper.selectOne(new LambdaQueryWrapper<ProductOrder>().eq(ProductOrder::getId, productWorkOrder.getProductOrderId())); if (!ObjectUtils.isNull(productOrder)) { // åééç¥ç»ç®¡çå sysNoticeService.simpleNoticeByUser("è´¨æ£æç¤º", String.format("%sç产订åï¼%så·¥åºåæ ¼ç%.2f%%ä½äºæ å%.2f%%", productOrder.getNpsNo(), productProcess.getName(), productQtyRate, productProcess.getQualifiedRate()), Arrays.asList(Long.valueOf(1L)), qualityInspect.getInspectType() == 2 ? "/qualityManagement/finalInspection" : "/qualityManagement/processInspection"); } } } /*夿ä¸åæ ¼*/ if (qualityInspect.getCheckResult().equals("ä¸åæ ¼")) { QualityUnqualified qualityUnqualified = new QualityUnqualified(); src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -148,6 +148,9 @@ stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId()); } break; case "é离": qualityUnqualified.setQuarantineLifted(false); break; default: break; } src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -147,5 +147,17 @@ @TableField(exist = false) //æ¯å¦å¯ç¼è¾ private Boolean isEdit; /** * 客æ·å°å */ @TableField(exist = false) private String companyAddress; /** * 客æ·èç³»çµè¯ */ @TableField(exist = false) private String contactPhone; } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -49,6 +49,13 @@ private String productCategory; /** * ç©æç¼å· */ @Excel(name = "ç©æç¼å·") @TableField(exist = false) private String materialCode; /** * è§æ ¼åå· */ @Excel(name = "è§æ ¼åå·") src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -8,6 +8,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.basic.mapper.ProductMapper; import com.ruoyi.basic.mapper.ProductModelMapper; import com.ruoyi.basic.pojo.Product; import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -58,6 +62,10 @@ private SalesLedgerProductMapper salesLedgerProductMapper; @Autowired private ApproveProcessServiceImpl approveProcessService; @Autowired private ProductModelMapper productModelMapper; @Autowired private ProductMapper productMapper; @Override public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) { @@ -198,7 +206,10 @@ lockedQty = BigDecimal.ZERO; } if (stockInventoryDto.getQualitity().compareTo(oldStockInventory.getQualitity().subtract(lockedQty)) > 0) { throw new RuntimeException("åºåä¸è¶³æ æ³åºåº"); // æ¥è¯¢äº§åè§æ ¼å ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId()); Product product = productMapper.selectById(productModel.getProductId()); throw new RuntimeException(product.getProductName()+"/"+productModel.getModel() + "åºåä¸è¶³æ æ³åºåº"); } stockInventoryMapper.updateSubtractStockInventory(stockInventoryDto); src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -27,6 +27,7 @@ pm.model, pm.unit, p.product_name AS productName, p.id AS productId, po.nps_no AS productOrderNpsNo, ppri.drag_sort, ppri.product_route_id, @@ -55,7 +56,7 @@ <if test="c.productOrderNpsNo != null and c.productOrderNpsNo != ''"> and po.nps_no like concat('%',#{c.productOrderNpsNo},'%') </if> order by pwo.priority, pp.id order by pwo.priority, ppri.drag_sort </select> <select id="getByProductOrderId" resultType="com.ruoyi.production.dto.ProductWorkOrderDto"> src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -150,4 +150,13 @@ #{id} </foreach> </delete> <select id="checkPreviousProcessReported" resultType="java.lang.Boolean"> SELECT CASE WHEN COUNT(*) > 0 THEN TRUE ELSE FALSE END FROM production_product_main ppm JOIN product_work_order pwo ON ppm.work_order_id = pwo.id JOIN product_process_route_item ppri ON pwo.product_process_route_item_id = ppri.id WHERE ppri.product_route_id = #{productRouteId} AND ppri.drag_sort = #{currentDragSort} - 1 </select> </mapper> src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -4,6 +4,7 @@ <select id="qualityInspectListPage" resultType="com.ruoyi.quality.pojo.QualityInspect"> SELECT qi.*, (qi.quantity - qi.defective_quantity) as qualifiedQuantity, <choose> <when test="qualityInspect.inspectType == 0"> pl.purchase_contract_number as purchase_contract_no @@ -48,7 +49,8 @@ <select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect"> SELECT * *, (quantity - defective_quantity) as qualifiedQuantity FROM quality_inspect where inspect_type=#{qualityInspect.inspectType} src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -99,4 +99,15 @@ where pm.model=#{model} and p.product_name=#{productName} </select> <select id="selectUnqualifiedByProcessNames" resultType="com.ruoyi.quality.pojo.QualityUnqualified"> SELECT DISTINCT qu.* FROM quality_unqualified qu JOIN quality_inspect qi ON qu.inspect_id = qi.id WHERE qi.process IN <foreach collection="processNames" item="processName" open="(" separator="," close=")"> #{processName} </foreach> AND qu.deal_result = 'é离' AND qu.quarantine_lifted = false </select> </mapper> src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -51,6 +51,8 @@ T1.salesman, T1.customer_id, T1.customer_name, T3.company_address, T3.contact_phone, T1.entry_person, T1.remarks, T1.attachment_materials, @@ -69,6 +71,7 @@ END AS is_fh FROM sales_ledger T1 LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id LEFT JOIN customer T3 ON T1.customer_id = T3.id LEFT JOIN ( SELECT sales_ledger_id, COUNT(*) as total_count, src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -7,6 +7,7 @@ <select id="selectSalesLedgerProductList" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct"> SELECT T1.*, T3.material_code, CASE WHEN (IFNULL(t2.qualitity, 0) - IFNULL(t2.locked_quantity, 0)) >= IFNULL(T1.quantity, 0) THEN 1 ELSE 0 @@ -14,6 +15,7 @@ FROM sales_ledger_product T1 LEFT JOIN stock_inventory t2 ON T1.product_model_id = t2.product_model_id LEFT JOIN product_model T3 ON T1.product_model_id = T3.id <where> <if test="salesLedgerProduct.salesLedgerId != null"> AND T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId}