From 461b5847110add15c0401a1e294c987c7f9682a7 Mon Sep 17 00:00:00 2001 From: xuyuncong <3422692813@qq.com> Date: Fri, 14 Nov 2025 17:51:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=B7=A5=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E8=9E=8D=E5=90=88B=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/service/RepairWorkerService.java | 15 ++- .../service/impl/RepairWorkerServiceImpl.java | 18 +++ .../impl/DlRepairTicketsServiceImpl.java | 117 +++++++++++++++++- .../tickets/vo/DlRepairTicketsRespVO.java | 4 + .../mapper/tickets/DlRepairTicketsMapper.xml | 21 +++- 5 files changed, 165 insertions(+), 10 deletions(-) diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java index 0299034d..b55aa47e 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java @@ -27,12 +27,12 @@ public interface RepairWorkerService extends IService { * @param userList 选中用户集合 **/ void saveWorkers(List userList); - + /** * 查询所有维修工 * @author PQZ - * @date 14:07 2024/11/7 + * @date 14:07 2024/11/7 * @return java.util.List **/ List listAllWorker(); @@ -87,6 +87,15 @@ public interface RepairWorkerService extends IService { **/ void sentMessage(String systemCode,Long userId,String text); + /** + * 向指定用户发送消息 + * @author PQZ + * @date 16:27 2024/10/18 + * @param userId 用户id + * @param text 消息通知内容 + **/ + void sentMessage(String systemCode,String userId,String text); + /** * 向指定用户发送消息(用户,非员工) * @@ -121,7 +130,7 @@ public interface RepairWorkerService extends IService { * @return boolean **/ boolean getIfLeader(); - + /** * 根据工种类型查询维修工信息 * @param workType 工种类型 diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java index 8be309a0..cc2513e1 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java @@ -229,6 +229,24 @@ public class RepairWorkerServiceImpl extends ServiceImpl itemList = titemService.list(new LambdaQueryWrapper().eq(DlRepairTitem::getTicketId, id)); List items = itemList.stream().map(item -> BeanUtil.toBean(item, DlRepairTitemReqVO.class)).collect(Collectors.toList()); - //处理项目 取项目 List projects = items.stream().filter(item -> item.getItemType().equals("01")).collect(Collectors.toList()); //pc原逻辑 @@ -484,6 +483,28 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl repairProjects.stream().filter(i -> i.getId().equals(item.getProjectId())).findFirst().ifPresent(item::setProject)); } result.setProjects(projects); + + /*查询绑定B单信息*/ + // 查绑定B单信息 + List BTickets = baseMapper.selectList(Wrappers.lambdaQuery() + .eq(DlRepairTickets::getParentTicketId, id)); + + List bIds = BTickets.stream().map(DlRepairTickets::getId).collect(Collectors.toList()); + + // 查询B子表 + List BItems = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(bIds)){ + List BItemList = titemService.list(new LambdaQueryWrapper().in(DlRepairTitem::getTicketId, bIds)); + BItems = BItemList.stream().map(item -> BeanUtil.toBean(item, DlRepairTitemReqVO.class)).collect(Collectors.toList()); + + //处理项目 取项目 + List BProject = BItems.stream().filter(item -> item.getItemType().equals("01")).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(BProject)) { + Set ids = BProject.stream().map(DlRepairTitemReqVO::getProjectId).collect(Collectors.toSet()); + List repairProjects = projectService.listByIds(ids); + BItems.forEach(item -> repairProjects.stream().filter(i -> i.getId().equals(item.getProjectId())).findFirst().ifPresent(item::setProject)); + } + result.setBProjects(BProject);} if (ifApp) { //app新增逻辑 if (CollectionUtil.isNotEmpty(projects)) { @@ -573,6 +594,21 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl BWares = BItems.stream().filter(item -> item.getItemType().equals("02")).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(BWares)) { + // 单位字典 + List recordTypeList = dictDataApi.getDictDataList(DICT_REPAIR_UNIT); + Map unitMap = recordTypeList.stream().collect(Collectors.toMap(DictDataRespDTO::getValue, DictDataRespDTO::getLabel)); + Set ids = BWares.stream().map(DlRepairTitemReqVO::getPartId).collect(Collectors.toSet()); + List repairWares = waresService.listByIds(ids); + BItems.forEach(item -> { + repairWares.stream().filter(i -> i.getId().equals(item.getPartId())).findFirst().ifPresent(item::setWare); + item.setUnitText(unitMap.get(item.getItemUnit())); + }); + } + result.setBWares(BWares); } // 取附加 List others = items.stream().filter(item -> item.getItemType().equals("03")).collect(Collectors.toList()); @@ -581,7 +617,16 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl dlRepairOthers = otherService.listByIds(ids); items.forEach(item -> dlRepairOthers.stream().filter(i -> i.getId().equals(item.getOtherId())).findFirst().ifPresent(item::setOther)); } + + // B单取附加 + List BOthers = BItems.stream().filter(item -> item.getItemType().equals("03")).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(BOthers)) { + Set ids = BOthers.stream().map(DlRepairTitemReqVO::getOtherId).collect(Collectors.toSet()); + List dlRepairOthers = otherService.listByIds(ids); + BItems.forEach(item -> dlRepairOthers.stream().filter(i -> i.getId().equals(item.getOtherId())).findFirst().ifPresent(item::setOther)); + } result.setItems(items); + result.setBItems(BItems); // 查询工单操作记录 RepairRecordsPageReqVO entity = new RepairRecordsPageReqVO(); entity.setTicketId(id); @@ -1705,6 +1750,8 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl list = repairWorkerService.list(); + //查询当前工单下所有项目 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DlRepairTitem::getTicketId, ticketId); + List itemList = titemService.list(lambdaQueryWrapper); + //过滤出不包括当前指派人的值 + List filterList = itemList.stream() + .filter(item -> !item.getRepairNames().contains(nowRepairNames)) + .collect(Collectors.toList()); + List saveList = new ArrayList<>(); + //当前处理人工作组 + Map workerMap = list.stream() + .collect(Collectors.toMap(RepairWorker::getUserId, worker -> worker)); + String workType = workerMap.get(Long.parseLong(nowRepairIds.split(",")[0])).getWorkType(); // 假设第一个 repairId 对应的工人的 workType + + // 将 nowRepairIds 字符串转为 List + List repairIdList = Arrays.stream(nowRepairIds.split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + + filterList.forEach(item -> { + //深拷贝 + DlRepairTitem saveItem = BeanUtils.toBean(item, DlRepairTitem.class); + if (StringUtils.isNotEmpty(saveItem.getRepairIds())) { + //取出用户id + List repairIds = Arrays.stream(saveItem.getRepairIds().split(",")) + .map(Long::parseLong) + .collect(Collectors.toList()); + + repairIds.forEach(idItem -> { + // 获取对应的 worker + RepairWorker worker = workerMap.get(idItem); + // 检查 worker 是否存在并比较 workType + if (worker != null && workType.equals(worker.getWorkType())) { + saveList.add(saveItem); + return; + } + }); + } + }); + + saveList.forEach(item -> { + // 使用逗号拼接修理人ID和名字 + String newRepairId = item.getRepairIds() + "," + nowRepairIds; + String newRepairName = item.getRepairNames() + "," + nowRepairNames; + item.setRepairIds(newRepairId); + item.setRepairNames(newRepairName); + }); + + // 批量更新数据库中的工单项 + titemService.updateBatchById(saveList); + } + + /** * 更新工单状态(针对开始施工、施工中记录、施工完成) * @param respVO 请求对象 @@ -2166,7 +2277,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl updateTickets = result.stream().map(item -> { DlRepairTickets ticket = new DlRepairTickets(); ticket.setId(item.getId()); - ticket.setNowRepairId(Long.valueOf(item.getAdviserId())); + ticket.setNowRepairId(item.getAdviserId()); ticket.setNowRepairName(item.getAdviserName()); return ticket; }).collect(Collectors.toList()); diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java index 59c5062d..dbaa0687 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java @@ -31,6 +31,7 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { /** 上面有地方在用,只能新用一个了,子表数组 */ private List items; + private List bItems; /** 预约记录ID */ private String bookingId; @@ -50,7 +51,9 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { /** 车辆信息 */ private CarMainRespVO carInfo; List wares; + List bWares; List projects; + List bProjects; private String linkPhone; @@ -112,4 +115,5 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { private String billedQrcode; /** 开票备注 */ private String billedRemark; + private Integer hasChildTickets; } 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 d443f631..9c89b24e 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -136,6 +136,7 @@ + @@ -372,11 +373,18 @@ AND ( drt.now_repair_id = #{map.nowRepairId}) -- 服务顾问查待处理(服务顾问之间可以相互查) -- + + + + + + + + AND ( - drt.now_repair_id in - - #{id} + + FIND_IN_SET(#{id}, drt.now_repair_id) > 0 ) @@ -440,7 +448,12 @@ ( SELECT SUM(item_money - item_profit) FROM dl_repair_titem WHERE ticket_id = drt.id AND item_type = '02' - ) AS accessoriesMoney + ) AS accessoriesMoney, + /* 查询是否有被绑定的工单 */ + ( + SELECT COUNT(*) FROM dl_repair_tickets child + WHERE child.parent_ticket_id = drt.id AND child.deleted = '0' + ) AS hasChildTickets FROM dl_repair_tickets drt LEFT JOIN dl_repair_titem drti ON drt.id = drti.ticket_id AND drti.deleted = '0' AND drti.item_type='01'