diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 688f90bf..f0ab060b 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -775,46 +775,51 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl status = new ArrayList<>(); -// status.add("01"); // 待审核 -// status.add("05"); // 已驳回 -// // 查工单所有已通过的配件申请单 -// List list = ticketWaresService.list(new LambdaQueryWrapper().and(item -> { -// item.eq(DlTicketWares::getTicketId, respVO.getId()) -// .notIn(DlTicketWares::getStatus, status); -// })); -// // 查配件申请表的所有已领取数量小于申请数量的子表信息 -// List ids = list.stream().map(DlTicketWares::getId).collect(Collectors.toList()); -// List twItems = twItemService.list(new LambdaQueryWrapper().and(item -> { -// item.in(DlTwItem::getTwId, ids) -// .apply("wares_already_count < wares_count"); -// })); -// if (CollectionUtil.isNotEmpty(twItems)) { -// // 更新工单子表(主要是把已领料的字段同步给工单配件的数量字段) -// // 查询工单子表(三个查询条件,属于那个工单,属于配件类型,属于需要改变的(即申请表的已领取数量小于申请数量的)) -// List waresId = twItems.stream().map(DlTwItem::getWaresId).collect(Collectors.toList()); -// List items = titemService.list(new LambdaQueryWrapper().and(item -> { -// item.eq(DlRepairTitem::getTicketId, respVO.getId()) -// .eq(DlRepairTitem::getItemType, "02") -// .in(DlRepairTitem::getPartId, waresId); -// })); -// // 同一个配件可能申请过多次,属于是一个工单配件可能是对应多个申请表配件 -// items.stream().map(item -> { -// DlRepairTitem titem = new DlRepairTitem(); -// titem.setId(item.getId()); -// List wares = twItems.stream().filter(i -> i.getWaresId().equals(item.getPartId())).collect(Collectors.toList()); -// int sum = wares.stream().mapToInt(DlTwItem::getWaresAlreadyCount).sum(); -// -// }) -// } + // 先查满足条件的申请表 + ArrayList status = new ArrayList<>(); + status.add("01"); // 待审核 + status.add("05"); // 已驳回 + // 查工单所有已通过的配件申请单 + List list = ticketWaresService.list(new LambdaQueryWrapper().and(item -> { + item.eq(DlTicketWares::getTicketId, respVO.getId()) + .notIn(DlTicketWares::getStatus, status); + })); + // 查配件申请表的所有已领取数量小于申请数量的子表信息 + List ids = list.stream().map(DlTicketWares::getId).collect(Collectors.toList()); + List twItems = twItemService.list(new LambdaQueryWrapper().and(item -> { + item.in(DlTwItem::getTwId, ids) + .apply("wares_already_count < wares_count"); + })); + if (CollectionUtil.isNotEmpty(twItems)) { + // 更新工单子表(主要是把已领料的字段同步给工单配件的数量字段) + // 查询工单子表(三个查询条件,属于那个工单,属于配件类型,属于需要改变的(即申请表的已领取数量小于申请数量的)) + Set waresId = twItems.stream().map(DlTwItem::getWaresId).collect(Collectors.toSet()); + List items = titemService.list(new LambdaQueryWrapper().and(item -> { + item.eq(DlRepairTitem::getTicketId, respVO.getId()) + .eq(DlRepairTitem::getItemType, "02") + .in(DlRepairTitem::getPartId, waresId); + })); + // 同一个配件可能申请过多次,属于是一个工单配件可能是对应多个申请表配件 + List updateItems = items.stream().map(item -> { + DlRepairTitem titem = new DlRepairTitem(); + titem.setId(item.getId()); + List wares = twItems.stream().filter(i -> i.getWaresId().equals(item.getPartId())).collect(Collectors.toList()); + int sum = wares.stream().mapToInt(DlTwItem::getWaresAlreadyCount).sum(); + titem.setItemCount(sum); + BigDecimal discount = item.getItemDiscount() == null ? BigDecimal.ONE : item.getItemDiscount(); + titem.setItemMoney(item.getItemPrice().multiply(BigDecimal.valueOf(sum)).multiply(discount)); + return titem; + }).collect(Collectors.toList()); + + // 更新维修工单子表 + titemService.updateBatchById(updateItems); + + // 重新计算维修工单 + boolean flag = computeTicket(respVO.getId()); + if (!flag){ + throw exception0(500, "系统异常"); + } + } // 通知服务顾问 DlRepairTickets tickets = baseMapper.selectById(respVO.getId());