From 87e1cb74737f10e0d08322e533577231c89f8815 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 30 Oct 2025 20:03:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=91=84=E5=83=8F=E5=A4=B4=E6=8B=8D=E6=91=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E8=BD=A6=E8=BE=86=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/test/MaterialsTest.java | 17 +- .../cycle/IncSyncYs7DeviceCapturePicData.java | 16 ++ .../enums/RecognizerTypeEnum.java | 24 +++ .../materials/domain/MatMaterialIssue.java | 5 + .../impl/MatMaterialIssueServiceImpl.java | 2 + .../WebSocketConfig.java | 2 +- .../impl/OthYs7DeviceImgServiceImpl.java | 49 +++-- .../app/VehVehicleInfoAppController.java | 85 +++++++++ .../app/VehVehicleTripAppController.java | 2 +- .../vehicle/domain/VehVehicleApply.java | 8 +- .../vehicle/domain/VehVehicleTrip.java | 8 +- .../VehVehicleApplyCreateReq.java | 8 +- .../VehVehicleApplyUpdateReq.java | 8 +- .../vehicletrip/VehVehicleTripCreateReq.java | 8 +- .../vehicletrip/VehVehicleTripMyQueryReq.java | 4 +- .../vehicletrip/VehVehicleTripQueryReq.java | 4 +- .../vehicletrip/VehVehicleTripUpdateReq.java | 8 +- .../vehicle/domain/vo/VehVehicleApplyVo.java | 8 +- .../vehicle/domain/vo/VehVehicleTripVo.java | 13 +- .../service/IVehVehicleTripService.java | 8 + .../impl/VehVehicleTripServiceImpl.java | 171 ++++++++++++------ .../mapper/vehicle/VehVehicleTripMapper.xml | 8 +- 22 files changed, 352 insertions(+), 114 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleInfoAppController.java diff --git a/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/MaterialsTest.java b/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/MaterialsTest.java index 36a79ce2..205c876d 100644 --- a/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/MaterialsTest.java +++ b/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/MaterialsTest.java @@ -1,6 +1,5 @@ package org.dromara.test; -import cn.hutool.core.collection.CollUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.dromara.materials.domain.MatMaterialIssue; @@ -17,6 +16,7 @@ import org.springframework.boot.test.context.SpringBootTest; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -49,12 +49,15 @@ public class MaterialsTest { List materials = materialsService.lambdaQuery() .eq(MatMaterials::getProjectId, PROJECT_ID) .list(); + Set materialIds = materials.stream().map(MatMaterials::getId).collect(Collectors.toSet()); + List inventoryList = materialsInventoryService.lambdaQuery() + .in(MatMaterialsInventory::getMaterialsId, materialIds) + .eq(MatMaterialsInventory::getOutPut, MatMaterialsInventoryOutPutEnum.OUT.getValue()) + .list(); Map> map = materials.stream() .collect(Collectors.groupingBy(MatMaterials::getFormCode)); - for (Map.Entry> entry : map.entrySet()) { - String key = entry.getKey(); - List value = entry.getValue(); - } + + for (MatMaterials material : materials) { String formCode = material.getFormCode(); // 查看入库数据 @@ -62,13 +65,13 @@ public class MaterialsTest { .eq(MatMaterialReceive::getFormCode, formCode) .one(); // 查看出库数据 - List inventoryList = materialsInventoryService.lambdaQuery() +/* List inventoryList = materialsInventoryService.lambdaQuery() .eq(MatMaterialsInventory::getMaterialsId, material.getId()) .eq(MatMaterialsInventory::getOutPut, MatMaterialsInventoryOutPutEnum.OUT.getValue()) .list(); if (CollUtil.isEmpty(inventoryList)) { continue; - } + }*/ // 创建领料出库数据 List issueList = inventoryList.stream().map(inventory -> { MatMaterialIssue issue = new MatMaterialIssue(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java index 29c727de..315a23a9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncYs7DeviceCapturePicData.java @@ -1,5 +1,6 @@ package org.dromara.job.cycle; +import cn.hutool.core.collection.CollUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.dromara.manager.ys7manager.Ys7Manager; @@ -10,6 +11,8 @@ import org.dromara.other.domain.enums.OthDeviceStatusEnum; import org.dromara.other.service.IOthDevicePresetService; import org.dromara.other.service.IOthYs7DeviceImgService; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.safety.domain.HseViolationLevel; +import org.dromara.safety.service.IHseViolationLevelService; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -40,6 +43,9 @@ public class IncSyncYs7DeviceCapturePicData { @Resource private IOthYs7DeviceImgService ys7DeviceImgService; + @Resource + private IHseViolationLevelService violationLevelService; + @Resource private Ys7Manager ys7Manager; @@ -49,11 +55,21 @@ public class IncSyncYs7DeviceCapturePicData { @Scheduled(cron = "0 */10 7-19 * * ?") public void run() { log.info("执行萤石设备抓拍图片"); + // 获取所有项目的等级信息 + List allLevel = violationLevelService.lambdaQuery() + .select(HseViolationLevel::getId, HseViolationLevel::getProjectId) + .list(); + Set projectIds = allLevel.stream().map(HseViolationLevel::getProjectId).collect(Collectors.toSet()); // 查询所有在线的摄像头设备,仅获取必要字段 List deviceList = ys7DeviceService.lambdaQuery() .select(OthYs7Device::getId, OthYs7Device::getDeviceSerial, OthYs7Device::getDeviceName) + .in(OthYs7Device::getProjectId, projectIds) // 仅获取设置了安全等级项目的摄像头 .eq(OthYs7Device::getStatus, OthDeviceStatusEnum.ONLINE.getValue()) .list(); + if (CollUtil.isEmpty(deviceList)) { + log.info("没有可拍摄的摄像头设备"); + return; + } // 提取设备序列号用于后续查询预置位 List deviceSerialList = deviceList.stream() .map(OthYs7Device::getDeviceSerial).toList(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/recognizermanager/enums/RecognizerTypeEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/recognizermanager/enums/RecognizerTypeEnum.java index c969831f..38f0a4d6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/recognizermanager/enums/RecognizerTypeEnum.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/recognizermanager/enums/RecognizerTypeEnum.java @@ -3,6 +3,7 @@ package org.dromara.manager.recognizermanager.enums; import lombok.Getter; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -48,6 +49,15 @@ public enum RecognizerTypeEnum { return null; } + public static RecognizerTypeEnum fromCode(String code) { + for (RecognizerTypeEnum type : RecognizerTypeEnum.values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; + } + /** * 将多个 RecognizerTypeEnum 拼接为接口识别参数字符串(","分隔) */ @@ -60,4 +70,18 @@ public enum RecognizerTypeEnum { .collect(Collectors.joining(",")); } + /** + * 将多个 code 转换为 RecognizerTypeEnum + * + * @param codes code列表 + * @return RecognizerTypeEnum列表 + */ + public static List listFromCodes(List codes) { + return codes.stream() + .map(RecognizerTypeEnum::fromCode) + .filter(Objects::nonNull) + .distinct() + .toList(); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialIssue.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialIssue.java index fefb3784..1345a58a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialIssue.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialIssue.java @@ -68,6 +68,11 @@ public class MatMaterialIssue extends BaseEntity { */ private String issueUnit; + /** + * 领料单位id + */ + private Long issueUnitId; + /** * 领用人 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java index fe1325db..b27faa28 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatMaterialIssueServiceImpl.java @@ -270,7 +270,9 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl imgList) { List saveList = new ArrayList<>(); List recordList = new ArrayList<>(); + // 获取项目id + Set projectIds = imgList.stream().map(OthYs7DeviceImgCreateByCapture::getProjectId).collect(Collectors.toSet()); + // 获取安全等级设置 + List levelList = violationLevelService.lambdaQuery() + .in(HseViolationLevel::getProjectId, projectIds) + .list(); + if (CollUtil.isEmpty(levelList)) { + log.error("未设置安全等级"); + return; + } + Map> level = new HashMap<>(); + Map> levelMap = levelList.stream() + .collect(Collectors.groupingBy(HseViolationLevel::getProjectId)); + for (Map.Entry> entry : levelMap.entrySet()) { + List recognizerTypeEnums = entry.getValue().stream().map(l -> { + List levels = StringUtils.splitList(l.getViolationType()); + return RecognizerTypeEnum.listFromCodes(levels); + }).filter(CollUtil::isNotEmpty) + .flatMap(Collection::stream) + .distinct() + .toList(); + level.put(entry.getKey(), recognizerTypeEnums); + } + if (CollUtil.isEmpty(level)) { + log.error("未设置安全等级"); + return; + } for (OthYs7DeviceImgCreateByCapture img : imgList) { OthYs7DeviceImg othYs7DeviceImg = new OthYs7DeviceImg(); String url = img.getUrl(); @@ -220,17 +253,11 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl recTypes = List.of(RecognizerTypeEnum.NO_EQUIPMENT, -// RecognizerTypeEnum.NO_HELMET, -// RecognizerTypeEnum.NO_EQUIPMENT, -// RecognizerTypeEnum.NO_VEST, -// RecognizerTypeEnum.SMOKE, -// RecognizerTypeEnum.FIRE); - List recTypes = List.of( - RecognizerTypeEnum.COLUMN, - RecognizerTypeEnum.PANEL, - RecognizerTypeEnum.BRACKET, - RecognizerTypeEnum.HOLE); + List recTypes = level.get(img.getProjectId()); + if (CollUtil.isEmpty(recTypes)) { + log.error("未设置安全等级"); + continue; + } RecognizeVo recognizeVo = null; try { recognizeVo = recognizerManager.recognize(ossUrl, recTypes); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleInfoAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleInfoAppController.java new file mode 100644 index 00000000..19b37bc7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleInfoAppController.java @@ -0,0 +1,85 @@ +package org.dromara.vehicle.controller.app; + +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.vehicle.domain.bo.VehVehicleInfoBo; +import org.dromara.vehicle.domain.vo.VehVehicleInfoVo; +import org.dromara.vehicle.service.IVehVehicleInfoService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author lilemy + * @date 2025-10-30 11:51 + */ +@Validated +@RestController +@RequestMapping("/app/vehicle/vehicleInfo") +public class VehVehicleInfoAppController extends BaseController { + + @Resource + private IVehVehicleInfoService vehicleInfoService; + + /** + * 查询车辆信息列表 + */ + @GetMapping("/list") + public TableDataInfo list(VehVehicleInfoBo bo, PageQuery pageQuery) { + return vehicleInfoService.queryPageList(bo, pageQuery); + } + + /** + * 获取车辆信息详细信息 + * + * @param id 主键 + */ + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(vehicleInfoService.queryById(id)); + } + + /** + * 新增车辆信息 + */ + @Log(title = "车辆信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody VehVehicleInfoBo bo) { + return toAjax(vehicleInfoService.insertByBo(bo)); + } + + /** + * 修改车辆信息 + */ + @Log(title = "车辆信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody VehVehicleInfoBo bo) { + return toAjax(vehicleInfoService.updateByBo(bo)); + } + + /** + * 删除车辆信息 + * + * @param ids 主键串 + */ + @Log(title = "车辆信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(vehicleInfoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleTripAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleTripAppController.java index 148e90b8..41a25fc6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleTripAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/app/VehVehicleTripAppController.java @@ -46,7 +46,7 @@ public class VehVehicleTripAppController extends BaseController { */ @GetMapping("/myList") public R> queryMyList(VehVehicleTripMyQueryReq req) { - return R.ok(vehicleTripService.queryMyList(req)); + return R.ok(vehicleTripService.queryMyAppList(req)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleApply.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleApply.java index 83abc90c..62189cc5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleApply.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleApply.java @@ -61,22 +61,22 @@ public class VehVehicleApply extends BaseEntity { /** * 出发地经度 */ - private String startLat; + private String startLng; /** * 出发地纬度 */ - private String startLng; + private String startLat; /** * 目的地经度 */ - private String endLat; + private String endLng; /** * 目的地纬度 */ - private String endLng; + private String endLat; /** * 乘车状态 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleTrip.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleTrip.java index 2240f7bf..c0d420c5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleTrip.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleTrip.java @@ -65,22 +65,22 @@ public class VehVehicleTrip extends BaseEntity { private String endPlace; /** - * 出发地经度 + * 出发地纬度 */ private String startLat; /** - * 出发地纬度 + * 出发地经度 */ private String startLng; /** - * 目的地经度 + * 目的地纬度 */ private String endLat; /** - * 目的地纬度 + * 目的地经度 */ private String endLng; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyCreateReq.java index 2a879adc..a0a1df80 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyCreateReq.java @@ -54,24 +54,24 @@ public class VehVehicleApplyCreateReq implements Serializable { /** * 出发地经度 */ - private String startLat; + private String startLng; /** * 出发地纬度 */ - private String startLng; + private String startLat; /** * 目的地经度 */ @NotBlank(message = "目的地经度不能为空") - private String endLat; + private String endLng; /** * 目的地纬度 */ @NotBlank(message = "目的地纬度不能为空") - private String endLng; + private String endLat; /** * 备注 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyUpdateReq.java index b60848db..d2405e2f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicleapply/VehVehicleApplyUpdateReq.java @@ -45,22 +45,22 @@ public class VehVehicleApplyUpdateReq implements Serializable { /** * 出发地经度 */ - private String startLat; + private String startLng; /** * 出发地纬度 */ - private String startLng; + private String startLat; /** * 目的地经度 */ - private String endLat; + private String endLng; /** * 目的地纬度 */ - private String endLng; + private String endLat; /** * 备注 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripCreateReq.java index 9a4209ad..a34fc0a1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripCreateReq.java @@ -59,25 +59,25 @@ public class VehVehicleTripCreateReq implements Serializable { * 出发地经度 */ @NotBlank(message = "出发地经度不能为空") - private String startLat; + private String startLng; /** * 出发地纬度 */ @NotBlank(message = "出发地纬度不能为空") - private String startLng; + private String startLat; /** * 目的地经度 */ @NotBlank(message = "目的地经度不能为空") - private String endLat; + private String endLng; /** * 目的地纬度 */ @NotBlank(message = "目的地纬度不能为空") - private String endLng; + private String endLat; /** * 计划出发时间 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripMyQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripMyQueryReq.java index 0dff686e..d25872b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripMyQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripMyQueryReq.java @@ -17,7 +17,9 @@ public class VehVehicleTripMyQueryReq implements Serializable { private static final long serialVersionUID = 4251601419123102085L; /** - * 查询类型(1待出行 2预约中 3已完成) + * 查询类型 + * web(1待出行 2预约中 3已完成) + * app(0待出行 1进行中 2预约中 3已完成) */ @NotBlank(message = "查询类型不能为空") private String type; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripQueryReq.java index 0e508ac9..bfd1bcfe 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripQueryReq.java @@ -29,12 +29,12 @@ public class VehVehicleTripQueryReq implements Serializable { /** * 目的地经度 */ - private String endLat; + private String endLng; /** * 目的地纬度 */ - private String endLng; + private String endLat; /** * 计划出发时间 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripUpdateReq.java index dbb21b7c..2fe1c6e2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripUpdateReq.java @@ -61,22 +61,22 @@ public class VehVehicleTripUpdateReq implements Serializable { /** * 出发地经度 */ - private String startLat; + private String startLng; /** * 出发地纬度 */ - private String startLng; + private String startLat; /** * 目的地经度 */ - private String endLat; + private String endLng; /** * 目的地纬度 */ - private String endLng; + private String endLat; /** * 计划出发时间 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleApplyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleApplyVo.java index 929d79b0..4708dc74 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleApplyVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleApplyVo.java @@ -75,25 +75,25 @@ public class VehVehicleApplyVo implements Serializable { * 出发地经度 */ @ExcelProperty(value = "出发地经度") - private String startLat; + private String startLng; /** * 出发地纬度 */ @ExcelProperty(value = "出发地纬度") - private String startLng; + private String startLat; /** * 目的地经度 */ @ExcelProperty(value = "目的地经度") - private String endLat; + private String endLng; /** * 目的地纬度 */ @ExcelProperty(value = "目的地纬度") - private String endLng; + private String endLat; /** * 乘车状态 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripVo.java index a545238d..736e72eb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripVo.java @@ -81,25 +81,25 @@ public class VehVehicleTripVo implements Serializable { * 出发地经度 */ @ExcelProperty(value = "出发地经度") - private String startLat; + private String startLng; /** * 出发地纬度 */ @ExcelProperty(value = "出发地纬度") - private String startLng; + private String startLat; /** * 目的地经度 */ @ExcelProperty(value = "目的地经度") - private String endLat; + private String endLng; /** * 目的地纬度 */ @ExcelProperty(value = "目的地纬度") - private String endLng; + private String endLat; /** * 计划出发时间 @@ -155,6 +155,11 @@ public class VehVehicleTripVo implements Serializable { */ private String distanceScore; + /** + * 时间 + */ + private String time; + /** * 时间评分 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleTripService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleTripService.java index 08c61017..962d7a65 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleTripService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleTripService.java @@ -44,6 +44,14 @@ public interface IVehVehicleTripService extends IService { */ List queryMyList(VehVehicleTripMyQueryReq req); + /** + * 查询当前用户车辆出行记录列表 + * + * @param req 列表查询条件 + * @return 当前用户车辆出行记录列表 + */ + List queryMyAppList(VehVehicleTripMyQueryReq req); + /** * 查询符合条件的车辆出行记录列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleTripServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleTripServiceImpl.java index 5fc38b4b..32b03c83 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleTripServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleTripServiceImpl.java @@ -14,6 +14,7 @@ import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -96,6 +97,16 @@ public class VehVehicleTripServiceImpl extends ServiceImpl= 1) { result = baseMapper.selectVehicleTripPage(pageQuery.build(), req); + result.getRecords().forEach(trip -> { + Date startTime = trip.getStartTime(); + Date date = DateUtils.toDate(req.getStartTime()); + // 判断日期 + if (date.after(startTime)) { + DateUtils.getTimeDifference(startTime, date); + } else { + DateUtils.getTimeDifference(date, startTime); + } + }); } else { result = baseMapper.selectVoPage(pageQuery.build(), buildQueryWrapper(req)); } @@ -115,8 +126,6 @@ public class VehVehicleTripServiceImpl extends ServiceImpl tripList = new ArrayList<>(); // --- 一、查询当前用户创建的行程 --- List createdTrips = this.lambdaQuery() .eq(VehVehicleTrip::getCreateBy, userId) @@ -125,10 +134,6 @@ public class VehVehicleTripServiceImpl extends ServiceImpl tripIds = createdTrips.stream() - .map(VehVehicleTrip::getId) - .collect(Collectors.toSet()); // --- 二、查询当前用户作为乘客的申请 --- List userApplies = vehicleApplyService.lambdaQuery() .eq(VehVehicleApply::getCreateBy, userId) @@ -136,57 +141,42 @@ public class VehVehicleTripServiceImpl extends ServiceImpl applyList = new ArrayList<>(userApplies); - // 收集申请对应的行程id - tripIds.addAll(userApplies.stream() - .map(VehVehicleApply::getTripId) - .collect(Collectors.toSet())); - // 收集申请id - Set applyIds = userApplies.stream() - .map(VehVehicleApply::getId) - .collect(Collectors.toSet()); - // --- 三、查询这些行程Id对应的行程(合并创建的与乘坐的) --- - if (CollUtil.isNotEmpty(tripIds)) { - List trips = this.lambdaQuery() - .in(VehVehicleTrip::getId, tripIds) - .list(); - tripList.addAll(trips); - } - // --- 四、查询这些行程对应的有效申请 --- - if (CollUtil.isNotEmpty(tripIds)) { - List applies = vehicleApplyService.lambdaQuery() - .in(VehVehicleApply::getTripId, tripIds) - .notIn(CollUtil.isNotEmpty(applyIds), VehVehicleApply::getId, applyIds) - .ne(VehVehicleApply::getStatus, VehApplyStatusEnum.CANCELED.getValue()) - .list(); - applyList.addAll(applies); - } // 整合数据 - List result = new ArrayList<>(); - if (CollUtil.isEmpty(tripList)) { - return result; + return buildTripMyVoList(createdTrips, userApplies, userId); + } + + /** + * 查询当前用户车辆出行记录列表 + * + * @param req 列表查询条件 + * @return 当前用户车辆出行记录列表 + */ + @Override + public List queryMyAppList(VehVehicleTripMyQueryReq req) { + String type = req.getType(); + Long userId = LoginHelper.getUserId(); + if (userId == null) { + throw new ServiceException("请先登录", HttpStatus.UNAUTHORIZED); } - List tripMyVos = new ArrayList<>(tripList.stream().map(trip -> { - VehVehicleTripMyVo tripMyVo = new VehVehicleTripMyVo(); - BeanUtils.copyProperties(trip, tripMyVo); - List list = applyList.stream() - .filter(apply -> apply.getTripId().equals(trip.getId())) - .toList(); - if (CollUtil.isNotEmpty(list)) { - // 封装数据 - List applyVoList = list.stream().map(apply -> { - VehVehicleApplyVo applyVo = new VehVehicleApplyVo(); - BeanUtils.copyProperties(apply, applyVo); - return applyVo; - }).toList(); - tripMyVo.setApplyList(applyVoList); - } - tripMyVo.setIsVehicleOwner(trip.getCreateBy().equals(userId) ? 1 : 0); - return tripMyVo; - }).toList()); - // 根据出行时间排序 - tripMyVos.sort(Comparator.comparing(VehVehicleTripMyVo::getStartTime)); - return tripMyVos; + // --- 一、查询当前用户创建的行程 --- + List createdTrips = this.lambdaQuery() + .eq(VehVehicleTrip::getCreateBy, userId) + .eq("0".equals(type) || "2".equals(type), VehVehicleTrip::getTripStatus, VehTripStatusEnum.READY_DEPART.getValue()) + .eq("0".equals(type), VehVehicleTrip::getReviewStatus, BusinessStatusEnum.FINISH.getStatus()) + .eq("1".equals(type), VehVehicleTrip::getTripStatus, VehTripStatusEnum.UNDERWAY.getValue()) + .ne("2".equals(type), VehVehicleTrip::getReviewStatus, BusinessStatusEnum.FINISH.getStatus()) + .eq("3".equals(type), VehVehicleTrip::getTripStatus, VehTripStatusEnum.COMPLETED.getValue()) + .list(); + // --- 二、查询当前用户作为乘客的申请 --- + List userApplies = vehicleApplyService.lambdaQuery() + .eq(VehVehicleApply::getCreateBy, userId) + .eq("0".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.CONFIRMED.getValue()) + .eq("1".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.ALREADY.getValue()) + .notIn("2".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.ARRIVED.getValue(), VehApplyStatusEnum.ALREADY.getValue()) + .eq("3".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.ARRIVED.getValue()) + .list(); + // 整合数据 + return buildTripMyVoList(createdTrips, userApplies, userId); } /** @@ -475,6 +465,77 @@ public class VehVehicleTripServiceImpl extends ServiceImpl buildTripMyVoList(List createdTrips, + List userApplies, + Long userId) { + // 收集行程id + Set tripIds = createdTrips.stream() + .map(VehVehicleTrip::getId) + .collect(Collectors.toSet()); + List applyList = new ArrayList<>(userApplies); + // 收集申请对应的行程id + tripIds.addAll(userApplies.stream() + .map(VehVehicleApply::getTripId) + .collect(Collectors.toSet())); + // 收集申请id + Set applyIds = userApplies.stream() + .map(VehVehicleApply::getId) + .collect(Collectors.toSet()); + // --- 三、查询这些行程Id对应的行程(合并创建的与乘坐的) --- + List tripList = new ArrayList<>(); + if (CollUtil.isNotEmpty(tripIds)) { + List trips = this.lambdaQuery() + .in(VehVehicleTrip::getId, tripIds) + .list(); + tripList.addAll(trips); + } + // --- 四、查询这些行程对应的有效申请 --- + if (CollUtil.isNotEmpty(tripIds)) { + List applies = vehicleApplyService.lambdaQuery() + .in(VehVehicleApply::getTripId, tripIds) + .notIn(CollUtil.isNotEmpty(applyIds), VehVehicleApply::getId, applyIds) + .ne(VehVehicleApply::getStatus, VehApplyStatusEnum.CANCELED.getValue()) + .list(); + applyList.addAll(applies); + } + if (CollUtil.isEmpty(tripList)) { + return Collections.emptyList(); + } + return tripList.stream().map(trip -> { + VehVehicleTripMyVo tripMyVo = new VehVehicleTripMyVo(); + BeanUtils.copyProperties(trip, tripMyVo); + + // 找出对应申请 + List relatedApplies = applyList.stream() + .filter(apply -> apply.getTripId().equals(trip.getId())) + .toList(); + + if (CollUtil.isNotEmpty(relatedApplies)) { + List applyVoList = relatedApplies.stream().map(apply -> { + VehVehicleApplyVo applyVo = new VehVehicleApplyVo(); + BeanUtils.copyProperties(apply, applyVo); + return applyVo; + }).toList(); + tripMyVo.setApplyList(applyVoList); + } + + // 是否为行程发起人 + tripMyVo.setIsVehicleOwner(trip.getCreateBy().equals(userId) ? 1 : 0); + + return tripMyVo; + }).sorted(Comparator.comparing(VehVehicleTripMyVo::getStartTime)) + .toList(); + } + + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleTripMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleTripMapper.xml index d89a7086..86a8c5ee 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleTripMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleTripMapper.xml @@ -14,10 +14,10 @@ trip_reason, start_place, end_place, - start_lat, start_lng, - end_lat, + start_lat, end_lng, + end_lat, start_time, end_time, people_num, @@ -51,7 +51,7 @@ -- 3. 时间评分(0-100) ROUND( GREATEST(0, LEAST(100, - 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (60 / 100) + 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (120 / 100) )), 2 ) AS time_score, @@ -73,7 +73,7 @@ )) * 0.5) + (GREATEST(0, LEAST(100, - 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (60 / 100) + 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (120 / 100) )) * 0.2) + (CASE