buhuazhen
2026-04-22 cc8308e2ba418db7545bbaf5dedcb2e3541351d8
feat(production): 添加班组信息和补产数量支持

- 在ProductionProductMain中添加班组成员名字和ID字段
- 在ProductionProductMainDto中添加班组列表和补产数量字段
- 更新ProductionProductMainServiceImpl以支持从班组列表设置用户和班组信息
- 在ProductionProductOutput中添加补偿数量字段,并在插入时赋值
- 新增ProductWorkOrder相关实现,支持工单分页、更新和导出流转卡功能
- 生成工单号逻辑改进,支持按日期和流程名称生成唯一工单号
已修改5个文件
54 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -6,12 +6,15 @@
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.production.pojo.ProductionProductMain;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Data
@ExcelIgnoreUnannotated
@@ -69,4 +72,18 @@
    private String deviceName;
    private String workMinutes;
    private List<Team> teamList;
    /**
     * 补产数量
     */
    private BigDecimal replenishQty;
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Team {
        private Long userId;
        private String userName;
    }
}
src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -105,4 +105,16 @@
    @TableField(fill = FieldFill.INSERT)
    private Long deptId;
    /**
     * 班组成员名字
     */
    @TableField(value = "team_names")
    private String teamNames;
    /**
     * 班组成员id
     */
    @TableField(value = "team_ids")
    private String teamIds;
}
src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -40,4 +40,11 @@
    @TableField(fill = FieldFill.INSERT)
    private Long deptId;
    /**
     * 补偿数量
     */
    @TableField(value = "replenish_qty")
    private BigDecimal replenishQty;
}
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -140,7 +140,7 @@
            }
        }
            String processPinyin = StringUtils.getProcessNo(processName);
            return StrUtil.format("{}{}{}",processPinyin,npsNo,String.format("%03d", sequenceNumber));
            return StrUtil.format("{}{}",processPinyin,npsNo,String.format("%03d", sequenceNumber));
    }
}
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.production.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -141,8 +142,18 @@
        }
        String productNo = String.format("%s%03d", datePrefix, sequenceNumber);
        productionProductMain.setProductNo(productNo);
        productionProductMain.setUserId(dto.getUserId());
        productionProductMain.setUserName(dto.getUserName());
        // 修改班组信息 以第一人作为原先setUserId setUserName
        Assert.isTrue(CollUtil.isNotEmpty(dto.getTeamList()),"班组信息不能为空");
        productionProductMain.setTeamIds(dto.getTeamList().stream().map(ProductionProductMainDto.Team::getUserId).map(String::valueOf).collect(Collectors.joining(",")));
        productionProductMain.setTeamNames(dto.getTeamList().stream().map(ProductionProductMainDto.Team::getUserName).collect(Collectors.joining(",")));
        productionProductMain.setUserId(dto.getTeamList().get(0).getUserId());
        productionProductMain.setUserName(dto.getTeamList().get(0).getUserName());
        productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
        productionProductMain.setWorkOrderId(dto.getWorkOrderId());
        productionProductMain.setAuditUserId(dto.getAuditUserId());
@@ -178,6 +189,7 @@
        productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
        productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
        productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO);
        productionProductOutput.setReplenishQty(dto.getReplenishQty());
        productionProductOutputMapper.insert(productionProductOutput);
        //合格数量=报工数量-报废数量
        BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty());