diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/PartnerOwnController.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/PartnerOwnController.java index 7ef46273..f43c5510 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/PartnerOwnController.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/controller/PartnerOwnController.java @@ -907,8 +907,8 @@ public class PartnerOwnController extends BaseController { * @return */ @GetMapping("/fileStatistics") - public CommonResult fileStatistics(@RequestParam(value = "startTime", required = false) String startTime, + public CommonResult fileStatistics(String servicePackageId,@RequestParam(value = "startTime", required = false) String startTime, @RequestParam(value = "endTime", required = false) String endTime){ - return success(partnerList.fileStatistics(startTime, endTime)); + return success(partnerList.fileStatistics(servicePackageId,startTime, endTime)); } } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionFileRecordMapper.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionFileRecordMapper.java index 23a88a4c..a36c37af 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionFileRecordMapper.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionFileRecordMapper.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.inspection.mapper; import cn.iocoder.yudao.module.inspection.entity.InspectionFileRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -20,4 +21,6 @@ public interface InspectionFileRecordMapper extends BaseMapper getRecordList(Long id); + + long queryCount(@Param("servicePackageId") String servicePackageId,@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/query/OrderTableQuery.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/query/OrderTableQuery.java index ad0e47f9..774b3e90 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/query/OrderTableQuery.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/query/OrderTableQuery.java @@ -40,4 +40,7 @@ public class OrderTableQuery { /** 等于1时是查询预约转订单 */ private String type; + + /** 检测时长 */ + private String[] inspectionTime; } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/AppInspectionPartnerService.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/AppInspectionPartnerService.java index b80af185..d74c0ddb 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/AppInspectionPartnerService.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/AppInspectionPartnerService.java @@ -251,5 +251,5 @@ public interface AppInspectionPartnerService extends IService * @param endTime 结束时间 * @return 结果 */ - Map fileStatistics(String startTime, String endTime); + Map fileStatistics(String servicePackageId,String startTime, String endTime); } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/InspectionFileRecordService.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/InspectionFileRecordService.java index 1e3b947c..f89b882e 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/InspectionFileRecordService.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/InspectionFileRecordService.java @@ -19,4 +19,6 @@ public interface InspectionFileRecordService extends IService getRecordList(Long id); + + long queryCount(String servicePackageId, String startTime, String endTime); } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/AppInspectionPartnerServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/AppInspectionPartnerServiceImpl.java index 3416c7fa..2283b144 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/AppInspectionPartnerServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/AppInspectionPartnerServiceImpl.java @@ -74,6 +74,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @Service("appInspectionPartnerService") @@ -1534,112 +1535,141 @@ public class AppInspectionPartnerServiceImpl extends ServiceImpl userIds = new HashSet<>(); + userIds.add(info.getUserId()); + userIds.add(info.getWorkId()); + if (info.getLeadManId() != null) userIds.add(info.getLeadManId()); + if (info.getMeetManId() != null) userIds.add(info.getMeetManId()); + + List userList = userService.list(Wrappers.lambdaQuery() + .in(AdminUserDO::getId,userIds)); // 你需新增 getUsers(Collection ids) + + //转为map + Map userMap = userList.stream().collect(Collectors.toMap(AdminUserDO::getId, Function.identity())); + + AdminUserDO buyUser = userMap.get(info.getUserId()); + AdminUserDO worker = userMap.get(info.getWorkId()); + AdminUserDO leadMan = userMap.get(info.getLeadManId()); + AdminUserDO meetMan = userMap.get(info.getMeetManId()); + InspectionInfoVo res = new InspectionInfoVo(); - BeanUtils.copyProperties(order, res); + BeanUtils.copyProperties(order, res); // 建议手动复制必要字段 + res.setInspectionId(info.getId()); - if (ObjectUtil.isNotNull(worker)) { - res.setWorkerAvatar(Optional.ofNullable(worker.getAvatar()).orElse(null)); - res.setWorkerName(Optional.ofNullable(worker.getNickname()).orElse(null)); + res.setBuyUserName(buyUser != null ? buyUser.getNickname() : ""); + res.setBuyUserPhone(buyUser != null ? buyUser.getMobile() : ""); + + if (worker != null) { + res.setWorkerAvatar(worker.getAvatar()); + res.setWorkerName(worker.getNickname()); res.setWorkerPhone(worker.getMobile()); } - res.setOtherName(Optional.ofNullable(info.getOtherName()).orElse(null)); - res.setOtherPhone(Optional.ofNullable(info.getOtherPhone()).orElse(null)); - res.setCustomerSource(Optional.ofNullable(info.getCustomerSource()).orElse(null)); - res.setBusinessChannel(Optional.ofNullable(info.getBusinessChannel()).orElse(null)); - if (ObjectUtil.isNotEmpty(info.getCarModel())) { - // 截取字符串到牌字 - String carModel = info.getCarModel(); - if (carModel != null && carModel.contains("牌")) { - res.setCarModel(carModel.substring(0, carModel.indexOf("牌"))); - } else { - res.setCarModel(carModel); // 或设置为 "" / null / "未知" 等默认值 - } + res.setOtherName(info.getOtherName()); + res.setOtherPhone(info.getOtherPhone()); + res.setCustomerSource(info.getCustomerSource()); + res.setBusinessChannel(info.getBusinessChannel()); + + // 车系处理 + res.setCarModel(extractCarModel(info.getCarModel())); + + // 处理检测时长 + if ("1".equals(info.getStatus())) { + long durationMs = calculateInspectionDuration(info); + res.setInspectionDuration(formatDuration(durationMs)); } - //判断检测是否完成 - if (info.getStatus().equals("1")){ - //计算检测时长以x小时x分展示 - // 计算时间差,单位为毫秒 - //判断结束时间是否为空 - long betweenMs = 0; - if (ObjectUtil.isNotNull(info.getEndTime())) { - betweenMs = DateUtil.betweenMs(info.getStartTime(), info.getEndTime()); - - }else { - //查询步骤表根据时间倒叙 - InspectionStepInfo one = stepInfoService.getOne(Wrappers.lambdaQuery().eq(InspectionStepInfo::getInspectionInfoId, info.getId()).orderByDesc(InspectionStepInfo::getCreateTime).last("LIMIT 1")); - betweenMs = DateUtil.betweenMs(info.getStartTime(), one.getUpdateTime()); - } - // 转换为小时和分钟 - long minutes = betweenMs / (1000 * 60); - long hours = minutes / 60; - long remainMinutes = minutes % 60; - res.setInspectionDuration(hours + "小时" + remainMinutes + "分"); - } - //根据车辆注册日期计算车龄 - if (ObjectUtil.isNotNull(info.getCarRegisterDate())) { + // 车龄 + if (info.getCarRegisterDate() != null) { res.setCarAge(DateUtil.betweenYear(info.getCarRegisterDate(), new Date(), true)); } - /*根据工单表中的leadManId查询对应的引车员*/ - if (ObjectUtil.isNotNull(info.getLeadManId())) { - AdminUserDO leadMan = adminUserService.getById(info.getLeadManId()); - if (ObjectUtil.isNotNull(leadMan)) { - res.setLeadManName(leadMan.getNickname()); - res.setLeadManId(info.getLeadManId()); - } + + if (leadMan != null) { + res.setLeadManName(leadMan.getNickname()); + res.setLeadManId(leadMan.getId()); } else { res.setLeadManName(""); } - /*根据工单表中的meetManId查询对应的 MeetMan*/ - if (ObjectUtil.isNotNull(info.getMeetManId())) { - AdminUserDO meetMan = adminUserService.getById(info.getMeetManId()); - if (ObjectUtil.isNotNull(meetMan)) { - res.setMeetManName(meetMan.getNickname()); - res.setMeetManId(info.getMeetManId()); - } + + if (meetMan != null) { + res.setMeetManName(meetMan.getNickname()); + res.setMeetManId(meetMan.getId()); } else { res.setMeetManName(""); } - res.setBuyUserName(Optional.ofNullable(buyUser.getNickname()).orElse("")); - res.setBuyUserPhone(buyUser.getMobile()); + + // 设置订单相关字段 + res.setGoodsId(order.getGoodsId()); + res.setGoodsPrice(order.getGoodsPrice()); + res.setIsOnline(order.getIsOnline()); + res.setOrderStatus(order.getOrderStatus()); + + // SKU 信息 + res.setGoodsName(sku != null ? sku.getSkuName() : null); + + // 图片 + res.setGoodsImage(goods != null ? goods.getImage() : null); + + // 检测信息字段 res.setCarNum(info.getCarNum()); res.setCategoryId(info.getCategoryId()); + res.setCarType(category != null ? category.getCategoryName() : null); res.setStartTime(info.getStartTime()); res.setEndTime(info.getEndTime()); res.setStatus(info.getStatus()); - res.setGoodsId(order.getGoodsId()); - res.setGoodsPrice(order.getGoodsPrice()); - res.setGoodsName(sku.getSkuName()); - res.setIsOnline(order.getIsOnline()); res.setRecheckCount(info.getRecheckCount()); res.setReinspectCount(info.getReinspectCount()); res.setIsRetrial(info.getIsRetrial()); res.setIsPass(info.getIsPass()); res.setRemark(info.getRemark()); res.setMakeCert(info.getMakeCert()); - res.setOrderStatus(order.getOrderStatus()); - ShopInspectionGoods goods = goodsService.getById(order.getGoodsId()); - res.setGoodsImage(goods.getImage()); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(InspectionStepInfo::getInspectionInfoId, inspectionInfoId).orderByAsc(InspectionStepInfo::getStepNum); - queryWrapper.orderBy(true, false, InspectionStepInfo::getId); + + // 步骤信息 List list = stepInfoService.listByInspectionInfoId(inspectionInfoId); if (CollectionUtil.isNotEmpty(list)) { res.setStepInfos(list); } - ShopInspectionCategory category = categoryService.getById(info.getCategoryId()); - res.setCarType(category.getCategoryName()); - // 查询节点表 - List workNodes = inspectionWorkNodeService.getWeorkNodesById(Integer.parseInt(String.valueOf(inspectionInfoId))); + + // 工作节点 + List workNodes = inspectionWorkNodeService.getWeorkNodesById(inspectionInfoId.intValue()); res.setWorkNodes(workNodes); + return res; } + private String extractCarModel(String carModel) { + if (StrUtil.isBlank(carModel)) return null; + int idx = carModel.indexOf("牌"); + return idx > 0 ? carModel.substring(0, idx) : carModel; + } + + private long calculateInspectionDuration(InspectionInfo info) { + if (info.getEndTime() != null) { + return DateUtil.betweenMs(info.getStartTime(), info.getEndTime()); + } + InspectionStepInfo latest = stepInfoService.getOne(Wrappers.lambdaQuery() + .eq(InspectionStepInfo::getInspectionInfoId, info.getId()) + .orderByDesc(InspectionStepInfo::getCreateTime).last("LIMIT 1")); + return latest != null ? DateUtil.betweenMs(info.getStartTime(), latest.getUpdateTime()) : 0; + } + + private String formatDuration(long ms) { + long minutes = ms / (1000 * 60); + return (minutes / 60) + "小时" + (minutes % 60) + "分"; + } + + + @Override public List workerInspectionList(Long workerId, String status, String searchValue) { return baseMapper.workerInspectionList(workerId, status, searchValue); @@ -2293,7 +2323,7 @@ public class AppInspectionPartnerServiceImpl extends ServiceImpl fileStatistics(String startTime, String endTime) { + public Map fileStatistics(String servicePackageId,String startTime, String endTime) { // 判断开始时间与结束时间如果为空 默认查询本月 if (StringUtils.isEmpty(startTime)) { startTime = DateUtil.format(DateUtil.beginOfMonth(new Date()), "yyyy-MM-dd"); @@ -2302,11 +2332,11 @@ public class AppInspectionPartnerServiceImpl extends ServiceImpllambdaQuery() + .eq(InspectionFile::getServicePackageId, servicePackageId) .between(InspectionFile::getCreateTime, startTime, endTime)); // 查询文件记录表 - long updateCount = inspectionFileRecordService.count(Wrappers.lambdaQuery() - .between(InspectionFileRecord::getCreateTime, startTime, endTime)); + long updateCount = inspectionFileRecordService.queryCount(servicePackageId, startTime, endTime); Map map = new HashMap<>(); map.put("addCount", addCount); diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileRecordServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileRecordServiceImpl.java index 69a59770..e5f078ec 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileRecordServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionFileRecordServiceImpl.java @@ -28,4 +28,15 @@ public class InspectionFileRecordServiceImpl extends ServiceImpl getRecordList(Long id) { return baseMapper.getRecordList(id); } + + /** + * @param servicePackageId + * @param startTime + * @param endTime + * @return + */ + @Override + public long queryCount(String servicePackageId, String startTime, String endTime) { + return baseMapper.queryCount(servicePackageId, startTime, endTime); + } } diff --git a/dl-module-inspection/src/main/resources/mapper/inspection/AppInspectionPartnerMapper.xml b/dl-module-inspection/src/main/resources/mapper/inspection/AppInspectionPartnerMapper.xml index e74689bc..9f0c40b6 100644 --- a/dl-module-inspection/src/main/resources/mapper/inspection/AppInspectionPartnerMapper.xml +++ b/dl-module-inspection/src/main/resources/mapper/inspection/AppInspectionPartnerMapper.xml @@ -705,6 +705,16 @@ FROM AND (TIMESTAMPDIFF(YEAR, ii.car_register_date, CURDATE()) >= #{query.carYear} AND TIMESTAMPDIFF(YEAR, ii.car_register_date, CURDATE()) < #{query.carYear} + 1) + + AND ii.start_time IS NOT NULL AND ii.end_time IS NOT NULL + AND TIMESTAMPDIFF(MINUTE, ii.start_time, ii.end_time) + BETWEEN #{query.inspectionTime[0]} AND #{query.inspectionTime[1]} + + + + AND ii.start_time IS NOT NULL AND ii.end_time IS NOT NULL + AND TIMESTAMPDIFF(MINUTE, ii.start_time, ii.end_time) >= #{query.inspectionTime[0]} + AND oi.deleted = '0' ) t diff --git a/dl-module-inspection/src/main/resources/mapper/inspection/InspectionFileRecordMapper.xml b/dl-module-inspection/src/main/resources/mapper/inspection/InspectionFileRecordMapper.xml index fd2cad22..fda021c7 100644 --- a/dl-module-inspection/src/main/resources/mapper/inspection/InspectionFileRecordMapper.xml +++ b/dl-module-inspection/src/main/resources/mapper/inspection/InspectionFileRecordMapper.xml @@ -10,4 +10,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where record.file_id = #{id} and record.deleted = 0 +