diff --git a/pom.xml b/pom.xml index 6a1a497..9cb03ac 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ yudao-module-infra yudao-module-bpm yudao-module-asset + yudao-module-ocr ${project.artifactId} diff --git a/sql/dict-2026-03-12-vehicle-type-dict.sql b/sql/dict-2026-03-12-vehicle-type-dict.sql new file mode 100644 index 0000000..7449f5c --- /dev/null +++ b/sql/dict-2026-03-12-vehicle-type-dict.sql @@ -0,0 +1,85 @@ +-- ==================== 车辆类型数据字典配置 ==================== +-- 作者:AI Assistant +-- 日期:2026-03-12 +-- 说明:为车型参数表的 vehicle_type 字段配置数据字典 + +-- ==================== 1. 创建车辆类型字典类型 ==================== +INSERT INTO `system_dict_type` ( + `name`, + `type`, + `status`, + `remark`, + `creator`, + `create_time`, + `updater`, + `update_time`, + `deleted`, + `deleted_time` +) VALUES ( + '车辆类型', + 'asset_vehicle_type', + 0, + '车辆资产管理-车辆类型分类', + 'admin', + NOW(), + 'admin', + NOW(), + 0, + NULL +); + +-- ==================== 2. 创建车辆类型字典数据 ==================== +-- 获取刚插入的字典类型ID +SET @dict_type_id = LAST_INSERT_ID(); + +INSERT INTO `system_dict_data` ( + `sort`, + `label`, + `value`, + `dict_type`, + `status`, + `color_type`, + `css_class`, + `remark`, + `creator`, + `create_time`, + `updater`, + `update_time`, + `deleted` +) VALUES + (1, '小型轿车', '1', 'asset_vehicle_type', 0, 'primary', '', '5座以下的小型乘用车', 'admin', NOW(), 'admin', NOW(), 0), + (2, 'SUV', '2', 'asset_vehicle_type', 0, 'success', '', '运动型多用途车', 'admin', NOW(), 'admin', NOW(), 0), + (3, '厢式货车', '3', 'asset_vehicle_type', 0, 'info', '', '封闭式货运车辆', 'admin', NOW(), 'admin', NOW(), 0), + (4, '18吨双飞翼货车', '4', 'asset_vehicle_type', 0, 'warning', '', '大型货运车辆', 'admin', NOW(), 'admin', NOW(), 0), + (5, '轻型货车', '5', 'asset_vehicle_type', 0, 'default', '', '4.5吨以下货车', 'admin', NOW(), 'admin', NOW(), 0), + (6, '中型货车', '6', 'asset_vehicle_type', 0, 'default', '', '4.5-12吨货车', 'admin', NOW(), 'admin', NOW(), 0), + (7, '重型货车', '7', 'asset_vehicle_type', 0, 'danger', '', '12吨以上货车', 'admin', NOW(), 'admin', NOW(), 0), + (8, '客车', '8', 'asset_vehicle_type', 0, 'primary', '', '大中型客运车辆', 'admin', NOW(), 'admin', NOW(), 0), + (9, '专用车', '9', 'asset_vehicle_type', 0, 'info', '', '特种用途车辆', 'admin', NOW(), 'admin', NOW(), 0); + +-- ==================== 3. 验证字典配置 ==================== +SELECT + dt.name AS '字典类型', + dt.type AS '字典编码', + dd.label AS '字典标签', + dd.value AS '字典值', + dd.sort AS '排序', + dd.status AS '状态' +FROM system_dict_type dt +LEFT JOIN system_dict_data dd ON dt.type = dd.dict_type +WHERE dt.type = 'asset_vehicle_type' +ORDER BY dd.sort; + +-- ==================== 4. 补充说明 ==================== +-- 车牌颜色常用值(不需要字典,直接使用字符串): +-- - 绿牌:新能源车辆 +-- - 蓝牌:小型车辆(9座以下) +-- - 黄牌:大型车辆、货车、营运车辆 +-- - 白牌:政府、军警用车 +-- - 黑牌:外籍车辆、领事馆车辆 + +-- 电池类型常用值(不需要字典,直接使用字符串): +-- - 磷酸铁锂:安全性高,寿命长 +-- - 三元锂:能量密度高 +-- - 钛酸锂:快充性能好 +-- - 固态电池:下一代电池技术 diff --git a/sql/update-2026-03-12-parking-vehiclemodel-fields.sql b/sql/update-2026-03-12-parking-vehiclemodel-fields.sql new file mode 100644 index 0000000..938ec89 --- /dev/null +++ b/sql/update-2026-03-12-parking-vehiclemodel-fields.sql @@ -0,0 +1,75 @@ +-- ==================== 停车场和车型参数表字段补全 ==================== +-- 作者:AI Assistant +-- 日期:2026-03-12 +-- 说明:根据 AXURE 原型需求补全缺失字段 + +-- ==================== 1. 停车场表补全字段 ==================== +-- 补全字段:租金费用、合同文件URL + +ALTER TABLE `asset_parking` + ADD COLUMN `rent_fee` decimal(10,2) DEFAULT NULL COMMENT '租金费用(元/月)' AFTER `remark`, + ADD COLUMN `contract_file_url` varchar(500) DEFAULT NULL COMMENT '合同文件URL' AFTER `rent_fee`; + +-- 添加索引 +ALTER TABLE `asset_parking` + ADD KEY `idx_lease_date` (`lease_start_date`, `lease_end_date`) COMMENT '租赁时间范围查询'; + +-- ==================== 2. 车型参数表补全字段 ==================== +-- 补全字段:车辆类型、车牌颜色、电池类型、供氢系统厂家 + +ALTER TABLE `asset_vehicle_model` + ADD COLUMN `vehicle_type` int DEFAULT NULL COMMENT '车辆类型(字典)' AFTER `model`, + ADD COLUMN `plate_color` varchar(50) DEFAULT NULL COMMENT '车牌颜色(如:绿牌、蓝牌、黄牌)' AFTER `notice_model`, + ADD COLUMN `battery_type` varchar(100) DEFAULT NULL COMMENT '电池类型(如:磷酸铁锂、三元锂)' AFTER `battery_factory`, + ADD COLUMN `hydrogen_factory` varchar(200) DEFAULT NULL COMMENT '供氢系统厂家' AFTER `refrigerator_factory`; + +-- 添加索引 +ALTER TABLE `asset_vehicle_model` + ADD KEY `idx_vehicle_type` (`vehicle_type`) COMMENT '车辆类型查询', + ADD KEY `idx_brand_model` (`brand`, `model`) COMMENT '品牌型号组合查询'; + +-- ==================== 3. 数据字典补充说明 ==================== +-- 以下字典需要在系统字典表中配置: + +-- 车辆类型字典(asset_vehicle_type) +-- 示例值: +-- 1 - 小型轿车 +-- 2 - SUV +-- 3 - 厢式货车 +-- 4 - 18吨双飞翼货车 + +-- 车牌颜色常用值: +-- 绿牌(新能源车) +-- 蓝牌(小型车) +-- 黄牌(大型车、货车) +-- 白牌(政府、军警用车) +-- 黑牌(外籍车辆) + +-- 电池类型常用值: +-- 磷酸铁锂 +-- 三元锂 +-- 钛酸锂 +-- 固态电池 + +-- ==================== 4. 验证脚本 ==================== +-- 验证停车场表字段 +SELECT + COLUMN_NAME, + COLUMN_TYPE, + COLUMN_COMMENT +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'asset_parking' + AND COLUMN_NAME IN ('rent_fee', 'contract_file_url') +ORDER BY ORDINAL_POSITION; + +-- 验证车型参数表字段 +SELECT + COLUMN_NAME, + COLUMN_TYPE, + COLUMN_COMMENT +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'asset_vehicle_model' + AND COLUMN_NAME IN ('vehicle_type', 'plate_color', 'battery_type', 'hydrogen_factory') +ORDER BY ORDINAL_POSITION; diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerPageReqVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerPageReqVO.java index 78aa50a..fc115bc 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerPageReqVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerPageReqVO.java @@ -12,16 +12,25 @@ import lombok.ToString; @ToString(callSuper = true) public class CustomerPageReqVO extends PageParam { - @Schema(description = "客户名称(模糊搜索)", example = "张三") + @Schema(description = "客户编号", example = "KH-2025-001") + private String customerCode; + + @Schema(description = "客户名称(模糊搜索)", example = "嘉兴某某物流") private String customerName; - @Schema(description = "联系电话(模糊搜索)", example = "13800138000") - private String contactPhone; + @Schema(description = "合作状态", example = "已合作") + private String coopStatus; - @Schema(description = "客户类型", example = "0") - private Integer customerType; + @Schema(description = "区域", example = "华东") + private String region; - @Schema(description = "状态", example = "0") - private Integer status; + @Schema(description = "省份", example = "浙江省") + private String province; + + @Schema(description = "城市", example = "嘉兴市") + private String city; + + @Schema(description = "联系人手机(模糊搜索)", example = "13800138000") + private String contactMobile; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerRespVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerRespVO.java index 06e40b3..bfbf89c 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerRespVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerRespVO.java @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.asset.controller.admin.customer.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 客户 Response VO") @Data @@ -13,67 +13,70 @@ public class CustomerRespVO { @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long id; - @Schema(description = "客户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "CUST000001") - private String customerNo; + @Schema(description = "客户编号", example = "KH-2025-001") + private String customerCode; - @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @Schema(description = "合作状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "已合作") + private String coopStatus; + + @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "嘉兴某某物流有限公司") private String customerName; - @Schema(description = "客户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") - private Integer customerType; + @Schema(description = "省份", example = "浙江省") + private String province; + + @Schema(description = "城市", example = "嘉兴市") + private String city; + + @Schema(description = "地址", example = "浙江省嘉兴市南湖区科技大道1号") + private String address; + + @Schema(description = "区域", example = "华东") + private String region; @Schema(description = "联系人", example = "张三") - private String contactPerson; + private String contact; - @Schema(description = "联系电话", example = "13800138000") + @Schema(description = "联系人手机", example = "13800138000") + private String contactMobile; + + @Schema(description = "联系人座机", example = "0571-88888888") private String contactPhone; - @Schema(description = "联系邮箱", example = "zhangsan@example.com") - private String contactEmail; + @Schema(description = "电子邮箱", example = "zhangsan@example.com") + private String email; - @Schema(description = "联系地址", example = "上海市浦东新区") - private String contactAddress; + @Schema(description = "统一社会信用代码/身份证", example = "91330400MA2XXXXX1") + private String creditCodeOrId; - @Schema(description = "身份证号", example = "310101199001011234") - private String idCardNo; - - @Schema(description = "身份证正面照片URL", example = "https://example.com/id_front.jpg") - private String idCardFrontUrl; - - @Schema(description = "身份证反面照片URL", example = "https://example.com/id_back.jpg") - private String idCardBackUrl; - - @Schema(description = "驾驶证号", example = "310101199001011234") - private String driverLicenseNo; - - @Schema(description = "驾驶证照片URL", example = "https://example.com/driver_license.jpg") - private String driverLicenseUrl; - - @Schema(description = "企业名称", example = "上海科技有限公司") - private String companyName; - - @Schema(description = "统一社会信用代码", example = "91310000MA1FL0001A") - private String unifiedSocialCreditCode; - - @Schema(description = "营业执照URL", example = "https://example.com/business_license.jpg") - private String businessLicenseUrl; - - @Schema(description = "法人代表", example = "张总") - private String legalPerson; - - @Schema(description = "信用等级", example = "1") - private Integer creditLevel; - - @Schema(description = "押金金额", example = "5000.00") - private BigDecimal depositAmount; + @Schema(description = "业务负责人列表", example = "[\"张经理\", \"李专员\"]") + private List businessManagers; @Schema(description = "备注", example = "VIP客户") private String remark; - @Schema(description = "状态", example = "0") - private Integer status; + @Schema(description = "纳税人识别号", example = "91330400MA2XXXXX1") + private String taxId; + + @Schema(description = "发票地址", example = "浙江省嘉兴市南湖区科技大道1号") + private String invoiceAddress; + + @Schema(description = "发票电话", example = "0571-88888888") + private String invoicePhone; + + @Schema(description = "银行账号", example = "6222021234567890123") + private String account; + + @Schema(description = "开户行", example = "中国工商银行嘉兴分行") + private String openingBank; + + @Schema(description = "邮寄地址", example = "浙江省嘉兴市南湖区科技大道1号") + private String mailingAddress; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createTime; + @Schema(description = "更新时间") + private LocalDateTime updateTime; + } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerSaveReqVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerSaveReqVO.java index 6df2fa2..5e99fc6 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerSaveReqVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/customer/vo/CustomerSaveReqVO.java @@ -3,15 +3,11 @@ package cn.iocoder.yudao.module.asset.controller.admin.customer.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.Max; -import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import jakarta.validation.constraints.Size; -import java.math.BigDecimal; +import java.util.List; @Schema(description = "管理后台 - 客户创建/更新 Request VO") @Data @@ -20,86 +16,88 @@ public class CustomerSaveReqVO { @Schema(description = "主键ID(更新时必填)", example = "1") private Long id; - @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @Schema(description = "客户编号", example = "KH-2025-001") + @Size(max = 50, message = "客户编号长度不能超过50个字符") + private String customerCode; + + @Schema(description = "合作状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "已合作") + @NotBlank(message = "合作状态不能为空") + private String coopStatus; + + @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "嘉兴某某物流有限公司") @NotBlank(message = "客户名称不能为空") @Size(max = 100, message = "客户名称长度不能超过100个字符") private String customerName; - @Schema(description = "客户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") - @NotNull(message = "客户类型不能为空") - @Min(value = 0, message = "客户类型值不正确") - @Max(value = 1, message = "客户类型值不正确") - private Integer customerType; + @Schema(description = "省份", example = "浙江省") + @Size(max = 50, message = "省份长度不能超过50个字符") + private String province; - @Schema(description = "联系人", example = "张三") + @Schema(description = "城市", example = "嘉兴市") + @Size(max = 50, message = "城市长度不能超过50个字符") + private String city; + + @Schema(description = "地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "浙江省嘉兴市南湖区科技大道1号") + @NotBlank(message = "地址不能为空") + @Size(max = 255, message = "地址长度不能超过255个字符") + private String address; + + @Schema(description = "区域", example = "华东") + @Size(max = 20, message = "区域长度不能超过20个字符") + private String region; + + @Schema(description = "联系人", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotBlank(message = "联系人不能为空") @Size(max = 50, message = "联系人长度不能超过50个字符") - private String contactPerson; + private String contact; - @Schema(description = "联系电话", example = "13800138000") - @Pattern(regexp = "^1[3-9]\\d{9}$", message = "联系电话格式不正确") + @Schema(description = "联系人手机", requiredMode = Schema.RequiredMode.REQUIRED, example = "13800138000") + @NotBlank(message = "联系人手机不能为空") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "联系人手机格式不正确") + private String contactMobile; + + @Schema(description = "联系人座机", example = "0571-88888888") + @Size(max = 20, message = "联系人座机长度不能超过20个字符") private String contactPhone; - @Schema(description = "联系邮箱", example = "zhangsan@example.com") - @Email(message = "联系邮箱格式不正确") - @Size(max = 100, message = "联系邮箱长度不能超过100个字符") - private String contactEmail; + @Schema(description = "电子邮箱", example = "zhangsan@example.com") + @Email(message = "电子邮箱格式不正确") + @Size(max = 100, message = "电子邮箱长度不能超过100个字符") + private String email; - @Schema(description = "联系地址", example = "上海市浦东新区") - @Size(max = 255, message = "联系地址长度不能超过255个字符") - private String contactAddress; + @Schema(description = "统一社会信用代码/身份证", example = "91330400MA2XXXXX1") + @Size(max = 50, message = "统一社会信用代码/身份证长度不能超过50个字符") + private String creditCodeOrId; - @Schema(description = "身份证号", example = "310101199001011234") - @Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$", message = "身份证号格式不正确") - private String idCardNo; - - @Schema(description = "身份证正面照片URL", example = "https://example.com/id_front.jpg") - @Size(max = 255, message = "身份证正面照片URL长度不能超过255个字符") - private String idCardFrontUrl; - - @Schema(description = "身份证反面照片URL", example = "https://example.com/id_back.jpg") - @Size(max = 255, message = "身份证反面照片URL长度不能超过255个字符") - private String idCardBackUrl; - - @Schema(description = "驾驶证号", example = "310101199001011234") - @Size(max = 50, message = "驾驶证号长度不能超过50个字符") - private String driverLicenseNo; - - @Schema(description = "驾驶证照片URL", example = "https://example.com/driver_license.jpg") - @Size(max = 255, message = "驾驶证照片URL长度不能超过255个字符") - private String driverLicenseUrl; - - @Schema(description = "企业名称", example = "上海科技有限公司") - @Size(max = 200, message = "企业名称长度不能超过200个字符") - private String companyName; - - @Schema(description = "统一社会信用代码", example = "91310000MA1FL0001A") - @Pattern(regexp = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$", message = "统一社会信用代码格式不正确") - private String unifiedSocialCreditCode; - - @Schema(description = "营业执照URL", example = "https://example.com/business_license.jpg") - @Size(max = 255, message = "营业执照URL长度不能超过255个字符") - private String businessLicenseUrl; - - @Schema(description = "法人代表", example = "张总") - @Size(max = 50, message = "法人代表长度不能超过50个字符") - private String legalPerson; - - @Schema(description = "信用等级", example = "1") - @Min(value = 0, message = "信用等级值不正确") - @Max(value = 4, message = "信用等级值不正确") - private Integer creditLevel; - - @Schema(description = "押金金额", example = "5000.00") - @DecimalMin(value = "0.00", message = "押金金额不能为负数") - private BigDecimal depositAmount; + @Schema(description = "业务负责人列表", example = "[\"张经理\", \"李专员\"]") + private List businessManagers; @Schema(description = "备注", example = "VIP客户") @Size(max = 500, message = "备注长度不能超过500个字符") private String remark; - @Schema(description = "状态", example = "0") - @Min(value = 0, message = "状态值不正确") - @Max(value = 2, message = "状态值不正确") - private Integer status; + @Schema(description = "纳税人识别号", example = "91330400MA2XXXXX1") + @Size(max = 50, message = "纳税人识别号长度不能超过50个字符") + private String taxId; + + @Schema(description = "发票地址", example = "浙江省嘉兴市南湖区科技大道1号") + @Size(max = 255, message = "发票地址长度不能超过255个字符") + private String invoiceAddress; + + @Schema(description = "发票电话", example = "0571-88888888") + @Size(max = 20, message = "发票电话长度不能超过20个字符") + private String invoicePhone; + + @Schema(description = "银行账号", example = "6222021234567890123") + @Size(max = 50, message = "银行账号长度不能超过50个字符") + private String account; + + @Schema(description = "开户行", example = "中国工商银行嘉兴分行") + @Size(max = 100, message = "开户行长度不能超过100个字符") + private String openingBank; + + @Schema(description = "邮寄地址", example = "浙江省嘉兴市南湖区科技大道1号") + @Size(max = 255, message = "邮寄地址长度不能超过255个字符") + private String mailingAddress; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/parking/vo/ParkingBaseVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/parking/vo/ParkingBaseVO.java index 9a1ab87..1168c4d 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/parking/vo/ParkingBaseVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/parking/vo/ParkingBaseVO.java @@ -53,19 +53,10 @@ public class ParkingBaseVO { @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确") private String contactPhone; - @Schema(description = "公司负责人", example = "王五") - private String principal; - @Schema(description = "已停车辆数", example = "50") @Min(value = 0, message = "已停车辆数不能为负数") private Integer parkedAmount; - @Schema(description = "库存区域(字典)", example = "1") - private Integer stockArea; - - @Schema(description = "异动城市(字典)", example = "1") - private Integer unusualActionCity; - @Schema(description = "经度", example = "120.123456") @Pattern(regexp = "^-?((0|[1-9]\\d?|1[0-7]\\d)(\\.\\d{1,6})?|180(\\.0{1,6})?)$", message = "经度格式不正确,范围:-180~180") private String longitude; @@ -74,7 +65,11 @@ public class ParkingBaseVO { @Pattern(regexp = "^-?((0|[1-8]?\\d)(\\.\\d{1,6})?|90(\\.0{1,6})?)$", message = "纬度格式不正确,范围:-90~90") private String latitude; - @Schema(description = "备注", example = "备注信息") - private String remark; + @Schema(description = "租金费用(元/月)", example = "5000.00") + @Min(value = 0, message = "租金费用不能为负数") + private java.math.BigDecimal rentFee; + + @Schema(description = "合同文件URL", example = "https://example.com/contract.pdf") + private String contractFileUrl; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/VehicleModelController.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/VehicleModelController.java index 603208f..e91e92f 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/VehicleModelController.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/VehicleModelController.java @@ -91,7 +91,7 @@ public class VehicleModelController { @GetMapping("/list-by-brand") @Operation(summary = "根据品牌获取车型参数列表") @Parameter(name = "brand", description = "品牌", required = true) - public CommonResult> getVehicleModelListByBrand(@RequestParam("brand") Integer brand) { + public CommonResult> getVehicleModelListByBrand(@RequestParam("brand") String brand) { List list = vehicleModelService.getVehicleModelListByBrand(brand); return success(BeanUtils.toBean(list, VehicleModelRespVO.class)); } @@ -99,7 +99,7 @@ public class VehicleModelController { @GetMapping("/list-by-model") @Operation(summary = "根据车型获取车型参数列表") @Parameter(name = "model", description = "车型", required = true) - public CommonResult> getVehicleModelListByModel(@RequestParam("model") Integer model) { + public CommonResult> getVehicleModelListByModel(@RequestParam("model") String model) { List list = vehicleModelService.getVehicleModelListByModel(model); return success(BeanUtils.toBean(list, VehicleModelRespVO.class)); } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelBaseVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelBaseVO.java index f5489c2..882d5b8 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelBaseVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelBaseVO.java @@ -17,45 +17,38 @@ import java.math.BigDecimal; @Data public class VehicleModelBaseVO { - @Schema(description = "品牌(字典)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "品牌不能为空") - private Integer brand; + @Schema(description = "品牌", requiredMode = Schema.RequiredMode.REQUIRED, example = "帕力安牌") + @NotBlank(message = "品牌不能为空") + private String brand; - @Schema(description = "车型(字典)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "车型不能为空") - private Integer model; + @Schema(description = "型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "XDQ504LXCFCEV01") + @NotBlank(message = "型号不能为空") + private String model; - @Schema(description = "车型编号", example = "HFC1043K1") - private String modelCode; + @Schema(description = "型号label", example = "4.5T冷链车") + private String modelLabel; - @Schema(description = "车型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "江淮骏铃V6") - @NotBlank(message = "车型名称不能为空") - private String modelName; - - @Schema(description = "车辆公告型号", example = "HFC1043K1R8T") - private String noticeModel; - - @Schema(description = "仪表盘氢气单位(字典)", example = "1") - private Integer hydrogenUnit; + @Schema(description = "仪表盘氢气单位", example = "%、MPa、Kg") + private String hydrogenUnit; @Schema(description = "氢瓶容量(L)", example = "165") @Min(value = 0, message = "氢瓶容量不能为负数") private Integer hydrogenCapacity; - @Schema(description = "电池公告可行驶里程(KM)", example = "300") - @Min(value = 0, message = "电池公告可行驶里程不能为负数") + @Schema(description = "电续航里程(KM)", example = "300") + @Min(value = 0, message = "电续航里程不能为负数") private Integer electricityMileage; @Schema(description = "储电量(kwh)", example = "80.00") @DecimalMin(value = "0.0", message = "储电量不能为负数") private BigDecimal reserveElectricity; - @Schema(description = "氢气公告可行驶里程(KM)", example = "400") - @Min(value = 0, message = "氢气公告可行驶里程不能为负数") + @Schema(description = "氢续航里程(KM)", example = "400") + @Min(value = 0, message = "氢续航里程不能为负数") private Integer hydrogenMileage; - @Schema(description = "燃料种类(字典)", example = "1") - private Integer fuelType; + @Schema(description = "燃料种类", example = "氢、电、柴油") + private String fuelType; @Schema(description = "轮胎尺寸", example = "225/70R19.5") private String tireSize; @@ -64,8 +57,14 @@ public class VehicleModelBaseVO { @Min(value = 1, message = "轮胎数量必须大于0") private Integer tireNumber; - @Schema(description = "车辆尺寸", example = "5995×2100×2850") - private String truckSize; + @Schema(description = "车辆尺寸_长", example = "5995") + private String truckSize_x; + + @Schema(description = "车辆尺寸_宽", example = "2260") + private String truckSize_y; + + @Schema(description = "车辆尺寸_高", example = "3320") + private String truckSize_z; @Schema(description = "电堆厂家", example = "上海重塑") private String onlineSpreadEnterprise; @@ -76,4 +75,16 @@ public class VehicleModelBaseVO { @Schema(description = "冷机厂家", example = "开山") private String refrigeratorFactory; + @Schema(description = "车辆类型", example = "轻型箱式货车") + private String vehicleType; + + @Schema(description = "车牌颜色", example = "绿牌") + private String plateColor; + + @Schema(description = "电池类型", example = "磷酸铁锂") + private String batteryType; + + @Schema(description = "供氢系统厂家", example = "北京亿华通") + private String hydrogenFactory; + } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelMaintainItemVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelMaintainItemVO.java index e664ea6..f55fce6 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelMaintainItemVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelMaintainItemVO.java @@ -24,17 +24,17 @@ public class VehicleModelMaintainItemVO { @NotBlank(message = "保养项目不能为空") private String maintainItem; - @Schema(description = "保养内容", example = "更换机油、机滤") - private String maintainContent; - - @Schema(description = "材料费", example = "200.00") + @Schema(description = "材料费(元)", example = "200.00") @DecimalMin(value = "0.0", message = "材料费不能为负数") - private BigDecimal materialsExpenses; + private BigDecimal materialFee; - @Schema(description = "工时费", example = "100.00") + @Schema(description = "工时费(元)", example = "100.00") @DecimalMin(value = "0.0", message = "工时费不能为负数") private BigDecimal hourFee; + @Schema(description = "费用合计(元)", example = "300.00") + private BigDecimal totalFee; + @Schema(description = "保养公里周期(KM)", example = "5000") @Min(value = 1, message = "保养公里周期必须大于0") private Integer kilometerCycle; diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelPageReqVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelPageReqVO.java index 54dff03..d7f6c4e 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelPageReqVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelPageReqVO.java @@ -17,19 +17,13 @@ import lombok.ToString; @ToString(callSuper = true) public class VehicleModelPageReqVO extends PageParam { - @Schema(description = "品牌(字典)", example = "1") - private Integer brand; + @Schema(description = "品牌", example = "帕力安牌") + private String brand; - @Schema(description = "车型(字典)", example = "1") - private Integer model; + @Schema(description = "型号", example = "XDQ504LXCFCEV01") + private String model; - @Schema(description = "车型名称", example = "江淮骏铃V6") - private String modelName; - - @Schema(description = "车型编号", example = "HFC1043K1") - private String modelCode; - - @Schema(description = "燃料种类(字典)", example = "1") - private Integer fuelType; + @Schema(description = "燃料种类", example = "氢、电、柴油") + private String fuelType; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelSimpleRespVO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelSimpleRespVO.java index 4be334c..d3a7a19 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelSimpleRespVO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/controller/admin/vehiclemodel/vo/VehicleModelSimpleRespVO.java @@ -15,13 +15,13 @@ public class VehicleModelSimpleRespVO { @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Long id; - @Schema(description = "车型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "江淮骏铃V6") - private String modelName; + @Schema(description = "品牌", example = "帕力安牌") + private String brand; - @Schema(description = "品牌(字典)", example = "1") - private Integer brand; + @Schema(description = "型号", example = "XDQ504LXCFCEV01") + private String model; - @Schema(description = "车型(字典)", example = "1") - private Integer model; + @Schema(description = "型号label", example = "4.5T冷链车") + private String modelLabel; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerBusinessManagerDO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerBusinessManagerDO.java new file mode 100644 index 0000000..4e15c82 --- /dev/null +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerBusinessManagerDO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.asset.dal.dataobject.customer; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 客户业务负责人关联 DO + * + * @author 芋道源码 + */ +@TableName("asset_customer_business_manager") +@KeySequence("asset_customer_business_manager_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CustomerBusinessManagerDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + + /** + * 客户ID + */ + private Long customerId; + + /** + * 业务负责人姓名 + */ + private String businessManagerName; + +} diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerDO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerDO.java index aeb4d3e..f142fce 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerDO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/customer/CustomerDO.java @@ -6,8 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; -import java.math.BigDecimal; - /** * 客户信息 DO * @@ -32,7 +30,12 @@ public class CustomerDO extends BaseDO { /** * 客户编号 */ - private String customerNo; + private String customerCode; + + /** + * 合作状态 + */ + private String coopStatus; /** * 客户名称 @@ -40,84 +43,49 @@ public class CustomerDO extends BaseDO { private String customerName; /** - * 客户类型(0=个人 1=企业) + * 省份 */ - private Integer customerType; + private String province; + + /** + * 城市 + */ + private String city; + + /** + * 地址 + */ + private String address; + + /** + * 区域 + */ + private String region; /** * 联系人 */ - private String contactPerson; + private String contact; /** - * 联系电话 + * 联系人手机 + */ + private String contactMobile; + + /** + * 联系人座机 */ private String contactPhone; /** - * 联系邮箱 + * 电子邮箱 */ - private String contactEmail; + private String email; /** - * 联系地址 + * 统一社会信用代码/身份证 */ - private String contactAddress; - - /** - * 身份证号 - */ - private String idCardNo; - - /** - * 身份证正面照片URL - */ - private String idCardFrontUrl; - - /** - * 身份证反面照片URL - */ - private String idCardBackUrl; - - /** - * 驾驶证号 - */ - private String driverLicenseNo; - - /** - * 驾驶证照片URL - */ - private String driverLicenseUrl; - - /** - * 企业名称 - */ - private String companyName; - - /** - * 统一社会信用代码 - */ - private String unifiedSocialCreditCode; - - /** - * 营业执照URL - */ - private String businessLicenseUrl; - - /** - * 法人代表 - */ - private String legalPerson; - - /** - * 信用等级(0=未评级 1=A级 2=B级 3=C级 4=D级) - */ - private Integer creditLevel; - - /** - * 押金金额 - */ - private BigDecimal depositAmount; + private String creditCodeOrId; /** * 备注 @@ -125,8 +93,33 @@ public class CustomerDO extends BaseDO { private String remark; /** - * 状态(0=正常 1=冻结 2=黑名单) + * 纳税人识别号 */ - private Integer status; + private String taxId; + + /** + * 发票地址 + */ + private String invoiceAddress; + + /** + * 发票电话 + */ + private String invoicePhone; + + /** + * 银行账号 + */ + private String account; + + /** + * 开户行 + */ + private String openingBank; + + /** + * 邮寄地址 + */ + private String mailingAddress; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/parking/ParkingDO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/parking/ParkingDO.java index 91baa9f..168c91a 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/parking/ParkingDO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/parking/ParkingDO.java @@ -28,42 +28,16 @@ public class ParkingDO extends BaseDO { */ @TableId private Long id; - /** * 停车场名称 */ private String name; - /** - * 地址 - */ - private String address; - /** * 容量 */ private Integer capacity; - /** - * 省份 - */ - private String province; - - /** - * 城市 - */ - private String city; - - /** - * 租赁开始时间 - */ - private LocalDate leaseStartDate; - - /** - * 租赁结束时间 - */ - private LocalDate leaseEndDate; - /** * 负责人 */ @@ -84,25 +58,25 @@ public class ParkingDO extends BaseDO { */ private String contactPhone; - /** - * 公司负责人 - */ - private String principal; - /** * 已停车辆数 */ private Integer parkedAmount; /** - * 库存区域(字典) + * 省份 */ - private Integer stockArea; + private String province; /** - * 异动城市(字典) + * 城市 */ - private Integer unusualActionCity; + private String city; + + /** + * 地址 + */ + private String address; /** * 经度 @@ -115,8 +89,23 @@ public class ParkingDO extends BaseDO { private String latitude; /** - * 备注 + * 租赁开始时间 */ - private String remark; + private LocalDate leaseStartDate; + + /** + * 租赁结束时间 + */ + private LocalDate leaseEndDate; + + /** + * 租金费用(元/月) + */ + private java.math.BigDecimal rentFee; + + /** + * 合同文件URL + */ + private String contractFileUrl; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelDO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelDO.java index abf6bbe..c7537af 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelDO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelDO.java @@ -30,88 +30,107 @@ public class VehicleModelDO extends BaseDO { private Long id; /** - * 品牌(字典) + * 品牌:帕力安牌 */ - private Integer brand; + private String brand; /** - * 车型(字典) + * 型号:XDQ504LXCFCEV01 */ - private Integer model; + private String model; /** - * 车型编号 + * 车辆类型:轻型箱式货车 */ - private String modelCode; + private String vehicleType; /** - * 车型名称 + * 型号label:4.5T冷链车 */ - private String modelName; + private String modelLabel; /** - * 车辆公告型号 + * 燃料种类:氢、电、柴油 */ - private String noticeModel; + private String fuelType; /** - * 仪表盘氢气单位(字典) + * 车牌颜色::绿牌、黄牌、黄绿牌 */ - private Integer hydrogenUnit; + private String plateColor; /** - * 氢瓶容量(L) + * 车辆尺寸_长: 5995 */ - private Integer hydrogenCapacity; + private String truckSize_x; /** - * 电池公告可行驶里程(KM) + * 车辆尺寸_宽:2260 */ - private Integer electricityMileage; + private String truckSize_y; /** - * 储电量(kwh) + * 车辆尺寸_高:3320 */ - private BigDecimal reserveElectricity; + private String truckSize_z; /** - * 氢气公告可行驶里程(KM) - */ - private Integer hydrogenMileage; - - /** - * 燃料种类(字典) - */ - private Integer fuelType; - - /** - * 轮胎尺寸 + * 轮胎规格:7.00T6LT0PT */ private String tireSize; /** - * 轮胎数量 + * 轮胎数量:6 */ private Integer tireNumber; /** - * 车辆尺寸 + * 电池类型:磷酸铁锂、三元锂 */ - private String truckSize; - - /** - * 电堆厂家 - */ - private String onlineSpreadEnterprise; + private String batteryType; /** * 电池厂家 */ private String batteryFactory; + /** + * 储电量(kwh) + */ + private BigDecimal reserveElectricity; + + /** + * 电续航里程(KM) + */ + private Integer electricityMileage; + + /** + * 氢瓶容量(L) + */ + private Integer hydrogenCapacity; + + /** + * 供氢系统厂家 + */ + private String hydrogenFactory; + + /** + * 仪表盘氢气单位: %、MPa、Kg + */ + private String hydrogenUnit; + + /** + * 氢续航里程(KM) + */ + private Integer hydrogenMileage; + /** * 冷机厂家 */ private String refrigeratorFactory; + /** + * 电堆厂家 + */ + private String onlineSpreadEnterprise; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelMaintainItemDO.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelMaintainItemDO.java index 11fd6bb..1a91d66 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelMaintainItemDO.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/dataobject/vehiclemodel/VehicleModelMaintainItemDO.java @@ -39,21 +39,6 @@ public class VehicleModelMaintainItemDO extends BaseDO { */ private String maintainItem; - /** - * 保养内容 - */ - private String maintainContent; - - /** - * 材料费 - */ - private BigDecimal materialsExpenses; - - /** - * 工时费 - */ - private BigDecimal hourFee; - /** * 保养公里周期(KM) */ @@ -64,4 +49,18 @@ public class VehicleModelMaintainItemDO extends BaseDO { */ private Integer timeCycle; + /** + * 工时费(元) + */ + private BigDecimal hourFee; + + /** + * 材料费(元) + */ + private BigDecimal materialFee; + + /** + * 费用合计(元) + */ + private BigDecimal totalFee; } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerBusinessManagerMapper.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerBusinessManagerMapper.java new file mode 100644 index 0000000..95075e9 --- /dev/null +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerBusinessManagerMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.asset.dal.mysql.customer; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.asset.dal.dataobject.customer.CustomerBusinessManagerDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 客户业务负责人关联 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface CustomerBusinessManagerMapper extends BaseMapperX { + + /** + * 根据客户ID查询业务负责人列表 + */ + default List selectListByCustomerId(Long customerId) { + return selectList(CustomerBusinessManagerDO::getCustomerId, customerId); + } + + /** + * 根据客户ID删除业务负责人 + */ + default void deleteByCustomerId(Long customerId) { + delete(CustomerBusinessManagerDO::getCustomerId, customerId); + } + +} diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerMapper.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerMapper.java index e51c597..5a7a93b 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerMapper.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/customer/CustomerMapper.java @@ -17,10 +17,13 @@ public interface CustomerMapper extends BaseMapperX { default PageResult selectPage(CustomerPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(CustomerDO::getCustomerCode, reqVO.getCustomerCode()) .likeIfPresent(CustomerDO::getCustomerName, reqVO.getCustomerName()) - .likeIfPresent(CustomerDO::getContactPhone, reqVO.getContactPhone()) - .eqIfPresent(CustomerDO::getCustomerType, reqVO.getCustomerType()) - .eqIfPresent(CustomerDO::getStatus, reqVO.getStatus()) + .eqIfPresent(CustomerDO::getCoopStatus, reqVO.getCoopStatus()) + .eqIfPresent(CustomerDO::getRegion, reqVO.getRegion()) + .eqIfPresent(CustomerDO::getProvince, reqVO.getProvince()) + .eqIfPresent(CustomerDO::getCity, reqVO.getCity()) + .likeIfPresent(CustomerDO::getContactMobile, reqVO.getContactMobile()) .orderByDesc(CustomerDO::getId)); } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/vehiclemodel/VehicleModelMapper.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/vehiclemodel/VehicleModelMapper.java index 06ce285..cf8dce0 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/vehiclemodel/VehicleModelMapper.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/dal/mysql/vehiclemodel/VehicleModelMapper.java @@ -21,17 +21,15 @@ public interface VehicleModelMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(VehicleModelDO::getBrand, reqVO.getBrand()) .eqIfPresent(VehicleModelDO::getModel, reqVO.getModel()) - .likeIfPresent(VehicleModelDO::getModelName, reqVO.getModelName()) - .likeIfPresent(VehicleModelDO::getModelCode, reqVO.getModelCode()) .eqIfPresent(VehicleModelDO::getFuelType, reqVO.getFuelType()) .orderByDesc(VehicleModelDO::getId)); } - default List selectListByBrand(Integer brand) { + default List selectListByBrand(String brand) { return selectList(VehicleModelDO::getBrand, brand); } - default List selectListByModel(Integer model) { + default List selectListByModel(String model) { return selectList(VehicleModelDO::getModel, model); } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/customer/CustomerServiceImpl.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/customer/CustomerServiceImpl.java index 1d3f5de..b64f3a6 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/customer/CustomerServiceImpl.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/customer/CustomerServiceImpl.java @@ -4,13 +4,17 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.asset.controller.admin.customer.vo.CustomerPageReqVO; import cn.iocoder.yudao.module.asset.controller.admin.customer.vo.CustomerSaveReqVO; import cn.iocoder.yudao.module.asset.convert.customer.CustomerConvert; +import cn.iocoder.yudao.module.asset.dal.dataobject.customer.CustomerBusinessManagerDO; import cn.iocoder.yudao.module.asset.dal.dataobject.customer.CustomerDO; +import cn.iocoder.yudao.module.asset.dal.mysql.customer.CustomerBusinessManagerMapper; import cn.iocoder.yudao.module.asset.dal.mysql.customer.CustomerMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import jakarta.annotation.Resource; +import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.asset.enums.ErrorCodeConstants.CUSTOMER_NOT_EXISTS; @@ -28,36 +32,53 @@ public class CustomerServiceImpl implements CustomerService { @Resource private CustomerMapper customerMapper; + @Resource + private CustomerBusinessManagerMapper customerBusinessManagerMapper; + @Override + @Transactional(rollbackFor = Exception.class) public Long createCustomer(CustomerSaveReqVO createReqVO) { // 转换并插入 CustomerDO customer = CustomerConvert.INSTANCE.convert(createReqVO); - + // 生成客户编号 - if (customer.getCustomerNo() == null) { - customer.setCustomerNo(generateCustomerNo()); + if (customer.getCustomerCode() == null) { + customer.setCustomerCode(generateCustomerCode()); } - + customerMapper.insert(customer); + + // 保存业务负责人 + saveBusinessManagers(customer.getId(), createReqVO.getBusinessManagers()); + return customer.getId(); } @Override + @Transactional(rollbackFor = Exception.class) public void updateCustomer(CustomerSaveReqVO updateReqVO) { // 校验存在 validateCustomerExists(updateReqVO.getId()); - + // 转换并更新 CustomerDO updateObj = CustomerConvert.INSTANCE.convert(updateReqVO); customerMapper.updateById(updateObj); + + // 更新业务负责人:先删除旧的,再插入新的 + customerBusinessManagerMapper.deleteByCustomerId(updateReqVO.getId()); + saveBusinessManagers(updateReqVO.getId(), updateReqVO.getBusinessManagers()); } @Override + @Transactional(rollbackFor = Exception.class) public void deleteCustomer(Long id) { // 校验存在 validateCustomerExists(id); - - // 删除 + + // 删除业务负责人 + customerBusinessManagerMapper.deleteByCustomerId(id); + + // 删除客户 customerMapper.deleteById(id); } @@ -80,10 +101,29 @@ public class CustomerServiceImpl implements CustomerService { /** * 生成客户编号 */ - private String generateCustomerNo() { + private String generateCustomerCode() { // 查询最大ID Long maxId = customerMapper.selectCount(); - return String.format("CUST%06d", maxId + 1); + return String.format("KH-%04d-%03d", java.time.Year.now().getValue(), maxId + 1); + } + + /** + * 保存业务负责人 + */ + private void saveBusinessManagers(Long customerId, List businessManagers) { + if (businessManagers == null || businessManagers.isEmpty()) { + return; + } + + for (String managerName : businessManagers) { + if (managerName != null && !managerName.trim().isEmpty()) { + CustomerBusinessManagerDO managerDO = CustomerBusinessManagerDO.builder() + .customerId(customerId) + .businessManagerName(managerName.trim()) + .build(); + customerBusinessManagerMapper.insert(managerDO); + } + } } } diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelService.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelService.java index d5765b9..9a1968b 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelService.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelService.java @@ -67,7 +67,7 @@ public interface VehicleModelService { * @param brand 品牌 * @return 车型参数列表 */ - List getVehicleModelListByBrand(Integer brand); + List getVehicleModelListByBrand(String brand); /** * 根据车型获取车型参数列表 @@ -75,7 +75,7 @@ public interface VehicleModelService { * @param model 车型 * @return 车型参数列表 */ - List getVehicleModelListByModel(Integer model); + List getVehicleModelListByModel(String model); /** * 获取车型的维保项目列表 diff --git a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelServiceImpl.java b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelServiceImpl.java index 885c6d8..d966434 100644 --- a/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelServiceImpl.java +++ b/yudao-module-asset/yudao-module-asset-server/src/main/java/cn/iocoder/yudao/module/asset/service/vehiclemodel/VehicleModelServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.math.BigDecimal; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -100,12 +101,12 @@ public class VehicleModelServiceImpl implements VehicleModelService { } @Override - public List getVehicleModelListByBrand(Integer brand) { + public List getVehicleModelListByBrand(String brand) { return vehicleModelMapper.selectListByBrand(brand); } @Override - public List getVehicleModelListByModel(Integer model) { + public List getVehicleModelListByModel(String model) { return vehicleModelMapper.selectListByModel(model); } @@ -126,10 +127,16 @@ public class VehicleModelServiceImpl implements VehicleModelService { if (maintainItems == null || maintainItems.isEmpty()) { return; } - + for (VehicleModelMaintainItemVO item : maintainItems) { VehicleModelMaintainItemDO maintainItem = BeanUtils.toBean(item, VehicleModelMaintainItemDO.class); maintainItem.setVehicleModelId(vehicleModelId); + + // 自动计算 totalFee,处理 null 值 + BigDecimal hourFee = item.getHourFee() != null ? item.getHourFee() : BigDecimal.ZERO; + BigDecimal materialFee = item.getMaterialFee() != null ? item.getMaterialFee() : BigDecimal.ZERO; + maintainItem.setTotalFee(hourFee.add(materialFee)); + vehicleModelMaintainItemMapper.insert(maintainItem); } }