package org.dromara.payment.task.domain.bo;

import org.dromara.common.core.utils.DateUtils;
import org.dromara.payment.task.domain.MerTask;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 任务业务对象 mer_task
 *
 * @author LionLi
 * @date 2024-04-08
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = MerTask.class, reverseConvertGenerate = false)
public class MerTaskBo extends BaseEntity {

    /**
     * 主键
     */
    private Long id;

    /**
     * 项目类型：（1:派单、2:抢单）
     */
    private Long classify;

    /**
     * 项目编码
     */
    private String no;

    /**
     * 项目标题
     */
    private String name;

    /**
     * 最小项目总金额(分)
     */
    private Long cost;

    /**
     * 最大项目总金额(分)，用于派单任务
     */
    private Long costMax;


    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd")
    private Date jiezhiDate;

    /**
     * 项目内容
     */
    private String proContent;

    /**
     * 所属行业
     */
    private String industry;

    private String industryName;


    /**
     * 用工人数（0:不限）
     */
    private Long limitNum;

    /**
     * 任务费用/人(众包任务) 应得(分)
     */
    private Long costUnit;

    /**
     * 任务开始日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd")
    private Date beginDate;

    public Date getEndDate() {
        if(this.endDate != null){
            return DateUtils.addOneDay(this.endDate);
        }
        return endDate;
    }

    /**
     * 任务结束日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd")
    private Date endDate;

    /**
     * 上架状态（1:上架、2:下架）
     */
    private Integer status;

    /**
     * 上线时间
     */
    private Date publicTime;

    /**
     * 是否自动下架（0:否 1:是）
     */
    private Integer isOffline;

    /**
     * 项目状态（0:待发布 1:发布上线 2:平台审核成功 3：平台审核拒绝 4：服务商接包  5：服务商拒绝接单 6：任务发布 7：任务开始 8：任务结束）
     */
    private Integer taskStatus;

    private List<Integer> taskStatusList;

    /**
     * 提交审核时间
     */
    private Date submitTime;

    /**
     * 运营商审核状态（0:待提交 1:待审核、2:审核未通过、3:审核通过，4：审核中）
     */
    private Integer opVerifyStatus;

    /**
     * 运营商审核时间
     */
    private Date opVerifyTime;

    /**
     * 运营商审核人
     */
    private String opVerifyBy;

    /**
     * 运营商驳回原因
     */
    private String opVerifyReason;

    /**
     * 添加时间
     */
    private Date addTime;

    /**
     * 添加人
     */
    private String addBy;

    /**
     * 编辑人
     */
    private String editer;

    /**
     * 编辑时间
     */
    private Date editTime;

    /**
     * 冻结金额
     */
    private Long frozenAmount;

    /**
     * 实发金额
     */
    private Long relAmount;

    /**
     * 最新结算时间
     */
    private Date relAmountTime;

    /**
     * 已开票金额
     */
    private Long invoiceAmount;

    /**
     * 是否三方（0:否 1:是）
     */
    private Integer isOut;

    /**
     * 结算中心id
     */
    private Long sydId;

    /**
     * 结算中心编号
     */
    private String sydNo;

    /**
     * 业务类型(1:委托代征，2:自然人代开，3:个体户注册 4:临时税务登记 5：资金代发 6：派遣&外包
     */
    private Integer busType;

    /**
     * 运营商编号
     */
    private String opNo;

    /**
     * 运营商id
     */
    private Long opId;

    /**
     * 代理商id
     */
    private Long channelId;

    /**
     * 代理商编号
     */
    private String channelNo;

    /**
     * 代理商上下级关系编码
     */
    private String channelCode;

    /**
     * 商户id
     */
    private Long merId;

    /**
     * 商户编号
     */
    private String merNo;

    /**
     * 商户名称
     */
    private String merName;
    /**
     * 结算中心审核状态（0:待提交 1:待审核、2:审核未通过、3:审核通过，4：审核中）
     */
    private Integer sydVerifyStatus;

    /**
     * 结算中心审核时间
     */
    private Date sydVerifyTime;

    /**
     * 结算中心审核人
     */
    private String sydVerifyBy;

    private String itemTypeId;

    private String taskTypeId;

    private String itemTypeName;

    private String taskTypeName;

    private String itemId;

    private String taskId;

    /**
     * 结算中心驳回原因
     */
    private String sydVerifyReason;

    private Long ossId;

    private String url;
}
