| src/main/java/com/ruoyi/lavorissue/controller/LavorIssueController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/lavorissue/dto/LaborIssueDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/project/system/domain/SysDictData.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/system/SysDictDataMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | 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()