7 天以前 b48847af5e49091aa47ae10d8201d4f6019eac37
fix(home): 修复投入产出分析功能中的日期处理问题

- 将控制器参数注解从 @DefaultType 改为 @RequestParam(defaultValue = "4")
- 在服务实现中为类型4添加年维度查询逻辑,默认查询今年数据
- 重新启用生产产品投入统计数据查询功能
- 统一输入输出统计中的日期字段名称为 statDate
- 添加 convertDateToString 方法处理不同类型的日期对象转换
- 在 Mapper XML 中新增 selectInputStats 查询方法
已修改3个文件
47 ■■■■ 文件已修改
src/main/java/com/ruoyi/home/controller/HomeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionProductInputMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -155,7 +155,7 @@
    /********************************************************生产类*****************************************************/
    @GetMapping("/inputOutputAnalysis")
    @Operation(summary = "投入产出分析")
    public R inputOutputAnalysis(@DefaultType Integer type){
    public R inputOutputAnalysis(@RequestParam(defaultValue = "4") Integer type){
      List<InputOutputAnalysisDto> list = homeService.inputOutputAnalysis(type);
        return R.ok(list);
    }
src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -1332,8 +1332,11 @@
                int startMonth = ((currentMonth - 1) / 3) * 3 + 1;
                startDate = LocalDate.of(today.getYear(), startMonth, 1);
                break;
            default:
                startDate = today.with(DayOfWeek.MONDAY);
            case 4: // 年
                startDate = LocalDate.of(today.getYear(), 1, 1);
                break;
            default: // 默认查询今年数据
                startDate = LocalDate.of(today.getYear(), 1, 1);
                break;
        }
@@ -1345,15 +1348,16 @@
        String endStr = endDate.atStartOfDay()
                .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//        List<Map<String, Object>> inputList = productionProductInputMapper.selectInputStats(startStr, endStr);
        List<Map<String, Object>> inputList = null;
        List<Map<String, Object>> inputList = productionProductInputMapper.selectInputStats(startStr, endStr);
//        List<Map<String, Object>> inputList = null;
        List<Map<String, Object>> outputList = productionProductOutputMapper.selectDailyOutputStats(startStr, endStr);
        Map<String, InputOutputAnalysisDto> dateMap = new HashMap<>();
        if (!CollectionUtils.isEmpty(inputList)) {
            for (Map<String, Object> map : inputList) {
                String date = (String) map.get("date");
                Object dateObj = map.get("statDate");
                String date = convertDateToString(dateObj);
                if (date == null)
                    continue;
                InputOutputAnalysisDto dto = dateMap.getOrDefault(date, new InputOutputAnalysisDto());
@@ -1366,7 +1370,8 @@
        if (!CollectionUtils.isEmpty(outputList)) {
            for (Map<String, Object> map : outputList) {
                String date = (String) map.get("date");
                Object dateObj = map.get("statDate");
                String date = convertDateToString(dateObj);
                if (date == null)
                    continue;
                InputOutputAnalysisDto dto = dateMap.getOrDefault(date, new InputOutputAnalysisDto());
@@ -2433,4 +2438,22 @@
    private BigDecimal defaultDecimal(BigDecimal value) {
        return value == null ? BigDecimal.ZERO : value;
    }
    private String convertDateToString(Object dateObj) {
        if (dateObj == null) {
            return null;
        }
        if (dateObj instanceof String) {
            return (String) dateObj;
        }
        if (dateObj instanceof java.sql.Date) {
            return ((java.sql.Date) dateObj).toLocalDate().toString();
        }
        if (dateObj instanceof java.util.Date) {
            return ((java.util.Date) dateObj).toInstant()
                    .atZone(ZoneId.systemDefault())
                    .toLocalDate().toString();
        }
        return dateObj.toString();
    }
}
src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -43,4 +43,14 @@
        order by ppi.create_time desc
    </select>
    <select id="selectInputStats" resultType="java.util.Map">
        select date(create_time) as statDate,
               sum(ifnull(input_quantity, 0)) as quantity
        from production_product_input
        where create_time &gt;= #{startDate}
          and create_time &lt;= #{endDate}
        group by date(create_time)
        order by statDate asc
    </select>
</mapper>