LAOP-admin/src/main/java/com/haisen/laop/dto/TaskPublishDTO.java
2026-09-18 16:45:38 +08:00

142 lines
4.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}