diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTwItem.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTwItem.java index 75e9f924..43f249ea 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTwItem.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTwItem.java @@ -48,7 +48,7 @@ public class DlTwItem extends TenantBaseDO { private Integer waresCount; /** - * 配件状态(01:已领料,02:未领料,03:已退料 tw_item_status) + * 配件状态(01:已领料,02:未领料,03:已退料,04可确认领料,可确认退料 tw_item_status) */ private String waresStatus; @@ -57,4 +57,10 @@ public class DlTwItem extends TenantBaseDO { /** 客户是否可见(字典yes_no);已存在于系统中(是:1,否:0) */ private String isShow; + + /** 可领取数量 */ + private Integer waresCouldCount; + + /** 已领料数量 */ + private Integer waresAlreadyCount; } \ No newline at end of file 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 59b2691c..f7e69d0f 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 @@ -259,8 +259,11 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl - implements DlTicketWaresService { + implements DlTicketWaresService { @Resource @@ -76,29 +77,30 @@ public class DlTicketWaresServiceImpl extends ServiceImpl getPage(DlTicketWaresReqVO reqVO, Page page){ + public IPage getPage(DlTicketWaresReqVO reqVO, Page page) { // 确认查看者身份 String userRoleCode = repairTicketsService.getUserRole(); - if(userRoleCode.equals(RepairRoleEnum.ADMIN.getCode())|| userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())){ + if (userRoleCode.equals(RepairRoleEnum.ADMIN.getCode()) || userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())) { //维修管理员和总检,看所有数据 - }else if(userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())){ + } else if (userRoleCode.equals(RepairRoleEnum.ADVISOR.getCode())) { //服务顾问 reqVO.setAdviserId(SecurityFrameworkUtils.getLoginUserId()); - }else if(userRoleCode.equals(RepairRoleEnum.REPAIR_STAFF.getCode())){ + } else if (userRoleCode.equals(RepairRoleEnum.REPAIR_STAFF.getCode())) { //维修工,进一步判断是否是班组长 boolean ifLeader = workerService.getIfLeader(); - if(ifLeader){ + if (ifLeader) { //班组长,看本班组所有数据 RepairWorker one = repairWorkerService.getOne(new LambdaQueryWrapper().eq(RepairWorker::getUserId, SecurityFrameworkUtils.getLoginUserId())); // 查自己班组的员工信息 @@ -106,15 +108,15 @@ public class DlTicketWaresServiceImpl extends ServiceImpl userIds = list.stream().map(RepairWorker::getUserId).collect(Collectors.toList()); reqVO.setUserIds(userIds); - }else{ + } else { //普通维修工 reqVO.setUserIds(Collections.singletonList(SecurityFrameworkUtils.getLoginUserId())); } - }else if(userRoleCode.equals(RepairRoleEnum.WAREHOUSE.getCode())){ + } else if (userRoleCode.equals(RepairRoleEnum.WAREHOUSE.getCode())) { // 维修仓库管理员 reqVO.setStatus(null); reqVO.setUserRole(5); - }else{ + } else { return null; } return baseMapper.getPage(reqVO, page); @@ -123,13 +125,13 @@ public class DlTicketWaresServiceImpl extends ServiceImpl().eq(RepairWorker::getUserId, SecurityFrameworkUtils.getLoginUserId())); @@ -138,7 +140,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl list = respVO.getItems().stream().map(item -> item.setTwId(respVO.getId())).collect(Collectors.toList()); - if (CollectionUtil.isEmpty(list)){ + if (CollectionUtil.isEmpty(list)) { throw exception0(500, "配件列表为空"); } twItemService.saveOrUpdateBatch(list); @@ -147,13 +149,13 @@ public class DlTicketWaresServiceImpl extends ServiceImpl() .set(DlTicketWares::getStatus, respVO.getStatus()) .eq(DlTicketWares::getId, respVO.getId()) ); // 如果是通过并且是领料就还需要把配件信息加入到工单中 - if (ObjectUtil.isNotEmpty(respVO.getStatus()) && respVO.getStatus().equals("02") && respVO.getType().equals("01")){ + if (ObjectUtil.isNotEmpty(respVO.getStatus()) && respVO.getStatus().equals("02") && respVO.getType().equals("01")) { // 更新维修工单 // 计算配件的总价 BigDecimal reduce = respVO.getWares().stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add); @@ -205,7 +207,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl { respVO.getWares().stream().filter(i -> i.getPartId().equals(item.getPartId())).findFirst().ifPresent(i -> { // 如果只是退部分就减少数量 - if (!i.getItemCount().equals(item.getItemCount())){ + if (!i.getItemCount().equals(item.getItemCount())) { repairTitemService.update(new LambdaUpdateWrapper() .setSql("item_count = item_count - " + i.getItemCount()) .setSql("item_money = item_money - " + i.getItemMoney()) @@ -242,7 +244,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl list = repairTitemService.list(new LambdaQueryWrapper() - .eq(DlRepairTitem::getTicketId, respVO.getTicketId()) - .in(DlRepairTitem::getPartId, respVO.getRepairSois() - .stream() - .map(DlRepairSoi::getGoodsId) - .collect(Collectors.toList()))); - // 计算总价 - BigDecimal reduce = list.stream().map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - respVO.getRepairSo().setItemCount(list.size()); - respVO.getRepairSo().setTotalPrice(reduce); + List list = repairTitemService.list(new LambdaQueryWrapper().and(i -> { + i.eq(DlRepairTitem::getTicketId, respVO.getTicketId()) + .in(DlRepairTitem::getPartId, respVO.getRepairSois() + .stream() + .map(DlRepairSoi::getGoodsId) + .collect(Collectors.toList())); + }) + ); + // 计算总价 (通知领料的数量可能和请求的不一样,所以需要这样计算) + BigDecimal reduce = list.stream() + /* + item:维修工单子表中的每一个配件 + map中是找到与item对应的领料单子表的配件,记soi + 将item的价格设置给soi的价格 + */ + .map(item -> { + DlRepairSoi repairSoi = respVO.getRepairSois().stream() + .filter(i -> i.getGoodsId().equals(item.getPartId())).findFirst() + .orElse(null); + if (repairSoi != null) { + repairSoi.setGoodsPrice(item.getItemPrice()); + } + return repairSoi; + }) + .filter(Objects::nonNull) + // 计算soi的价格 + .map(i -> new BigDecimal(i.getGoodsCount()).multiply(i.getGoodsPrice())) + // 计算总价 + .reduce(BigDecimal.ZERO, BigDecimal::add); // 生成领料单 + respVO.getRepairSo().setTotalPrice(reduce); + respVO.getRepairSo().setItemCount(list.size()); repairSoService.save(respVO.getRepairSo()); // 生成领料单子表 respVO.getRepairSois().forEach(item -> { item.setSoId(respVO.getRepairSo().getId()); - DlRepairTitem titem = list.stream().filter(i -> i.getPartId().equals(item.getGoodsId())).collect(Collectors.toList()).get(0); - item.setGoodsPrice(titem.getItemPrice()); }); repairSoiService.saveBatch(respVO.getRepairSois()); - // 更新领料申请子表 - twItemService.updateBatchById(respVO.getItems()); + // 更新配件申请子表 + /* + 同理,通知领料的数量可能与实际需要的数量不一致,需要重新计算状态 + */ + // 先查老数据 + List oldData = twItemService.list(new LambdaQueryWrapper().in(DlTwItem::getId, respVO.getItems().stream().map(DlTwItem::getId).collect(Collectors.toList()))); + // 构造新数据 + List newData = oldData.stream().map(item -> { + DlTwItem dlTwItem = new DlTwItem(); + dlTwItem.setId(item.getId()); + respVO.getRepairSois().stream() + .filter(i -> i.getGoodsId().equals(item.getWaresId())) + .findFirst() + .ifPresent(repairSoi -> { + dlTwItem.setWaresCouldCount(repairSoi.getGoodsCount()); + dlTwItem.setWaresStatus(repairSoi.getGoodsCount().equals(item.getWaresCount()) ? "04" : item.getWaresStatus()); + }); + return dlTwItem; + }).collect(Collectors.toList()); + twItemService.updateBatchById(newData); + + // 通知维修工 + // 查维修工的userId + repairWorkerService.sentMessage(respVO.getRepairId(), "您有新的领料单需要确认"); } /** * 员工确认领料 * + * @param respVO 请求对象 * @author 小李 * @date 22:07 2024/10/16 - * @param respVO 请求对象 **/ @Override @DSTransactional - public void repairPassTicketWares(DlTicketWaresRespVO respVO){ + public void repairPassTicketWares(DlTicketWaresRespVO respVO) { // 更新领料申请子表 twItemService.updateBatchById(respVO.getItems()); // 更新领料申请表 @@ -315,12 +358,12 @@ public class DlTicketWaresServiceImpl extends ServiceImpl @Resource private RepairWaresService repairWaresService; + @Resource + @Lazy + private DlTicketWaresService ticketWaresService; + /** * 根据主表查看全部 * diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml index 72a44b68..136429b6 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -204,13 +204,24 @@ and drt.is_finish = #{map.isFinish} - + and (drt.tickets_status = '05') - and (drt.now_repair_id in - - #{item} - - ) + + + and (drt.now_repair_id in + + #{item} + + ) + + + and ( + + find_in_set(#{item}, drti.repair_ids) > 0 + + ) + + order by drt.create_time desc diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml index 34946b94..4ca9cf57 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml @@ -13,13 +13,15 @@ + + select id,tw_id,wares_id, wares_name,wares_count,wares_status,remark, - is_show + is_show,wares_could_count, wares_already_count from dl_tw_item dti where dti.deleted = '0'