package com.xiaopeng.operation.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xiaopeng.api.model.operation.XpTradingStrategyCity;
import com.xiaopeng.api.model.operation.XpTradingStrategyPush;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
*
* 交易策略编辑DTO
*
*
* @author mitao
* @since 2026-02-05
*/
@Data
@ApiModel(value = "交易策略编辑DTO", description = "交易策略编辑请求参数")
public class XpTradingStrategyEditDTO {
@ApiModelProperty(value = "主键ID", required = true)
@NotNull(message = "ID不能为空")
private Long id;
@ApiModelProperty(value = "关联城市列表")
private List cityList;
//----------------发单策略--------------------
@ApiModelProperty(value = "用户每日取消订单数")
private Integer cancleCount;
@ApiModelProperty(value = "单个订单可修改目的地次数")
private Integer amendCountPerOrder;
@ApiModelProperty(value = "乘客端首页安全中心是否开启")
private Boolean showSecurityCenter;
//----------------发单策略--------------------
//---------------发单拦截策略------------------------------------
@ApiModelProperty(value = "豁免金额")
private BigDecimal exemptionAmount;
@ApiModelProperty(value = "是否长期有效 1=是 0=否")
private Boolean isLongValid;
@ApiModelProperty(value = "豁免城市")
private String cityCode;
@ApiModelProperty(value = "豁免开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime exemptionStartTime;
@ApiModelProperty(value = "豁免结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime exemptionEndTime;
@ApiModelProperty(value = "豁免角色 逗号分割 0=全部 1=新客 2=老客 3=流失召回 4=媒体")
private String exemptionRole;
@ApiModelProperty(value = "免密授权金额")
private BigDecimal passwordFreeAmount;
@ApiModelProperty(value = "预付额度 订单大于金额需预付")
private BigDecimal prepaidLimit;
//---------------发单拦截策略------------------------------------
//---------------播单策略------------------------------------
@ApiModelProperty(value = "一轮推单距离")
@Min(0)
private Double onePushDistance;
@ApiModelProperty(value = "一轮推单时间")
@Min(0)
private Integer onePushTime;
@ApiModelProperty(value = "二轮推单距离")
@Min(0)
private Double twoPushDistance;
@ApiModelProperty(value = "二轮推单时间")
@Min(0)
private Integer twoPushTime;
@ApiModelProperty(value = "三轮推单距离")
@Min(0)
private Double threePushDistance;
@ApiModelProperty(value = "三轮推单时间")
@Min(0)
private Integer threePushTime;
@ApiModelProperty(value = "四轮推单距离")
@Min(0)
private Double fourPushDistance;
@ApiModelProperty(value = "四轮推单时间")
@Min(0)
private Integer fourPushTime;
@ApiModelProperty(value = "五轮推单距离")
private Double fivePushDistance;
@ApiModelProperty(value = "五轮推单时间")
private Integer fivePushTime;
@ApiModelProperty(value = "排队是时,每X秒轮询接口查询排序")
private Integer queuePollingTime;
@ApiModelProperty(value = "乘客据上车点大于X米展示步行导航按钮")
private Integer walkingNavigationDistance;
@ApiModelProperty(value = "用户在页面超过X秒未下单,系统静默判断价格是否有波动")
private Integer notAddOrderTime;
@ApiModelProperty(value = "波动大于X%,则弹框提示")
private Integer priceFluctuationRatio;
@ApiModelProperty(value = "播单—乘客上车后x分钟内未点击出车,订单自动取消")
private Integer bdNotBoardedTime;
@ApiModelProperty(value = "分时段推单列表")
private List pushTimeList;
//---------------播单策略------------------------------------
//---------------分单策略------------------------------------
@ApiModelProperty(value = "规则类型 1=单手举手 2=多手举手")
private Integer ruleType;
@ApiModelProperty(value = "同时抢单人数")
private Integer simultaneouslyOrderCount;
@ApiModelProperty(value = "倾向订单价值")
private Integer tendencyOrderValue;
@ApiModelProperty(value = "倾向距离")
private Integer tendencyDistance;
@ApiModelProperty(value = "倾向时间")
private Integer tendencyTime;
@ApiModelProperty(value = "倾向电量")
private Integer tendencyElectricity;
@ApiModelProperty(value = "时间差权重")
private Integer weightTimeDifference;
@ApiModelProperty(value = "距离差权重")
private Integer weightDistanceDifference;
@ApiModelProperty(value = "距离权重")
private Integer weightDistance;
@ApiModelProperty(value = "时间权重")
private Integer weightTime;
@ApiModelProperty(value = "电量权重")
private Integer weightElectricity;
@ApiModelProperty(value = "路线时效,过了需要重新获取,单位:秒")
private Integer MaxStandingTiming;
@ApiModelProperty(value = "触发步行导航的最小距离")
private Integer walkingGuideDistance;
//---------------分单策略------------------------------------
//-------------------连环派单策略----------------------
@ApiModelProperty(value = "连环派单车辆侧 允许车辆进入连环派单候选池路程阈值, unit : km")
@Min(value = 0, message = "当前订单剩余里程不能小于0")
@NotNull(message = "当前订单剩余里程不能为空")
private Integer distanceRegardAsEnding;
@ApiModelProperty(value = "连环派单车辆侧 允许车辆进入连环派单候选池时间阈值 unit : min")
@Min(value = 0, message = "当前订单剩余时间不能小于0")
@NotNull(message = "当前订单剩余时间不能为空")
private Integer timeRegardAsEnding;
@ApiModelProperty(value = "连环派单车辆侧 保障可完成连环订单的电量 unit : km")
@Min(value = 0, message = "车辆电量/续航不能小于0")
@NotNull(message = "车辆电量/续航不能为空")
private Integer backupPower;
@ApiModelProperty(value = "连环派单订单侧 终点距离起点的距离阈值 unit : km")
@Min(0)
private Integer destToPassenger;
@ApiModelProperty(value = "连环派单订单侧 结束时间到用车时间阈值unit : min")
@Min(0)
private Integer endingTimeToUseTime;
//-------------------连环派单策略----------------------
}