maven
昨天 262b4063acf621895f92627b397627fa7faa067f
yys
劳保自动统计,劳保库存
已修改4个文件
79 ■■■■■ 文件已修改
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/system/SysDictDataMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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/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()