e60102a932c9fbef8b5c3657fcb4983ef75242f2..7f616cfc0eeb35dd08cbd070b81661d351386c95
2026-03-19 maven
yys
7f616c 对比 | 目录
2026-03-19 maven
yys 添加巡检状态
7bb896 对比 | 目录
2026-03-19 maven
yys 劳保自动统计,劳保库存
262b40 对比 | 目录
2026-03-19 maven
yys 维修,保养添加督办人
5ddf7a 对比 | 目录
已修改12个文件
107 ■■■■■ 文件已修改
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/controller/LavorIssueController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/lavorissue/dto/LaborIssueDto.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/domain/SysDictData.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/device/DeviceRepairMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/staff/StaffJoinLeaveRecordMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/staff/StaffOnJobMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysDictDataMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -13,6 +13,12 @@
@Data
public class DeviceRepairDto {
    @ApiModelProperty("督办人")
    private String supervisoryName;
    @ApiModelProperty("审核人")
    private String auditName;
    @ApiModelProperty("设备报修id")
    private Long id;
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -58,6 +58,9 @@
    @ApiModelProperty("审核人")
    private String auditName;
    @ApiModelProperty("督办人")
    private String supervisoryName;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -82,6 +82,9 @@
    @Excel(name = "审核人")
    private String auditName;
    @ApiModelProperty("督办人")
    private String supervisoryName;
    @ApiModelProperty(value = "软删除标志,0=未删除,1=已删除")
    private Integer deleted;
src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
@@ -24,6 +24,8 @@
    private String searchAll;
    private String status;
    private String dateStr;
//    private List<StorageAttachment> attachments;
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -161,7 +161,11 @@
            dto.setCommonFileList(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION.getValue())).collect(Collectors.toList()));
            dto.setCommonFileListAfter(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())).collect(Collectors.toList()));
            dto.setCommonFileListBefore(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue())).collect(Collectors.toList()));
            if(CollectionUtils.isNotEmpty(dto.getCommonFileList()) || CollectionUtils.isNotEmpty(dto.getCommonFileListAfter()) || CollectionUtils.isNotEmpty(dto.getCommonFileListBefore())){
                dto.setStatus("已巡检");
            }else{
                dto.setStatus("未巡检");
            }
            return dto;
        }).collect(Collectors.toList());
src/main/java/com/ruoyi/lavorissue/controller/LavorIssueController.java
@@ -18,7 +18,9 @@
import com.ruoyi.lavorissue.pojo.LaborIssue;
import com.ruoyi.lavorissue.service.LavorIssueService;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysDictData;
import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.project.system.service.ISysDictDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
@@ -33,8 +35,10 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author :yys
@@ -54,6 +58,9 @@
    @Autowired
    private SysDeptMapper sysDeptMapper;
    @Autowired
    private ISysDictDataService iSysDictDataService;
    @GetMapping("/listPage")
    @Log(title = "劳保发放-分页查询", businessType = BusinessType.OTHER)
    @ApiOperation("劳保发放-分页查询")
@@ -70,11 +77,45 @@
        return AjaxResult.success(listPage);
    }
    /**
     * 根据 dictId 分组统计领用数量(num)总和
     * @param laborIssueList 原始数据列表
     * @return key: dictId, value: 该字典下的总领用数量
     */
    public Map<String, Long> statisticsByDictId(List<LaborIssueDto> laborIssueList) {
        // 空值校验,避免空指针异常
        if (laborIssueList == null || laborIssueList.isEmpty()) {
            return new HashMap<>(); // 低版本可用 new HashMap<>()
        }
        // 核心分组统计逻辑
        return laborIssueList.stream()
                // 过滤掉无效数据(dictId为空 或 num为空/小于0的情况)
                .filter(dto -> dto.getDictId() != null && !dto.getDictId().isEmpty())
                .filter(dto -> dto.getNum() != null && dto.getNum() >= 0)
                // 按 dictId 分组,累加 num 数量
                .collect(Collectors.groupingBy(
                        LaborIssueDto::getDictId,  // 分组依据:dictId
                        Collectors.summingLong(LaborIssueDto::getNum)  // 求和:num
                ));
    }
    @PostMapping("/add")
    @Log(title = "劳保发放-添加", businessType = BusinessType.INSERT)
    @ApiOperation("劳保发放-添加")
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult add(@RequestBody LaborIssue laborIssue){
        SysDictData dictData = new SysDictData();
        dictData.setDictType("sys_lavor_issue");
        List<SysDictData> sysDictData = iSysDictDataService.selectDictDataList(dictData);
        Map<String, Long> stringLongMap = statisticsByDictId(laborIssue.getLaborIssueList());
        // 判断库存是否充足
        for (SysDictData sysDictDatum : sysDictData) {
            Long aLong = stringLongMap.get(sysDictDatum.getDictValue());
            if (aLong != null && aLong > sysDictDatum.getNum()) {
                throw new RuntimeException("库存不足");
            }
        }
        for (LaborIssueDto issue : laborIssue.getLaborIssueList()) {
            LaborIssue  laborIssue1 = new LaborIssue();
            BeanUtils.copyProperties(laborIssue, laborIssue1);
@@ -101,6 +142,16 @@
            }
            laborIssueService.save(laborIssue1);
            // 减库存
            List<SysDictData> collect = sysDictData
                    .stream()
                    .filter(item -> item.getDictValue().equals(issue.getDictId()))
                    .collect(Collectors.toList());
            if(!CollectionUtils.isEmpty(collect)){
                SysDictData sysDictData1 = collect.get(0);
                sysDictData1.setNum(sysDictData1.getNum() - issue.getNum());
                iSysDictDataService.updateDictData(sysDictData1);
            }
        }
        return AjaxResult.success();
    }
src/main/java/com/ruoyi/lavorissue/dto/LaborIssueDto.java
@@ -27,4 +27,11 @@
    private Long staffId;
    /**
     * 防具名称-字典
     */
    @ApiModelProperty("防具名称-字典")
    private String dictId;
}
src/main/java/com/ruoyi/project/system/domain/SysDictData.java
@@ -9,6 +9,8 @@
import com.ruoyi.framework.aspectj.lang.annotation.Excel.ColumnType;
import com.ruoyi.framework.web.domain.BaseEntity;
import java.math.BigDecimal;
/**
 * 字典数据表 sys_dict_data
 * 
@@ -17,6 +19,14 @@
public class SysDictData extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    public Long getNum() {
        return num;
    }
    public void setNum(Long num) {
        this.num = num;
    }
    /** 字典编码 */
    @Excel(name = "字典编码", cellType = ColumnType.NUMERIC)
@@ -41,6 +51,9 @@
    /** 样式属性(其他样式扩展) */
    private String cssClass;
    /** 劳保用品数量 */
    private Long num;
    /** 表格字典样式 */
    private String listClass;
src/main/resources/mapper/device/DeviceRepairMapper.xml
@@ -22,7 +22,9 @@
               dr.repair_price,
               dr.tenant_id,
               dl.device_name,
               dl.device_model
               dl.device_model,
               dr.audit_name,
               dr.supervisory_name
        from device_repair dr
        left join device_ledger dl on dr.device_ledger_id = dl.id
        <where>
src/main/resources/mapper/staff/StaffJoinLeaveRecordMapper.xml
@@ -12,6 +12,9 @@
        <if test="staffJoinLeaveRecord.staffName != null and staffJoinLeaveRecord.staffName != '' ">
            AND t1.staff_name LIKE CONCAT('%',#{staffJoinLeaveRecord.staffName},'%')
        </if>
        <if test="staffOnJob.deptPositionId != null">
            AND t1.dept_position_id = #{staffOnJob.deptPositionId}
        </if>
        <if test="staffJoinLeaveRecord.entryDateStart != null and staffJoinLeaveRecord.entryDateStart != '' ">
            and t1.contract_start_time like concat('%',#{staffJoinLeaveRecord.entryDateStart},'%')
        </if>
src/main/resources/mapper/staff/StaffOnJobMapper.xml
@@ -14,6 +14,7 @@
        <if test="staffOnJob.staffName != null and staffOnJob.staffName != '' ">
            AND t1.staff_name LIKE CONCAT('%',#{staffOnJob.staffName},'%')
        </if>
        <if test="staffOnJob.entryDateStart != null and staffOnJob.entryDateStart != '' ">
            AND t1.contract_expire_time &gt;= DATE_FORMAT(#{staffOnJob.entryDateStart},'%Y-%m-%d')
        </if>
src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -12,6 +12,7 @@
        <result property="dictType"   column="dict_type"   />
        <result property="cssClass"   column="css_class"   />
        <result property="listClass"  column="list_class"  />
        <result property="num"  column="num"  />
        <result property="isDefault"  column="is_default"  />
        <result property="status"     column="status"      />
        <result property="createBy"   column="create_by"   />
@@ -21,7 +22,7 @@
    </resultMap>
    
    <sql id="selectDictDataVo">
        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
        select dict_code, dict_sort, dict_label,num, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
        from sys_dict_data
    </sql>
@@ -81,6 +82,7 @@
             <if test="cssClass != null">css_class = #{cssClass},</if>
             <if test="listClass != null">list_class = #{listClass},</if>
             <if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if>
             <if test="num != null">num = #{num},</if>
             <if test="status != null">status = #{status},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
@@ -102,6 +104,7 @@
             <if test="cssClass != null and cssClass != ''">css_class,</if>
             <if test="listClass != null and listClass != ''">list_class,</if>
             <if test="isDefault != null and isDefault != ''">is_default,</if>
            <if test="num != null">num,</if>
             <if test="status != null">status,</if>
             <if test="remark != null and remark != ''">remark,</if>
             <if test="createBy != null and createBy != ''">create_by,</if>
@@ -114,7 +117,8 @@
             <if test="cssClass != null and cssClass != ''">#{cssClass},</if>
             <if test="listClass != null and listClass != ''">#{listClass},</if>
             <if test="isDefault != null and isDefault != ''">#{isDefault},</if>
             <if test="status != null">#{status},</if>
            <if test="num != null">#{num},</if>
            <if test="status != null">#{status},</if>
             <if test="remark != null and remark != ''">#{remark},</if>
             <if test="createBy != null and createBy != ''">#{createBy},</if>
             sysdate()