142 lines
4.4 KiB
Java
142 lines
4.4 KiB
Java
package com.haisen.laop.dto;
|
||
|
||
import jakarta.validation.constraints.*;
|
||
import lombok.Data;
|
||
|
||
import java.io.Serializable;
|
||
import java.math.BigDecimal;
|
||
import java.time.LocalDateTime;
|
||
import java.util.List;
|
||
|
||
/**
|
||
* 发布任务请求 DTO,对应原型图"发布任务"页面的全部表单字段。
|
||
*
|
||
* <p><b>多选字段规约:</b>前端以数组提交,Service 层负责转为分号拼接的 {@code String} 存入 DB;
|
||
* 禁止前端直接拼字符串提交,避免格式校验遗漏。</p>
|
||
*
|
||
* @author duhao
|
||
*/
|
||
@Data
|
||
public class TaskPublishDTO implements Serializable {
|
||
|
||
private static final long serialVersionUID = 1L;
|
||
|
||
/**
|
||
* 任务名称,列表/详情页标题。
|
||
*/
|
||
@NotBlank(message = "任务名称不能为空")
|
||
@Size(max = 100, message = "任务名称长度不能超过100个字符")
|
||
private String name;
|
||
|
||
/**
|
||
* 任务类型编码:1植保 2吊运 3航拍 4巡检 5清洗 6表演 7测绘。
|
||
*/
|
||
@NotNull(message = "任务类型不能为空")
|
||
private Integer type;
|
||
|
||
/**
|
||
* 省份,任务所在地 LBS 筛选维度。
|
||
*/
|
||
@Size(max = 20, message = "省份长度不能超过20个字符")
|
||
private String province;
|
||
|
||
/**
|
||
* 城市,任务所在地 LBS 筛选维度。
|
||
*/
|
||
@Size(max = 20, message = "城市长度不能超过20个字符")
|
||
private String city;
|
||
|
||
/**
|
||
* 区县。
|
||
*/
|
||
@Size(max = 20, message = "区县长度不能超过20个字符")
|
||
private String district;
|
||
|
||
/**
|
||
* 详细地址,飞手导航用;必填(地图选点必带)。
|
||
*/
|
||
@NotBlank(message = "详细地址不能为空")
|
||
@Size(max = 200, message = "详细地址长度不能超过200个字符")
|
||
private String address;
|
||
|
||
/**
|
||
* 纬度坐标,地图选点时自动填入;String 避免浮点精度问题;必填。
|
||
*/
|
||
@NotBlank(message = "纬度不能为空")
|
||
@Size(max = 20, message = "纬度长度不能超过20个字符")
|
||
private String latitude;
|
||
|
||
/**
|
||
* 经度坐标,地图选点时自动填入;String 避免浮点精度问题;必填。
|
||
*/
|
||
@NotBlank(message = "经度不能为空")
|
||
@Size(max = 20, message = "经度长度不能超过20个字符")
|
||
private String longitude;
|
||
|
||
/**
|
||
* 作业场景图 file_id 列表,至少 1 张、最多 5 张。Service 层转为分号拼接字符串。
|
||
*/
|
||
@NotNull(message = "场景图不能为空")
|
||
@Size(min = 1, max = 5, message = "场景图至少上传1张,最多5张")
|
||
private List<Long> sceneImageIds;
|
||
|
||
/**
|
||
* 需求人数,默认 1;团队单/急单可大于 1。
|
||
*/
|
||
@NotNull(message = "需求人数不能为空")
|
||
@Min(value = 1, message = "需求人数至少为1人")
|
||
@Max(value = 99, message = "需求人数最多99人")
|
||
private Integer requiredCount;
|
||
|
||
/**
|
||
* 任务开始时间,精确到分钟。
|
||
*/
|
||
@NotNull(message = "开始时间不能为空")
|
||
private LocalDateTime taskStartTime;
|
||
|
||
/**
|
||
* 任务结束时间,必填(作业结束日期)。
|
||
*/
|
||
@NotNull(message = "结束时间不能为空")
|
||
private LocalDateTime taskEndTime;
|
||
|
||
/**
|
||
* 报酬(元),必填且必须大于 0。
|
||
*/
|
||
@NotNull(message = "报酬不能为空")
|
||
@DecimalMin(value = "0.01", message = "报酬必须大于0")
|
||
private BigDecimal reward;
|
||
|
||
/**
|
||
* 保险要求编码列表,Service 层转为分号拼接字符串。
|
||
* 编码:1=三者险 2=飞手险 3=机身险。可空(无保险要求)。
|
||
*/
|
||
private List<Integer> insuranceRequireCodes;
|
||
|
||
/**
|
||
* 联系人姓名,必填。
|
||
*/
|
||
@NotBlank(message = "联系人姓名不能为空")
|
||
@Size(max = 50, message = "联系人姓名长度不能超过50个字符")
|
||
private String contactName;
|
||
|
||
/**
|
||
* 联系电话,必填;中国大陆手机号正则校验。
|
||
*/
|
||
@NotBlank(message = "联系电话不能为空")
|
||
@Size(max = 20, message = "联系电话长度不能超过20个字符")
|
||
@Pattern(regexp = "^1[3-9]\\d{9}$", message = "请输入正确的手机号")
|
||
private String contactPhone;
|
||
|
||
/**
|
||
* 备注/详细任务描述,选填。
|
||
*/
|
||
@Size(max = 2000, message = "备注长度不能超过2000个字符")
|
||
private String remark;
|
||
|
||
/**
|
||
* 是否优质任务,非必填,默认 false。优质任务消耗 4 积分,金色高亮展示。
|
||
*/
|
||
private Boolean isPremium;
|
||
}
|