配件申请单审核时,合并维修工单中已存在的配件

This commit is contained in:
xiaofajia 2024-10-25 15:51:03 +08:00
parent b947a96ca8
commit f1e722d302

View File

@ -270,25 +270,53 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
} }
} }
} }
// 计算配件的总价 // 这里是重新计算维修工单中的配件相关的信息写了一个公共的重新计算工单的方法替换掉
BigDecimal reduce = repairItemList.stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add); // // 计算配件的总价
repairTicketsService.update(new LambdaUpdateWrapper<DlRepairTickets>() // BigDecimal reduce = repairItemList.stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
// 工单子项总数量增加上配件的数量 // repairTicketsService.update(new LambdaUpdateWrapper<DlRepairTickets>()
.setSql("count = count + " + repairItemList.size()) // // 工单子项总数量增加上配件的数量
// 工单配件总价 // .setSql("count = count + " + repairItemList.size())
.setSql("part_price = part_price + " + reduce) // // 工单配件总价
// 工单总价 // .setSql("part_price = part_price + " + reduce)
.setSql("total_price = total_price + " + reduce) // // 工单总价
// 参考成本 // .setSql("total_price = total_price + " + reduce)
.setSql("cost = cost + " + reduce) // // 参考成本
// 参考毛利 // .setSql("cost = cost + " + reduce)
.setSql("profit = profit + " + reduce) // // 参考毛利
// 领料状态 // .setSql("profit = profit + " + reduce)
.set(DlRepairTickets::getPartStatus, "02") // // 领料状态
.eq(DlRepairTickets::getId, ticketMainId) // .set(DlRepairTickets::getPartStatus, "02")
); // .eq(DlRepairTickets::getId, ticketMainId)
// 更新维修工单子表 // );
repairItemList.forEach(item -> { // 更新维修工单子表----需要合并相同的配件故修改
// 先查维修工单的子表中的配件相关的信息
List<DlRepairTitem> oldTitem = repairTitemService.list(new LambdaQueryWrapper<DlRepairTitem>().and(i -> i.eq(DlRepairTitem::getTicketId, ticketMainId).eq(DlRepairTitem::getItemType, "02")));
// 过滤出新申请的配件里面有没有已经存在于工单子表的
List<String> waresIds = oldTitem.stream().map(DlRepairTitem::getPartId).collect(Collectors.toList());
List<DlRepairTitem> already = repairItemList.stream().filter(item -> waresIds.contains(item.getPartId())).collect(Collectors.toList());
// 更新已经存在的配件
if (CollectionUtil.isNotEmpty(already)) {
List<DlRepairTitem> 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<DlRepairTitem> newItems = repairItemList.stream().filter(item -> !waresIds.contains(item.getPartId())).collect(Collectors.toList());
newItems.forEach(item -> {
// 主表id // 主表id
item.setTicketId(ticketMainId); item.setTicketId(ticketMainId);
// 类型为配件 // 类型为配件
@ -296,7 +324,13 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
// 状态为未领料 // 状态为未领料
item.setItemStatus(TicketsItemStatusEnum.WAITING_RECEIVE.getCode()); item.setItemStatus(TicketsItemStatusEnum.WAITING_RECEIVE.getCode());
}); });
repairTitemService.saveBatch(repairItemList); repairTitemService.saveBatch(newItems);
// 重新计算工单
boolean flag = repairTicketsService.computeTicket(ticketMainId);
if (!flag) {
throw exception0(500, "系统异常");
}
// 发送通过的消息给仓库 // 发送通过的消息给仓库
RoleReqDTO roleInfo = roleApi.getRoleInfo(RepairRoleEnum.WAREHOUSE.getCode()); RoleReqDTO roleInfo = roleApi.getRoleInfo(RepairRoleEnum.WAREHOUSE.getCode());
@ -304,54 +338,56 @@ public class DlTicketWaresServiceImpl extends ServiceImpl<DlTicketWaresMapper, D
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
ids.forEach(id -> repairWorkerService.sentMessage(id, "您有新的配件申请单需要处理")); 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<DlRepairTickets>()
// 工单子项总数量增加上配件的数量
.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<DlRepairTitem> list = repairTitemService.list(new LambdaQueryWrapper<DlRepairTitem>().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<DlRepairTitem>()
.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<DlRepairTickets>()
// // 工单子项总数量增加上配件的数量
// .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<DlRepairTitem> list = repairTitemService.list(new LambdaQueryWrapper<DlRepairTitem>().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<DlRepairTitem>()
// .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(), "您的配件申请单被驳回了");
// }
} }
/** /**