diff --git a/dl-module-company/src/main/java/cn/iocoder/yudao/module/business/controller/admin/BusinessChannelController.java b/dl-module-company/src/main/java/cn/iocoder/yudao/module/business/controller/admin/BusinessChannelController.java index 73da3550..9158926c 100644 --- a/dl-module-company/src/main/java/cn/iocoder/yudao/module/business/controller/admin/BusinessChannelController.java +++ b/dl-module-company/src/main/java/cn/iocoder/yudao/module/business/controller/admin/BusinessChannelController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.business.controller.admin; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.business.entity.DlBusinessChannel; import cn.iocoder.yudao.module.business.service.BusinessChannelService; @@ -21,22 +22,27 @@ public class BusinessChannelController { /** * @Author 许 - * @Description 获取客户来源和业务渠道 + * @Description 获取客户来源和业务渠道 * @Date 13:54 2025/9/8 * @Param [channel] - * @return cn.iocoder.yudao.framework.common.pojo.CommonResult> + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult> **/ @GetMapping("/list") public CommonResult> list(DlBusinessChannel channel) { return CommonResult.success(businessChannelService.list(Wrappers.lambdaQuery() .eq(ObjectUtil.isNotEmpty(channel.getType()), DlBusinessChannel::getType, channel.getType()) .like(ObjectUtil.isNotEmpty(channel.getName()), DlBusinessChannel::getName, channel.getName()) + .eq(StrUtil.isNotEmpty(channel.getSystemCode()), DlBusinessChannel::getSystemCode, channel.getSystemCode()) .orderByAsc(DlBusinessChannel::getSort))); } /** - * 新增业务渠道或客户来源 - */ + * @Author 许 + * @Description 新增业务渠道、来源 + * @Date 13:44 2025/9/9 + * @Param [channel] + * @return boolean + **/ @PostMapping("/add") public boolean addChannel(@RequestBody DlBusinessChannel channel) { if (ObjectUtil.isNotEmpty(channel.getUserIdList())) { @@ -50,8 +56,12 @@ public class BusinessChannelController { } /** - * 获取业务渠道或客户来源 - */ + * @Author 许 + * @Description 获取业务来源和渠道 + * @Date 13:45 2025/9/9 + * @Param [id] + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ @GetMapping("/{id}") public CommonResult getChannelById(@PathVariable("id") Long id) { DlBusinessChannel info = businessChannelService.getById(id); @@ -68,8 +78,12 @@ public class BusinessChannelController { } /** - * 修改业务渠道或客户来源 - */ + * @Author 许 + * @Description 修改 + * @Date 13:45 2025/9/9 + * @Param [channel] + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ @PutMapping("/update") public CommonResult updateChannel(@RequestBody DlBusinessChannel channel) { if (ObjectUtil.isNotEmpty(channel.getUserIdList())) { @@ -77,15 +91,19 @@ public class BusinessChannelController { .map(String::valueOf) .collect(Collectors.joining(",")); channel.setUserIds(userIds); - }else if (ObjectUtil.isEmpty(channel.getUserIds())) { + } else if (ObjectUtil.isEmpty(channel.getUserIds())) { channel.setUserIds(""); } return CommonResult.success(businessChannelService.updateById(channel)); } /** - * 删除业务渠道或客户来源 - */ + * @Author 许 + * @Description 删除 + * @Date 13:45 2025/9/9 + * @Param [id] + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ @DeleteMapping("/delete/{id}") public CommonResult deleteChannel(@PathVariable("id") Long id) { return CommonResult.success(businessChannelService.removeById(id)); diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessResp.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessResp.java index 36145e15..8ad08855 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessResp.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/vo/QueryBusinessResp.java @@ -65,4 +65,9 @@ public class QueryBusinessResp { * 经办人 */ private String handleName; + + /** + * 累计消费次数 + */ + private Integer consumeCount; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java index 6c389473..2e7797f2 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java @@ -124,6 +124,9 @@ public class DlTicketWaresController { @PostMapping("/audit") @Operation(summary = "审核") public CommonResult auditTicketWares(@RequestBody DlTicketWaresRespVO respVO){ + if (CollUtil.isEmpty(respVO.getItems())) { + throw exception0(500,"请添加配件"); + } dlTicketWaresService.auditTicketWares(respVO); return CommonResult.ok(); } 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 fea2c7a4..99c9e100 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 @@ -912,12 +912,34 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl ticketsInRange = this.list(queryWrapper); + // 进厂数(所有在范围内创建的) + Map newOrderStats = ticketsInRange.stream() + .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); + statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats)); + // 维修中(按 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)); + // 已竣工(通过 mapper 查询并按 repairType 分组) + Map overStats = getOverStatsByRepairType(startDate, endDate); + statsList.add(createStatsNode("overNum", "已竣工", overStats)); + + // 竣工已结算 + + // 竣工未结算 + List noPayCodeList = Arrays.asList("04", "05", "07", "01"); + Map noPayStats = ticketsInRange.stream() + .filter(item -> noPayCodeList.contains(item.getTicketsStatus())) + .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); + statsList.add(createStatsNode("noPayNum", "未结算", noPayStats)); + + // 已交车(通过 mapper 查询并按 repairType 分组) + Map giveCusStats = getGiveCusStatsByRepairType(startDate, endDate); + statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats)); + // 在厂(未交车且不是已完成状态 03) Map inCompanyStats = ticketsInRange.stream() .filter(item -> "0".equals(item.getIsHandover())) @@ -925,26 +947,6 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl noPayCodeList = Arrays.asList("04", "05", "07", "01"); - Map noPayStats = ticketsInRange.stream() - .filter(item -> noPayCodeList.contains(item.getTicketsStatus())) - .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("noPayNum", "未结算", noPayStats)); - - // 进厂数(所有在范围内创建的) - Map newOrderStats = ticketsInRange.stream() - .collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting())); - statsList.add(createStatsNode("newOrderNum", "进厂数", newOrderStats)); - - // 已完成(通过 mapper 查询并按 repairType 分组) - Map overStats = getOverStatsByRepairType(startDate, endDate); - statsList.add(createStatsNode("overNum", "已完成", overStats)); - - // 已交车(通过 mapper 查询并按 repairType 分组) - Map giveCusStats = getGiveCusStatsByRepairType(startDate, endDate); - statsList.add(createStatsNode("giveCusNum", "已交车", giveCusStats)); - // 添加到结果map resultMap.put("stats", statsList); @@ -968,13 +970,6 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl> result = repairTicketsMapper.selectMaps( -// queryWrapper.select("repair_type", "count(*) as count") -// .groupBy("repair_type") -// queryWrapper.getSqlSelect() -// ); - // 使用 group by 直接在数据库层面分组统计 List> result = repairTicketsMapper.selectTicketIdByParamsNew( queryWrapper.select("repair_type", "count(*) as count") 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 a6550a94..ecd0bd1e 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 @@ -58,4 +58,7 @@ public class DlRepairTicketsReqVO extends DlRepairTickets { /** 工种 */ private String workType; + + /** 时间类型 */ + private String timeType = "create"; } 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 298e15c0..3548156e 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 @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem; import lombok.Data; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -86,4 +87,7 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { private BigDecimal profitRateNo; private List groupByJobType; + + /** 结算时间 */ + private LocalDateTime settlementTime; } 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 031512f4..1bc1f6e1 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -124,6 +124,7 @@ + @@ -411,7 +412,7 @@