diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java index 98266bf1..41a626e0 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java @@ -150,11 +150,11 @@ public class DlTicketWaresServiceImpl extends ServiceImpl result = new ArrayList<>(); //维修业务管理员、总检、服务顾问均可以进行审批 - if (userRoleCode.equals(RepairRoleEnum.ADMIN.getCode())|| userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())||userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())){ + if (userRoleCode.equals(RepairRoleEnum.ADMIN.getCode()) || userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode()) || userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(DlTicketWares::getTicketId,reqVO.getTicketId()); - if (null != reqVO.getStatus()){ - lambdaQueryWrapper.eq(DlTicketWares::getStatus,reqVO.getStatus()); + lambdaQueryWrapper.eq(DlTicketWares::getTicketId, reqVO.getTicketId()); + if (null != reqVO.getStatus()) { + lambdaQueryWrapper.eq(DlTicketWares::getStatus, reqVO.getStatus()); } result = list(lambdaQueryWrapper); } @@ -194,7 +194,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl ids = permissionApi.getUserIdByRoleId(roleInfo.getId()); // 发通知 - if (CollectionUtil.isNotEmpty(ids)){ + if (CollectionUtil.isNotEmpty(ids)) { ids.forEach(id -> repairWorkerService.sentMessage(id, "您有新的配件申请单需要审核")); } } @@ -241,18 +241,18 @@ public class DlTicketWaresServiceImpl extends ServiceImpl(); //配件没传,去库里面查需要的配件 - LambdaQueryWrapper queryWrapper= new LambdaQueryWrapper() - .eq(DlTwItem::getTwId,mainId); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(DlTwItem::getTwId, mainId); List applyList = twItemService.list(queryWrapper); - if(!applyList.isEmpty()){ + if (!applyList.isEmpty()) { //查配件库 List waresList = repairWaresService.listByIds(applyList.stream().map(DlTwItem::getWaresId).collect(Collectors.toList())); - Map waresMap =waresList.stream().collect(Collectors.toMap(RepairWares::getId, Function.identity())); + Map waresMap = waresList.stream().collect(Collectors.toMap(RepairWares::getId, Function.identity())); //组装工单子表数据 - for (DlTwItem item:applyList){ + for (DlTwItem item : applyList) { DlRepairTitem repairTitem = new DlRepairTitem(); repairTitem.setTicketId(ticketMainId); repairTitem.setItemCount(item.getWaresCount()); @@ -270,25 +270,53 @@ public class DlTicketWaresServiceImpl extends ServiceImpl() - // 工单子项总数量增加上配件的数量 - .setSql("count = count + " + repairItemList.size()) - // 工单配件总价 - .setSql("part_price = part_price + " + reduce) - // 工单总价 - .setSql("total_price = total_price + " + reduce) - // 参考成本 - .setSql("cost = cost + " + reduce) - // 参考毛利 - .setSql("profit = profit + " + reduce) - // 领料状态 - .set(DlRepairTickets::getPartStatus, "02") - .eq(DlRepairTickets::getId, ticketMainId) - ); - // 更新维修工单子表 - repairItemList.forEach(item -> { + // 这里是重新计算维修工单中的配件相关的信息,写了一个公共的重新计算工单的方法,替换掉 +// // 计算配件的总价 +// BigDecimal reduce = repairItemList.stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// repairTicketsService.update(new LambdaUpdateWrapper() +// // 工单子项总数量增加上配件的数量 +// .setSql("count = count + " + repairItemList.size()) +// // 工单配件总价 +// .setSql("part_price = part_price + " + reduce) +// // 工单总价 +// .setSql("total_price = total_price + " + reduce) +// // 参考成本 +// .setSql("cost = cost + " + reduce) +// // 参考毛利 +// .setSql("profit = profit + " + reduce) +// // 领料状态 +// .set(DlRepairTickets::getPartStatus, "02") +// .eq(DlRepairTickets::getId, ticketMainId) +// ); + // 更新维修工单子表----需要合并相同的配件,故修改 + // 先查维修工单的子表中的配件相关的信息 + List oldTitem = repairTitemService.list(new LambdaQueryWrapper().and(i -> i.eq(DlRepairTitem::getTicketId, ticketMainId).eq(DlRepairTitem::getItemType, "02"))); + // 过滤出新申请的配件里面有没有已经存在于工单子表的 + List waresIds = oldTitem.stream().map(DlRepairTitem::getPartId).collect(Collectors.toList()); + List already = repairItemList.stream().filter(item -> waresIds.contains(item.getPartId())).collect(Collectors.toList()); + // 更新已经存在的配件 + if (CollectionUtil.isNotEmpty(already)) { + List updateItems = new ArrayList<>(); + already.forEach(item -> { + DlRepairTitem titem = oldTitem.stream().filter(i -> i.getPartId().equals(item.getPartId())).findFirst().orElse(null); + if (titem != null) { + DlRepairTitem newItem = new DlRepairTitem(); + newItem.setId(titem.getId()); + newItem.setItemCount(titem.getItemCount() + item.getItemCount()); + // 如果设置了折扣就用,没有就是1 + BigDecimal itemDiscount = titem.getItemDiscount() == null ? new BigDecimal(1) : titem.getItemDiscount(); + // titem取价格、newItem取数量 + newItem.setItemMoney(titem.getItemPrice().multiply(BigDecimal.valueOf(newItem.getItemCount())).multiply(itemDiscount)); + updateItems.add(newItem); + } + }); + if (CollectionUtil.isNotEmpty(updateItems)) { + repairTitemService.updateBatchById(updateItems); + } + } + // 新增维修工单中没有的配件 + List newItems = repairItemList.stream().filter(item -> !waresIds.contains(item.getPartId())).collect(Collectors.toList()); + newItems.forEach(item -> { // 主表id item.setTicketId(ticketMainId); // 类型为配件 @@ -296,62 +324,70 @@ public class DlTicketWaresServiceImpl extends ServiceImpl ids = permissionApi.getUserIdByRoleId(roleInfo.getId()); - if (CollectionUtil.isNotEmpty(ids)){ + if (CollectionUtil.isNotEmpty(ids)) { ids.forEach(id -> repairWorkerService.sentMessage(id, "您有新的配件申请单需要处理")); } - } else if (ObjectUtil.isNotEmpty(respVO.getStatus()) && respVO.getStatus().equals("02") && respVO.getType().equals("02")) { - // 如果通过退料,也需要更新 - // 更新维修工单 - // 计算配件的总价 - BigDecimal reduce = respVO.getWares().stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - repairTicketsService.update(new LambdaUpdateWrapper() - // 工单子项总数量增加上配件的数量 - .setSql("count = count - " + respVO.getWares().size()) - // 工单配件总价 - .setSql("part_price = part_price - " + reduce) - // 工单总价 - .setSql("total_price = total_price - " + reduce) - // 参考成本 - .setSql("cost = cost - " + reduce) - // 参考毛利 - .setSql("profit = profit - " + reduce) - // 领料状态 - .set(DlRepairTickets::getPartStatus, "02") - .eq(DlRepairTickets::getId, respVO.getTicketId()) - ); - // 维修工单子表对应的数据更新 - // 先查数据出来 - List list = repairTitemService.list(new LambdaQueryWrapper().and(i -> { - i.eq(DlRepairTitem::getTicketId, respVO.getTicketId()) - .in(DlRepairTitem::getPartId, respVO.getWares().stream().map(DlRepairTitem::getPartId).collect(Collectors.toList())); - })); - list.forEach(item -> { - respVO.getWares().stream().filter(i -> i.getPartId().equals(item.getPartId())).findFirst().ifPresent(i -> { - // 如果只是退部分就减少数量 - if (!i.getItemCount().equals(item.getItemCount())) { - repairTitemService.update(new LambdaUpdateWrapper() - .setSql("item_count = item_count - " + i.getItemCount()) - .setSql("item_money = item_money - " + i.getItemMoney()) - .and(x -> { - x.eq(DlRepairTitem::getTicketId, respVO.getTicketId()).eq(DlRepairTitem::getPartId, item.getPartId()); - }) - ); - } else { - // 如果是全部退了,就直接删掉数据 - repairTitemService.removeById(item.getId()); - } - }); - }); - - // 发送没有通过的消息给员工 - DlTicketWares ticketWares = baseMapper.selectById(respVO.getId()); - repairWorkerService.sentMessage(ticketWares.getRepairId(), "您的配件申请单被驳回了"); } + // 下面的代码为退料申请单通过的代码,但没有退料申请单,可以注掉,但防止有问题,所以先不删除 +// } else if (ObjectUtil.isNotEmpty(respVO.getStatus()) && respVO.getStatus().equals("02") && respVO.getType().equals("02")) { +// // 如果通过退料,也需要更新 +// // 更新维修工单 +// // 计算配件的总价 +// BigDecimal reduce = respVO.getWares().stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// repairTicketsService.update(new LambdaUpdateWrapper() +// // 工单子项总数量增加上配件的数量 +// .setSql("count = count - " + respVO.getWares().size()) +// // 工单配件总价 +// .setSql("part_price = part_price - " + reduce) +// // 工单总价 +// .setSql("total_price = total_price - " + reduce) +// // 参考成本 +// .setSql("cost = cost - " + reduce) +// // 参考毛利 +// .setSql("profit = profit - " + reduce) +// // 领料状态 +// .set(DlRepairTickets::getPartStatus, "02") +// .eq(DlRepairTickets::getId, respVO.getTicketId()) +// ); +// // 维修工单子表对应的数据更新 +// // 先查数据出来 +// List list = repairTitemService.list(new LambdaQueryWrapper().and(i -> { +// i.eq(DlRepairTitem::getTicketId, respVO.getTicketId()) +// .in(DlRepairTitem::getPartId, respVO.getWares().stream().map(DlRepairTitem::getPartId).collect(Collectors.toList())); +// })); +// list.forEach(item -> { +// respVO.getWares().stream().filter(i -> i.getPartId().equals(item.getPartId())).findFirst().ifPresent(i -> { +// // 如果只是退部分就减少数量 +// if (!i.getItemCount().equals(item.getItemCount())) { +// repairTitemService.update(new LambdaUpdateWrapper() +// .setSql("item_count = item_count - " + i.getItemCount()) +// .setSql("item_money = item_money - " + i.getItemMoney()) +// .and(x -> { +// x.eq(DlRepairTitem::getTicketId, respVO.getTicketId()).eq(DlRepairTitem::getPartId, item.getPartId()); +// }) +// ); +// } else { +// // 如果是全部退了,就直接删掉数据 +// repairTitemService.removeById(item.getId()); +// } +// }); +// }); +// +// // 发送没有通过的消息给员工 +// DlTicketWares ticketWares = baseMapper.selectById(respVO.getId()); +// repairWorkerService.sentMessage(ticketWares.getRepairId(), "您的配件申请单被驳回了"); +// } } /** @@ -412,7 +448,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl oldData = twItemService.list(new LambdaQueryWrapper().in(DlTwItem::getId, respVO.getItems().stream().map(DlTwItem::getId).collect(Collectors.toList()))); // 构造新数据 List newData = oldData.stream().map(item -> { @@ -492,7 +528,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl list = respVO.getItems().stream().map(dlTwItem -> dlTwItem.setTwId(respVO.getId())).collect(Collectors.toList()); twItemService.saveBatch(list); } @@ -509,8 +545,8 @@ public class DlTicketWaresServiceImpl extends ServiceImpl getWorkerTodo() { LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(DlTicketWares::getRepairId,loginUser.getId()) - .eq(DlTicketWares::getType,"01"); + .eq(DlTicketWares::getRepairId, loginUser.getId()) + .eq(DlTicketWares::getType, "01"); List list = this.list(queryWrapper); Map rtnMap = new HashMap<>(); //所有提交的 @@ -520,23 +556,23 @@ public class DlTicketWaresServiceImpl extends ServiceImpl