package com.izouma.zhumj.domain; import com.alibaba.excel.annotation.ExcelIgnore; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.izouma.zhumj.annotations.Searchable; import com.izouma.zhumj.config.Constants; import com.izouma.zhumj.security.Authority; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.Where; import javax.persistence.*; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import java.io.Serializable; import java.time.LocalDateTime; import java.util.HashSet; import java.util.Set; @Data @Entity @AllArgsConstructor @NoArgsConstructor @Builder @Where(clause = "enabled = 1") @ApiModel(value = "用户", description = "用户") public class User extends BaseEntity implements Serializable { private Long companyId; @Pattern(regexp = Constants.Regex.USERNAME) @Size(min = 1, max = 50) @Column(nullable = false, unique = true) @Searchable private String username; @Searchable private String nickname; private String avatar; @JsonIgnore private String password; @Column(nullable = false) private Boolean enabled = true; @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH}) @JoinTable( name = "user_authority", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))}, inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))}) @ExcelIgnore private Set authorities = new HashSet<>(); private String openId; private String sex; private String language; private String city; private String province; private String country; // @Pattern(regexp = Constants.Regex.CHINESE) @Searchable private String realName; @Column(length = 20) @Pattern(regexp = Constants.Regex.ID_NO) @Searchable private String idNo; @ApiModelProperty(value = "钉钉userid", name = "dingUserid") private String dingUserid; @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH}) @JoinTable( name = "user_department", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))}, inverseJoinColumns = {@JoinColumn(name = "department_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))}) @ExcelIgnore @ApiModelProperty(value = "部门", name = "departments") private Set departments = new HashSet<>(); @Searchable private String phone; private String position; private String email; @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH}) @JoinTable( name = "user_store", joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))}, inverseJoinColumns = {@JoinColumn(name = "store_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))}) @OrderBy("id") @ExcelIgnore @ApiModelProperty(value = "店铺", name = "stores") private Set stores = new HashSet<>(); @ApiModelProperty(value = "银行卡号", name = "bankNo") private String bankNo; @ApiModelProperty(value = "用户名", name = "trueName") private String trueName; @ApiModelProperty(value = "收款方开户行", name = "bankCode") private String bankCode; @ApiModelProperty(value = "临时用户", name = "temporal") private boolean temporal; private LocalDateTime expireAt; @ApiModelProperty(value = "客户ID", name = "customerId") private Long customerId; private boolean banned; private boolean inBlackList = false; @JsonIgnore public String getPassword() { return password; } @JsonProperty public void setPassword(final String password) { this.password = password; } }