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/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( // ä¸ä¸ä¸ªå·¥åºæ¯å¦å·²æ¥å·¥ boolean isPreviousReported = productionProductMainMapper.checkPreviousProcessReported( record.getProductRouteId(), currentDragSort ); record.setIsCanReport(isPreviousReported); // ä¹åçå·¥åºæ¯å¦è¢«é离 if (record.getIsCanReport()) { // æ¥è¯¢ææä¹åçå·¥åºï¼æåºå·å°äºå½åå·¥åºï¼ List<ProductProcessRouteItem> previousItems = productProcessRouteItemMapper.selectList( Wrappers.<ProductProcessRouteItem>lambdaQuery() .eq(ProductProcessRouteItem::getProductRouteId, record.getProductRouteId()) .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1) .lt(ProductProcessRouteItem::getDragSort, currentDragSort) ); if (previousItem != null) { //æ£æ¥ä¸ä¸ä¸ªå·¥åºæ¯å¦ææ¥å·¥è®°å½ Long count = productionProductMainMapper.selectCount( Wrappers.<ProductionProductMain>lambdaQuery() .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId()) ); 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); } } } } 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("ä¹åçå·¥åºå·²è¢«é离ï¼ä¸è½è¿è¡å½åå·¥åºæ¥å·¥"); } } } 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/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/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, 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/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>