diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiReqVO.java index 1c4dbbf5..8c65daf9 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiReqVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.stockOperate.vo; +import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSo; import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSoi; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -31,5 +32,5 @@ public class DlRepairSoiReqVO extends DlRepairSoi { private String query; /** 供应商ID */ - private String supplierId; + private String supplierId; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java index 009b0068..aae60d60 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java @@ -348,6 +348,18 @@ public class DlRepairTicketsController { return success(dlRepairTicketsService.getPageType(repairTicketsReqVO, page)); } + /** + * @description : 根据工单id集合获取子项目 + * @author xyc + * @date 9:50 2025/11/11 + * @param [ticketIds, selectType] + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/getProjectByTicketIds") + public CommonResult getProjectByTicketIds(@RequestParam("ticketIds") List ticketIds, @RequestParam(value = "selectType", required = false) String selectType) { + return success(dlRepairTicketsService.getProjectByTicketIds(ticketIds, selectType)); + } + /** * 判断登录用户的角色,针对维修工单中的四个角色 * diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java index 45c9dbcc..ee4c86b1 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.tickets.entity; import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -80,4 +81,7 @@ public class DlTicketWares extends TenantBaseDO { private String safeMobile; /** 是否已完成申领(0未完成|1已完成) */ private String isEnd; -} \ No newline at end of file + + @TableField(exist = false) + private String vin; +} diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java index 1da62048..5dbbb7c6 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java @@ -52,6 +52,15 @@ public interface DlRepairTitemMapper extends BaseMapper { * @return java.util.List **/ List selectByTicketId(@Param("ticketId")String ticketId); + + /** + * @description : 根据工单ids 查询项目 + * @author xyc + * @date 10:03 2025/11/11 + * @param [ticketIds, selectType] + * @return java.util.List + **/ + List selectProjectByTicketIds(@Param("ticketIds") List ticketIds); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java index f01b8571..14b03533 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.tickets.service; import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets; +import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem; import cn.iocoder.yudao.module.tickets.vo.*; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -353,4 +354,13 @@ public interface DlRepairTicketsService extends IService { * @param repairTicketsRespVO {@link DlRepairTicketsRespVO} **/ void antiSettlement(DlRepairTicketsRespVO repairTicketsRespVO); + + /** + * @description : 根据工单ids查询项目 + * @author xyc + * @date 10:02 2025/11/11 + * @param [ticketIds, selectType] + * @return java.util.List + **/ + List getProjectByTicketIds(List ticketIds, String selectType); } 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 c519fa39..b3a30470 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 @@ -702,6 +702,17 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaQuery() + .eq(RepairRecords::getTicketId, id) + .eq(RepairRecords::getType, RecordTypeEnum.JSSQ.getCode()) + .orderByDesc(RepairRecords::getCreateTime) + .last("limit 1")); + + if (ObjectUtil.isNotEmpty(js)) { + result.setSettlementTime(js.getCreateTime()); + } } @@ -753,7 +764,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaUpdate() .eq(DlRepairTickets::getId, vo.getTicketId()) + .set(DlRepairTickets::getPayStatus, "01") .set(DlRepairTickets::getSettlementType, vo.getSettlementType())); /*添加结算数据*/ @@ -929,7 +941,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getBossNumStatistics(String startDate, String endDate, String busiFrom, String cusFrom,boolean isShowChildren) { + public Map getBossNumStatistics(String startDate, String endDate, String busiFrom, String cusFrom, boolean isShowChildren) { Map resultMap = new HashMap<>(); List> statsList = new ArrayList<>(); @@ -955,17 +967,17 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl newOrderStats = ticketsInRange.stream() // .filter(item -> TicketsStatusEnum.NO_WORK.getCode().equals(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang",isShowChildren)); + statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang", isShowChildren)); // 维修中(按 repairType 分组) Map workingStats = ticketsInRange.stream() .filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong",isShowChildren)); + statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong", isShowChildren)); // 已竣工(通过 mapper 查询并按 repairType 分组) Map overStats = getOverStatsByRepairType(startDate, endDate, busiFrom, cusFrom); - statsList.add(createStatsNode("overNum", "已竣工", overStats, "yijungong",isShowChildren)); + statsList.add(createStatsNode("overNum", "已竣工", overStats, "yijungong", isShowChildren)); // 竣工已结算 @@ -974,18 +986,18 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl noPayStats = ticketsInRange.stream() .filter(item -> noPayCodeList.contains(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan",isShowChildren)); + statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan", isShowChildren)); // 已交车(通过 mapper 查询并按 repairType 分组) Map giveCusStats = getGiveCusStatsByRepairType(startDate, endDate, busiFrom, cusFrom); - statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche",isShowChildren)); + statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche", isShowChildren)); // 在厂(未交车且不是已完成状态 03) Map inCompanyStats = ticketsInRange.stream() .filter(item -> "0".equals(item.getIsHandover())) .filter(item -> !"03".equals(item.getTicketsStatus())) .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang",isShowChildren)); + statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang", isShowChildren)); // 添加到结果map resultMap.put("stats", statsList); @@ -1009,7 +1021,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaUpdate() .eq(DlRepairTickets::getId, repairTicketsRespVO.getId()) .set(DlRepairTickets::getPayConfirm, repairTicketsRespVO.getPayConfirm()) - .set(StringUtils.isNotEmpty(repairTicketsRespVO.getPayConfirmRemark()),DlRepairTickets::getPayConfirmRemark, repairTicketsRespVO.getPayConfirmRemark())); + .set(StringUtils.isNotEmpty(repairTicketsRespVO.getPayConfirmRemark()), DlRepairTickets::getPayConfirmRemark, repairTicketsRespVO.getPayConfirmRemark())); //添加记录 repairRecordsService.saveRepairRecord(repairTicketsRespVO.getId(), null, RecordTypeEnum.QRSK.getCode(), RecordTypeEnum.QRSK.getName(), null, null); @@ -1031,8 +1043,52 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl + * @description : 根据工单ids查询项目 + * @author xyc + * @date 10:02 2025/11/11 + **/ + @Override + public List getProjectByTicketIds(List ticketIds, String selectType) { + List dlRepairTitems = repairTitemMapper.selectProjectByTicketIds(ticketIds); + + // 查询记录表是否有未收款 + List records = repairRecordsService.list(Wrappers.lambdaQuery() + .in(RepairRecords::getTicketId, ticketIds) + .in(RepairRecords::getType, RecordTypeEnum.SK.getCode(), RecordTypeEnum.TZQC.getCode())); + Set paidTicketIds = records.stream().filter(item -> RecordTypeEnum.SK.getCode().equals(item.getType())).map(item -> item.getTicketId()).collect(Collectors.toSet()); + Set qcTicketIds = records.stream().filter(item -> RecordTypeEnum.TZQC.getCode().equals(item.getType())).map(item -> item.getTicketId()).collect(Collectors.toSet()); + + for (String item : ticketIds) { + if (!paidTicketIds.contains(item)) { + // 创建未收款记录 + DlRepairTitem unpaidItem = new DlRepairTitem(); + unpaidItem.setTicketId(item); + unpaidItem.setItemName("未收款"); + + // 将未收款记录添加到临时列表 + dlRepairTitems.add(unpaidItem); + } + if (!qcTicketIds.contains(item)) { + // 创建未收款记录 + DlRepairTitem unpaidItem = new DlRepairTitem(); + unpaidItem.setTicketId(item); + unpaidItem.setItemName("未取车"); + + // 将未收款记录添加到临时列表 + dlRepairTitems.add(unpaidItem); + } + } + + + return dlRepairTitems; + } + // 获取已完成工单按维修类型分组的统计(优化版本) - private Map getOverStatsByRepairType(String startDate, String endDate,String busiFrom, String cusFrom) { + private Map getOverStatsByRepairType(String startDate, String endDate, String busiFrom, String cusFrom) { // 直接使用 mapper 查询已完成工单并按 repairType 分组 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.ne("drt.tickets_status", "03"); // 已完成状态 @@ -1056,7 +1112,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getGiveCusStatsByRepairType(String startDate, String endDate,String busiFrom, String cusFrom) { + private Map getGiveCusStatsByRepairType(String startDate, String endDate, String busiFrom, String cusFrom) { // 直接使用 mapper 查询已交车工单并按 repairType 分组 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_handover", "1"); // 已交车 @@ -1132,6 +1188,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl calculateAmountStats(String startDate, String endDate) { return calculateAmountStats(startDate, endDate, null, null); } + // 计算金额统计 private Map calculateAmountStats(String startDate, String endDate, String busiFrom, String cusFrom) { Map amountMap = new HashMap<>(); @@ -1987,7 +2044,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl ids = permissionApi.getUserIdByRoleId(roleInfo.getId()); - if (CollectionUtil.isEmpty(ids)) return; + if (CollectionUtil.isEmpty(ids)) return; // 如果是移交给总检就需要通知总检并让其总检 if (RecordTypeEnum.SGWCZJ.getCode().equals(respVO.getRecordType()) && "02".equals(respVO.getFinishType())) { // 工单移交给总检(理论上讲只有一个总检,就算有多个这里面也只给一个) 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 c167f4a7..d9ca22f9 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 @@ -97,4 +97,9 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { /** 收款账户 */ private String receivablesAccount; + + /** + * 实收金额 + */ + private BigDecimal realActualMoney; } diff --git a/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml b/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml index b07bb087..7dcae4ee 100644 --- a/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml @@ -68,6 +68,9 @@ drw.model like concat('%', #{map.query}, '%') ) + + and so.supplier_id = #{map.supplierId} + 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 5ff5a2a1..693c71d7 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -200,20 +200,23 @@ SELECT * FROM dl_repair_booking WHERE tickets_id = #{id} + + diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml index 75b3b7fd..e75f9cbc 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml @@ -26,6 +26,7 @@ + @@ -50,10 +51,12 @@ dtw.to_safe, dtw.safe_name, dtw.safe_contact, - dtw.safe_mobile + dtw.safe_mobile, + bcm.vin from dl_ticket_wares dtw left join dl_repair_tickets drt on dtw.ticket_id = drt.id + left join base_car_main bcm on bcm.id = dtw.car_id where dtw.deleted = '0'