package com.zhyc.module.work.domain;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.zhyc.common.annotation.Excel;
import com.zhyc.common.core.domain.BaseEntity;

/**
 * 派工单对象 work_order
 * 
 * @author piaobo
 * @date 2025-12-07
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WorkOrder extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 派工单唯一主键，自增整数 */
    private Long id;

    /** 业务单号 */
    @Excel(name = "业务单号")
    private String orderNo;

    /** 关联生产/免疫计划ID，无计划可空 */
    @Excel(name = "关联生产/免疫计划ID，无计划可空")
    private Long planId;

    /** 业务类型：1免疫 2保健 3转群 4称重 5配种 6干奶 7淘汰 8消毒 9饲喂，必填 */
//    @Excel(name = "业务类型：1免疫 2保健 3转群 4称重 5配种 6干奶 7淘汰 8消毒 9饲喂，必填")
    @Excel(name = "业务类型", readConverterExp = "1=免疫,2=保健,3=转群,4=称重,5=配种,6=干奶,7=淘汰,8=消毒,9=饲喂")
    private Integer bizType;
    private String bizTypes;
    private Integer [] bizTypeArray;

    /** 简短任务标 */
    @Excel(name = "简短任务标")
    private String title;

    /** 任务详细要求及注意事项，可空 */
    @Excel(name = "任务详细要求及注意事项，可空")
    private String content;

    /** 执行部门/班组，下拉选择，必填 */
    @Excel(name = "执行部门/班组，下拉选择，必填")
    private String department;

    /** 执行人ID（多人用英文逗号），必填 */
    @Excel(name = "执行人ID")
    private String executorIds;

//    执行人
    @Excel(name = "执行人")
    private String executor;

    /** 计划执行日期，必填 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "计划执行日期，必填", width = 30, dateFormat = "yyyy-MM-dd")
    private Date executeDate;

//    查询计划日期
    private Date beginPlanDate;
    private Date endPlanDate;
//    查询结束日期
    private Date beginFinishDate;
    private Date endFinishDate;

    /** 计划执行时段，可空 */
    @Excel(name = "计划执行时段，可空")
    private String executeTime;

    /** 涉及羊只范围 */
    @Excel(name = "涉及羊只范围")
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<SheepJson>  sheepScope;

    /** 执行地点/栏舍 */
    @Excel(name = "执行地点/栏舍")
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<LocationJson> location;

    /** 需领物料 */
    @Excel(name = "需领物料")
    private String materialList;

    /** 需用设备 */
    @Excel(name = "需用设备")
    private String toolList;

    /** 状态：0待派工 1已派工 2执行中 3已完成 4已取消 5异常，必填 */
    @Excel(name = "状态", readConverterExp = "0=待派工,1=已派工,2=执行中,3=已完成,4=已取消,5=异常")
    private Integer status;
    private String statuss;
    private Integer [] statusArray;

    /** 优先级：1普通 2重要 3紧急，必填 */
    @Excel(name = "优先级", readConverterExp = "1=普通,2=重要,3=紧急")
    private Integer priority;
    private String prioritys;
    private Integer [] priorityArray;

    /** 派工人用户 */
    @Excel(name = "派工人用户")
    private Long issuerId;
//    派工人
    @Excel(name = "派工人")
    private String issuer;

    /** 派工时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "派工时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date issueTime;

    /** 接工人用户 */
    @Excel(name = "接工人用户")
    private Long receiverId;
//    接工人
    @Excel(name = "接工人")
    private String receiver;

    /** 接工时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "接工时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date receiveTime;

    /** 实际完成时间，可空 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "实际完成时间，可空", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date finishTime;

    /** 执行结果填报，可空 */
    @Excel(name = "执行结果填报，可空")
    private String result;

    /** 逻辑删除：0正常 1已删除，必填 */
    private Integer deleted;

    private Long deptId;
    private Long userId;
}
