From 45cae080a060a67d4e15764fca8291dc2fc67a3b Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Wed, 29 Oct 2025 19:35:33 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E8=BE=86=E7=AE=A1=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=89=A9=E8=B5=84=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 42 ++-- .../controller/MatWarehouseController.java | 106 ++++++++++ .../materials/domain/MatMaterialIssue.java | 5 + .../materials/domain/MatMaterials.java | 5 + .../materials/domain/MatWarehouse.java | 91 +++++++++ .../materials/domain/bo/MatWarehouseBo.java | 94 +++++++++ .../MatMaterialIssueCreateReq.java | 6 + .../MatMaterialIssueUpdateReq.java | 5 + .../MatMaterialReceiveItemDto.java | 5 + .../dto/materials/MatMaterialsCreateReq.java | 5 + .../dto/materials/MatMaterialsQueryReq.java | 5 + .../dto/materials/MatMaterialsUpdateReq.java | 5 + .../materials/domain/vo/MatWarehouseVo.java | 108 ++++++++++ .../vo/materialissue/MatMaterialIssueVo.java | 5 + .../vo/materials/MatMaterialsNumberVo.java | 7 - .../vo/materials/MatMaterialsUseDetailVo.java | 10 + .../domain/vo/materials/MatMaterialsVo.java | 5 + .../materials/mapper/MatWarehouseMapper.java | 15 ++ .../service/IMatMaterialsService.java | 20 +- .../service/IMatWarehouseService.java | 70 +++++++ .../impl/MatMaterialIssueServiceImpl.java | 31 ++- .../impl/MatMaterialReceiveServiceImpl.java | 11 +- .../service/impl/MatMaterialsServiceImpl.java | 100 +++++----- .../service/impl/MatWarehouseServiceImpl.java | 140 +++++++++++++ .../controller/VehVehicleTripController.java | 26 ++- .../app/VehVehicleTripAppController.java | 15 +- .../VehVehicleTripChangeStatusReq.java | 31 +++ .../vehicletrip/VehVehicleTripMyQueryReq.java | 24 +++ .../vehicletrip/VehVehicleTripQueryReq.java | 9 +- .../vehicle/domain/vo/VehVehicleApplyVo.java | 24 ++- .../vehicle/domain/vo/VehVehicleTripMyVo.java | 142 +++++++++++++ .../service/IVehVehicleTripService.java | 22 ++- .../impl/VehVehicleApplyServiceImpl.java | 22 ++- .../impl/VehVehicleTripServiceImpl.java | 186 ++++++++++++++++-- .../mapper/materials/MatWarehouseMapper.xml | 7 + .../mapper/vehicle/VehVehicleTripMapper.xml | 17 +- xinnengyuan/script/sql/xinnengyuan.sql | 47 +++++ 37 files changed, 1311 insertions(+), 157 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatWarehouseController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatWarehouse.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/bo/MatWarehouseBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/MatWarehouseVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/mapper/MatWarehouseMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatWarehouseService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatWarehouseServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripChangeStatusReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripMyQueryReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripMyVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/materials/MatWarehouseMapper.xml diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index a415b6c0..d563a3a7 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -66,27 +66,27 @@ spring: # username: xinnengyuan # password: mEZPC5Sdf3r2HENi # 从库数据源 - slave: - lazy: true - type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.110.2:13386/zmkgc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: zmkgc - password: nWKDKRNRT48tFBdh - slave1: - lazy: true - type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.110.2:13386/zmkgprod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: zmkgprod - password: MaY8nehwWkJriWPm - slave2: - lazy: true - type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.110.2:13386/zmkgc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: zmkgc - password: nWKDKRNRT48tFBdh +# slave: + # lazy: true + # type: ${spring.datasource.type} + # driverClassName: com.mysql.cj.jdbc.Driver + # url: jdbc:mysql://192.168.110.2:13386/zmkgc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + # username: zmkgc + # password: nWKDKRNRT48tFBdh + # slave1: + # lazy: true + # type: ${spring.datasource.type} + # driverClassName: com.mysql.cj.jdbc.Driver + # url: jdbc:mysql://192.168.110.2:13386/zmkgprod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + # username: zmkgprod + # password: MaY8nehwWkJriWPm + # slave2: + # lazy: true + # type: ${spring.datasource.type} + # driverClassName: com.mysql.cj.jdbc.Driver + # url: jdbc:mysql://192.168.110.2:13386/zmkgc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + # username: zmkgc + # password: nWKDKRNRT48tFBdh # slave: # lazy: true # type: ${spring.datasource.type} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatWarehouseController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatWarehouseController.java new file mode 100644 index 00000000..c8a9c649 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/controller/MatWarehouseController.java @@ -0,0 +1,106 @@ +package org.dromara.materials.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +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.materials.domain.bo.MatWarehouseBo; +import org.dromara.materials.domain.vo.MatWarehouseVo; +import org.dromara.materials.service.IMatWarehouseService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 物资仓库 + * + * @author lilemy + * @date 2025-10-29 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/materials/warehouse") +public class MatWarehouseController extends BaseController { + + private final IMatWarehouseService matWarehouseService; + + /** + * 查询物资仓库列表 + */ + @SaCheckPermission("materials:warehouse:list") + @GetMapping("/list") + public TableDataInfo list(MatWarehouseBo bo, PageQuery pageQuery) { + return matWarehouseService.queryPageList(bo, pageQuery); + } + + /** + * 导出物资仓库列表 + */ + @SaCheckPermission("materials:warehouse:export") + @Log(title = "物资仓库", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(MatWarehouseBo bo, HttpServletResponse response) { + List list = matWarehouseService.queryList(bo); + ExcelUtil.exportExcel(list, "物资仓库", MatWarehouseVo.class, response); + } + + /** + * 获取物资仓库详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("materials:warehouse:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(matWarehouseService.queryById(id)); + } + + /** + * 新增物资仓库 + */ + @SaCheckPermission("materials:warehouse:add") + @Log(title = "物资仓库", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody MatWarehouseBo bo) { + return toAjax(matWarehouseService.insertByBo(bo)); + } + + /** + * 修改物资仓库 + */ + @SaCheckPermission("materials:warehouse:edit") + @Log(title = "物资仓库", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody MatWarehouseBo bo) { + return toAjax(matWarehouseService.updateByBo(bo)); + } + + /** + * 删除物资仓库 + * + * @param ids 主键串 + */ + @SaCheckPermission("materials:warehouse:remove") + @Log(title = "物资仓库", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(matWarehouseService.deleteWithValidByIds(List.of(ids), true)); + } +} 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 c463e5bc..fefb3784 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; + /** + * 领用人 + */ + private String shipper; + /** * 保管单位 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java index ba9347db..8cd58fa9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterials.java @@ -38,6 +38,11 @@ public class MatMaterials extends BaseEntity { */ private Long companyId; + /** + * 仓库id + */ + private Long warehouseId; + /** * 项目id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatWarehouse.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatWarehouse.java new file mode 100644 index 00000000..e8c1d084 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatWarehouse.java @@ -0,0 +1,91 @@ +package org.dromara.materials.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 物资仓库对象 mat_warehouse + * + * @author lilemy + * @date 2025-10-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("mat_warehouse") +public class MatWarehouse extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 仓库编号 + */ + private String warehouseCode; + + /** + * 仓库名称 + */ + private String warehouseName; + + /** + * 仓库类型 + */ + private String warehouseType; + + /** + * 仓库地址 + */ + private String address; + + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + + /** + * 仓库面积 + */ + private Long area; + + /** + * 存放容量 + */ + private Long capacity; + + /** + * 负责人 + */ + private String manager; + + /** + * 负责人电话 + */ + private String managerPhone; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/bo/MatWarehouseBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/bo/MatWarehouseBo.java new file mode 100644 index 00000000..a59a978a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/bo/MatWarehouseBo.java @@ -0,0 +1,94 @@ +package org.dromara.materials.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.materials.domain.MatWarehouse; + +/** + * 物资仓库业务对象 mat_warehouse + * + * @author lilemy + * @date 2025-10-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = MatWarehouse.class, reverseConvertGenerate = false) +public class MatWarehouseBo extends BaseEntity { + + /** + * 主键id + */ + @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 仓库编号 + */ + @NotBlank(message = "仓库编号不能为空", groups = {AddGroup.class, EditGroup.class}) + private String warehouseCode; + + /** + * 仓库名称 + */ + @NotBlank(message = "仓库名称不能为空", groups = {AddGroup.class, EditGroup.class}) + private String warehouseName; + + /** + * 仓库类型 + */ + @NotBlank(message = "仓库类型不能为空", groups = {AddGroup.class, EditGroup.class}) + private String warehouseType; + + /** + * 仓库地址 + */ + private String address; + + /** + * 经度 + */ + private String lng; + + /** + * 纬度 + */ + private String lat; + + /** + * 仓库面积 + */ + private Long area; + + /** + * 存放容量 + */ + private Long capacity; + + /** + * 负责人 + */ + private String manager; + + /** + * 负责人电话 + */ + private String managerPhone; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueCreateReq.java index 0fbe308c..2f84ecc8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueCreateReq.java @@ -63,6 +63,12 @@ public class MatMaterialIssueCreateReq implements Serializable { @NotBlank(message = "领料单位不能为空") private String issueUnit; + /** + * 领用人 + */ + @NotBlank(message = "领用人不能为空") + private String shipper; + /** * 保管单位 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueUpdateReq.java index 12d81b98..d6450703 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialissue/MatMaterialIssueUpdateReq.java @@ -57,6 +57,11 @@ public class MatMaterialIssueUpdateReq implements Serializable { */ private String issueUnit; + /** + * 领用人 + */ + private String shipper; + /** * 保管单位 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceiveitem/MatMaterialReceiveItemDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceiveitem/MatMaterialReceiveItemDto.java index 96649fda..052bcceb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceiveitem/MatMaterialReceiveItemDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materialreceiveitem/MatMaterialReceiveItemDto.java @@ -61,4 +61,9 @@ public class MatMaterialReceiveItemDto { */ private Long planId; + /** + * 仓库id + */ + private Long warehouseId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java index 21872845..eacea168 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsCreateReq.java @@ -26,6 +26,11 @@ public class MatMaterialsCreateReq implements Serializable { */ private Long companyId; + /** + * 仓库id + */ + private Long warehouseId; + /** * 项目id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java index 409c6bb1..b861e7de 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsQueryReq.java @@ -25,6 +25,11 @@ public class MatMaterialsQueryReq implements Serializable { */ private Long companyId; + /** + * 仓库id + */ + private Long warehouseId; + /** * 项目id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsUpdateReq.java index 70e1b411..faf70848 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/dto/materials/MatMaterialsUpdateReq.java @@ -31,6 +31,11 @@ public class MatMaterialsUpdateReq implements Serializable { */ private Long companyId; + /** + * 仓库id + */ + private Long warehouseId; + /** * 项目id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/MatWarehouseVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/MatWarehouseVo.java new file mode 100644 index 00000000..c9e45d91 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/MatWarehouseVo.java @@ -0,0 +1,108 @@ +package org.dromara.materials.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.materials.domain.MatWarehouse; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 物资仓库视图对象 mat_warehouse + * + * @author lilemy + * @date 2025-10-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = MatWarehouse.class) +public class MatWarehouseVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + @ExcelProperty(value = "主键id") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 仓库编号 + */ + @ExcelProperty(value = "仓库编号") + private String warehouseCode; + + /** + * 仓库名称 + */ + @ExcelProperty(value = "仓库名称") + private String warehouseName; + + /** + * 仓库类型 + */ + @ExcelProperty(value = "仓库类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mat_warehouse_type") + private String warehouseType; + + /** + * 仓库地址 + */ + @ExcelProperty(value = "仓库地址") + private String address; + + /** + * 经度 + */ + @ExcelProperty(value = "经度") + private String lng; + + /** + * 纬度 + */ + @ExcelProperty(value = "纬度") + private String lat; + + /** + * 仓库面积 + */ + @ExcelProperty(value = "仓库面积") + private Long area; + + /** + * 存放容量 + */ + @ExcelProperty(value = "存放容量") + private Long capacity; + + /** + * 负责人 + */ + @ExcelProperty(value = "负责人") + private String manager; + + /** + * 负责人电话 + */ + @ExcelProperty(value = "负责人电话") + private String managerPhone; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materialissue/MatMaterialIssueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materialissue/MatMaterialIssueVo.java index 744ab078..e6be2ac1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materialissue/MatMaterialIssueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materialissue/MatMaterialIssueVo.java @@ -69,6 +69,11 @@ public class MatMaterialIssueVo implements Serializable { */ private String issueUnit; + /** + * 领用人 + */ + private String shipper; + /** * 保管单位 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsNumberVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsNumberVo.java index 594382ee..0456be65 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsNumberVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsNumberVo.java @@ -1,13 +1,11 @@ package org.dromara.materials.domain.vo.materials; import lombok.Data; -import org.dromara.materials.domain.vo.materialsinventory.MatMaterialsInventoryOutVo; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; -import java.util.List; /** * @author lilemy @@ -48,9 +46,4 @@ public class MatMaterialsNumberVo implements Serializable { * 创建时间 */ private Date createTime; - - /** - * 出库列表 - */ - private List outList; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsUseDetailVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsUseDetailVo.java index eff02452..6317f1c3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsUseDetailVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsUseDetailVo.java @@ -28,6 +28,16 @@ public class MatMaterialsUseDetailVo implements Serializable { */ private String materialsName; + /** + * 仓库id + */ + private Long warehouseId; + + /** + * 仓库名称 + */ + private String warehouseName; + /** * 计划数量 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java index 99e8b35f..82557233 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/vo/materials/MatMaterialsVo.java @@ -47,6 +47,11 @@ public class MatMaterialsVo implements Serializable { @ExcelProperty(value = "公司id") private Long companyId; + /** + * 仓库id + */ + private Long warehouseId; + /** * 公司信息 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/mapper/MatWarehouseMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/mapper/MatWarehouseMapper.java new file mode 100644 index 00000000..7e8e7d79 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/mapper/MatWarehouseMapper.java @@ -0,0 +1,15 @@ +package org.dromara.materials.mapper; + +import org.dromara.materials.domain.MatWarehouse; +import org.dromara.materials.domain.vo.MatWarehouseVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 物资仓库Mapper接口 + * + * @author lilemy + * @date 2025-10-29 + */ +public interface MatWarehouseMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java index 0d6989bb..29358d15 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatMaterialsService.java @@ -8,6 +8,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.materials.domain.MatMaterials; import org.dromara.materials.domain.MatMaterialsInventory; import org.dromara.materials.domain.MatMaterialsUseRecord; +import org.dromara.materials.domain.MatWarehouse; import org.dromara.materials.domain.dto.materialreceiveitem.MatMaterialReceiveItemDto; import org.dromara.materials.domain.dto.materials.MatMaterialsCreateReq; import org.dromara.materials.domain.dto.materials.MatMaterialsGisReq; @@ -117,11 +118,8 @@ public interface IMatMaterialsService extends IService { * @param supplierUnit 供应商单位 * @param nickname 操作用户昵称 */ - void create(Long projectId, - List itemList, - String formCode, - String supplierUnit, - String nickname + void create(Long projectId, List itemList, + String formCode, String supplierUnit, String nickname ); /** @@ -169,16 +167,18 @@ public interface IMatMaterialsService extends IService { /** * 获取材料使用详情列表 * - * @param materials 材料 - * @param putList 材料入库列表 - * @param outList 材料出库列表 - * @param useList 材料使用列表 + * @param materials 材料 + * @param putList 材料入库列表 + * @param outList 材料出库列表 + * @param useList 材料使用列表 + * @param warehouseList 仓库列表 * @return 材料使用详情列表 */ List getUseDetailList(List materials, List putList, List outList, - List useList); + List useList, + List warehouseList); /** * 获取材料库存数据列表 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatWarehouseService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatWarehouseService.java new file mode 100644 index 00000000..df545ead --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/IMatWarehouseService.java @@ -0,0 +1,70 @@ +package org.dromara.materials.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.materials.domain.MatWarehouse; +import org.dromara.materials.domain.bo.MatWarehouseBo; +import org.dromara.materials.domain.vo.MatWarehouseVo; + +import java.util.Collection; +import java.util.List; + +/** + * 物资仓库Service接口 + * + * @author lilemy + * @date 2025-10-29 + */ +public interface IMatWarehouseService extends IService { + + /** + * 查询物资仓库 + * + * @param id 主键 + * @return 物资仓库 + */ + MatWarehouseVo queryById(Long id); + + /** + * 分页查询物资仓库列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物资仓库分页列表 + */ + TableDataInfo queryPageList(MatWarehouseBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的物资仓库列表 + * + * @param bo 查询条件 + * @return 物资仓库列表 + */ + List queryList(MatWarehouseBo bo); + + /** + * 新增物资仓库 + * + * @param bo 物资仓库 + * @return 是否新增成功 + */ + Boolean insertByBo(MatWarehouseBo bo); + + /** + * 修改物资仓库 + * + * @param bo 物资仓库 + * @return 是否修改成功 + */ + Boolean updateByBo(MatWarehouseBo bo); + + /** + * 校验并批量删除物资仓库信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} 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 4928c2c1..fe1325db 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 @@ -23,6 +23,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.exception.OssException; import org.dromara.common.oss.factory.OssFactory; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.utils.DocumentUtil; import org.dromara.materials.constants.MatMaterialsConstant; import org.dromara.materials.domain.MatMaterialIssue; @@ -35,6 +36,7 @@ import org.dromara.materials.domain.dto.materialissue.MatMaterialIssueUpdateReq; import org.dromara.materials.domain.dto.materialissue.MatMaterialIssueWordDto; import org.dromara.materials.domain.dto.materialissueitem.MatMaterialIssueItemDto; import org.dromara.materials.domain.dto.materialissueitem.MatMaterialIssueItemWordDto; +import org.dromara.materials.domain.enums.MatMaterialsInventoryOutPutEnum; import org.dromara.materials.domain.vo.materialissue.MatMaterialIssueVo; import org.dromara.materials.domain.vo.materialsinventory.MatMaterialsInventoryListVo; import org.dromara.materials.mapper.MatMaterialIssueMapper; @@ -238,14 +240,12 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl inventoryList = itemList.stream().map(item -> { MatMaterialsInventory inventory = new MatMaterialsInventory(); inventory.setNumber(item.getIssuedQuantity().longValue()); @@ -271,7 +271,7 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl itemList, String formCode, String supplierUnit, String nickname) { + public void create(Long projectId, List itemList, + String formCode, String supplierUnit, String nickname) { for (MatMaterialReceiveItemDto item : itemList) { - if(item.getAcceptedQuantity().compareTo(BigDecimal.ZERO) <= 0){ + if (item.getAcceptedQuantity().compareTo(BigDecimal.ZERO) <= 0) { continue; } MatMaterials matMaterials = new MatMaterials(); @@ -380,6 +379,7 @@ public class MatMaterialsServiceImpl extends ServiceImpl a)); - // 查询出库记录 - List outList = materialsInventoryService.lambdaQuery() - .in(MatMaterialsInventory::getMaterialsId, materialIds) - .eq(MatMaterialsInventory::getOutPut, MatMaterialsInventoryOutPutEnum.OUT.getValue()) - .eq(MatMaterialsInventory::getIsReceive, MatMaterialsInventoryReceiveStatusEnum.NOT.getValue()) - .list(); - Map> outMap = new HashMap<>(); - if (CollUtil.isNotEmpty(outList)) { - outMap = outList.stream() - .collect(Collectors.groupingBy(MatMaterialsInventory::getMaterialsId)); - } - Map> finalOutMap = outMap; // 按 formCode 分组 Map> formCodeMap = materials.stream() .collect(Collectors.groupingBy(MatMaterials::getFormCode)); @@ -474,11 +462,18 @@ public class MatMaterialsServiceImpl extends ServiceImpl> entry : formCodeMap.entrySet()) { String formCode = entry.getKey(); // 过滤库存为 0 的材料 - List validMaterials = entry.getValue().stream() - .filter(m -> { + List validMaterials = entry.getValue().stream().map(m -> { + MatMaterialsNumberVo numberVo = new MatMaterialsNumberVo(); MatMaterialsInventory inv = inventoryMap.get(m.getId()); - return inv != null && inv.getResidue() > 0; + if (inv == null) { + return null; + } + BeanUtils.copyProperties(m, numberVo); + numberVo.setInventoryNumber(BigDecimal.valueOf(inv.getResidue())); + return numberVo; }) + .filter(Objects::nonNull) + .filter(m -> m.getInventoryNumber().compareTo(BigDecimal.ZERO) > 0) .toList(); if (CollUtil.isEmpty(validMaterials)) { continue; @@ -490,29 +485,7 @@ public class MatMaterialsServiceImpl extends ServiceImpl numberVos = new ArrayList<>(); - - for (MatMaterials m : validMaterials) { - MatMaterialsNumberVo numberVo = new MatMaterialsNumberVo(); - BeanUtils.copyProperties(m, numberVo); - MatMaterialsInventory inv = inventoryMap.get(m.getId()); - if (inv != null) { - numberVo.setInventoryNumber(BigDecimal.valueOf(inv.getNumber())); - } - if (CollUtil.isNotEmpty(finalOutMap) && finalOutMap.containsKey(m.getId())) { - List outs = finalOutMap.get(m.getId()); - numberVo.setOutList(outs.stream().map(out -> { - MatMaterialsInventoryOutVo outVo = new MatMaterialsInventoryOutVo(); - BeanUtils.copyProperties(out, outVo); - return outVo; - }).toList()); - } - if(CollectionUtil.isNotEmpty(numberVo.getOutList())){ - numberVos.add(numberVo); - } - } - vo.setMaterials(numberVos); + vo.setMaterials(validMaterials); resultList.add(vo); } return resultList; @@ -641,7 +614,15 @@ public class MatMaterialsServiceImpl extends ServiceImpl useDetailList = this.getUseDetailList(materialsList, putList, outList, useList); + // 查询仓库列表 + Set warehouseIds = materialsList.stream().map(MatMaterials::getWarehouseId).collect(Collectors.toSet()); + List warehouseList = new ArrayList<>(); + if (CollUtil.isNotEmpty(warehouseIds)) { + warehouseList = warehouseService.lambdaQuery() + .in(MatWarehouse::getId, warehouseIds) + .list(); + } + List useDetailList = this.getUseDetailList(materialsList, putList, outList, useList, warehouseList); materialsVoPage.setRecords(useDetailList); return TableDataInfo.build(materialsVoPage); } @@ -649,17 +630,19 @@ public class MatMaterialsServiceImpl extends ServiceImpl getUseDetailList(List materials, List putList, List outList, - List useList) { + List useList, + List warehouseList) { Map putMap = putList.stream() .collect(Collectors.toMap(MatMaterialsInventory::getMaterialsId, inventory -> inventory, (existing, replacement) -> replacement)); @@ -700,6 +683,15 @@ public class MatMaterialsServiceImpl extends ServiceImpl w.getId().equals(warehouseId)) + .findFirst() + .orElse(null); + vo.setWarehouseName(warehouse != null ? warehouse.getWarehouseName() : null); + } return vo; }).toList(); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatWarehouseServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatWarehouseServiceImpl.java new file mode 100644 index 00000000..4abce933 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/service/impl/MatWarehouseServiceImpl.java @@ -0,0 +1,140 @@ +package org.dromara.materials.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.materials.domain.MatWarehouse; +import org.dromara.materials.domain.bo.MatWarehouseBo; +import org.dromara.materials.domain.vo.MatWarehouseVo; +import org.dromara.materials.mapper.MatWarehouseMapper; +import org.dromara.materials.service.IMatWarehouseService; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 物资仓库Service业务层处理 + * + * @author lilemy + * @date 2025-10-29 + */ +@RequiredArgsConstructor +@Service +public class MatWarehouseServiceImpl extends ServiceImpl + implements IMatWarehouseService { + + /** + * 查询物资仓库 + * + * @param id 主键 + * @return 物资仓库 + */ + @Override + public MatWarehouseVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 分页查询物资仓库列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 物资仓库分页列表 + */ + @Override + public TableDataInfo queryPageList(MatWarehouseBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的物资仓库列表 + * + * @param bo 查询条件 + * @return 物资仓库列表 + */ + @Override + public List queryList(MatWarehouseBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(MatWarehouseBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(MatWarehouse::getId); + lqw.eq(bo.getProjectId() != null, MatWarehouse::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getWarehouseCode()), MatWarehouse::getWarehouseCode, bo.getWarehouseCode()); + lqw.like(StringUtils.isNotBlank(bo.getWarehouseName()), MatWarehouse::getWarehouseName, bo.getWarehouseName()); + lqw.eq(StringUtils.isNotBlank(bo.getWarehouseType()), MatWarehouse::getWarehouseType, bo.getWarehouseType()); + lqw.eq(StringUtils.isNotBlank(bo.getAddress()), MatWarehouse::getAddress, bo.getAddress()); + lqw.eq(StringUtils.isNotBlank(bo.getLng()), MatWarehouse::getLng, bo.getLng()); + lqw.eq(StringUtils.isNotBlank(bo.getLat()), MatWarehouse::getLat, bo.getLat()); + lqw.eq(bo.getArea() != null, MatWarehouse::getArea, bo.getArea()); + lqw.eq(bo.getCapacity() != null, MatWarehouse::getCapacity, bo.getCapacity()); + lqw.eq(StringUtils.isNotBlank(bo.getManager()), MatWarehouse::getManager, bo.getManager()); + lqw.eq(StringUtils.isNotBlank(bo.getManagerPhone()), MatWarehouse::getManagerPhone, bo.getManagerPhone()); + return lqw; + } + + /** + * 新增物资仓库 + * + * @param bo 物资仓库 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(MatWarehouseBo bo) { + MatWarehouse add = MapstructUtils.convert(bo, MatWarehouse.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改物资仓库 + * + * @param bo 物资仓库 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(MatWarehouseBo bo) { + MatWarehouse update = MapstructUtils.convert(bo, MatWarehouse.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(MatWarehouse entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除物资仓库信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleTripController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleTripController.java index fcf5b955..364ab71e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleTripController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleTripController.java @@ -13,10 +13,8 @@ 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.dto.vehicletrip.VehVehicleTripCancelReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripCreateReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripQueryReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripUpdateReq; +import org.dromara.vehicle.domain.dto.vehicletrip.*; +import org.dromara.vehicle.domain.vo.VehVehicleTripMyVo; import org.dromara.vehicle.domain.vo.VehVehicleTripVo; import org.dromara.vehicle.service.IVehVehicleTripService; import org.springframework.validation.annotation.Validated; @@ -47,6 +45,15 @@ public class VehVehicleTripController extends BaseController { return vehVehicleTripService.queryPageList(req, pageQuery); } + /** + * 查询当前用户车辆出行记录列表 + */ + @SaCheckPermission("vehicle:vehicleTrip:list") + @GetMapping("/myList") + public R> queryMyList(VehVehicleTripMyQueryReq req) { + return R.ok(vehVehicleTripService.queryMyList(req)); + } + /** * 导出车辆出行记录列表 */ @@ -92,6 +99,17 @@ public class VehVehicleTripController extends BaseController { return toAjax(vehVehicleTripService.updateByBo(req)); } + /** + * 修改车辆出行记录状态 + */ + @SaCheckPermission("vehicle:vehicleTrip:edit") + @Log(title = "车辆出行记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/changeStatus") + public R changeStatus(@Validated @RequestBody VehVehicleTripChangeStatusReq req) { + return toAjax(vehVehicleTripService.changeStatus(req)); + } + /** * 取消车辆出行记录 */ 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 a50f0227..1e8a502b 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 @@ -10,10 +10,8 @@ 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.dto.vehicletrip.VehVehicleTripCancelReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripCreateReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripQueryReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripUpdateReq; +import org.dromara.vehicle.domain.dto.vehicletrip.*; +import org.dromara.vehicle.domain.vo.VehVehicleTripMyVo; import org.dromara.vehicle.domain.vo.VehVehicleTripVo; import org.dromara.vehicle.service.IVehVehicleTripService; import org.springframework.validation.annotation.Validated; @@ -43,6 +41,15 @@ public class VehVehicleTripAppController extends BaseController { return vehicleTripService.queryPageList(req, pageQuery); } + + /** + * 查询当前用户车辆出行记录列表 + */ + @GetMapping("/myList") + public R> queryMyList(VehVehicleTripMyQueryReq req) { + return R.ok(vehicleTripService.queryMyList(req)); + } + /** * 获取车辆出行记录详细信息 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripChangeStatusReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripChangeStatusReq.java new file mode 100644 index 00000000..f4abd0c0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripChangeStatusReq.java @@ -0,0 +1,31 @@ +package org.dromara.vehicle.domain.dto.vehicletrip; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-10-28 18:47 + */ +@Data +public class VehVehicleTripChangeStatusReq implements Serializable { + + @Serial + private static final long serialVersionUID = -1139979225623034249L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空") + private Long id; + + /** + * 状态 + */ + @NotBlank(message = "状态不能为空") + private String tripStatus; +} 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 new file mode 100644 index 00000000..0dff686e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/dto/vehicletrip/VehVehicleTripMyQueryReq.java @@ -0,0 +1,24 @@ +package org.dromara.vehicle.domain.dto.vehicletrip; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-10-28 16:53 + */ +@Data +public class VehVehicleTripMyQueryReq implements Serializable { + + @Serial + private static final long serialVersionUID = 4251601419123102085L; + + /** + * 查询类型(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 60fbb227..0e508ac9 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 @@ -4,7 +4,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; -import java.util.Date; +import java.time.LocalDateTime; /** * @author lilemy @@ -39,7 +39,7 @@ public class VehVehicleTripQueryReq implements Serializable { /** * 计划出发时间 */ - private Date startTime; + private LocalDateTime startTime; /** * 出行人数 @@ -51,4 +51,9 @@ public class VehVehicleTripQueryReq implements Serializable { */ private String reviewStatus; + /** + * 状态 + */ + private String tripStatus; + } 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 1c38fc8a..929d79b0 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 @@ -1,19 +1,20 @@ package org.dromara.vehicle.domain.vo; -import org.dromara.vehicle.domain.VehVehicleApply; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import org.dromara.common.excel.annotation.ExcelDictFormat; -import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.vehicle.domain.VehVehicleApply; import java.io.Serial; import java.io.Serializable; import java.util.Date; - /** * 乘车申请视图对象 veh_vehicle_apply * @@ -107,5 +108,20 @@ public class VehVehicleApplyVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 创建者 + */ + private Long createBy; + + /** + * 创建者名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + private String createByName; + + /** + * 创建时间 + */ + private Date createTime; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripMyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripMyVo.java new file mode 100644 index 00000000..a9df5667 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleTripMyVo.java @@ -0,0 +1,142 @@ +package org.dromara.vehicle.domain.vo; + +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author lilemy + * @date 2025-10-28 16:45 + */ +@Data +public class VehVehicleTripMyVo implements Serializable { + + @Serial + private static final long serialVersionUID = 8905520529338036288L; + + /** + * 主键ID + */ + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 车辆ID + */ + private Long vehicleId; + + /** + * 车牌号 + */ + private String plateNumber; + + /** + * 联系电话 + */ + private String passengerPhone; + + /** + * 出行事由 + */ + private String tripReason; + + /** + * 出发地 + */ + private String startPlace; + + /** + * 目的地 + */ + private String endPlace; + + /** + * 出发地经度 + */ + private String startLat; + + /** + * 出发地纬度 + */ + private String startLng; + + /** + * 目的地经度 + */ + private String endLat; + + /** + * 目的地纬度 + */ + private String endLng; + + /** + * 计划出发时间 + */ + private Date startTime; + + /** + * 计划到达时间 + */ + private Date endTime; + + /** + * 申请人数 + */ + private Integer peopleNum; + + /** + * 剩余座位数 + */ + private Integer leftSeat; + + /** + * 审核状态 + */ + private String reviewStatus; + + /** + * 状态 + */ + private String tripStatus; + + /** + * 备注 + */ + private String remark; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 创建者名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + private String createByName; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 是否为车主(0不是 1是) + */ + private Integer isVehicleOwner; + + /** + * 申请列表 + */ + private List applyList; +} 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 f8720416..08c61017 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 @@ -4,10 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.vehicle.domain.VehVehicleTrip; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripCancelReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripCreateReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripQueryReq; -import org.dromara.vehicle.domain.dto.vehicletrip.VehVehicleTripUpdateReq; +import org.dromara.vehicle.domain.dto.vehicletrip.*; +import org.dromara.vehicle.domain.vo.VehVehicleTripMyVo; import org.dromara.vehicle.domain.vo.VehVehicleTripVo; import java.util.Collection; @@ -38,6 +36,14 @@ public interface IVehVehicleTripService extends IService { */ TableDataInfo queryPageList(VehVehicleTripQueryReq req, PageQuery pageQuery); + /** + * 查询当前用户车辆出行记录列表 + * + * @param req 列表查询条件 + * @return 当前用户车辆出行记录列表 + */ + List queryMyList(VehVehicleTripMyQueryReq req); + /** * 查询符合条件的车辆出行记录列表 * @@ -62,6 +68,14 @@ public interface IVehVehicleTripService extends IService { */ Boolean updateByBo(VehVehicleTripUpdateReq req); + /** + * 修改车辆出行记录状态 + * + * @param req 车辆出行记录 + * @return 是否修改成功 + */ + Boolean changeStatus(VehVehicleTripChangeStatusReq req); + /** * 取消车辆出行记录 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleApplyServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleApplyServiceImpl.java index bc66d046..92a8a783 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleApplyServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleApplyServiceImpl.java @@ -8,11 +8,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; import org.dromara.vehicle.domain.VehVehicleApply; import org.dromara.vehicle.domain.VehVehicleTrip; import org.dromara.vehicle.domain.dto.vehicleapply.*; @@ -48,6 +51,8 @@ public class VehVehicleApplyServiceImpl extends ServiceImpl queryPageList(VehVehicleTripQueryReq req, PageQuery pageQuery) { Page result; if (StringUtils.isNotBlank(req.getEndLat()) && StringUtils.isNotBlank(req.getEndLng()) - && ObjectUtils.isNotNull(req.getEndLat()) && ObjectUtils.isNotNull(req.getEndLng())) { + && ObjectUtils.isNotNull(req.getStartTime()) && ObjectUtils.isNotNull(req.getPeopleNum()) + && req.getPeopleNum() >= 1) { result = baseMapper.selectVehicleTripPage(pageQuery.build(), req); } else { result = baseMapper.selectVoPage(pageQuery.build(), buildQueryWrapper(req)); @@ -105,6 +102,93 @@ public class VehVehicleTripServiceImpl extends ServiceImpl queryMyList(VehVehicleTripMyQueryReq req) { + String type = req.getType(); + Long userId = LoginHelper.getUserId(); + if (userId == null) { + throw new ServiceException("请先登录", HttpStatus.UNAUTHORIZED); + } + // 查询数据 + List tripList = new ArrayList<>(); + // --- 一、查询当前用户创建的行程 --- + List createdTrips = this.lambdaQuery() + .eq(VehVehicleTrip::getCreateBy, userId) + .eq(!"3".equals(type), VehVehicleTrip::getTripStatus, VehTripStatusEnum.READY_DEPART.getValue()) + .eq("1".equals(type), VehVehicleTrip::getReviewStatus, BusinessStatusEnum.FINISH.getStatus()) + .ne("2".equals(type), VehVehicleTrip::getReviewStatus, BusinessStatusEnum.FINISH.getStatus()) + .eq("3".equals(type), VehVehicleTrip::getTripStatus, VehTripStatusEnum.COMPLETED.getValue()) + .list(); + // 收集行程id + Set tripIds = createdTrips.stream() + .map(VehVehicleTrip::getId) + .collect(Collectors.toSet()); + // --- 二、查询当前用户作为乘客的申请 --- + List userApplies = vehicleApplyService.lambdaQuery() + .eq(VehVehicleApply::getCreateBy, userId) + .eq("1".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.CONFIRMED.getValue()) + .notIn("2".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.ARRIVED.getValue(), VehApplyStatusEnum.ALREADY.getValue()) + .eq("3".equals(type), VehVehicleApply::getStatus, VehApplyStatusEnum.ARRIVED.getValue()) + .list(); + 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对应的行程(合并创建的与乘坐的) --- + 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; + } + 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; + } + /** * 查询符合条件的车辆出行记录列表 * @@ -120,12 +204,10 @@ public class VehVehicleTripServiceImpl extends ServiceImpl buildQueryWrapper(VehVehicleTripQueryReq req) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(req.getProjectId() != null, VehVehicleTrip::getProjectId, req.getProjectId()); - lqw.eq(StringUtils.isNotBlank(req.getEndPlace()), VehVehicleTrip::getEndPlace, req.getEndPlace()); - lqw.eq(StringUtils.isNotBlank(req.getEndLat()), VehVehicleTrip::getEndLat, req.getEndLat()); - lqw.eq(StringUtils.isNotBlank(req.getEndLng()), VehVehicleTrip::getEndLng, req.getEndLng()); - lqw.eq(req.getStartTime() != null, VehVehicleTrip::getStartTime, req.getStartTime()); - lqw.eq(req.getPeopleNum() != null, VehVehicleTrip::getPeopleNum, req.getPeopleNum()); + lqw.like(StringUtils.isNotBlank(req.getEndPlace()), VehVehicleTrip::getEndPlace, req.getEndPlace()); + lqw.ge(req.getPeopleNum() != null, VehVehicleTrip::getPeopleNum, req.getPeopleNum()); lqw.eq(req.getReviewStatus() != null, VehVehicleTrip::getReviewStatus, req.getReviewStatus()); + lqw.eq(req.getTripStatus() != null, VehVehicleTrip::getTripStatus, req.getTripStatus()); return lqw; } @@ -195,6 +277,72 @@ public class VehVehicleTripServiceImpl extends ServiceImpl applies = vehicleApplyService.lambdaQuery() + .eq(VehVehicleApply::getTripId, id) + .in(VehVehicleApply::getStatus, VehApplyStatusEnum.ALREADY.getValue(), VehApplyStatusEnum.CONFIRMED.getValue()) + .list(); + if (CollUtil.isNotEmpty(applies)) { + applies.forEach(apply -> apply.setStatus(VehApplyStatusEnum.ARRIVED.getValue())); + boolean b = vehicleApplyService.updateBatchById(applies); + if (!b) { + throw new ServiceException("修改乘客状态失败"); + } + } + } + // 修改对应车辆状态 + Long vehicleId = trip.getVehicleId(); + if (vehicleId != null) { + VehVehicleInfo info = new VehVehicleInfo(); + info.setId(vehicleId); + info.setVehicleStatus(VehVehicleInfoStatusEnum.AVAILABLE.getValue()); + boolean update = vehicleInfoService.updateById(info); + if (!update) { + throw new ServiceException("修改车辆状态失败"); + } + } + return true; + } + /** * 取消车辆出行记录 * @@ -272,6 +420,10 @@ public class VehVehicleTripServiceImpl extends ServiceImpl + + + + 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 dcb36d3c..d89a7086 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 @@ -25,6 +25,10 @@ review_status, trip_status, remark, + create_by, + create_time, + update_by, + update_time, -- 1. 终点距离(米) ROUND( @@ -47,7 +51,7 @@ -- 3. 时间评分(0-100) ROUND( GREATEST(0, LEAST(100, - 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (30 / 100) + 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (60 / 100) )), 2 ) AS time_score, @@ -69,7 +73,7 @@ )) * 0.5) + (GREATEST(0, LEAST(100, - 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (30 / 100) + 100 - ABS(TIMESTAMPDIFF(MINUTE, start_time, #{req.startTime})) / (60 / 100) )) * 0.2) + (CASE @@ -84,8 +88,17 @@ AND project_id = #{req.projectId} + + AND review_status = #{req.reviewStatus} + + + AND trip_status = #{req.tripStatus} + + -- 只保留总评分 >= 60 的数据 + HAVING total_score >= 60 + ORDER BY total_score DESC diff --git a/xinnengyuan/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index be110e0b..c2b7bae2 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -1875,3 +1875,50 @@ create table sub_user_salary_period index `idx_project_id` (`project_id` asc) using btree comment '项目ID', index `idx_period_id` (`period_id` asc) using btree comment '工资周期ID' ) comment '员工工资周期表' collate = utf8mb4_unicode_ci; + + +drop table if exists mat_warehouse; +create table mat_warehouse +( + `id` bigint not null auto_increment comment '主键id', + `project_id` bigint not null comment '项目id', + `warehouse_code` varchar(64) not null comment '仓库编号', + `warehouse_name` varchar(128) not null comment '仓库名称', + `warehouse_type` varchar(16) not null comment '仓库类型', + `address` varchar(256) null comment '仓库地址', + `lng` varchar(32) null comment '经度', + `lat` varchar(32) null comment '纬度', + `area` decimal(12, 2) null comment '仓库面积', + `capacity` decimal(12, 2) null comment '存放容量', + `manager` varchar(64) null comment '负责人', + `manager_phone` varchar(32) null comment '负责人电话', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + primary key (`id`) using btree, + index `idx_project_id` (`project_id` asc) using btree comment '项目ID' +) comment '物资仓库'; + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1983374316882939905, '物资仓库', '1953994827229114369', '1', 'warehouse', 'materials/warehouse/index', 1, 0, 'C', '0', '0', 'materials:warehouse:list', '#', 103, 1, sysdate(), null, null, '物资仓库菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1983374316882939906, '物资仓库查询', 1983374316882939905, '1', '#', '', 1, 0, 'F', '0', '0', 'materials:warehouse:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1983374316882939907, '物资仓库新增', 1983374316882939905, '2', '#', '', 1, 0, 'F', '0', '0', 'materials:warehouse:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1983374316882939908, '物资仓库修改', 1983374316882939905, '3', '#', '', 1, 0, 'F', '0', '0', 'materials:warehouse:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1983374316882939909, '物资仓库删除', 1983374316882939905, '4', '#', '', 1, 0, 'F', '0', '0', 'materials:warehouse:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values(1983374316882939910, '物资仓库导出', 1983374316882939905, '5', '#', '', 1, 0, 'F', '0', '0', 'materials:warehouse:export', '#', 103, 1, sysdate(), null, null, '');