diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceListVo.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceListVo.java index 8ed4a21b..32fd8a56 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceListVo.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/domain/vo/RepairDeviceListVo.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -60,6 +61,12 @@ public class RepairDeviceListVo extends BaseVO { @ApiModelProperty(value = "维修报废数量") private int scrapNum; + @ApiModelProperty(value = "维修费用记录条数") + private Integer totalCostRecords; + + @ApiModelProperty(value = "维修费用合计") + private BigDecimal totalCost; + @ApiModelProperty(value = "内层物资类型集合") private List repairDeviceList = new ArrayList<>(); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/RepairService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/RepairService.java index 8523b503..cdac1727 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/RepairService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/RepairService.java @@ -9,6 +9,9 @@ import com.bonus.material.repair.domain.vo.RepairDeviceListVo; import com.bonus.material.repair.domain.vo.RepairDeviceVO; import com.bonus.system.api.domain.SysUser; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -36,19 +39,19 @@ public interface RepairService { /** * 查询维修单 */ - AjaxResult getRepairTicketInfo(String taskId); + AjaxResult getRepairTicketInfo(@NotBlank(message = "TaskId参数不能为空") String taskId); /** * 提交维修记录 */ - AjaxResult submitRepairApply(RepairApplyRecord bean); + AjaxResult submitRepairApply(@NotNull(message = "参数不能为空") RepairApplyRecord bean); /** * 快捷维修记录 */ AjaxResult fastRepairApply(List list); - AjaxResult batchRepairApply(List repairDeviceVOList); + AjaxResult batchRepairApply(@NotNull List repairDeviceVOList); /** * 维修明细--批量审核--更新明细status @@ -64,9 +67,9 @@ public interface RepairService { * 提交审核 * @param taskList 任务信息集合 */ - AjaxResult endRepairTask(List taskList); + AjaxResult endRepairTask(@NotNull List taskList); - AjaxResult rejectRepair(List taskList); + AjaxResult rejectRepair(@NotNull List taskList); /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java index ef29965c..8a6693a8 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/repair/service/impl/RepairServiceImpl.java @@ -71,13 +71,16 @@ public class RepairServiceImpl implements RepairService { @Override public List getRepairMaTypeList(RepairTaskDetails bean, boolean isGroup) { + if (Objects.isNull(bean)) { + return new ArrayList<>(); + } bean.setCompanyId(null); List repairMaTypeList = repairMapper.getRepairMaTypeList(bean); if (repairMaTypeList.isEmpty() || !isGroup) { return repairMaTypeList; } - + repairMaTypeList.removeIf(Objects::isNull); // 创建Map集合,用于快速分组,使用 ConcurrentHashMap 保证线程安全 Map resultMap = new ConcurrentHashMap<>(); @@ -92,16 +95,18 @@ public class RepairServiceImpl implements RepairService { System.err.println("复制属性时发生错误: {}" + e.getMessage()); throw new RuntimeException("复制属性时发生错误", e); } - if (item.getTypeNameId() == null) { // 处理 typeNameId 为空的情况 System.err.println("typeNameId 为空,跳过当前项: " + item); return; } - - // 使用 computeIfAbsent 方法,如果 key 不存在,则创建一个新对象,并添加到 resultMap 中 - resultMap.computeIfAbsent(item.getTypeNameId(), k -> item).getRepairDeviceList().add(repairDeviceVO); + resultMap.computeIfAbsent(item.getTypeNameId(), origin -> item).getRepairDeviceList().add(repairDeviceVO); + resultMap.computeIfPresent(item.getTypeNameId(), (origin, novel) -> { + novel.setTotalCost(novel.getTotalCost().add(Optional.ofNullable(item.getTotalCost()).orElse(BigDecimal.ZERO))); + return novel; + }); }); + return new ArrayList<>(resultMap.values()); } @@ -123,6 +128,7 @@ public class RepairServiceImpl implements RepairService { } // 查询维修任务详情 List repairMaTypeGroupList = getRepairMaTypeList(new RepairTaskDetails(taskId), true); + List repairPartList = repairAuditDetailsMapper.getPartDetailsByTaskId(new RepairAuditDetails().setTaskId(thisTaskId)); repairPartList = mergePartsNum(repairPartList); @@ -143,14 +149,13 @@ public class RepairServiceImpl implements RepairService { public static List mergePartsNum(@NotNull List devices) { try { - Map map = devices.stream().filter(Objects::nonNull).collect(Collectors.toConcurrentMap( - device -> device.getTypeId() + ":" + device.getPartCost() + ":" + device.getPartName(), + Map map = devices.stream().filter(Objects::nonNull).collect( + Collectors.toConcurrentMap(device -> device.getTypeId() + ":" + device.getPartCost() + ":" + device.getPartName(), device -> device, (existing, recently) -> { existing.setPartNum(existing.getPartNum() + recently.getPartNum()); return existing; - }, - ConcurrentHashMap::new - )); + }, ConcurrentHashMap::new) + ); return new ArrayList<>(map.values()); } catch (Exception e) { throw new ServiceException("Error merging parts" + e.getMessage()); @@ -286,6 +291,9 @@ public class RepairServiceImpl implements RepairService { * 校验维修数量 */ private static int verifyRepairNum(RepairApplyRecord bean, RepairTaskDetails details) { + if (bean == null || bean.getRepairNum() == null) { + throw new ServiceException("维修数量不能为空"); + } int repairNum = OptionalInt.of(details.getRepairedNum()).orElse(0) + bean.getRepairNum(); if (repairNum + OptionalInt.of(details.getScrapNum()).orElse(0) > details.getRepairNum()) { throw new ServiceException("维修数量大于维修总量"); diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml index c8658e40..f75b269c 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/repair/RepairMapper.xml @@ -245,12 +245,16 @@ rad.status as status, su.nick_name as repairer, rad.update_time as updateTime, - rad.type_id as typeId + rad.type_id as typeId, + rad.create_time, + count(rc.id) AS totalCostRecords, + sum(rc.costs) AS totalCost from repair_apply_details rad left join ma_type mt on rad.type_id = mt.type_id left join ma_machine mm on mm.ma_id = rad.ma_id left join sys_user su on rad.repairer = su.user_id left join ma_type mt2 on mt.parent_id = mt2.type_id + left join repair_cost rc ON rad.id = rc.repair_id where rad.task_id = #{taskId} and rad.company_id = #{companyId} @@ -267,6 +271,7 @@ AND mt2.type_id = #{typeName} + GROUP BY rad.id order by rad.create_time desc