昨天 d096516873552404eac98ee7c1d37490af9e8340
feat(home): 添加工序颜色支持功能

- 在数据库配置中更新开发环境数据库名称为product-inventory-management-dyzn
- 在HomeServiceImpl中添加工序颜色数据处理逻辑并设置到生产周转DTO
- 为MapDto、ProcessRouteStatusVo、ProductionOperationTaskVo等VO类添加颜色字段
- 在ProductionOperationTaskMapper.xml中关联technology_operation表获取工序颜色
- 为ProductionOrderProcessTaskVo和ProductionTaskStatisticsDto添加工序颜色字段
- 在ProductionOrderServiceImpl中将工序颜色设置到状态对象
- 为ProductionTurnoverDto添加工序颜色详情列表
- 在TechnologyOperation实体类中添加颜色字段并映射到数据库
- 配置本地权限设置文件以支持相关操作权限
已添加1个文件
已修改12个文件
79 ■■■■■ 文件已修改
.claude/settings.local.json 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/dto/MapDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/dto/ProductionTaskStatisticsDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/dto/ProductionTurnoverDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/bean/vo/ProcessRouteStatusVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/bean/vo/ProductionOrderProcessTaskVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionOperationTaskMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/technology/TechnologyOperationMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.claude/settings.local.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
{
  "permissions": {
    "allow": [
      "mcp__mcp_server_mysql__mysql_query",
      "Bash(mvn -q compile -DskipTests -o)",
      "Bash(mvn -q compile -DskipTests)",
      "Bash(mvn compile *)",
      "Bash(xargs grep -n \"\\(\\\\\"\")",
      "mcp__playwright__browser_take_screenshot",
      "mcp__playwright__browser_evaluate",
      "mcp__playwright__browser_find",
      "mcp__playwright__browser_click",
      "mcp__playwright__browser_navigate",
      "mcp__playwright__browser_network_requests",
      "mcp__playwright__browser_network_request",
      "mcp__playwright__browser_snapshot",
      "Read(//d/牛马/南通/**)",
      "Read(//d/牛马/**)",
      "Bash(echo \"exit=$?\")",
      "Bash(node -e \"const p=require\\('./package.json'\\);console.log\\(JSON.stringify\\(p.scripts\\)\\)\")",
      "Bash(npx vite *)",
      "Bash(echo \"EXIT=$?\")",
      "Read(//tmp/**)"
    ]
  },
  "enabledMcpjsonServers": [
    "mysql"
  ]
}
src/main/java/com/ruoyi/dto/MapDto.java
@@ -22,4 +22,7 @@
    @Schema(description = "占比")
    private String rate;
    @Schema(description = "颜色")
    private String color;
}
src/main/java/com/ruoyi/home/dto/ProductionTaskStatisticsDto.java
@@ -47,4 +47,7 @@
    @Schema(description = "生产订单号")
    private String productOrderNpsNo;
    @Schema(description = "工序颜色")
    private String processColor;
}
src/main/java/com/ruoyi/home/dto/ProductionTurnoverDto.java
@@ -21,4 +21,7 @@
    @Schema(description = "工序对应的数量详情")
    private List<Long> processQuantityDetails;
    @Schema(description = "工序对应的颜色详情,顺序与processDetails一致")
    private List<String> processColors;
}
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -555,15 +555,22 @@
                .collect(Collectors.groupingBy(ProductionTaskStatisticsDto::getProcessName));
        List<String> strings = new ArrayList<>();
        List<Long> processQuantityDetails = new ArrayList<>();
        List<String> processColors = new ArrayList<>();
        map.entrySet().stream().forEach(entry -> {
            String key = entry.getKey();
            long completeSum = entry.getValue().stream().map(ProductionTaskStatisticsDto::getCompleteQuantity)
                    .mapToLong(BigDecimal::longValue).sum();
            strings.add(key);
            processQuantityDetails.add(completeSum);
            processColors.add(entry.getValue().stream()
                    .map(ProductionTaskStatisticsDto::getProcessColor)
                    .filter(Objects::nonNull)
                    .findFirst()
                    .orElse(null));
        });
        productionTurnoverDto.setProcessDetails(strings);
        productionTurnoverDto.setProcessQuantityDetails(processQuantityDetails);
        productionTurnoverDto.setProcessColors(processColors);
        return productionTurnoverDto;
    }
@@ -1445,11 +1452,19 @@
            return new ArrayList<>();
        }
        Map<String, String> processColorMap = new HashMap<>();
        list.forEach(item -> {
            if (item.getProcessName() != null && item.getProcessColor() != null) {
                processColorMap.putIfAbsent(item.getProcessName(), item.getProcessColor());
            }
        });
        List<MapDto> result = new ArrayList<>();
        processOutputMap.forEach((name, value) -> {
            MapDto dto = new MapDto();
            dto.setName(name);
            dto.setValue(value.stripTrailingZeros().toPlainString());
            dto.setColor(processColorMap.get(name));
            BigDecimal rate = value
                    .divide(total, 4, RoundingMode.HALF_UP)
src/main/java/com/ruoyi/production/bean/vo/ProcessRouteStatusVo.java
@@ -14,4 +14,7 @@
    @Schema(description = "完成进度百分比")
    private BigDecimal percentage;
    @Schema(description = "工序颜色")
    private String color;
}
src/main/java/com/ruoyi/production/bean/vo/ProductionOperationTaskVo.java
@@ -52,4 +52,7 @@
    @Schema(description = "是否已领料")
    private Boolean picked;
    @Schema(description = "工序颜色")
    private String operationColor;
}
src/main/java/com/ruoyi/production/bean/vo/ProductionOrderProcessTaskVo.java
@@ -17,4 +17,7 @@
    @Schema(description = "完成进度")
    private BigDecimal completionStatus;
    @Schema(description = "工序颜色")
    private String operationColor;
}
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -809,6 +809,7 @@
                    percentage = new BigDecimal("100");
                }
                status.setPercentage(percentage);
                status.setColor(task.getOperationColor());
                statusMap.computeIfAbsent(task.getProductionOrderId(), key -> new ArrayList<>()).add(status);
            }
        }
src/main/java/com/ruoyi/technology/pojo/TechnologyOperation.java
@@ -52,6 +52,9 @@
    @Schema(description = "类型 åŒºåˆ†è®¡æ—¶å’Œè®¡ä»¶ï¼Œ0计时,1计件")
    private Integer type;
    @Schema(description = "工序颜色")
    private String color;
    @Schema(description = "设备id")
    private String deviceLedgerId;
src/main/resources/application-dev.yml
@@ -73,7 +73,7 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://localhost:3306/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://localhost:3306/product-inventory-management-dyzn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
      # ä»Žåº“数据源
src/main/resources/mapper/production/ProductionOperationTaskMapper.xml
@@ -30,6 +30,7 @@
               pm.unit as unit,
               poro.operation_name as operationName,
               poro.type as type,
               topo.color as operationColor,
               IFNULL(scrapStat.scrapQty, 0) AS scrapQty,
               CASE WHEN pickStat.pickCount > 0 THEN 1 ELSE 0 END AS picked,
        ROUND(IFNULL(pot.complete_quantity, 0) / NULLIF(pot.plan_quantity, 0) * 100, 2) AS completionStatus,
@@ -42,6 +43,7 @@
                 left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                 left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
                 left join product p on pm.product_id = p.id
                 left join technology_operation topo on poro.technology_operation_id = topo.id
                 left join (
            select count(1) as pickCount, pop.production_order_id, pop.technology_operation_id
            from production_order_pick pop
@@ -94,10 +96,12 @@
               p.product_name as productName,
               pm.model,
               pm.unit,
               po.nps_no as productOrderNpsNo
               po.nps_no as productOrderNpsNo,
               topo.color as processColor
        from production_operation_task pot
                 left join production_order po on pot.production_order_id = po.id
                 left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                 left join technology_operation topo on poro.technology_operation_id = topo.id
                 left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
                 left join product p on pm.product_id = p.id
        where date(pot.create_time) between #{startDate} and #{endDate}
@@ -170,6 +174,7 @@
    <select id="getOperation" resultType="com.ruoyi.production.bean.vo.ProductionOperationTaskVo">
        select poro.operation_name as operationName,
               max(poro.type) as type,
               max(topo.color) as operationColor,
               count(pot.id) as productionTaskCount,
               sum(ifnull(pot.plan_quantity, 0)) as planQuantity,
               sum(ifnull(pot.complete_quantity, 0)) as completeQuantity,
@@ -185,6 +190,7 @@
               ) as completionStatus
        from production_operation_task pot
                 left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
                 left join technology_operation topo on poro.technology_operation_id = topo.id
                 left join (
            select ppm.production_operation_task_id as taskId,
                   sum(ifnull(ppo.scrap_qty, 0)) as scrapQty
@@ -225,10 +231,12 @@
    <select id="listProcessStatusByOrderIds" resultType="com.ruoyi.production.bean.vo.ProductionOrderProcessTaskVo">
        select pot.production_order_id as productionOrderId,
               poro.operation_name as operationName,
               topo.color as operationColor,
               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
                 left join technology_operation topo on poro.technology_operation_id = topo.id
        where pot.production_order_id in
        <foreach collection="orderIds" item="orderId" open="(" separator="," close=")">
            #{orderId}
src/main/resources/mapper/technology/TechnologyOperationMapper.xml
@@ -13,6 +13,7 @@
        <result column="salary_quota" property="salaryQuota" />
        <result column="is_quality" property="isQuality" />
        <result column="type" property="type" />
        <result column="color" property="color" />
        <result column="device_ledger_id" property="deviceLedgerId" />
        <result column="create_user" property="createUser" />
        <result column="dept_id" property="deptId" />