diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionMallPartnersController.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionMallPartnersController.java index e4bd68a1..3b30977a 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionMallPartnersController.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/InspectionMallPartnersController.java @@ -182,7 +182,7 @@ public class InspectionMallPartnersController extends BaseController { Map stringObjectMap = orderInfoService.workOrderData(query); rows.add(CollUtil.newArrayList("公示价格汇总:", "", String.valueOf(Double.parseDouble(stringObjectMap.get("goodsPriceSum").toString()) / 100d) + "元", "实付金额汇总:", "", String.valueOf(Double.parseDouble(stringObjectMap.get("payMoneySum").toString()) / 100d) + "元")); - rows.add(CollUtil.newArrayList("车牌号", "检测车型", "检测类型", "业务渠道", "客户来源", "经办人", "承保公司", "交强到期时间", "商业到期时间", "公示价格", "实收金额", "优惠金额","付款时间", "客户手机号", "支付方式", "开始时间", "结束时间", "检测结果", "出纳是否确认")); + rows.add(CollUtil.newArrayList("车牌号", "检测车型", "检测类型", "业务渠道", "客户来源", "经办人", "承保公司", "交强到期时间", "商业到期时间", "公示价格", "实收金额", "优惠金额", "付款时间", "客户名称", "客户手机号", "支付方式", "收款账号", "开始时间", "结束时间", "检测结果", "出纳是否确认")); List sysDictData = dictDataService.getDictDataListByDictType("pay_type"); @@ -226,8 +226,8 @@ public class InspectionMallPartnersController extends BaseController { .toString(), ObjectUtil.isEmpty(item.getRealPayMoney()) ? "暂未支付" : BigDecimal.valueOf(item.getRealPayMoney()) .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) .toString(), ObjectUtil.isEmpty(item.getReduceMoney()) ? "" : BigDecimal.valueOf(item.getReduceMoney()) - .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString(),ObjectUtil.isEmpty(item.getPayTime()) ? "暂未支付" : DateUtil.format(item.getPayTime(), "yyyy-MM-dd hh:mm"), - Optional.ofNullable(item.getBuyPhone()).orElse(""), payTypeStr, ObjectUtil.isEmpty(item.getStartTime()) ? "" : DateUtil.format(item.getStartTime(), "yyyy-MM-dd hh:mm"), ObjectUtil.isEmpty(item.getEndTime()) ? "" : DateUtil.format(item.getEndTime(), "yyyy-MM-dd hh:mm"), isPassStr, cashier)); + .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP).toString(), ObjectUtil.isEmpty(item.getPayTime()) ? "暂未支付" : DateUtil.format(item.getPayTime(), "yyyy-MM-dd hh:mm"), + Optional.ofNullable(item.getBuyName()).orElse(""), Optional.ofNullable(item.getBuyPhone()).orElse(""), payTypeStr, Optional.ofNullable(item.getReceivablesAccount()).orElse(""), ObjectUtil.isEmpty(item.getStartTime()) ? "" : DateUtil.format(item.getStartTime(), "yyyy-MM-dd hh:mm"), ObjectUtil.isEmpty(item.getEndTime()) ? "" : DateUtil.format(item.getEndTime(), "yyyy-MM-dd hh:mm"), isPassStr, cashier)); } // 创建 ExcelWriter diff --git a/dl-module-inspection/src/main/resources/mapper/inspection/InspectionInfoMapper.xml b/dl-module-inspection/src/main/resources/mapper/inspection/InspectionInfoMapper.xml index 8d1f2cc3..d2a2793a 100644 --- a/dl-module-inspection/src/main/resources/mapper/inspection/InspectionInfoMapper.xml +++ b/dl-module-inspection/src/main/resources/mapper/inspection/InspectionInfoMapper.xml @@ -769,7 +769,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND ins.recheck_count != 0 AND ins.recheck_count IS NOT NULL - and (oi.pay_money is null OR oi.pay_type = 'sz') + and (oi.pay_money is null OR oi.pay_type = 'sz') and (oi.cashier_confirm = 0 OR oi.cashier_confirm IS NULL ) and oi.pay_time is not null AND oi.pay_type != 'sz' diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java index a9a874e7..26f90dee 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlRepairTickets.java @@ -212,7 +212,7 @@ public class DlRepairTickets extends TenantBaseDO { private String isPickCar; /** 工单当前施工人id */ - private String nowRepairId; + private Long nowRepairId; /** 工单当前施工人name */ private String nowRepairName; 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 30c00a4a..4c691ff4 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 @@ -1264,6 +1264,15 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl 完成记录 映射 Map finishedRecordMap = buildFinishedRecordMap(ticketId, items); + // 查询特殊项目完成状态 + boolean zjFinished = hasRecordType(ticketId, RecordTypeEnum.ZJ.getCode()); // 总检 + boolean skFinished = hasRecordType(ticketId, RecordTypeEnum.SK.getCode()); // 收款 + + // 服务顾问相关的完成状态 + boolean jsgdFinished = hasRecordType(ticketId, RecordTypeEnum.JSGD.getCode()); // 结束工单(出厂检验) + boolean jcFinished = hasRecordType(ticketId, RecordTypeEnum.JC.getCode()); // 交车 + boolean jssqFinished = hasRecordType(ticketId, RecordTypeEnum.JSSQ.getCode()); // 结算申请 + // 当前工单涉及到的维修工人(用于获取工种/班组) List workers = repairWorkerService.listByTicketId(ticketId); if (CollectionUtil.isEmpty(workers)) { @@ -1299,7 +1308,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl()); } - + // 添加项目到对应班组 teamItemsMap.get(workType).add(itemVO); - + vo.setTotalItems(vo.getTotalItems() + 1); if (finished) { vo.setFinishedItems(vo.getFinishedItems() + 1); @@ -1351,6 +1360,9 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl resultList = new ArrayList<>(); for (TicketTeamProgressWithItemsVO vo : progressMap.values()) { @@ -1362,10 +1374,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl progressMap, + Map> teamItemsMap, + String ticketId, boolean zjFinished, boolean skFinished, + boolean jsgdFinished, boolean jcFinished, boolean jssqFinished) { + // 处理总检班组 + String zjWorkType = "zj"; // 总检班组编码 + String zjWorkTypeName = "总检"; // 总检班组名称 + + TicketTeamProgressWithItemsVO zjTeamVO = progressMap.get(zjWorkType); + if (zjTeamVO == null) { + zjTeamVO = new TicketTeamProgressWithItemsVO(); + zjTeamVO.setWorkType(zjWorkType); + zjTeamVO.setWorkTypeName(zjWorkTypeName); + zjTeamVO.setTotalItems(0); + zjTeamVO.setFinishedItems(0); + zjTeamVO.setCompletionRate(BigDecimal.ZERO); + progressMap.put(zjWorkType, zjTeamVO); + teamItemsMap.put(zjWorkType, new ArrayList<>()); + } + + // 创建总检审核项目 + DlRepairTitemRespVO zjItemVO = new DlRepairTitemRespVO(); + zjItemVO.setId("zj"); + zjItemVO.setTicketId(ticketId); + zjItemVO.setItemName("总检审核"); + zjItemVO.setItemType("01"); + zjItemVO.setFinished(zjFinished); + + // 添加总检审核项目到总检班组 + teamItemsMap.get(zjWorkType).add(zjItemVO); + zjTeamVO.setTotalItems(zjTeamVO.getTotalItems() + 1); + if (zjFinished) { + zjTeamVO.setFinishedItems(zjTeamVO.getFinishedItems() + 1); + } + + // 处理财务班组 + String skWorkType = "sk"; // 财务班组编码 + String skWorkTypeName = "财务"; // 财务班组名称 + + TicketTeamProgressWithItemsVO skTeamVO = progressMap.get(skWorkType); + if (skTeamVO == null) { + skTeamVO = new TicketTeamProgressWithItemsVO(); + skTeamVO.setWorkType(skWorkType); + skTeamVO.setWorkTypeName(skWorkTypeName); + skTeamVO.setTotalItems(0); + skTeamVO.setFinishedItems(0); + skTeamVO.setCompletionRate(BigDecimal.ZERO); + progressMap.put(skWorkType, skTeamVO); + teamItemsMap.put(skWorkType, new ArrayList<>()); + } + + // 创建收款项目 + DlRepairTitemRespVO skItemVO = new DlRepairTitemRespVO(); + skItemVO.setId("sk"); + skItemVO.setTicketId(ticketId); + skItemVO.setItemName("收款"); + skItemVO.setItemType("01"); + skItemVO.setFinished(skFinished); + + // 添加收款项目到财务班组 + teamItemsMap.get(skWorkType).add(skItemVO); + skTeamVO.setTotalItems(skTeamVO.getTotalItems() + 1); + if (skFinished) { + skTeamVO.setFinishedItems(skTeamVO.getFinishedItems() + 1); + } + + // 处理服务顾问班组 + String fwgwWorkType = "fwgw"; // 服务顾问班组编码 + String fwgwWorkTypeName = "服务顾问"; // 服务顾问班组名称 + + TicketTeamProgressWithItemsVO fwgwTeamVO = progressMap.get(fwgwWorkType); + if (fwgwTeamVO == null) { + fwgwTeamVO = new TicketTeamProgressWithItemsVO(); + fwgwTeamVO.setWorkType(fwgwWorkType); + fwgwTeamVO.setWorkTypeName(fwgwWorkTypeName); + fwgwTeamVO.setTotalItems(0); + fwgwTeamVO.setFinishedItems(0); + fwgwTeamVO.setCompletionRate(BigDecimal.ZERO); + progressMap.put(fwgwWorkType, fwgwTeamVO); + teamItemsMap.put(fwgwWorkType, new ArrayList<>()); + } + + // 创建出厂检验项目 + DlRepairTitemRespVO jsgdItemVO = new DlRepairTitemRespVO(); + jsgdItemVO.setId("jsgd"); + jsgdItemVO.setTicketId(ticketId); + jsgdItemVO.setItemName("出厂检验"); + jsgdItemVO.setItemType("01"); + jsgdItemVO.setFinished(jsgdFinished); + + // 创建交车项目 + DlRepairTitemRespVO jcItemVO = new DlRepairTitemRespVO(); + jcItemVO.setId("jc"); + jcItemVO.setTicketId(ticketId); + jcItemVO.setItemName("交车"); + jcItemVO.setItemType("01"); + jcItemVO.setFinished(jcFinished); + + // 创建结算项目 + DlRepairTitemRespVO jssqItemVO = new DlRepairTitemRespVO(); + jssqItemVO.setId("jssq"); + jssqItemVO.setTicketId(ticketId); + jssqItemVO.setItemName("结算"); + jssqItemVO.setItemType("01"); + jssqItemVO.setFinished(jssqFinished); + + // 添加服务顾问项目到服务顾问班组 + teamItemsMap.get(fwgwWorkType).add(jsgdItemVO); + teamItemsMap.get(fwgwWorkType).add(jcItemVO); + teamItemsMap.get(fwgwWorkType).add(jssqItemVO); + + fwgwTeamVO.setTotalItems(fwgwTeamVO.getTotalItems() + 3); + if (jsgdFinished) { + fwgwTeamVO.setFinishedItems(fwgwTeamVO.getFinishedItems() + 1); + } + if (jcFinished) { + fwgwTeamVO.setFinishedItems(fwgwTeamVO.getFinishedItems() + 1); + } + if (jssqFinished) { + fwgwTeamVO.setFinishedItems(fwgwTeamVO.getFinishedItems() + 1); + } + } + + /** + * 检查工单是否存在指定类型的记录 + * + * @param ticketId 工单ID + * @param type 记录类型 + * @return 是否存在该类型记录 + */ + private boolean hasRecordType(String ticketId, String type) { + return repairRecordsService.count(Wrappers.lambdaQuery() + .eq(RepairRecords::getTicketId, ticketId) + .eq(RepairRecords::getType, type)) > 0; + } + /** * 根据工单ID和班组统计该班组下工时项目完成情况 * @@ -1588,6 +1748,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl node = new HashMap<>(); node.put("code", code); node.put("name", name); + node.put("selectType", selectType); if (ifShowChildren) { @@ -2649,7 +2810,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl updateTickets = result.stream().map(item -> { DlRepairTickets ticket = new DlRepairTickets(); ticket.setId(item.getId()); - ticket.setNowRepairId(item.getAdviserId()); + ticket.setNowRepairId(Long.valueOf(item.getAdviserId())); ticket.setNowRepairName(item.getAdviserName()); return ticket; }).collect(Collectors.toList());