diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/CustCasual.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/CustCasual.java new file mode 100644 index 0000000..0716213 --- /dev/null +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/CustCasual.java @@ -0,0 +1,338 @@ +package com.bonus.system.api.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.time.LocalDateTime; + +@ApiModel("临时人员表") +public class CustCasual { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键自增") + private Long id; + @ApiModelProperty("临时人员id") + private Long casualId; + @ApiModelProperty("临时人员名称") + private String casualName; + @ApiModelProperty("人员id") + private Long custId; + @ApiModelProperty("手机号") + private String mobile; + @ApiModelProperty("邮箱") + private String email; + @ApiModelProperty("地址") + private String address; + @ApiModelProperty("openid") + private String openid; + @ApiModelProperty("来源类型 1-钉钉 2-微信 3-小程序") + private Integer sourceType; + @ApiModelProperty("是否删除") + private Integer ifDel; + @ApiModelProperty("乐观锁") + private Integer revision; + @ApiModelProperty("创建人") + private String crby; + @ApiModelProperty("创建时间") + private LocalDateTime crtime; + @ApiModelProperty("更新人") + private String upby; + @ApiModelProperty("更新时间") + private LocalDateTime uptime; + @ApiModelProperty("支付宝签约号") + private String alipayContractNum; + @ApiModelProperty("支付宝-企业码-员工id") + private String entCodeEmpId; + @ApiModelProperty("IOT开通刷脸支持唯一操作流水号") + private String uniqueId; + + public static CustCasualBuilder builder() { + return new CustCasualBuilder(); + } + + public Long getId() { + return this.id; + } + + public Long getCasualId() { + return this.casualId; + } + + public String getCasualName() { + return this.casualName; + } + + public Long getCustId() { + return this.custId; + } + + public String getMobile() { + return this.mobile; + } + + public String getEmail() { + return this.email; + } + + public String getAddress() { + return this.address; + } + + public String getOpenid() { + return this.openid; + } + + public Integer getSourceType() { + return this.sourceType; + } + + public Integer getIfDel() { + return this.ifDel; + } + + public Integer getRevision() { + return this.revision; + } + + public String getCrby() { + return this.crby; + } + + public LocalDateTime getCrtime() { + return this.crtime; + } + + public String getUpby() { + return this.upby; + } + + public LocalDateTime getUptime() { + return this.uptime; + } + + public String getAlipayContractNum() { + return this.alipayContractNum; + } + + public String getEntCodeEmpId() { + return this.entCodeEmpId; + } + + public String getUniqueId() { + return this.uniqueId; + } + + public void setId(final Long id) { + this.id = id; + } + + public void setCasualId(final Long casualId) { + this.casualId = casualId; + } + + public void setCasualName(final String casualName) { + this.casualName = casualName; + } + + public void setCustId(final Long custId) { + this.custId = custId; + } + + public void setMobile(final String mobile) { + this.mobile = mobile; + } + + public void setEmail(final String email) { + this.email = email; + } + + public void setAddress(final String address) { + this.address = address; + } + + public void setOpenid(final String openid) { + this.openid = openid; + } + + public void setSourceType(final Integer sourceType) { + this.sourceType = sourceType; + } + + public void setIfDel(final Integer ifDel) { + this.ifDel = ifDel; + } + + public void setRevision(final Integer revision) { + this.revision = revision; + } + + public void setCrby(final String crby) { + this.crby = crby; + } + + public void setCrtime(final LocalDateTime crtime) { + this.crtime = crtime; + } + + public void setUpby(final String upby) { + this.upby = upby; + } + + public void setUptime(final LocalDateTime uptime) { + this.uptime = uptime; + } + + public void setAlipayContractNum(final String alipayContractNum) { + this.alipayContractNum = alipayContractNum; + } + + public void setEntCodeEmpId(final String entCodeEmpId) { + this.entCodeEmpId = entCodeEmpId; + } + + public void setUniqueId(final String uniqueId) { + this.uniqueId = uniqueId; + } + + public CustCasual(final Long id, final Long casualId, final String casualName, final Long custId, final String mobile, final String email, final String address, final String openid, final Integer sourceType, final Integer ifDel, final Integer revision, final String crby, final LocalDateTime crtime, final String upby, final LocalDateTime uptime, final String alipayContractNum, final String entCodeEmpId, final String uniqueId) { + this.id = id; + this.casualId = casualId; + this.casualName = casualName; + this.custId = custId; + this.mobile = mobile; + this.email = email; + this.address = address; + this.openid = openid; + this.sourceType = sourceType; + this.ifDel = ifDel; + this.revision = revision; + this.crby = crby; + this.crtime = crtime; + this.upby = upby; + this.uptime = uptime; + this.alipayContractNum = alipayContractNum; + this.entCodeEmpId = entCodeEmpId; + this.uniqueId = uniqueId; + } + + public CustCasual() { + } + + public static class CustCasualBuilder { + private Long id; + private Long casualId; + private String casualName; + private Long custId; + private String mobile; + private String email; + private String address; + private String openid; + private Integer sourceType; + private Integer ifDel; + private Integer revision; + private String crby; + private LocalDateTime crtime; + private String upby; + private LocalDateTime uptime; + private String alipayContractNum; + private String entCodeEmpId; + private String uniqueId; + + CustCasualBuilder() { + } + + public CustCasualBuilder id(final Long id) { + this.id = id; + return this; + } + + public CustCasualBuilder casualId(final Long casualId) { + this.casualId = casualId; + return this; + } + + public CustCasualBuilder casualName(final String casualName) { + this.casualName = casualName; + return this; + } + + public CustCasualBuilder custId(final Long custId) { + this.custId = custId; + return this; + } + + public CustCasualBuilder mobile(final String mobile) { + this.mobile = mobile; + return this; + } + + public CustCasualBuilder email(final String email) { + this.email = email; + return this; + } + + public CustCasualBuilder address(final String address) { + this.address = address; + return this; + } + + public CustCasualBuilder openid(final String openid) { + this.openid = openid; + return this; + } + + public CustCasualBuilder sourceType(final Integer sourceType) { + this.sourceType = sourceType; + return this; + } + + public CustCasualBuilder ifDel(final Integer ifDel) { + this.ifDel = ifDel; + return this; + } + + public CustCasualBuilder revision(final Integer revision) { + this.revision = revision; + return this; + } + + public CustCasualBuilder crby(final String crby) { + this.crby = crby; + return this; + } + + public CustCasualBuilder crtime(final LocalDateTime crtime) { + this.crtime = crtime; + return this; + } + + public CustCasualBuilder upby(final String upby) { + this.upby = upby; + return this; + } + + public CustCasualBuilder uptime(final LocalDateTime uptime) { + this.uptime = uptime; + return this; + } + + public CustCasualBuilder alipayContractNum(final String alipayContractNum) { + this.alipayContractNum = alipayContractNum; + return this; + } + + public CustCasualBuilder entCodeEmpId(final String entCodeEmpId) { + this.entCodeEmpId = entCodeEmpId; + return this; + } + + public CustCasualBuilder uniqueId(final String uniqueId) { + this.uniqueId = uniqueId; + return this; + } + + public CustCasual build() { + return new CustCasual(this.id, this.casualId, this.casualName, this.custId, this.mobile, this.email, this.address, this.openid, this.sourceType, this.ifDel, this.revision, this.crby, this.crtime, this.upby, this.uptime, this.alipayContractNum, this.entCodeEmpId, this.uniqueId); + } + } +} diff --git a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java index c33fbd5..2d4eb1a 100644 --- a/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java +++ b/bonus-api/bonus-api-system/src/main/java/com/bonus/system/api/domain/SysUser.java @@ -159,6 +159,8 @@ public class SysUser extends BaseEntity { @ApiModelProperty("人员id") @JsonFormat(shape = JsonFormat.Shape.STRING) private Long custId; + @ApiModelProperty("openid") + private String openid; @ApiModelProperty("人员姓名") private String custName; @ApiModelProperty("人员编号") @@ -376,6 +378,14 @@ public class SysUser extends BaseEntity { this.custId = custId; } + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + public String getCustName() { return custName; } diff --git a/bonus-auth/src/main/java/com/bonus/auth/service/CustPhonePasswordLoginStrategy.java b/bonus-auth/src/main/java/com/bonus/auth/service/CustPhonePasswordLoginStrategy.java index 56e5116..599908e 100644 --- a/bonus-auth/src/main/java/com/bonus/auth/service/CustPhonePasswordLoginStrategy.java +++ b/bonus-auth/src/main/java/com/bonus/auth/service/CustPhonePasswordLoginStrategy.java @@ -3,10 +3,12 @@ package com.bonus.auth.service; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.domain.R; import com.bonus.common.core.exception.ServiceException; +import com.bonus.common.core.utils.encryption.AesEncryptUtil; import com.bonus.config.SystemConfig; import com.bonus.system.api.RemoteUserService; import com.bonus.system.api.domain.SysUser; import com.bonus.system.api.model.LoginUser; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -29,6 +31,8 @@ public class CustPhonePasswordLoginStrategy implements LoginStrategy { @Resource private SysPasswordService passwordService; + private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); + @Override public LoginUser login(String phone, String password) { if (!systemConfig.getLoginConfig().isPhonePassword()) { @@ -40,12 +44,16 @@ public class CustPhonePasswordLoginStrategy implements LoginStrategy { passwordValidatorService.validateUserResult(phone, userResult); //获取用户信息 LoginUser userInfo = userResult.getData(); - //SysUser user = userInfo.getSysUser(); + SysUser user = userInfo.getSysUser(); //校验用户审批状态 //passwordValidatorService.validateApprovalStatus(user.getUserName(), user); // 处理IP校验 //passwordValidatorService.validateIpBlacklist(user.getUserName()); // 验证密码 + String decodedPassword = AesEncryptUtil.aesDecode(password); + if (!encoder.matches(decodedPassword, user.getPassword())) { + throw new ServiceException("密码错误"); + } //passwordService.validate(user, password, System.currentTimeMillis()); //校验用户启用状态 //passwordValidatorService.validateUserStatus(user.getUserName(), user); diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/AesEncryptUtil.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/AesEncryptUtil.java new file mode 100644 index 0000000..f82d9a9 --- /dev/null +++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/encryption/AesEncryptUtil.java @@ -0,0 +1,69 @@ +package com.bonus.common.core.utils.encryption; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.Mode; +import cn.hutool.crypto.Padding; +import cn.hutool.crypto.symmetric.AES; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; + +@Component +public class AesEncryptUtil { + private static final Logger log = LoggerFactory.getLogger(AesEncryptUtil.class); + private static final String KEY_ALGORITHM = "AES"; + private static final String AES_ENCRYPT_KEY = "pigxpigxpigxpigx"; + + +// @Resource +// private EncryptProperties encryptProperties; +// +// public static AesEncryptUtil getInstance() { +// return (AesEncryptUtil) SpringContextHolder.getBean(AesEncryptUtil.class); +// } + + public static String aesEncrypt(String encryptStr) { + if (StrUtil.isBlank(encryptStr)) { + return encryptStr; + } else { + AES aes = new AES(Mode.CBC, Padding.ZeroPadding, new SecretKeySpec(AES_ENCRYPT_KEY.getBytes(), "AES"), new IvParameterSpec(AES_ENCRYPT_KEY.getBytes())); + return aes.encryptBase64(encryptStr); + } + } + + public static String aesDecode(String decodeStr) { + if (StrUtil.isBlank(decodeStr)) { + return decodeStr; + } else { + AES aes = new AES(Mode.CBC, Padding.ZeroPadding, new SecretKeySpec(AES_ENCRYPT_KEY.getBytes(), "AES"), new IvParameterSpec(AES_ENCRYPT_KEY.getBytes())); + + byte[] resultByte; + try { + resultByte = aes.decrypt(Base64.decode(decodeStr.getBytes(StandardCharsets.UTF_8))); + } catch (Exception var5) { + log.info("字段解密异常:" + var5.getMessage()); + return decodeStr; + } + + return (new String(resultByte, StandardCharsets.UTF_8)).trim(); + } + } + + public static void main(String[] args) { + System.out.println(aesEncrypt("Bonus$2026")); + System.out.println(aesDecode("PCAGz8j5ByU2AzoT6vtlLA==")); + System.out.println(); + + System.out.println(aesEncrypt("Bonus$2027")); + System.out.println(aesDecode("MF1Nui79h/OHRGoUx1jhcg==")); + System.out.println(); + + System.out.println(aesEncrypt("18110922397")); + System.out.println(aesDecode("poEWO1yyC/EaUR9vmrrNSA==")); + } +} diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java index 1586571..9a03bd9 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/controller/SysUserController.java @@ -1,5 +1,6 @@ package com.bonus.system.controller; +import cn.hutool.core.util.IdUtil; import com.bonus.common.core.constant.CacheConstants; import com.bonus.common.core.domain.R; import com.bonus.common.core.utils.StringUtils; diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/mapper/SysUserMapper.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/mapper/SysUserMapper.java index 5992faa..5b24c5e 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/mapper/SysUserMapper.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/mapper/SysUserMapper.java @@ -1,5 +1,6 @@ package com.bonus.system.mapper; +import com.bonus.system.api.domain.CustCasual; import com.bonus.system.api.domain.SysUser; import org.apache.ibatis.annotations.Param; @@ -163,4 +164,6 @@ public interface SysUserMapper { * @return 用户对象信息 */ public SysUser selectCustInfoByPhoneNumber(@Param("phoneNumber") String phoneNumber); + + public CustCasual selectCustCasualByCustId(@Param("custId") Long custId, @Param("sourceType") Integer sourceType, @Param("ifDel") Integer ifDel); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/ISysUserService.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/ISysUserService.java index 81e22df..5de87a9 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/ISysUserService.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/ISysUserService.java @@ -238,4 +238,6 @@ public interface ISysUserService { public AjaxResult systemUpdateUser(SysUser user); public SysUser selectCustInfoByPhoneNumber(String photoNumber); + + public SysUser addOrUpdateCustCasual(Integer sourceType, SysUser result); } diff --git a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java index bdab238..c301a20 100644 --- a/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java +++ b/bonus-modules/bonus-system/src/main/java/com/bonus/system/service/impl/SysUserServiceImpl.java @@ -1,5 +1,6 @@ package com.bonus.system.service.impl; +import cn.hutool.core.util.IdUtil; import com.bonus.common.core.constant.Constants; import com.bonus.common.core.constant.UserConstants; import com.bonus.common.core.domain.R; @@ -15,10 +16,7 @@ import com.bonus.common.datascope.annotation.DataScope; import com.bonus.common.datascope.utils.CommonDataPermissionInfo; import com.bonus.common.security.config.VerificationCodeConfig; import com.bonus.common.security.utils.SecurityUtils; -import com.bonus.system.api.domain.SysPost; -import com.bonus.system.api.domain.SysRole; -import com.bonus.system.api.domain.SysUser; -import com.bonus.system.api.domain.SysUserRole; +import com.bonus.system.api.domain.*; import com.bonus.system.domain.SysUserPost; import com.bonus.system.mapper.*; import com.bonus.system.service.ISysConfigService; @@ -660,4 +658,33 @@ public class SysUserServiceImpl implements ISysUserService { return userMapper.selectCustInfoByPhoneNumber(Sm4Utils.custEncrypt(photoNumber)); } + @Override + public SysUser addOrUpdateCustCasual(Integer sourceType, SysUser result) { +// Long custId = result.getCustId(); +// CustCasual custCasual = userMapper.selectCustCasualByCustId(custId, sourceType, 2); // 1-删除,2-正常 +// String openid; +// if (Objects.isNull(custCasual)) { +// CustCasual insertCasual = new CustCasual(); +// openid = IdUtil.simpleUUID(); +// insertCasual.setCasualId(Id.next()); //TODO, NPE +// insertCasual.setCasualName(Sm4Utils.custDecrypt(result.getCustName())); +// insertCasual.setCustId(result.getCustId()); +// insertCasual.setMobile(Sm4Utils.custDecrypt(result.getPhonenumber())); +// insertCasual.setOpenid(openid); +// insertCasual.setSourceType(sourceType); +// userMapper.addCustCasual(insertCasual); +// } else { +// openid = custCasual.getOpenid(); +// if (StringUtils.isBlank(openid)) { +// openid = IdUtil.simpleUUID(); +// userMapper.updateCustCasual(custCasual); +// } +// } +// +// result.setOpenid(openid); + //result.setCustName(SM4EncryptUtils.sm4Decrypt(result.getCustName())); + //result.setPhonenumber(SM4EncryptUtils.sm4Decrypt(result.getPhonenumber())); + return result; + } + }