| src/main/java/com/ruoyi/production/bean/vo/ProcessRouteStatusVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/bean/vo/ProductionOrderProcessTaskVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/mapper/ProductionOperationTaskMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/basic/SupplierManageMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/production/ProductionOperationTaskMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/production/bean/vo/ProcessRouteStatusVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package com.ruoyi.production.bean.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; @Data @Schema(name = "ProcessRouteStatusVo", description = "å·¥åºç产è¿åº¦é¡¹") public class ProcessRouteStatusVo { @Schema(description = "å·¥åºåç§°") private String name; @Schema(description = "宿è¿åº¦ç¾åæ¯") private BigDecimal percentage; } src/main/java/com/ruoyi/production/bean/vo/ProductionOrderProcessTaskVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.production.bean.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; @Data @Schema(name = "ProductionOrderProcessTaskVo", description = "ç产订åå·¥åºä»»å¡è¿åº¦") public class ProductionOrderProcessTaskVo { @Schema(description = "ç产订åID") private Long productionOrderId; @Schema(description = "å·¥åºåç§°") private String operationName; @Schema(description = "宿è¿åº¦") private BigDecimal completionStatus; } src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
@@ -44,4 +44,7 @@ @Schema(description = "æ¯å¦å·²éæ") private Boolean returned; @Schema(description = "å·¥åºç产è¿åº¦") private List<ProcessRouteStatusVo> processRouteStatus; } src/main/java/com/ruoyi/production/mapper/ProductionOperationTaskMapper.java
@@ -7,6 +7,7 @@ import com.ruoyi.home.dto.processDataProductionStatisticsDto; import com.ruoyi.production.bean.dto.ProductionOperationTaskDto; import com.ruoyi.production.bean.vo.ProductionOperationTaskVo; import com.ruoyi.production.bean.vo.ProductionOrderProcessTaskVo; import com.ruoyi.production.pojo.ProductionOperationTask; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -43,4 +44,6 @@ ProductionOperationTaskDto getProductWorkOrderFlowCard(@Param("id") Long id); List<ProductionOperationTaskVo> getOperation(@Param("c") ProductionOperationTaskDto dto); List<ProductionOrderProcessTaskVo> listProcessStatusByOrderIds(@Param("orderIds") List<Long> orderIds); } src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -22,6 +22,8 @@ import com.ruoyi.production.bean.vo.ProductionOrderVo; import com.ruoyi.production.bean.vo.ProductionPlanVo; import com.ruoyi.production.bean.vo.ProductionOrderWorkOrderDetailVo; import com.ruoyi.production.bean.vo.ProcessRouteStatusVo; import com.ruoyi.production.bean.vo.ProductionOrderProcessTaskVo; import com.ruoyi.production.enums.ProductOrderStatusEnum; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; @@ -86,6 +88,7 @@ // å页æ¥è¯¢ç产订å Page<ProductionOrderVo> result = (Page<ProductionOrderVo>) baseMapper.pageProductionOrder(page, dto); fillProductImages(result.getRecords()); fillProcessRouteStatus(result.getRecords()); return result; } @@ -94,6 +97,7 @@ // æ¥è¯¢ç产订åå表 List<ProductionOrderVo> records = baseMapper.listProductionOrder(dto); fillProductImages(records); fillProcessRouteStatus(records); return records; } @@ -812,6 +816,46 @@ } } private void fillProcessRouteStatus(List<ProductionOrderVo> records) { if (records == null || records.isEmpty()) { return; } List<Long> orderIds = records.stream() .map(ProductionOrderVo::getId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); if (orderIds.isEmpty()) { return; } List<ProductionOrderProcessTaskVo> tasks = productionOperationTaskMapper.listProcessStatusByOrderIds(orderIds); Map<Long, List<ProcessRouteStatusVo>> statusMap = new LinkedHashMap<>(); if (tasks != null) { for (ProductionOrderProcessTaskVo task : tasks) { if (task == null || task.getProductionOrderId() == null) { continue; } ProcessRouteStatusVo status = new ProcessRouteStatusVo(); status.setName(task.getOperationName() != null && !task.getOperationName().isBlank() ? task.getOperationName() : "æªç¥å·¥åº"); BigDecimal percentage = task.getCompletionStatus() == null ? BigDecimal.ZERO : task.getCompletionStatus(); if (percentage.compareTo(new BigDecimal("100")) > 0) { percentage = new BigDecimal("100"); } status.setPercentage(percentage); statusMap.computeIfAbsent(task.getProductionOrderId(), key -> new ArrayList<>()).add(status); } } for (ProductionOrderVo record : records) { record.setProcessRouteStatus(statusMap.getOrDefault(record.getId(), Collections.emptyList())); } } private StorageBlobVO toStorageBlobVO(StorageBlob blob) { // å°åå¨æä»¶å¯¹è±¡è½¬æ¢ä¸ºVO StorageBlobVO vo = BeanUtil.copyProperties(blob, StorageBlobVO.class); src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -178,6 +178,29 @@ ON slp_agg.sales_ledger_id = pl2.id AND slp_agg.product_model_id = sir.product_model_id WHERE sir.approval_status = 1 AND sir.record_type = 10 UNION ALL SELECT sir.stock_in_num * slp_agg.tax_inclusive_unit_price AS inbound_amount, slp_agg.sales_ledger_id FROM stock_in_record sir INNER JOIN quality_unqualified qu ON qu.id = sir.record_id INNER JOIN quality_inspect qi ON qi.id = qu.inspect_id INNER JOIN purchase_ledger pl2 ON pl2.id = qi.purchase_ledger_id INNER JOIN ( SELECT sales_ledger_id, product_model_id, MIN(tax_inclusive_unit_price) AS tax_inclusive_unit_price FROM sales_ledger_product WHERE type = 2 GROUP BY sales_ledger_id, product_model_id ) slp_agg ON slp_agg.sales_ledger_id = pl2.id AND slp_agg.product_model_id = sir.product_model_id WHERE sir.approval_status = 1 AND sir.record_type = 11 ) t GROUP BY t.sales_ledger_id ) T2 ON T2.sales_ledger_id = pl.id src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
@@ -215,4 +215,18 @@ order by min(poro.drag_sort), poro.operation_name </select> <select id="listProcessStatusByOrderIds" resultType="com.ruoyi.production.bean.vo.ProductionOrderProcessTaskVo"> select pot.production_order_id as productionOrderId, poro.operation_name as operationName, ROUND(IFNULL(pot.complete_quantity, 0) / NULLIF(pot.plan_quantity, 0) * 100, 2) AS completionStatus from production_operation_task pot left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id where pot.production_order_id in <foreach collection="orderIds" item="orderId" open="(" separator="," close=")"> #{orderId} </foreach> order by pot.production_order_id, poro.drag_sort asc, pot.id asc </select> </mapper> src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -88,6 +88,23 @@ AND slp.sales_ledger_id = qi.purchase_ledger_id AND slp.product_model_id = qi.product_model_id WHERE sir.approval_status = 1 UNION ALL SELECT slp.id AS sales_ledger_product_id, sir.stock_in_num FROM stock_in_record sir INNER JOIN quality_unqualified qu ON TRIM(sir.record_type) = '11' AND sir.record_id = qu.id INNER JOIN quality_inspect qi ON qi.id = qu.inspect_id INNER JOIN sales_ledger_product slp ON slp.type = 2 AND slp.sales_ledger_id = qi.purchase_ledger_id AND slp.product_model_id = qi.product_model_id WHERE sir.approval_status = 1 ) rel GROUP BY rel.sales_ledger_product_id ) approved_qty ON approved_qty.sales_ledger_product_id = slp.id