From 9dc4e188f0a6f3d4867189754e7c251d7a267091 Mon Sep 17 00:00:00 2001 From: xyc <3422692813@qq.com> Date: Fri, 19 Sep 2025 10:20:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B00919?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yudao/module/custom/entity/CarMain.java | 3 +- .../service/impl/CarMainServiceImpl.java | 21 ++-- .../resources/mapper/custom/CarMainMapper.xml | 2 +- .../iocoder/yudao/common/RecordTypeEnum.java | 3 +- .../admin/DlRepairTicketsController.java | 13 +++ .../tickets/entity/DlRepairTickets.java | 5 +- .../service/DlRepairTicketsService.java | 8 ++ .../impl/DlRepairTicketsServiceImpl.java | 96 +++++++++++++++++-- .../tickets/vo/DlRepairTicketsReqVO.java | 6 ++ .../tickets/vo/DlRepairTicketsRespVO.java | 1 + .../mapper/base/RepairStatisticsMapper.xml | 92 ++++++------------ .../mapper/tickets/DlRepairTicketsMapper.xml | 63 +++++++++++- 12 files changed, 227 insertions(+), 86 deletions(-) diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/entity/CarMain.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/entity/CarMain.java index 0c553c98..3ef5c8c4 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/entity/CarMain.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/entity/CarMain.java @@ -95,6 +95,7 @@ public class CarMain extends TenantBaseDO { * 下次年检日期 */ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) + @JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY, timezone = "GMT+8") private LocalDateTime nextInspectionDate; /** * 保险到期日期 @@ -157,4 +158,4 @@ public class CarMain extends TenantBaseDO { private BigDecimal shangye; /** 车龄 */ private Double carYear; -} \ No newline at end of file +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarMainServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarMainServiceImpl.java index bcf05a0d..64766312 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarMainServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/service/impl/CarMainServiceImpl.java @@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.label.entity.BusiLabel; import cn.iocoder.yudao.module.label.service.BusiLabelService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; @@ -126,15 +127,17 @@ public class CarMainServiceImpl extends ServiceImpl impl } //车俩品牌型号级联选择器返回值,第一位是品牌,第二位是型号 List brandAndModel = updateReqVO.getBrandAndModel(); - // 插入 CarMain carMain = BeanUtils.toBean(updateReqVO, CarMain.class); - carMain.setCarBrand(brandAndModel.get(0)); - //判断是否仅填入了品牌 - if (brandAndModel.size() > 1) { - //填入了型号 - carMain.setCarModel(brandAndModel.get(1)); - } else { - carMain.setCarModel(""); + if (CollectionUtils.isNotEmpty(brandAndModel)) { + // 插入 + carMain.setCarBrand(brandAndModel.get(0)); + //判断是否仅填入了品牌 + if (brandAndModel.size() > 1) { + //填入了型号 + carMain.setCarModel(brandAndModel.get(1)); + } else { + carMain.setCarModel(""); + } } //todo 计算下次保养时间,下次保养里程,下次年检时间,保险到期时间 baseMapper.updateById(carMain); @@ -525,4 +528,4 @@ public class CarMainServiceImpl extends ServiceImpl impl } -} \ No newline at end of file +} diff --git a/dl-module-base/src/main/resources/mapper/custom/CarMainMapper.xml b/dl-module-base/src/main/resources/mapper/custom/CarMainMapper.xml index 6cffa5c4..1dd0acb6 100644 --- a/dl-module-base/src/main/resources/mapper/custom/CarMainMapper.xml +++ b/dl-module-base/src/main/resources/mapper/custom/CarMainMapper.xml @@ -149,4 +149,4 @@ - \ No newline at end of file + diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java index 59134dcb..e20b94bd 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java @@ -93,7 +93,8 @@ public enum RecordTypeEnum { SK("sk", "收款"), PICKCAR("pickcar", "接车"), JSSQ("jssq", "结算申请"), - JSSP("jssp", "结算审批"); + JSSP("jssp", "结算审批"), + QRSK("qrsk", "确认收款"); /** * code 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 1716d1b5..beeb37ec 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 @@ -762,6 +762,19 @@ public class DlRepairTicketsController { return CommonResult.ok(); } + /** + * @Author 许 + * @Description 确认收款 + * @Date 11:12 2025/9/18 + * @Param [repairTicketsRespVO] + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @PostMapping("/payConfirm") + public CommonResult payConfirm(@RequestBody DlRepairTicketsRespVO repairTicketsRespVO) { + dlRepairTicketsService.payConfirm(repairTicketsRespVO); + return CommonResult.ok(); + } + /** * 格式化为百分比字符串 * @param value 值 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 88efa898..1c8bc1dc 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 @@ -249,9 +249,12 @@ public class DlRepairTickets extends TenantBaseDO { private BigDecimal jiaoqiang; /** 商业险保费 */ private BigDecimal shangye; - /** 支付状态 字典(repair_pat_status) */ private String payStatus; + /** 支付确认 0:未确认 1:已确认*/ + private String payConfirm; + /** 支付确认备注 */ + private String payConfirmRemark; /** 更新时上传的图片 */ @TableField(exist = false) 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 408f94f9..80650c5c 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 @@ -337,4 +337,12 @@ public interface DlRepairTicketsService extends IService { * @return java.util.List **/ Map getBossNumStatistics(String startDate, String endDate); + + /** + * @Author 许 + * @Description 确认收款 + * @Date 11:12 2025/9/18 + * @Param [repairTicketsRespVO] + **/ + void payConfirm(DlRepairTicketsRespVO repairTicketsRespVO); } 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 99c9e100..46d00d71 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 @@ -895,7 +895,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getBossNumStatistics(String startDate, String endDate) { + public Map getBossNumStatistics(String startDate, String endDate) { Map resultMap = new HashMap<>(); List> statsList = new ArrayList<>(); @@ -915,17 +915,17 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl newOrderStats = ticketsInRange.stream() .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats)); + statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang")); // 维修中(按 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)); + statsList.add(createStatsNode("workingNum", "维修中", workingStats, "weixiuzhong")); // 已竣工(通过 mapper 查询并按 repairType 分组) Map overStats = getOverStatsByRepairType(startDate, endDate); - statsList.add(createStatsNode("overNum", "已竣工", overStats)); + statsList.add(createStatsNode("overNum", "已竣工", overStats, "yijungong")); // 竣工已结算 @@ -934,18 +934,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)); + statsList.add(createStatsNode("noPayNum", "未结算", noPayStats, "weijiesuan")); // 已交车(通过 mapper 查询并按 repairType 分组) Map giveCusStats = getGiveCusStatsByRepairType(startDate, endDate); - statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats)); + statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats, "yijiaoche")); // 在厂(未交车且不是已完成状态 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)); + statsList.add(createStatsNode("inCompanyNum", "在厂", inCompanyStats, "zaichang")); // 添加到结果map resultMap.put("stats", statsList); @@ -957,6 +957,24 @@ public class DlRepairTicketsServiceImpl extends ServiceImpllambdaUpdate() + .eq(DlRepairTickets::getId, repairTicketsRespVO.getId()) + .set(DlRepairTickets::getPayConfirm, repairTicketsRespVO.getPayConfirm()) + .set(StringUtils.isNotEmpty(repairTicketsRespVO.getPayConfirmRemark()),DlRepairTickets::getPayConfirmRemark, repairTicketsRespVO.getPayConfirmRemark())); + + //添加记录 + repairRecordsService.saveRepairRecord(repairTicketsRespVO.getId(), null, RecordTypeEnum.QRSK.getCode(), RecordTypeEnum.QRSK.getName(), null, null); + } + // 获取已完成工单按维修类型分组的统计(优化版本) private Map getOverStatsByRepairType(String startDate, String endDate) { // 直接使用 mapper 查询已完成工单并按 repairType 分组 @@ -1015,11 +1033,18 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl createStatsNode(String code, String name, Map stats) { + /** + * @Author 许 + * @Description 创建统计节点 + * @Date 11:13 2025/9/12 + * @Param [code, name, stats, selectType] 统计项代码、名称、统计数据、选择类型 + * @return java.util.Map + **/ + private Map createStatsNode(String code, String name, Map stats, String selectType) { Map node = new HashMap<>(); node.put("code", code); node.put("name", name); + node.put("selectType", selectType); List> children = stats.entrySet().stream() .map(entry -> { @@ -2727,6 +2752,59 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getStatistics(DlRepairTicketsReqVO repairTicketsReqVO) { + if (!RepairCons.TICKETS_WAITING.equals(repairTicketsReqVO.getSelectType())) { + if (("jinchang".equals(repairTicketsReqVO.getTicketsStatus()) || + "yijungong".equals(repairTicketsReqVO.getTicketsStatus()) || + "yijiaoche".equals(repairTicketsReqVO.getTicketsStatus())) && StringUtils.isNotEmpty(repairTicketsReqVO.getStartDate())) { + //如果是查询进场、已竣工、已交车三个状态,同时选了时间范围的,需要单独处理 + String startDate = repairTicketsReqVO.getStartDate() + " 00:00:00"; + String endDate = repairTicketsReqVO.getEndDate() + " 23:59:59"; + List idList = new ArrayList<>(); + if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) { + //已竣工 + idList = repairTicketsMapper.selectTicketIdByParams(null, RecordTypeEnum.ZJ.getCode(), startDate, endDate); + } else if ("yijiaoche".equals(repairTicketsReqVO.getTicketsStatus())) { + //已交车 + idList = repairTicketsMapper.selectTicketIdByParams(null, RecordTypeEnum.JC.getCode(), startDate, endDate); + } else { + //进厂 + repairTicketsReqVO.setStartDate(startDate); + repairTicketsReqVO.setEndDate(endDate); + } + if (null != idList && !idList.isEmpty()) { + repairTicketsReqVO.setIdList(idList); + //时间查询条件置空 + repairTicketsReqVO.setStartDate(null); + repairTicketsReqVO.setEndDate(null); + } + } else { + //否则查询时间不生效,按维修状态查 + List statusList = new ArrayList<>(); + if ("weixiuzhong".equals(repairTicketsReqVO.getTicketsStatus())) { + //维修中 + statusList.add(TicketsStatusEnum.WORKING.getCode()); + } else if ("weijiesuan".equals(repairTicketsReqVO.getTicketsStatus())) { + //未结算 + statusList = Arrays.asList("04", "05", "07", "01"); + } else if ("zaichang".equals(repairTicketsReqVO.getTicketsStatus())) { + //在厂,就是没交车的,且不能是已作废和已完成的 + repairTicketsReqVO.setIsHandover("0"); + statusList = Arrays.asList("04", "05", "07", "01", "06", "02"); + } else if ("jinchang".equals(repairTicketsReqVO.getTicketsStatus())) { + //进厂 + statusList.add(TicketsStatusEnum.NO_WORK.getCode()); + } else if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) { + //已竣工 + statusList = Arrays.asList("07", "01", "06", "02", "08"); + } else if ("yijiaoche".equals(repairTicketsReqVO.getTicketsStatus())) { + //已交车 + repairTicketsReqVO.setIsHandover("1"); + } + if (!statusList.isEmpty()) { + repairTicketsReqVO.setStatusList(statusList); + } + } + } return baseMapper.getStatistics(repairTicketsReqVO); } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java index ecd0bd1e..5b719a66 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java @@ -61,4 +61,10 @@ public class DlRepairTicketsReqVO extends DlRepairTickets { /** 时间类型 */ private String timeType = "create"; + + /** 业务渠道 */ + private String busiFrom; + + /** 支付状态 receivable:应收款 receivedAmount:已收款 pendingAmount:代收款 */ + private String payStatus; } 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 3548156e..a60c1a9e 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 @@ -90,4 +90,5 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { /** 结算时间 */ private LocalDateTime settlementTime; + private String payTime; } diff --git a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml index b06ce8fd..045f0800 100644 --- a/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/base/RepairStatisticsMapper.xml @@ -123,7 +123,8 @@ GROUP BY drw.user_id,drr.ticket_id ORDER BY value DESC - - +