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;

import com.sa.ibiz.demo.demo.domain.MsgAccount;
import com.sa.ibiz.demo.demo.domain.MsgAccount;

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

    @JSONField(serialize = false)
    @JsonIgnore
    @TableField(exist = false)//关系主表数据
    private MsgAccount majormsgaccount;
    @JSONField(serialize = false)
    @JsonIgnore
    @TableField(exist = false)//关系主表数据
    private MsgAccount minormsgaccount;
    @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 majormsgaccountid;
    @TableField(exist = false)//逻辑属性
    private String majormsgaccountname;
    private String minormsgaccountid;
    @TableField(exist = false)//逻辑属性
    private String minormsgaccountname;
    @TableId(value= "msgaccountdetailid",type=IdType.UUID)//指定主键生成策略
    private String msgaccountdetailid;
    private String msgaccountdetailname;
    @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;
    /**
     *  设置属性值[建立时间]
     *  @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 majormsgaccountid
     */
    public void setMajormsgaccountid(String majormsgaccountid){
        if(StringUtils.isEmpty(majormsgaccountid))
            majormsgaccountid=null;
        this.majormsgaccountid = majormsgaccountid;
        this.set("majormsgaccountiddirtyflag",true);
    }
    /**
     *  获取属性值[组消息账户_组账户]
     */
    public String getMajormsgaccountid(){
        return this.majormsgaccountid;
    }
    /**
     *  重置属性值[组消息账户_组账户]
     */
    public void resetMajormsgaccountid(){
        this.set("majormsgaccountiddirtyflag",false);
        this.majormsgaccountid = null;
    }
    /**
     *  设置属性值[组账户]
     *  @param majormsgaccountname
     */
    public void setMajormsgaccountname(String majormsgaccountname){
        if(StringUtils.isEmpty(majormsgaccountname))
            majormsgaccountname=null;
        this.majormsgaccountname = majormsgaccountname;
        this.set("majormsgaccountnamedirtyflag",true);
    }
    /**
     *  获取属性值[组账户]
     */
    public String getMajormsgaccountname(){
        return this.majormsgaccountname;
    }
    /**
     *  重置属性值[组账户]
     */
    public void resetMajormsgaccountname(){
        this.set("majormsgaccountnamedirtyflag",false);
        this.majormsgaccountname = null;
    }
    /**
     *  设置属性值[组消息账户_明细账户]
     *  @param minormsgaccountid
     */
    public void setMinormsgaccountid(String minormsgaccountid){
        if(StringUtils.isEmpty(minormsgaccountid))
            minormsgaccountid=null;
        this.minormsgaccountid = minormsgaccountid;
        this.set("minormsgaccountiddirtyflag",true);
    }
    /**
     *  获取属性值[组消息账户_明细账户]
     */
    public String getMinormsgaccountid(){
        return this.minormsgaccountid;
    }
    /**
     *  重置属性值[组消息账户_明细账户]
     */
    public void resetMinormsgaccountid(){
        this.set("minormsgaccountiddirtyflag",false);
        this.minormsgaccountid = null;
    }
    /**
     *  设置属性值[包含账户]
     *  @param minormsgaccountname
     */
    public void setMinormsgaccountname(String minormsgaccountname){
        if(StringUtils.isEmpty(minormsgaccountname))
            minormsgaccountname=null;
        this.minormsgaccountname = minormsgaccountname;
        this.set("minormsgaccountnamedirtyflag",true);
    }
    /**
     *  获取属性值[包含账户]
     */
    public String getMinormsgaccountname(){
        return this.minormsgaccountname;
    }
    /**
     *  重置属性值[包含账户]
     */
    public void resetMinormsgaccountname(){
        this.set("minormsgaccountnamedirtyflag",false);
        this.minormsgaccountname = null;
    }
    /**
     *  设置属性值[组消息账户明细标识]
     *  @param msgaccountdetailid
     */
    public void setMsgaccountdetailid(String msgaccountdetailid){
        if(StringUtils.isEmpty(msgaccountdetailid))
            msgaccountdetailid=null;
        this.msgaccountdetailid = msgaccountdetailid;
        this.set("msgaccountdetailiddirtyflag",true);
    }
    /**
     *  获取属性值[组消息账户明细标识]
     */
    public String getMsgaccountdetailid(){
        return this.msgaccountdetailid;
    }
    /**
     *  重置属性值[组消息账户明细标识]
     */
    public void resetMsgaccountdetailid(){
        this.set("msgaccountdetailiddirtyflag",false);
        this.msgaccountdetailid = null;
    }
    /**
     *  设置属性值[组消息账户明细名称]
     *  @param msgaccountdetailname
     */
    public void setMsgaccountdetailname(String msgaccountdetailname){
        if(StringUtils.isEmpty(msgaccountdetailname))
            msgaccountdetailname=null;
        this.msgaccountdetailname = msgaccountdetailname;
        this.set("msgaccountdetailnamedirtyflag",true);
    }
    /**
     *  获取属性值[组消息账户明细名称]
     */
    public String getMsgaccountdetailname(){
        return this.msgaccountdetailname;
    }
    /**
     *  重置属性值[组消息账户明细名称]
     */
    public void resetMsgaccountdetailname(){
        this.set("msgaccountdetailnamedirtyflag",false);
        this.msgaccountdetailname = 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;
    }
     /**
     *  获取主实体关联数据[MsgAccount]
     */
    public MsgAccount getMajormsgaccount() {
        return majormsgaccount;
    }
    /**
     *  设置主实体关联数据[MsgAccount]
     */
    public void setMajormsgaccount(MsgAccount majormsgaccount) {
        this.majormsgaccount = majormsgaccount;
    }

     /**
     *  获取主实体关联数据[MsgAccount]
     */
    public MsgAccount getMinormsgaccount() {
        return minormsgaccount;
    }
    /**
     *  设置主实体关联数据[MsgAccount]
     */
    public void setMinormsgaccount(MsgAccount minormsgaccount) {
        this.minormsgaccount = minormsgaccount;
    }

    /**
     * 重置当前数据对象属性值
     */
    public  void reset(){
        resetCreatedate();
        resetCreateman();
        resetMajormsgaccountid();
        resetMajormsgaccountname();
        resetMinormsgaccountid();
        resetMinormsgaccountname();
        resetMsgaccountdetailid();
        resetMsgaccountdetailname();
        resetUpdatedate();
        resetUpdateman();
    }
     /**
     * 获取数据主键（普通主键与联合主键）
     * @return
     */
    @JsonIgnore
    public Serializable getDefaultPrimaryKey()
    {
	    //随机生成主键
         return  IdWorker.get32UUID();

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