package com.sa.ibiz.demo.demo.domain;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonProperty.Access;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.cglib.beans.BeanGenerator;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.FieldFill;
import java.util.Map;
import java.util.HashMap;
import org.springframework.util.StringUtils;
import com.sa.ibiz.demo.ibizutil.security.AuthenticationUser;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
import java.util.UUID;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import org.springframework.cglib.beans.BeanCopier;
import com.sa.ibiz.demo.ibizutil.annotation.Dict;
import com.sa.ibiz.demo.ibizutil.domain.EntityBase;
import java.io.Serializable;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import java.math.BigInteger;
import com.sa.ibiz.demo.ibizutil.enums.FillMode;
import com.sa.ibiz.demo.ibizutil.enums.PredefinedType;
import com.sa.ibiz.demo.ibizutil.annotation.PreField;
import com.alibaba.fastjson.annotation.JSONField;


/**
 * 实体[QJ] 数据对象
 */
@TableName(value = "T_QJ",resultMap = "QJResultMap")
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class QJ extends EntityBase implements Serializable{

    @PreField(fill= FillMode.INSERT,preType = PredefinedType.CREATEDATE)
    private Timestamp createdate;
    @PreField(fill= FillMode.INSERT,preType = PredefinedType.CREATEMAN)
    @Dict(dictName = "ionicdemo_SysOperatorCodeList")
    private String createman;
    private String fj;
    private Timestamp jssj;
    private Timestamp kssj;
    @TableId(value= "qjid",type=IdType.UUID)//指定主键生成策略
    private String qjid;
    @Dict(dictName = "ionicdemo_QJLXCodeList")
    private String qjlx;
    private String qjname;
    private Double qjts;
    @Dict(dictName = "ionicdemo_QJSPStateCodeList")
    private String qjwfstate;
    private String shyj;
    private String sqyy;
    @PreField(fill= FillMode.INSERT_UPDATE,preType = PredefinedType.UPDATEDATE)
    private Timestamp updatedate;
    @PreField(fill= FillMode.INSERT_UPDATE,preType = PredefinedType.UPDATEMAN)
    @Dict(dictName = "ionicdemo_SysOperatorCodeList")
    private String updateman;
    private String wfinstanceid;
    @Dict(dictName = "ionicdemo_WFStatesCodeList")
    private Integer wfstate;
    @Dict(dictName = "ionicdemo_QJSPStepCodeList")
    private String wfstep;
    private String wfversion;
    private String yysm;
    /**
     *  设置属性值[建立时间]
     *  @param createdate
     */
    public void setCreatedate(Timestamp createdate){
        this.createdate = createdate;
        this.set("createdatedirtyflag",true);
    }
    /**
     *  获取属性值[建立时间]
     */
    public Timestamp getCreatedate(){
        return this.createdate;
    }
    /**
     *  重置属性值[建立时间]
     */
    public void resetCreatedate(){
        this.set("createdatedirtyflag",false);
        this.createdate = null;
    }
    /**
     *  设置属性值[建立人]
     *  @param createman
     */
    public void setCreateman(String createman){
        if(StringUtils.isEmpty(createman))
            createman=null;
        this.createman = createman;
        this.set("createmandirtyflag",true);
    }
    /**
     *  获取属性值[建立人]
     */
    public String getCreateman(){
        return this.createman;
    }
    /**
     *  重置属性值[建立人]
     */
    public void resetCreateman(){
        this.set("createmandirtyflag",false);
        this.createman = null;
    }
    /**
     *  设置属性值[附件]
     *  @param fj
     */
    public void setFj(String fj){
        if(StringUtils.isEmpty(fj))
            fj=null;
        this.fj = fj;
        this.set("fjdirtyflag",true);
    }
    /**
     *  获取属性值[附件]
     */
    public String getFj(){
        return this.fj;
    }
    /**
     *  重置属性值[附件]
     */
    public void resetFj(){
        this.set("fjdirtyflag",false);
        this.fj = null;
    }
    /**
     *  设置属性值[请假结束时间]
     *  @param jssj
     */
    public void setJssj(Timestamp jssj){
        this.jssj = jssj;
        this.set("jssjdirtyflag",true);
    }
    /**
     *  获取属性值[请假结束时间]
     */
    public Timestamp getJssj(){
        return this.jssj;
    }
    /**
     *  重置属性值[请假结束时间]
     */
    public void resetJssj(){
        this.set("jssjdirtyflag",false);
        this.jssj = null;
    }
    /**
     *  设置属性值[请假开始时间]
     *  @param kssj
     */
    public void setKssj(Timestamp kssj){
        this.kssj = kssj;
        this.set("kssjdirtyflag",true);
    }
    /**
     *  获取属性值[请假开始时间]
     */
    public Timestamp getKssj(){
        return this.kssj;
    }
    /**
     *  重置属性值[请假开始时间]
     */
    public void resetKssj(){
        this.set("kssjdirtyflag",false);
        this.kssj = null;
    }
    /**
     *  设置属性值[请假标识]
     *  @param qjid
     */
    public void setQjid(String qjid){
        if(StringUtils.isEmpty(qjid))
            qjid=null;
        this.qjid = qjid;
        this.set("qjiddirtyflag",true);
    }
    /**
     *  获取属性值[请假标识]
     */
    public String getQjid(){
        return this.qjid;
    }
    /**
     *  重置属性值[请假标识]
     */
    public void resetQjid(){
        this.set("qjiddirtyflag",false);
        this.qjid = null;
    }
    /**
     *  设置属性值[请假类型]
     *  @param qjlx
     */
    public void setQjlx(String qjlx){
        if(StringUtils.isEmpty(qjlx))
            qjlx=null;
        this.qjlx = qjlx;
        this.set("qjlxdirtyflag",true);
    }
    /**
     *  获取属性值[请假类型]
     */
    public String getQjlx(){
        return this.qjlx;
    }
    /**
     *  重置属性值[请假类型]
     */
    public void resetQjlx(){
        this.set("qjlxdirtyflag",false);
        this.qjlx = null;
    }
    /**
     *  设置属性值[请假名称]
     *  @param qjname
     */
    public void setQjname(String qjname){
        if(StringUtils.isEmpty(qjname))
            qjname=null;
        this.qjname = qjname;
        this.set("qjnamedirtyflag",true);
    }
    /**
     *  获取属性值[请假名称]
     */
    public String getQjname(){
        return this.qjname;
    }
    /**
     *  重置属性值[请假名称]
     */
    public void resetQjname(){
        this.set("qjnamedirtyflag",false);
        this.qjname = null;
    }
    /**
     *  设置属性值[本次请假天数]
     *  @param qjts
     */
    public void setQjts(Double qjts){
        this.qjts = qjts;
        this.set("qjtsdirtyflag",true);
    }
    /**
     *  获取属性值[本次请假天数]
     */
    public Double getQjts(){
        return this.qjts;
    }
    /**
     *  重置属性值[本次请假天数]
     */
    public void resetQjts(){
        this.set("qjtsdirtyflag",false);
        this.qjts = null;
    }
    /**
     *  设置属性值[业务状态]
     *  @param qjwfstate
     */
    public void setQjwfstate(String qjwfstate){
        if(StringUtils.isEmpty(qjwfstate))
            qjwfstate=null;
        this.qjwfstate = qjwfstate;
        this.set("qjwfstatedirtyflag",true);
    }
    /**
     *  获取属性值[业务状态]
     */
    public String getQjwfstate(){
        return this.qjwfstate;
    }
    /**
     *  重置属性值[业务状态]
     */
    public void resetQjwfstate(){
        this.set("qjwfstatedirtyflag",false);
        this.qjwfstate = null;
    }
    /**
     *  设置属性值[审核意见]
     *  @param shyj
     */
    public void setShyj(String shyj){
        if(StringUtils.isEmpty(shyj))
            shyj=null;
        this.shyj = shyj;
        this.set("shyjdirtyflag",true);
    }
    /**
     *  获取属性值[审核意见]
     */
    public String getShyj(){
        return this.shyj;
    }
    /**
     *  重置属性值[审核意见]
     */
    public void resetShyj(){
        this.set("shyjdirtyflag",false);
        this.shyj = null;
    }
    /**
     *  设置属性值[申请原因]
     *  @param sqyy
     */
    public void setSqyy(String sqyy){
        if(StringUtils.isEmpty(sqyy))
            sqyy=null;
        this.sqyy = sqyy;
        this.set("sqyydirtyflag",true);
    }
    /**
     *  获取属性值[申请原因]
     */
    public String getSqyy(){
        return this.sqyy;
    }
    /**
     *  重置属性值[申请原因]
     */
    public void resetSqyy(){
        this.set("sqyydirtyflag",false);
        this.sqyy = null;
    }
    /**
     *  设置属性值[更新时间]
     *  @param updatedate
     */
    public void setUpdatedate(Timestamp updatedate){
        this.updatedate = updatedate;
        this.set("updatedatedirtyflag",true);
    }
    /**
     *  获取属性值[更新时间]
     */
    public Timestamp getUpdatedate(){
        return this.updatedate;
    }
    /**
     *  重置属性值[更新时间]
     */
    public void resetUpdatedate(){
        this.set("updatedatedirtyflag",false);
        this.updatedate = null;
    }
    /**
     *  设置属性值[更新人]
     *  @param updateman
     */
    public void setUpdateman(String updateman){
        if(StringUtils.isEmpty(updateman))
            updateman=null;
        this.updateman = updateman;
        this.set("updatemandirtyflag",true);
    }
    /**
     *  获取属性值[更新人]
     */
    public String getUpdateman(){
        return this.updateman;
    }
    /**
     *  重置属性值[更新人]
     */
    public void resetUpdateman(){
        this.set("updatemandirtyflag",false);
        this.updateman = null;
    }
    /**
     *  设置属性值[工作流实例]
     *  @param wfinstanceid
     */
    public void setWfinstanceid(String wfinstanceid){
        if(StringUtils.isEmpty(wfinstanceid))
            wfinstanceid=null;
        this.wfinstanceid = wfinstanceid;
        this.set("wfinstanceiddirtyflag",true);
    }
    /**
     *  获取属性值[工作流实例]
     */
    public String getWfinstanceid(){
        return this.wfinstanceid;
    }
    /**
     *  重置属性值[工作流实例]
     */
    public void resetWfinstanceid(){
        this.set("wfinstanceiddirtyflag",false);
        this.wfinstanceid = null;
    }
    /**
     *  设置属性值[工作流状态]
     *  @param wfstate
     */
    public void setWfstate(Integer wfstate){
        this.wfstate = wfstate;
        this.set("wfstatedirtyflag",true);
    }
    /**
     *  获取属性值[工作流状态]
     */
    public Integer getWfstate(){
        return this.wfstate;
    }
    /**
     *  重置属性值[工作流状态]
     */
    public void resetWfstate(){
        this.set("wfstatedirtyflag",false);
        this.wfstate = null;
    }
    /**
     *  设置属性值[工作流步骤]
     *  @param wfstep
     */
    public void setWfstep(String wfstep){
        if(StringUtils.isEmpty(wfstep))
            wfstep=null;
        this.wfstep = wfstep;
        this.set("wfstepdirtyflag",true);
    }
    /**
     *  获取属性值[工作流步骤]
     */
    public String getWfstep(){
        return this.wfstep;
    }
    /**
     *  重置属性值[工作流步骤]
     */
    public void resetWfstep(){
        this.set("wfstepdirtyflag",false);
        this.wfstep = null;
    }
    /**
     *  设置属性值[流程版本]
     *  @param wfversion
     */
    public void setWfversion(String wfversion){
        if(StringUtils.isEmpty(wfversion))
            wfversion=null;
        this.wfversion = wfversion;
        this.set("wfversiondirtyflag",true);
    }
    /**
     *  获取属性值[流程版本]
     */
    public String getWfversion(){
        return this.wfversion;
    }
    /**
     *  重置属性值[流程版本]
     */
    public void resetWfversion(){
        this.set("wfversiondirtyflag",false);
        this.wfversion = null;
    }
    /**
     *  设置属性值[请假原有说明]
     *  @param yysm
     */
    public void setYysm(String yysm){
        if(StringUtils.isEmpty(yysm))
            yysm=null;
        this.yysm = yysm;
        this.set("yysmdirtyflag",true);
    }
    /**
     *  获取属性值[请假原有说明]
     */
    public String getYysm(){
        return this.yysm;
    }
    /**
     *  重置属性值[请假原有说明]
     */
    public void resetYysm(){
        this.set("yysmdirtyflag",false);
        this.yysm = null;
    }
    /**
     * 重置当前数据对象属性值
     */
    public  void reset(){
        resetCreatedate();
        resetCreateman();
        resetFj();
        resetJssj();
        resetKssj();
        resetQjid();
        resetQjlx();
        resetQjname();
        resetQjts();
        resetQjwfstate();
        resetShyj();
        resetSqyy();
        resetUpdatedate();
        resetUpdateman();
        resetWfinstanceid();
        resetWfstate();
        resetWfstep();
        resetWfversion();
        resetYysm();
    }
     /**
     * 获取数据主键（普通主键与联合主键）
     * @return
     */
    @JsonIgnore
    public Serializable getDefaultPrimaryKey()
    {
	    //随机生成主键
         return  IdWorker.get32UUID();

    }
     /**
     * 复制当前对象数据到目标对象(粘贴重置)
     *
     * @throws Exception
     */
    public QJ copyTo(QJ targetEntity)
	{
		BeanCopier copier=BeanCopier.create(QJ.class, QJ.class, false);
		copier.copy(this, targetEntity, null);
        targetEntity.resetQjid();
		return targetEntity;
	}
}