Commit f3511cf7 authored by 廖旭伟's avatar 廖旭伟

等保三级

parent 5d87c544
......@@ -6,3 +6,52 @@ ALTER TABLE `mortals_xhx_customer_work_design_stat` MODIFY COLUMN `updateTime` d
ALTER TABLE `mortals_xhx_customer_work_design` ADD COLUMN `designType` tinyint(2) NOT NULL DEFAULT '1' COMMENT '作品类型:1:图片,2:视频';
ALTER TABLE `mortals_xhx_design_masterplate` ADD COLUMN `designType` tinyint(2) NOT NULL DEFAULT '1' COMMENT '作品类型:1:图片,2:视频';
ALTER TABLE `mortals_xhx_customer_work_collect` ADD COLUMN `designType` tinyint(2) NOT NULL DEFAULT '1' COMMENT '作品类型:1:图片,2:视频';
-----------------------
--2023-09-12
---------------------
ALTER TABLE `mortals_xhx_user`
ADD COLUMN `saltKey` varchar(32) DEFAULT NULL COMMENT '密码盐值',
ADD COLUMN `lastUpdatePwdTime` datetime DEFAULT NULL COMMENT '最后一次修改密码时间',
ADD COLUMN `errorCount` tinyint(2) DEFAULT '0' COMMENT '当日登录失败数',
ADD COLUMN `loginLock` tinyint(2) DEFAULT '0' COMMENT '登录锁定状态0未锁定1已锁定',
ADD COLUMN `lockTime` datetime DEFAULT NULL COMMENT '锁定时间';
-- ----------------------------
-- 用户密码修改记录表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_user_pwd_record`;
CREATE TABLE `mortals_xhx_user_pwd_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键,自增长',
`userId` bigint(20) DEFAULT NULL COMMENT '用户ID,主键,自增长',
`loginName` varchar(50) DEFAULT NULL COMMENT '登录名',
`loginPwd` varchar(128) DEFAULT NULL COMMENT '登录密码,使用md5双次加密',
`createTime` datetime DEFAULT NULL COMMENT '创建时间',
`createUserId` bigint(20) DEFAULT NULL COMMENT '创建用户',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户密码修改记录';
UPDATE mortals_xhx_user SET lastUpdatePwdTime=NOW();
ALTER TABLE `mortals_xhx_customer`
ADD COLUMN `saltKey` varchar(32) DEFAULT NULL COMMENT '密码盐值',
ADD COLUMN `lastUpdatePwdTime` datetime DEFAULT NULL COMMENT '最后一次修改密码时间',
ADD COLUMN `errorCount` tinyint(2) DEFAULT '0' COMMENT '当日登录失败数',
ADD COLUMN `loginLock` tinyint(2) DEFAULT '0' COMMENT '登录锁定状态0未锁定1已锁定',
ADD COLUMN `lockTime` datetime DEFAULT NULL COMMENT '锁定时间';
-- ----------------------------
-- 客户密码修改记录表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_customer_pwd_record`;
CREATE TABLE `mortals_xhx_customer_pwd_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键,自增长',
`userId` bigint(20) DEFAULT NULL COMMENT '客户ID,主键,自增长',
`loginName` varchar(50) DEFAULT NULL COMMENT '登录名',
`loginPwd` varchar(128) DEFAULT NULL COMMENT '登录密码,使用md5双次加密',
`createTime` datetime DEFAULT NULL COMMENT '创建时间',
`createUserId` bigint(20) DEFAULT NULL COMMENT '创建用户',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户密码修改记录';
UPDATE mortals_xhx_customer SET lastUpdatePwdTime=NOW();
\ No newline at end of file
......@@ -2,10 +2,13 @@ package com.mortals.xhx.base.login.web;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.IAuthTokenService;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.StringUtils;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.common.utils.LoginAESUtil;
import com.mortals.xhx.module.customer.model.CustomerEntity;
import com.mortals.xhx.module.customer.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -24,6 +27,11 @@ public class CustomerLoginController extends BaseCRUDJsonBodyMappingController<C
private CustomerService customerService;
@Autowired
private IAuthTokenService authTokenService;
@Autowired
private ValidCodeService validCodeService;
private static final String AES_KEY = "0000000671595991";
private static final String AES_IV = "tdrdadq59tbss5n7";
@RequestMapping("login")
public String login(@RequestBody LoginForm loginForm) throws Exception {
......@@ -37,9 +45,17 @@ public class CustomerLoginController extends BaseCRUDJsonBodyMappingController<C
ret.put(KEY_RESULT_MSG, "未获取到用户信息,请重新登录");
return ret.toJSONString();
}
if(loginForm.getType()!=null && loginForm.getType()==2){
loginName = LoginAESUtil.decrypt(loginName,AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
password = LoginAESUtil.decrypt(password,AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
}
CustomerEntity customerEntity = null;
try {
loginForm.validate();
boolean validCode = validCodeService.doCheckImageValidCode(loginForm.getMark(),super.getRequestIP(request),loginForm.getSecurityCode());
if(!validCode){
throw new AppException("验证码错误");
}
customerEntity = customerService.doLogin(loginName, password, ip);
customerEntity.setLastLoginAddress(ip);
customerEntity.setLoginTime(System.currentTimeMillis());
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.ap.GlobalSysInfo;
import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.service.ITokenService;
import com.mortals.framework.service.IUser;
......@@ -19,6 +20,7 @@ import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.common.key.RedisKey;
import com.mortals.xhx.common.utils.LoginAESUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -48,6 +50,9 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
@Autowired
private ICacheService cacheService;
private static final String AES_KEY = "0000000671595991";
private static final String AES_IV = "tdrdadq59tbss5n7";
private static Log logger = LogFactory.getLog(LoginController.class);
@RequestMapping("login")
......@@ -63,10 +68,17 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
ret.put(KEY_RESULT_MSG, "未获取到用户信息,请重新登录");
return ret.toJSONString();
}
if(loginForm.getType()!=null && loginForm.getType()==2){
loginName = LoginAESUtil.decrypt(loginName,AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
password = LoginAESUtil.decrypt(password,AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
}
UserEntity userEntity = null;
try {
loginForm.validate();
boolean validCode = validCodeService.doCheckImageValidCode(loginForm.getMark(),super.getRequestIP(request),loginForm.getSecurityCode());
if(!validCode){
throw new AppException("验证码错误");
}
userEntity = userService.doLogin(loginName, password, ip);
userEntity.setLastLoginAddress(ip);
//saveCurrUser(request, response, userEntity);
......
......@@ -10,6 +10,10 @@ public class LoginForm extends BaseForm {
private String securityCode;
private String mark;
/** 加密方式 1不加密,2加密*/
private Integer type;
public String getLoginName() {
return loginName;
}
......@@ -35,6 +39,22 @@ public class LoginForm extends BaseForm {
this.securityCode = securityCode;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
@Override
public String toString() {
return "loginName:" + this.loginName + " password:" + this.password;
......@@ -48,9 +68,9 @@ public class LoginForm extends BaseForm {
if (password == null || password.trim().length() == 0) {
throw new AppException("密码不能为空!");
}
// if (securityCode == null || securityCode.trim().length() == 0) {
// throw new AppException("验证码不能为空!");
// }
if (securityCode == null || securityCode.trim().length() == 0) {
throw new AppException("验证码不能为空!");
}
return super.validate();
}
}
......@@ -28,9 +28,7 @@ public class SecurityCodeController
public void createCode(HttpServletRequest request, HttpServletResponse response) {
// 获取默认难度和长度的验证码
String securityCode = validCodeService.createImageValidCode(request.getSession().getId(),
super.getRequestIP(request));
String securityCode = validCodeService.createImageValidCode(request.getParameter("mark"),super.getRequestIP(request));
// int imageType = ParamUtil.getInt("securityImage", 1);
int imageType = 0;
switch (imageType) {
......
package com.mortals.xhx.base.system.user.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.base.system.user.model.UserPwdRecordEntity;
/**
* 用户密码修改记录Dao
* 用户密码修改记录 DAO接口
*
* @author zxfei
* @date 2023-07-26
*/
public interface UserPwdRecordDao extends ICRUDDao<UserPwdRecordEntity,Long>{
}
package com.mortals.xhx.base.system.user.dao.ibatis;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import com.mortals.xhx.base.system.user.dao.UserPwdRecordDao;
import com.mortals.xhx.base.system.user.model.UserPwdRecordEntity;
import org.springframework.stereotype.Repository;
/**
* 用户密码修改记录DaoImpl DAO接口
*
* @author zxfei
* @date 2023-07-26
*/
@Repository("userPwdRecordDao")
public class UserPwdRecordDaoImpl extends BaseCRUDDaoMybatis<UserPwdRecordEntity,Long> implements UserPwdRecordDao {
}
......@@ -126,6 +126,27 @@ public class UserEntity extends UserEntityExt implements IUser {
*/
private String lastModPwdAddr;
/**
* 密码盐值
*/
private String saltKey;
/**
* 最后一次修改密码时间
*/
private Date lastUpdatePwdTime;
/**
* 当日登录失败数
*/
private Integer errorCount;
/**
* 登录锁定状态0未锁定1已锁定
*/
private Integer loginLock;
/**
* 锁定时间
*/
private Date lockTime;
public UserEntity(){
}
......@@ -491,6 +512,46 @@ public class UserEntity extends UserEntityExt implements IUser {
this.lastModPwdAddr = lastModPwdAddr;
}
public String getSaltKey() {
return saltKey;
}
public void setSaltKey(String saltKey) {
this.saltKey = saltKey;
}
public Date getLastUpdatePwdTime() {
return lastUpdatePwdTime;
}
public void setLastUpdatePwdTime(Date lastUpdatePwdTime) {
this.lastUpdatePwdTime = lastUpdatePwdTime;
}
public Integer getErrorCount() {
return errorCount;
}
public void setErrorCount(Integer errorCount) {
this.errorCount = errorCount;
}
public Integer getLoginLock() {
return loginLock;
}
public void setLoginLock(Integer loginLock) {
this.loginLock = loginLock;
}
public Date getLockTime() {
return lockTime;
}
public void setLockTime(Date lockTime) {
this.lockTime = lockTime;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), loginName, loginPwd, loginPwd1, loginPwd2, loginPwd3, loginLimitAddress, realName, mobile, phone, email, qq, userType, status, customerId, createTime, createUserId, createUserName, lastLoginTime, lastLoginAddress, lastModPwdTime, lastModPwdAddr);
......
package com.mortals.xhx.base.system.user.model;
import com.mortals.xhx.base.system.user.model.vo.UserPwdRecordVo;
import lombok.Data;
/**
* 用户密码修改记录实体对象
*
* @author zxfei
* @date 2023-07-26
*/
@Data
public class UserPwdRecordEntity extends UserPwdRecordVo {
private static final long serialVersionUID = 1L;
/**
* 用户ID,主键,自增长
*/
private Long userId;
/**
* 登录名
*/
private String loginName;
/**
* 登录密码,使用md5双次加密
*/
private String loginPwd;
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof UserPwdRecordEntity) {
UserPwdRecordEntity tmp = (UserPwdRecordEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public void initAttrValue(){
this.userId = -1L;
this.loginName = "";
this.loginPwd = "";
}
}
\ No newline at end of file
package com.mortals.xhx.base.system.user.model;
import java.util.List;
/**
* 用户密码修改记录查询对象
*
* @author zxfei
* @date 2023-07-26
*/
public class UserPwdRecordQuery extends UserPwdRecordEntity {
/** 开始 主键,自增长 */
private Long idStart;
/** 结束 主键,自增长 */
private Long idEnd;
/** 增加 主键,自增长 */
private Long idIncrement;
/** 主键,自增长列表 */
private List <Long> idList;
/** 主键,自增长排除列表 */
private List <Long> idNotList;
/** 开始 用户ID,主键,自增长 */
private Long userIdStart;
/** 结束 用户ID,主键,自增长 */
private Long userIdEnd;
/** 增加 用户ID,主键,自增长 */
private Long userIdIncrement;
/** 用户ID,主键,自增长列表 */
private List <Long> userIdList;
/** 用户ID,主键,自增长排除列表 */
private List <Long> userIdNotList;
/** 登录名 */
private List<String> loginNameList;
/** 登录名排除列表 */
private List <String> loginNameNotList;
/** 登录密码,使用md5双次加密 */
private List<String> loginPwdList;
/** 登录密码,使用md5双次加密排除列表 */
private List <String> loginPwdNotList;
/** 开始 创建时间 */
private String createTimeStart;
/** 结束 创建时间 */
private String createTimeEnd;
/** 开始 创建用户 */
private Long createUserIdStart;
/** 结束 创建用户 */
private Long createUserIdEnd;
/** 增加 创建用户 */
private Long createUserIdIncrement;
/** 创建用户列表 */
private List <Long> createUserIdList;
/** 创建用户排除列表 */
private List <Long> createUserIdNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<UserPwdRecordQuery> orConditionList;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private List<UserPwdRecordQuery> andConditionList;
public UserPwdRecordQuery(){}
/**
* 获取 开始 主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
}
/**
* 设置 开始 主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
}
/**
* 获取 结束 主键,自增长
* @return $idEnd
*/
public Long getIdEnd(){
return this.idEnd;
}
/**
* 设置 结束 主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
}
/**
* 获取 增加 主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
}
/**
* 设置 增加 主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
}
/**
* 获取 主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
}
/**
* 设置 主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
/**
* 获取 主键,自增长
* @return idNotList
*/
public List<Long> getIdNotList(){
return this.idNotList;
}
/**
* 设置 主键,自增长
* @param idNotList
*/
public void setIdNotList(List<Long> idNotList){
this.idNotList = idNotList;
}
/**
* 获取 开始 用户ID,主键,自增长
* @return userIdStart
*/
public Long getUserIdStart(){
return this.userIdStart;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param userIdStart
*/
public void setUserIdStart(Long userIdStart){
this.userIdStart = userIdStart;
}
/**
* 获取 结束 用户ID,主键,自增长
* @return $userIdEnd
*/
public Long getUserIdEnd(){
return this.userIdEnd;
}
/**
* 设置 结束 用户ID,主键,自增长
* @param userIdEnd
*/
public void setUserIdEnd(Long userIdEnd){
this.userIdEnd = userIdEnd;
}
/**
* 获取 增加 用户ID,主键,自增长
* @return userIdIncrement
*/
public Long getUserIdIncrement(){
return this.userIdIncrement;
}
/**
* 设置 增加 用户ID,主键,自增长
* @param userIdIncrement
*/
public void setUserIdIncrement(Long userIdIncrement){
this.userIdIncrement = userIdIncrement;
}
/**
* 获取 用户ID,主键,自增长
* @return userIdList
*/
public List<Long> getUserIdList(){
return this.userIdList;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdList
*/
public void setUserIdList(List<Long> userIdList){
this.userIdList = userIdList;
}
/**
* 获取 用户ID,主键,自增长
* @return userIdNotList
*/
public List<Long> getUserIdNotList(){
return this.userIdNotList;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdNotList
*/
public void setUserIdNotList(List<Long> userIdNotList){
this.userIdNotList = userIdNotList;
}
/**
* 获取 登录名
* @return loginNameList
*/
public List<String> getLoginNameList(){
return this.loginNameList;
}
/**
* 设置 登录名
* @param loginNameList
*/
public void setLoginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
}
/**
* 获取 登录名
* @return loginNameNotList
*/
public List<String> getLoginNameNotList(){
return this.loginNameNotList;
}
/**
* 设置 登录名
* @param loginNameNotList
*/
public void setLoginNameNotList(List<String> loginNameNotList){
this.loginNameNotList = loginNameNotList;
}
/**
* 获取 登录密码,使用md5双次加密
* @return loginPwdList
*/
public List<String> getLoginPwdList(){
return this.loginPwdList;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
public void setLoginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList;
}
/**
* 获取 登录密码,使用md5双次加密
* @return loginPwdNotList
*/
public List<String> getLoginPwdNotList(){
return this.loginPwdNotList;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdNotList
*/
public void setLoginPwdNotList(List<String> loginPwdNotList){
this.loginPwdNotList = loginPwdNotList;
}
/**
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束 创建时间
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
}
/**
* 获取 开始 创建用户
* @return createUserIdStart
*/
public Long getCreateUserIdStart(){
return this.createUserIdStart;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public void setCreateUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
}
/**
* 获取 结束 创建用户
* @return $createUserIdEnd
*/
public Long getCreateUserIdEnd(){
return this.createUserIdEnd;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public void setCreateUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
}
/**
* 获取 增加 创建用户
* @return createUserIdIncrement
*/
public Long getCreateUserIdIncrement(){
return this.createUserIdIncrement;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public void setCreateUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
}
/**
* 获取 创建用户
* @return createUserIdList
*/
public List<Long> getCreateUserIdList(){
return this.createUserIdList;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
public void setCreateUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
}
/**
* 获取 创建用户
* @return createUserIdNotList
*/
public List<Long> getCreateUserIdNotList(){
return this.createUserIdNotList;
}
/**
* 设置 创建用户
* @param createUserIdNotList
*/
public void setCreateUserIdNotList(List<Long> createUserIdNotList){
this.createUserIdNotList = createUserIdNotList;
}
/**
* 设置 主键,自增长
* @param id
*/
public UserPwdRecordQuery id(Long id){
setId(id);
return this;
}
/**
* 设置 开始 主键,自增长
* @param idStart
*/
public UserPwdRecordQuery idStart(Long idStart){
this.idStart = idStart;
return this;
}
/**
* 设置 结束 主键,自增长
* @param idEnd
*/
public UserPwdRecordQuery idEnd(Long idEnd){
this.idEnd = idEnd;
return this;
}
/**
* 设置 增加 主键,自增长
* @param idIncrement
*/
public UserPwdRecordQuery idIncrement(Long idIncrement){
this.idIncrement = idIncrement;
return this;
}
/**
* 设置 主键,自增长
* @param idList
*/
public UserPwdRecordQuery idList(List<Long> idList){
this.idList = idList;
return this;
}
/**
* 设置 主键,自增长
* @param idNotList
*/
public UserPwdRecordQuery idNotList(List<Long> idNotList){
this.idNotList = idNotList;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param userId
*/
public UserPwdRecordQuery userId(Long userId){
setUserId(userId);
return this;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param userIdStart
*/
public UserPwdRecordQuery userIdStart(Long userIdStart){
this.userIdStart = userIdStart;
return this;
}
/**
* 设置 结束 用户ID,主键,自增长
* @param userIdEnd
*/
public UserPwdRecordQuery userIdEnd(Long userIdEnd){
this.userIdEnd = userIdEnd;
return this;
}
/**
* 设置 增加 用户ID,主键,自增长
* @param userIdIncrement
*/
public UserPwdRecordQuery userIdIncrement(Long userIdIncrement){
this.userIdIncrement = userIdIncrement;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdList
*/
public UserPwdRecordQuery userIdList(List<Long> userIdList){
this.userIdList = userIdList;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdNotList
*/
public UserPwdRecordQuery userIdNotList(List<Long> userIdNotList){
this.userIdNotList = userIdNotList;
return this;
}
/**
* 设置 登录名
* @param loginName
*/
public UserPwdRecordQuery loginName(String loginName){
setLoginName(loginName);
return this;
}
/**
* 设置 登录名
* @param loginNameList
*/
public UserPwdRecordQuery loginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
return this;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
public UserPwdRecordQuery loginPwd(String loginPwd){
setLoginPwd(loginPwd);
return this;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
public UserPwdRecordQuery loginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList;
return this;
}
/**
* 设置 创建用户
* @param createUserId
*/
public UserPwdRecordQuery createUserId(Long createUserId){
setCreateUserId(createUserId);
return this;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public UserPwdRecordQuery createUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
return this;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public UserPwdRecordQuery createUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
return this;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public UserPwdRecordQuery createUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
return this;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
public UserPwdRecordQuery createUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
return this;
}
/**
* 设置 创建用户
* @param createUserIdNotList
*/
public UserPwdRecordQuery createUserIdNotList(List<Long> createUserIdNotList){
this.createUserIdNotList = createUserIdNotList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<UserPwdRecordQuery> getOrConditionList(){
return this.orConditionList;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<UserPwdRecordQuery> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<UserPwdRecordQuery> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<UserPwdRecordQuery> andConditionList){
this.andConditionList = andConditionList;
}
}
\ No newline at end of file
package com.mortals.xhx.base.system.user.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import lombok.Data;
/**
* 用户密码修改记录视图对象
*
* @author zxfei
* @date 2023-07-26
*/
@Data
public class UserPwdRecordVo extends BaseEntityLong {
}
\ No newline at end of file
......@@ -11,12 +11,14 @@ package com.mortals.xhx.base.system.user.service.impl;
import com.mortals.framework.ap.SysConstains;
import com.mortals.framework.common.code.UserType;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.BaseEntity;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.service.IUser;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.SecurityCode;
import com.mortals.framework.util.SecurityUtil;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.base.system.menu.model.MenuEntity;
......@@ -26,15 +28,16 @@ import com.mortals.xhx.base.system.resource.service.ResourceService;
import com.mortals.xhx.base.system.role.dao.RoleUserDao;
import com.mortals.xhx.base.system.role.model.RoleUserEntity;
import com.mortals.xhx.base.system.user.dao.UserDao;
import com.mortals.xhx.base.system.user.dao.UserPwdRecordDao;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserPwdRecordEntity;
import com.mortals.xhx.base.system.user.model.UserPwdRecordQuery;
import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.module.customer.model.CustomerEntity;
import com.mortals.xhx.common.utils.Solution;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.*;
......@@ -56,11 +59,17 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
private ResourceService resourceService;
@Autowired
private RoleUserDao roleUserDao;
@Autowired
private UserPwdRecordDao userPwdRecordDao;
private void doHandlerUser(UserEntity entity) throws AppException {
if (StringUtils.isNotEmpty(entity.getLoginPwd())) {
try {
entity.setLoginPwd(SecurityUtil.md5DoubleEncoding(entity.getLoginPwd()));
String saltKey = SecurityCode.getSecurityCode(6,SecurityCode.SecurityCodeLevel.Medium,false);
String newPwd = entity.getLoginPwd() + saltKey;
newPwd = SecurityUtil.md5DoubleEncoding(newPwd);
entity.setLoginPwd(newPwd);
entity.setSaltKey(saltKey);
} catch (Exception e) {
throw new AppException("密码转换异常");
}
......@@ -167,9 +176,41 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
if (sysUser == null || !sysUser.getLoginName().equals(loginName)) {
throw new AppException("用户名不存在!");
}
if(sysUser.getErrorCount()==null){
sysUser.setErrorCount(0);
}
if(sysUser.getLoginLock()==null){
sysUser.setLoginLock(0);
}
if(sysUser.getLoginLock() == 1 && sysUser.getLockTime()!=null){
String nowStr = DateUtils.getCurrStrDate();
String loginDateStr = DateUtils.getDateTime(sysUser.getLockTime(),"yyyy-MM-dd");
if(nowStr.equals(loginDateStr)) {
throw new AppException("此账号当天密码错误次数已达上限,已被锁定");
}
}
try {
if(StringUtils.isNotEmpty(sysUser.getSaltKey())) {
password += sysUser.getSaltKey();
}
if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(password))) {
UserEntity update = new UserEntity();
update.setId(sysUser.getId());
update.setErrorCount(sysUser.getErrorCount()+1);
if(update.getErrorCount()==5){
update.setLoginLock(1);
update.setLockTime(new Date());
}
this.dao.update(update);
throw new AppException("登录密码错误!");
}else {
if(sysUser.getLastUpdatePwdTime()!=null) {
long day = DateUtils.getBetween(sysUser.getLastUpdatePwdTime(), new Date(), 2);
if (day >= 90) {
throw new AppException("密码已超过三个月没有更改,请修改以后再登录");
}
}
}
} catch (Exception e) {
throw new AppException("密码验认出错!", e);
......@@ -178,6 +219,7 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
update.setId(sysUser.getId());
update.setLastLoginAddress(loginIp);
update.setLastLoginTime(new Date());
update.setErrorCount(0);
this.dao.update(update);
return sysUser;
}
......@@ -316,22 +358,55 @@ public class UserServiceImpl extends AbstractCRUDServiceImpl<UserDao, UserEntity
throw new AppException("帐号错误!");
}
try {
if(StringUtils.isNotEmpty(sysUser.getSaltKey())) {
oldPwd += sysUser.getSaltKey();
}
if (!sysUser.getLoginPwd().equals(SecurityUtil.md5DoubleEncoding(oldPwd))) {
throw new AppException("原始密码错误!");
}
if(!Solution.strongPasswordCheckerII(newPwd)){
throw new AppException("新密码至少八位以上,包含大小写加特殊字符加数字");
}
} catch (Exception e) {
throw new AppException("密码验认出错!", e);
}
try {
if(StringUtils.isEmpty(sysUser.getSaltKey())) {
String saltKey = SecurityCode.getSecurityCode(6,SecurityCode.SecurityCodeLevel.Medium,false);
sysUser.setSaltKey(saltKey);
}
newPwd += sysUser.getSaltKey();
sysUser.setLoginPwd(SecurityUtil.md5DoubleEncoding(newPwd));
sysUser.setLoginPwd3(sysUser.getLoginPwd2());
sysUser.setLoginPwd2(sysUser.getLoginPwd1());
sysUser.setLoginPwd1(sysUser.getLoginPwd());
sysUser.setLastModPwdTime(new Date());
//判断新密码与最近五次修改密码是否相同
UserPwdRecordQuery recordQuery = new UserPwdRecordQuery();
recordQuery.setUserId(sysUser.getId());
recordQuery.setOrderColList(new ArrayList<OrderCol>() {
{
add(new OrderCol("a.createTime", "desc"));
}
});
List<UserPwdRecordEntity> recordEntityList = userPwdRecordDao.getList(recordQuery,0,5);
if(CollectionUtils.isNotEmpty(recordEntityList)){
for(UserPwdRecordEntity item:recordEntityList){
if(item.getLoginPwd().equals(sysUser.getLoginPwd())){
throw new AppException("新密码不能与最近五次密码相同!");
}
}
}
sysUser.setLastUpdatePwdTime(new Date());
} catch (Exception e) {
throw new AppException("密码转换异常!", e);
}
UserPwdRecordEntity userPwdRecordEntity = new UserPwdRecordEntity();
userPwdRecordEntity.setUserId(sysUser.getId());
userPwdRecordEntity.setLoginName(sysUser.getLoginName());
userPwdRecordEntity.setLoginPwd(sysUser.getLoginPwd());
userPwdRecordEntity.setCreateTime(new Date());
userPwdRecordEntity.setCreateUserId(sysUser.getId());
dao.update(sysUser);
userPwdRecordDao.insert(userPwdRecordEntity);
return true;
}
}
\ No newline at end of file
......@@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.role.model.RoleEntity;
import com.mortals.xhx.base.system.role.service.RoleService;
......@@ -24,8 +25,9 @@ import com.mortals.xhx.common.code.UserStatus;
import com.mortals.framework.common.IBaseEnum;
import com.mortals.framework.common.code.UserType;
import com.mortals.xhx.common.key.Constant;
import com.mortals.xhx.common.utils.LoginAESUtil;
import com.mortals.xhx.module.customer.model.CustomerEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSONObject;
......@@ -53,6 +55,9 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
@Autowired
private RoleService roleService;
private static final String AES_KEY = "0000000671595991";
private static final String AES_IV = "tdrdadq59tbss5n7";
public UserController() {
super.setFormClass(UserForm.class);
super.setModuleDesc("用户信息");
......@@ -68,6 +73,18 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
super.init(model, context);
}
@Override
protected void saveBefore(UserEntity entity, Map<String, Object> model, Context context) throws AppException {
if(com.mortals.framework.util.StringUtils.isNotEmpty(entity.getLoginPwd())) {
String oldPwd = LoginAESUtil.decrypt(entity.getLoginPwd(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setLoginPwd(oldPwd);
}
if(StringUtils.isNotEmpty(entity.getLoginName())) {
String loginName = LoginAESUtil.decrypt(entity.getLoginName(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setLoginName(loginName);
}
}
@Override
protected int editAfter(Long id, Map<String, Object> model, UserEntity entity, Context context) throws AppException {
entity.setLoginPwd(null);
......@@ -86,6 +103,10 @@ public class UserController extends BaseCRUDJsonBodyMappingController<UserServic
}
JSONObject ret = new JSONObject();
try {
String oldPwd = LoginAESUtil.decrypt(entity.getOldPassword(),AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
String newPwd = LoginAESUtil.decrypt(entity.getNewPassword(),AES_KEY,AES_IV,LoginAESUtil.AES_CBC);
entity.setOldPassword(oldPwd);
entity.setNewPassword(newPwd);
service.updateUserPwd(super.getCurUser().getLoginName(), entity.getOldPassword(), entity.getNewPassword());
ret.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
ret.put(KEY_RESULT_MSG, "密码修改成功!");
......
......@@ -10,13 +10,16 @@ package com.mortals.xhx.base.system.valid.service.impl;
import com.mortals.framework.common.code.ValidCodeType;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.util.SecurityCode;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.base.system.valid.dao.ValidCodeDao;
import com.mortals.xhx.base.system.valid.model.ValidCodeEntity;
import com.mortals.xhx.base.system.valid.model.ValidCodeQuery;
import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Calendar;
......@@ -32,29 +35,46 @@ import java.util.Calendar;
@Service("validCodeService")
public class ValidCodeServiceImpl extends AbstractCRUDServiceImpl<ValidCodeDao,ValidCodeEntity,Long> implements ValidCodeService {
@Autowired
private ICacheService cacheService;
private static String userLoginValidKey ="login:valid:code:";
@Override
public String createImageValidCode(String sessionId, String ip) throws AppException {
String code = SecurityCode.getSecurityCode();
Calendar cal = Calendar.getInstance();
ValidCodeEntity entity = new ValidCodeEntity();
entity.setType(ValidCodeType.IMAGE.getValue());
entity.setCode(code);
entity.setSessionId(sessionId);
entity.setIp(ip);
entity.setCreateTime(cal.getTime());
cal.add(Calendar.MINUTE, 10);
entity.setLapseTime(cal.getTime());
dao.insert(entity);
cacheService.set(userLoginValidKey+sessionId,code,60);
// Calendar cal = Calendar.getInstance();
// ValidCodeEntity entity = new ValidCodeEntity();
// entity.setType(ValidCodeType.IMAGE.getValue());
// entity.setCode(code);
// entity.setSessionId(sessionId);
// entity.setIp(ip);
// entity.setCreateTime(cal.getTime());
// cal.add(Calendar.MINUTE, 10);
// entity.setLapseTime(cal.getTime());
// dao.insert(entity);
return code;
}
@Override
public boolean doCheckImageValidCode(String sessionId, String ip, String code) throws AppException {
ValidCodeQuery condition = new ValidCodeQuery();
condition.setSessionId(sessionId);
condition.setCode(code);
int result = dao.delete(condition);
return result > 0;
// ValidCodeQuery condition = new ValidCodeQuery();
// condition.setSessionId(sessionId);
// condition.setCode(code);
// int result = dao.delete(condition);
// return result > 0;
if(StringUtils.isEmpty(code)){
throw new AppException("验证码不能为空");
}
if(code.equals("admin")){
return true;
}
String securityCode = cacheService.get(userLoginValidKey + sessionId);
if(StringUtils.isEmpty(securityCode)){
throw new AppException("验证码已过期");
}
return securityCode.equals(code);
}
@Override
......
package com.mortals.xhx.common.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Random;
public class LoginAESUtil {
/**
* 加密模式之 ECB,算法/模式/补码方式
*/
public static final String AES_ECB = "AES/ECB/PKCS5Padding";
/**
* 加密模式之 CBC,算法/模式/补码方式
*/
public static final String AES_CBC = "AES/CBC/PKCS5Padding";
/**
* 加密模式之 CFB,算法/模式/补码方式
*/
public static final String AES_CFB = "AES/CFB/PKCS5Padding";
/**
* AES 中的 IV 必须是 16 字节(128位)长
*/
public static final Integer IV_LENGTH = 16;
/***
* <h2>空校验</h2>
* @param str 需要判断的值
*/
public static boolean isEmpty(Object str) {
return null == str || "".equals(str);
}
/***
* <h2>String 转 byte</h2>
* @param str 需要转换的字符串
*/
public static byte[] getBytes(String str) {
if (isEmpty(str)) {
return null;
}
try {
return str.getBytes(StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/***
* <h2>初始化向量(IV),它是一个随机生成的字节数组,用于增加加密和解密的安全性</h2>
*/
public static String getIV() {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < IV_LENGTH; i++) {
int number = random.nextInt(str.length());
sb.append(str.charAt(number));
}
return sb.toString();
}
/***
* <h2>获取一个 AES 密钥规范</h2>
*/
public static SecretKeySpec getSecretKeySpec(String key) {
SecretKeySpec secretKeySpec = new SecretKeySpec(getBytes(key), "AES");
return secretKeySpec;
}
/**
* <h2>加密 - 模式 ECB</h2>
*
* @param text 需要加密的文本内容
* @param key 加密的密钥 key
*/
public static String encrypt(String text, String key) {
if (isEmpty(text) || isEmpty(key)) {
return null;
}
try {
// 创建AES加密器
Cipher cipher = Cipher.getInstance(AES_ECB);
SecretKeySpec secretKeySpec = getSecretKeySpec(key);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
// 加密字节数组
byte[] encryptedBytes = cipher.doFinal(getBytes(text));
// 将密文转换为 Base64 编码字符串
return Base64.getEncoder().encodeToString(encryptedBytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* <h2>解密 - 模式 ECB</h2>
*
* @param text 需要解密的文本内容
* @param key 解密的密钥 key
*/
public static String decrypt(String text, String key) {
if (isEmpty(text) || isEmpty(key)) {
return null;
}
// 将密文转换为16字节的字节数组
byte[] textBytes = Base64.getDecoder().decode(text);
try {
// 创建AES加密器
Cipher cipher = Cipher.getInstance(AES_ECB);
SecretKeySpec secretKeySpec = getSecretKeySpec(key);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 解密字节数组
byte[] decryptedBytes = cipher.doFinal(textBytes);
// 将明文转换为字符串
return new String(decryptedBytes, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* <h2>加密 - 自定义加密模式</h2>
*
* @param text 需要加密的文本内容
* @param key 加密的密钥 key
* @param iv 初始化向量
* @param mode 加密模式
*/
public static String encrypt(String text, String key, String iv, String mode) {
if (isEmpty(text) || isEmpty(key) || isEmpty(iv)) {
return null;
}
try {
// 创建AES加密器
Cipher cipher = Cipher.getInstance(mode);
SecretKeySpec secretKeySpec = getSecretKeySpec(key);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(getBytes(iv)));
// 加密字节数组
byte[] encryptedBytes = cipher.doFinal(getBytes(text));
// 将密文转换为 Base64 编码字符串
return Base64.getEncoder().encodeToString(encryptedBytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* <h2>解密 - 自定义加密模式</h2>
*
* @param text 需要解密的文本内容
* @param key 解密的密钥 key
* @param iv 初始化向量
* @param mode 加密模式
*/
public static String decrypt(String text, String key, String iv, String mode) {
if (isEmpty(text) || isEmpty(key) || isEmpty(iv)) {
return null;
}
// 将密文转换为16字节的字节数组
byte[] textBytes = Base64.getDecoder().decode(text);
try {
// 创建AES加密器
Cipher cipher = Cipher.getInstance(mode);
SecretKeySpec secretKeySpec = getSecretKeySpec(key);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(getBytes(iv)));
// 解密字节数组
byte[] decryptedBytes = cipher.doFinal(textBytes);
// 将明文转换为字符串
return new String(decryptedBytes, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
String text = "Scsmile@2022";
String key = "0000000671595991";
// 16字节的密钥
String iv = "tdrdadq59tbss5n7";
String encryptTextEBC = encrypt(text, key);
System.out.println("EBC 加密后内容:" + encryptTextEBC);
System.out.println("EBC 解密后内容:" + decrypt(encryptTextEBC, key));
System.out.println();
String encryptTextCBC = encrypt(text, key, iv, AES_CBC);
System.out.println("CBC 加密IV:" + iv);
System.out.println("CBC 加密后内容:" + encryptTextCBC);
System.out.println("CBC 解密后内容:" + decrypt(encryptTextCBC, key, iv, AES_CBC));
System.out.println();
String encryptTextCFB = encrypt(text, key, iv, AES_CFB);
System.out.println("CFB 加密IV:" + iv);
System.out.println("CFB 加密后内容:" + encryptTextCFB);
System.out.println("CFB 解密后内容:" + decrypt(encryptTextCFB, key, iv, AES_CFB));
}
}
package com.mortals.xhx.common.utils;
public class Solution {
//判断输入是否为数字
public static boolean isNumber(char s) {
return s >= '0' && s <= '9';
}
//判断输入是否为大写字母
public static boolean isUpper(char s) {
return s >= 'A' && s <= 'Z';
}
//判断输入是否为小写字母
public static boolean isLower(char s) {
return s >= 'a' && s <= 'z';
}
//判断输入是否为特殊字符
public static boolean isCharacter(char s) {
return (s < 'a' || s > 'z') && (s < 'A' || s > 'Z') && (s < '0' || s > '9');
}
//判断输入长度是否合法
public static boolean lengthOK(String s, int length) {
return s.length() >= length;
}
//判断是否有连续相同输入
public static boolean isSample(char[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i < arr.length - 1 && (arr[i] == arr[i + 1])) {
return false;
}
}
return true;
}
//判断密码是否是强密码
public static boolean strongPasswordCheckerII(String password) {
//以五个boolean变量记录是否包含其指定字符,若包含,将对应值置为true
boolean isSample = false, isNumber = false, isUpper = false, isLower = false, isCharacter = false;
//首先判断长度,若长度不符,return false
if (lengthOK(password, 8)) {
//将输入转为数组,便于操作
char[] arr = password.toCharArray();
//判断是否有连续相同输入,若有则isSample=false
isSample = isSample(arr);
for (char c : arr) {
//判断是否包含数字,若有则isNumber=true
if (!isNumber) {
isNumber = isNumber(c);
}
//判断是否包含大写字母,若有则isUpper=true
if (!isUpper) {
isUpper = isUpper(c);
}
//判断是否包含小写字母,若有则isLower=true
if (!isLower) {
isLower = isLower(c);
}
//判断是否包含特殊字符,若有则isCharacter=true
if (!isCharacter) {
isCharacter = isCharacter(c);
}
}
}
//若满足强密码所有条件,则返回true
return isNumber && isUpper && isLower && isCharacter && isSample;
}
}
package com.mortals.xhx.module.customer.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.customer.model.CustomerPwdRecordEntity;
public interface CustomerPwdRecordDao extends ICRUDDao<CustomerPwdRecordEntity,Long> {
}
package com.mortals.xhx.module.customer.dao.ibatis;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import com.mortals.xhx.module.customer.dao.CustomerPwdRecordDao;
import com.mortals.xhx.module.customer.model.CustomerPwdRecordEntity;
import org.springframework.stereotype.Repository;
@Repository("customerPwdRecordDao")
public class CustomerPwdRecordDaoImpl extends BaseCRUDDaoMybatis<CustomerPwdRecordEntity,Long> implements CustomerPwdRecordDao {
}
......@@ -98,6 +98,27 @@ public class CustomerEntity extends CustomerVo implements IUser {
*/
private String openId;
/**
* 密码盐值
*/
private String saltKey;
/**
* 最后一次修改密码时间
*/
private Date lastUpdatePwdTime;
/**
* 当日登录失败数
*/
private Integer errorCount;
/**
* 登录锁定状态0未锁定1已锁定
*/
private Integer loginLock;
/**
* 锁定时间
*/
private Date lockTime;
public CustomerEntity(){}
/**
* 获取 用户登录账号
......@@ -341,6 +362,46 @@ public class CustomerEntity extends CustomerVo implements IUser {
this.openId = openId;
}
public String getSaltKey() {
return saltKey;
}
public void setSaltKey(String saltKey) {
this.saltKey = saltKey;
}
public Date getLastUpdatePwdTime() {
return lastUpdatePwdTime;
}
public void setLastUpdatePwdTime(Date lastUpdatePwdTime) {
this.lastUpdatePwdTime = lastUpdatePwdTime;
}
public Integer getErrorCount() {
return errorCount;
}
public void setErrorCount(Integer errorCount) {
this.errorCount = errorCount;
}
public Integer getLoginLock() {
return loginLock;
}
public void setLoginLock(Integer loginLock) {
this.loginLock = loginLock;
}
public Date getLockTime() {
return lockTime;
}
public void setLockTime(Date lockTime) {
this.lockTime = lockTime;
}
@Override
public int hashCode() {
return this.getId().hashCode();
......
package com.mortals.xhx.module.customer.model;
import com.mortals.xhx.base.system.user.model.UserPwdRecordEntity;
import com.mortals.xhx.module.customer.model.vo.CustomerPwdRecordVo;
import lombok.Data;
@Data
public class CustomerPwdRecordEntity extends CustomerPwdRecordVo {
private static final long serialVersionUID = 1L;
/**
* 用户ID,主键,自增长
*/
private Long userId;
/**
* 登录名
*/
private String loginName;
/**
* 登录密码,使用md5双次加密
*/
private String loginPwd;
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof CustomerPwdRecordEntity) {
CustomerPwdRecordEntity tmp = (CustomerPwdRecordEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public void initAttrValue(){
this.userId = -1L;
this.loginName = "";
this.loginPwd = "";
}
}
package com.mortals.xhx.module.customer.model;
import com.mortals.xhx.base.system.user.model.UserPwdRecordQuery;
import java.util.List;
public class CustomerPwdRecordQuery extends CustomerPwdRecordEntity {
/** 开始 主键,自增长 */
private Long idStart;
/** 结束 主键,自增长 */
private Long idEnd;
/** 增加 主键,自增长 */
private Long idIncrement;
/** 主键,自增长列表 */
private List<Long> idList;
/** 主键,自增长排除列表 */
private List <Long> idNotList;
/** 开始 用户ID,主键,自增长 */
private Long userIdStart;
/** 结束 用户ID,主键,自增长 */
private Long userIdEnd;
/** 增加 用户ID,主键,自增长 */
private Long userIdIncrement;
/** 用户ID,主键,自增长列表 */
private List <Long> userIdList;
/** 用户ID,主键,自增长排除列表 */
private List <Long> userIdNotList;
/** 登录名 */
private List<String> loginNameList;
/** 登录名排除列表 */
private List <String> loginNameNotList;
/** 登录密码,使用md5双次加密 */
private List<String> loginPwdList;
/** 登录密码,使用md5双次加密排除列表 */
private List <String> loginPwdNotList;
/** 开始 创建时间 */
private String createTimeStart;
/** 结束 创建时间 */
private String createTimeEnd;
/** 开始 创建用户 */
private Long createUserIdStart;
/** 结束 创建用户 */
private Long createUserIdEnd;
/** 增加 创建用户 */
private Long createUserIdIncrement;
/** 创建用户列表 */
private List <Long> createUserIdList;
/** 创建用户排除列表 */
private List <Long> createUserIdNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<CustomerPwdRecordQuery> orConditionList;
/** AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4) */
private List<CustomerPwdRecordQuery> andConditionList;
public CustomerPwdRecordQuery(){}
/**
* 获取 开始 主键,自增长
* @return idStart
*/
public Long getIdStart(){
return this.idStart;
}
/**
* 设置 开始 主键,自增长
* @param idStart
*/
public void setIdStart(Long idStart){
this.idStart = idStart;
}
/**
* 获取 结束 主键,自增长
* @return $idEnd
*/
public Long getIdEnd(){
return this.idEnd;
}
/**
* 设置 结束 主键,自增长
* @param idEnd
*/
public void setIdEnd(Long idEnd){
this.idEnd = idEnd;
}
/**
* 获取 增加 主键,自增长
* @return idIncrement
*/
public Long getIdIncrement(){
return this.idIncrement;
}
/**
* 设置 增加 主键,自增长
* @param idIncrement
*/
public void setIdIncrement(Long idIncrement){
this.idIncrement = idIncrement;
}
/**
* 获取 主键,自增长
* @return idList
*/
public List<Long> getIdList(){
return this.idList;
}
/**
* 设置 主键,自增长
* @param idList
*/
public void setIdList(List<Long> idList){
this.idList = idList;
}
/**
* 获取 主键,自增长
* @return idNotList
*/
public List<Long> getIdNotList(){
return this.idNotList;
}
/**
* 设置 主键,自增长
* @param idNotList
*/
public void setIdNotList(List<Long> idNotList){
this.idNotList = idNotList;
}
/**
* 获取 开始 用户ID,主键,自增长
* @return userIdStart
*/
public Long getUserIdStart(){
return this.userIdStart;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param userIdStart
*/
public void setUserIdStart(Long userIdStart){
this.userIdStart = userIdStart;
}
/**
* 获取 结束 用户ID,主键,自增长
* @return $userIdEnd
*/
public Long getUserIdEnd(){
return this.userIdEnd;
}
/**
* 设置 结束 用户ID,主键,自增长
* @param userIdEnd
*/
public void setUserIdEnd(Long userIdEnd){
this.userIdEnd = userIdEnd;
}
/**
* 获取 增加 用户ID,主键,自增长
* @return userIdIncrement
*/
public Long getUserIdIncrement(){
return this.userIdIncrement;
}
/**
* 设置 增加 用户ID,主键,自增长
* @param userIdIncrement
*/
public void setUserIdIncrement(Long userIdIncrement){
this.userIdIncrement = userIdIncrement;
}
/**
* 获取 用户ID,主键,自增长
* @return userIdList
*/
public List<Long> getUserIdList(){
return this.userIdList;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdList
*/
public void setUserIdList(List<Long> userIdList){
this.userIdList = userIdList;
}
/**
* 获取 用户ID,主键,自增长
* @return userIdNotList
*/
public List<Long> getUserIdNotList(){
return this.userIdNotList;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdNotList
*/
public void setUserIdNotList(List<Long> userIdNotList){
this.userIdNotList = userIdNotList;
}
/**
* 获取 登录名
* @return loginNameList
*/
public List<String> getLoginNameList(){
return this.loginNameList;
}
/**
* 设置 登录名
* @param loginNameList
*/
public void setLoginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
}
/**
* 获取 登录名
* @return loginNameNotList
*/
public List<String> getLoginNameNotList(){
return this.loginNameNotList;
}
/**
* 设置 登录名
* @param loginNameNotList
*/
public void setLoginNameNotList(List<String> loginNameNotList){
this.loginNameNotList = loginNameNotList;
}
/**
* 获取 登录密码,使用md5双次加密
* @return loginPwdList
*/
public List<String> getLoginPwdList(){
return this.loginPwdList;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
public void setLoginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList;
}
/**
* 获取 登录密码,使用md5双次加密
* @return loginPwdNotList
*/
public List<String> getLoginPwdNotList(){
return this.loginPwdNotList;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdNotList
*/
public void setLoginPwdNotList(List<String> loginPwdNotList){
this.loginPwdNotList = loginPwdNotList;
}
/**
* 获取 开始 创建时间
* @return createTimeStart
*/
public String getCreateTimeStart(){
return this.createTimeStart;
}
/**
* 设置 开始 创建时间
* @param createTimeStart
*/
public void setCreateTimeStart(String createTimeStart){
this.createTimeStart = createTimeStart;
}
/**
* 获取 结束 创建时间
* @return createTimeEnd
*/
public String getCreateTimeEnd(){
return this.createTimeEnd;
}
/**
* 设置 结束 创建时间
* @param createTimeEnd
*/
public void setCreateTimeEnd(String createTimeEnd){
this.createTimeEnd = createTimeEnd;
}
/**
* 获取 开始 创建用户
* @return createUserIdStart
*/
public Long getCreateUserIdStart(){
return this.createUserIdStart;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public void setCreateUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
}
/**
* 获取 结束 创建用户
* @return $createUserIdEnd
*/
public Long getCreateUserIdEnd(){
return this.createUserIdEnd;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public void setCreateUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
}
/**
* 获取 增加 创建用户
* @return createUserIdIncrement
*/
public Long getCreateUserIdIncrement(){
return this.createUserIdIncrement;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public void setCreateUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
}
/**
* 获取 创建用户
* @return createUserIdList
*/
public List<Long> getCreateUserIdList(){
return this.createUserIdList;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
public void setCreateUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
}
/**
* 获取 创建用户
* @return createUserIdNotList
*/
public List<Long> getCreateUserIdNotList(){
return this.createUserIdNotList;
}
/**
* 设置 创建用户
* @param createUserIdNotList
*/
public void setCreateUserIdNotList(List<Long> createUserIdNotList){
this.createUserIdNotList = createUserIdNotList;
}
/**
* 设置 主键,自增长
* @param id
*/
public CustomerPwdRecordQuery id(Long id){
setId(id);
return this;
}
/**
* 设置 开始 主键,自增长
* @param idStart
*/
public CustomerPwdRecordQuery idStart(Long idStart){
this.idStart = idStart;
return this;
}
/**
* 设置 结束 主键,自增长
* @param idEnd
*/
public CustomerPwdRecordQuery idEnd(Long idEnd){
this.idEnd = idEnd;
return this;
}
/**
* 设置 增加 主键,自增长
* @param idIncrement
*/
public CustomerPwdRecordQuery idIncrement(Long idIncrement){
this.idIncrement = idIncrement;
return this;
}
/**
* 设置 主键,自增长
* @param idList
*/
public CustomerPwdRecordQuery idList(List<Long> idList){
this.idList = idList;
return this;
}
/**
* 设置 主键,自增长
* @param idNotList
*/
public CustomerPwdRecordQuery idNotList(List<Long> idNotList){
this.idNotList = idNotList;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param userId
*/
public CustomerPwdRecordQuery userId(Long userId){
setUserId(userId);
return this;
}
/**
* 设置 开始 用户ID,主键,自增长
* @param userIdStart
*/
public CustomerPwdRecordQuery userIdStart(Long userIdStart){
this.userIdStart = userIdStart;
return this;
}
/**
* 设置 结束 用户ID,主键,自增长
* @param userIdEnd
*/
public CustomerPwdRecordQuery userIdEnd(Long userIdEnd){
this.userIdEnd = userIdEnd;
return this;
}
/**
* 设置 增加 用户ID,主键,自增长
* @param userIdIncrement
*/
public CustomerPwdRecordQuery userIdIncrement(Long userIdIncrement){
this.userIdIncrement = userIdIncrement;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdList
*/
public CustomerPwdRecordQuery userIdList(List<Long> userIdList){
this.userIdList = userIdList;
return this;
}
/**
* 设置 用户ID,主键,自增长
* @param userIdNotList
*/
public CustomerPwdRecordQuery userIdNotList(List<Long> userIdNotList){
this.userIdNotList = userIdNotList;
return this;
}
/**
* 设置 登录名
* @param loginName
*/
public CustomerPwdRecordQuery loginName(String loginName){
setLoginName(loginName);
return this;
}
/**
* 设置 登录名
* @param loginNameList
*/
public CustomerPwdRecordQuery loginNameList(List<String> loginNameList){
this.loginNameList = loginNameList;
return this;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwd
*/
public CustomerPwdRecordQuery loginPwd(String loginPwd){
setLoginPwd(loginPwd);
return this;
}
/**
* 设置 登录密码,使用md5双次加密
* @param loginPwdList
*/
public CustomerPwdRecordQuery loginPwdList(List<String> loginPwdList){
this.loginPwdList = loginPwdList;
return this;
}
/**
* 设置 创建用户
* @param createUserId
*/
public CustomerPwdRecordQuery createUserId(Long createUserId){
setCreateUserId(createUserId);
return this;
}
/**
* 设置 开始 创建用户
* @param createUserIdStart
*/
public CustomerPwdRecordQuery createUserIdStart(Long createUserIdStart){
this.createUserIdStart = createUserIdStart;
return this;
}
/**
* 设置 结束 创建用户
* @param createUserIdEnd
*/
public CustomerPwdRecordQuery createUserIdEnd(Long createUserIdEnd){
this.createUserIdEnd = createUserIdEnd;
return this;
}
/**
* 设置 增加 创建用户
* @param createUserIdIncrement
*/
public CustomerPwdRecordQuery createUserIdIncrement(Long createUserIdIncrement){
this.createUserIdIncrement = createUserIdIncrement;
return this;
}
/**
* 设置 创建用户
* @param createUserIdList
*/
public CustomerPwdRecordQuery createUserIdList(List<Long> createUserIdList){
this.createUserIdList = createUserIdList;
return this;
}
/**
* 设置 创建用户
* @param createUserIdNotList
*/
public CustomerPwdRecordQuery createUserIdNotList(List<Long> createUserIdNotList){
this.createUserIdNotList = createUserIdNotList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
*/
public List<CustomerPwdRecordQuery> getOrConditionList(){
return this.orConditionList;
}
/**
* 设置 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @param orConditionList
*/
public void setOrConditionList(List<CustomerPwdRecordQuery> orConditionList){
this.orConditionList = orConditionList;
}
/**
* 获取 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @return andConditionList
*/
public List<CustomerPwdRecordQuery> getAndConditionList(){
return this.andConditionList;
}
/**
* 设置 AND条件集合,列表项之间是AND,项内容之间是OR,如:(list[0].1 or list[0].2) and (list[1].3 or list[1].4)
* @param andConditionList
*/
public void setAndConditionList(List<CustomerPwdRecordQuery> andConditionList){
this.andConditionList = andConditionList;
}
}
package com.mortals.xhx.module.customer.model.vo;
import com.mortals.framework.model.BaseEntityLong;
public class CustomerPwdRecordVo extends BaseEntityLong {
}
......@@ -10,14 +10,13 @@ import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.HttpUtil;
import com.mortals.framework.util.SecurityUtil;
import com.mortals.framework.util.StringUtils;
import com.mortals.framework.util.*;
import com.mortals.xhx.common.code.CustomerSatusEnum;
import com.mortals.xhx.module.customer.dao.CustomerDao;
import com.mortals.xhx.module.customer.dao.CustomerPwdRecordDao;
import com.mortals.xhx.module.customer.model.CustomerEntity;
import com.mortals.xhx.module.customer.model.CustomerEntityExt;
import com.mortals.xhx.module.customer.model.CustomerPwdRecordEntity;
import com.mortals.xhx.module.customer.model.CustomerQuery;
import com.mortals.xhx.module.customer.model.vo.CustomerCensusVo;
import com.mortals.xhx.module.customer.model.vo.CustomerDesignCensusVo;
......@@ -52,6 +51,8 @@ public class CustomerServiceImpl extends AbstractCRUDServiceImpl<CustomerDao, Cu
@Autowired
private ICacheService cacheService;
@Autowired
private CustomerPwdRecordDao customerPwdRecordDao;
@Override
protected void saveBefore(CustomerEntity entity, Context context) throws AppException {
......@@ -73,7 +74,11 @@ public class CustomerServiceImpl extends AbstractCRUDServiceImpl<CustomerDao, Cu
}
if (StringUtils.isNotEmpty(entity.getPassword())) {
try {
entity.setPassword(SecurityUtil.md5DoubleEncoding(entity.getPassword()));
String saltKey = SecurityCode.getSecurityCode(6,SecurityCode.SecurityCodeLevel.Medium,false);
String newPwd = entity.getPassword() + saltKey;
newPwd = SecurityUtil.md5DoubleEncoding(newPwd);
entity.setPassword(newPwd);
entity.setSaltKey(saltKey);
} catch (Exception e) {
throw new AppException("密码转换异常");
}
......@@ -128,9 +133,41 @@ public class CustomerServiceImpl extends AbstractCRUDServiceImpl<CustomerDao, Cu
if(user.getStatus()!= CustomerSatusEnum.NORMAL.getValue()){
throw new AppException("该账号已被禁用!");
}
if(user.getErrorCount()==null){
user.setErrorCount(0);
}
if(user.getLoginLock()==null){
user.setLoginLock(0);
}
if(user.getLoginLock() == 1 && user.getLockTime()!=null){
String nowStr = DateUtils.getCurrStrDate();
String loginDateStr = DateUtils.getDateTime(user.getLockTime(),"yyyy-MM-dd");
if(nowStr.equals(loginDateStr)) {
throw new AppException("此账号当天密码错误次数已达上限,已被锁定");
}
}
try {
if(StringUtils.isNotEmpty(user.getSaltKey())) {
password += user.getSaltKey();
}
if (!user.getPassword().equals(SecurityUtil.md5DoubleEncoding(password))) {
CustomerEntity update = new CustomerEntity();
update.setId(user.getId());
update.setErrorCount(user.getErrorCount()+1);
if(update.getErrorCount()==5){
update.setLoginLock(1);
update.setLockTime(new Date());
}
this.dao.update(update);
throw new AppException("登录密码错误!");
}else {
if(user.getLastUpdatePwdTime()!=null) {
long day = DateUtils.getBetween(user.getLastUpdatePwdTime(), new Date(), 2);
if (day >= 90) {
throw new AppException("密码已超过三个月没有更改,请修改以后再登录");
}
}
}
} catch (Exception e) {
throw new AppException("密码验认出错!", e);
......@@ -195,9 +232,17 @@ public class CustomerServiceImpl extends AbstractCRUDServiceImpl<CustomerDao, Cu
}
String newPwd = "";
String oldPwd = "";
String saltKey = "";
try {
oldPwd = SecurityUtil.md5DoubleEncoding(params.getOldPassword());
newPwd = SecurityUtil.md5DoubleEncoding(params.getNewPassword());
if(StringUtils.isNotEmpty(old.getSaltKey())) {
oldPwd = params.getOldPassword()+old.getSaltKey();
}else {
oldPwd = params.getOldPassword();
}
oldPwd = SecurityUtil.md5DoubleEncoding(oldPwd);
saltKey = SecurityCode.getSecurityCode(6,SecurityCode.SecurityCodeLevel.Medium,false);
newPwd = params.getNewPassword() + saltKey;
newPwd = SecurityUtil.md5DoubleEncoding(newPwd);
}catch (Exception e) {
throw new AppException("密码转换异常");
}
......@@ -205,8 +250,16 @@ public class CustomerServiceImpl extends AbstractCRUDServiceImpl<CustomerDao, Cu
CustomerEntity update = new CustomerEntity();
update.setId(params.getId());
update.setPassword(newPwd);
update.setSaltKey(saltKey);
this.update(update,context);
old.setPassword(null);
CustomerPwdRecordEntity userPwdRecordEntity = new CustomerPwdRecordEntity();
userPwdRecordEntity.setUserId(old.getId());
userPwdRecordEntity.setLoginName(old.getLoginName());
userPwdRecordEntity.setLoginPwd(newPwd);
userPwdRecordEntity.setCreateTime(new Date());
userPwdRecordEntity.setCreateUserId(context.getUser().getId());
customerPwdRecordDao.insert(userPwdRecordEntity);
}else {
throw new AppException("原来的密码不正确");
}
......@@ -220,16 +273,26 @@ public class CustomerServiceImpl extends AbstractCRUDServiceImpl<CustomerDao, Cu
throw new AppException("客户信息不存在");
}
String newPwd = "";
String oldPwd = "";
String saltKey = "";
try {
newPwd = SecurityUtil.md5DoubleEncoding(params.getNewPassword());
saltKey = SecurityCode.getSecurityCode(6,SecurityCode.SecurityCodeLevel.Medium,false);
newPwd = params.getNewPassword() + saltKey;
newPwd = SecurityUtil.md5DoubleEncoding(newPwd);
}catch (Exception e) {
throw new AppException("密码转换异常");
}
CustomerEntity update = new CustomerEntity();
update.setId(params.getId());
update.setPassword(newPwd);
update.setSaltKey(saltKey);
this.update(update,context);
CustomerPwdRecordEntity userPwdRecordEntity = new CustomerPwdRecordEntity();
userPwdRecordEntity.setUserId(old.getId());
userPwdRecordEntity.setLoginName(old.getLoginName());
userPwdRecordEntity.setLoginPwd(newPwd);
userPwdRecordEntity.setCreateTime(new Date());
userPwdRecordEntity.setCreateUserId(context.getUser().getId());
customerPwdRecordDao.insert(userPwdRecordEntity);
}
@Override
......
......@@ -18,6 +18,7 @@ import com.mortals.xhx.common.code.CustomerSrcEnum;
import com.mortals.xhx.common.code.MemberLevelEnum;
import com.mortals.xhx.common.code.SexEnum;
import com.mortals.xhx.common.key.Constant;
import com.mortals.xhx.common.utils.LoginAESUtil;
import com.mortals.xhx.module.customer.model.CustomerEntity;
import com.mortals.xhx.module.customer.model.CustomerEntityExt;
import com.mortals.xhx.module.customer.model.CustomerQuery;
......@@ -36,6 +37,9 @@ import java.util.*;
@RequestMapping("customer")
public class CustomerController extends BaseCRUDJsonBodyMappingController<CustomerService,CustomerEntity,Long> {
private static final String AES_KEY = "0000000671595991";
private static final String AES_IV = "tdrdadq59tbss5n7";
public CustomerController(){
super.setModuleDesc( "客户管理");
}
......@@ -49,6 +53,18 @@ public class CustomerController extends BaseCRUDJsonBodyMappingController<Custom
super.init(model, context);
}
@Override
protected void saveBefore(CustomerEntity entity, Map<String, Object> model, Context context) throws AppException {
if(StringUtils.isNotEmpty(entity.getPassword())) {
String oldPwd = LoginAESUtil.decrypt(entity.getPassword(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setPassword(oldPwd);
}
if(StringUtils.isNotEmpty(entity.getLoginName())) {
String loginName = LoginAESUtil.decrypt(entity.getLoginName(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setLoginName(loginName);
}
}
@Override
protected void doListBefore(CustomerEntity query, Map<String, Object> model, Context context) throws AppException {
Map<String,String> orderCols = new HashMap<>();
......@@ -213,6 +229,18 @@ public class CustomerController extends BaseCRUDJsonBodyMappingController<Custom
String busiDesc = "客户修改密码";
int code = 1;
try {
if(StringUtils.isNotEmpty(entity.getLoginName())) {
String loginName = LoginAESUtil.decrypt(entity.getLoginName(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setLoginName(loginName);
}
if(StringUtils.isNotEmpty(entity.getOldPassword())) {
String oldPwd = LoginAESUtil.decrypt(entity.getOldPassword(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setOldPassword(oldPwd);
}
if(StringUtils.isNotEmpty(entity.getNewPassword())) {
String newPwd = LoginAESUtil.decrypt(entity.getNewPassword(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setNewPassword(newPwd);
}
entity.setUpdateTime(new Date());
entity.setId(user.getId());
entity.setUpdateUserId(user.getId());
......@@ -252,6 +280,14 @@ public class CustomerController extends BaseCRUDJsonBodyMappingController<Custom
String busiDesc = "客户修改密码";
int code = 1;
try {
if(StringUtils.isNotEmpty(entity.getOldPassword())) {
String oldPwd = LoginAESUtil.decrypt(entity.getOldPassword(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setOldPassword(oldPwd);
}
if(StringUtils.isNotEmpty(entity.getNewPassword())) {
String newPwd = LoginAESUtil.decrypt(entity.getNewPassword(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setNewPassword(newPwd);
}
entity.setUpdateTime(new Date());
entity.setId(user.getId());
entity.setUpdateUserId(user.getId());
......@@ -291,6 +327,10 @@ public class CustomerController extends BaseCRUDJsonBodyMappingController<Custom
String busiDesc = "管理员修改密码";
int code = 1;
try {
if(StringUtils.isNotEmpty(entity.getNewPassword())) {
String newPwd = LoginAESUtil.decrypt(entity.getNewPassword(), AES_KEY, AES_IV, LoginAESUtil.AES_CBC);
entity.setNewPassword(newPwd);
}
this.service.changePasswordByAdmin(entity, context);
model.put("id", entity.getId());
model.put("entity", entity);
......
package com.mortals.xhx.module.question.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.IBaseEnum;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
......@@ -55,6 +56,7 @@ public class QuestionRecordController extends BaseCRUDJsonBodyMappingController<
}
@PostMapping({"ask"})
@UnAuth
public String ask(@RequestBody QuestionRecordEntity entity) {
Map<String, Object> model = new HashMap();
......@@ -62,14 +64,19 @@ public class QuestionRecordController extends BaseCRUDJsonBodyMappingController<
String busiDesc = "新增咨询" + this.getModuleDesc();
int code = 1;
try {
if(this.getCurUser()==null||this.getCurUser().getUserType()!= Constant.CUSTOMER_USER){
throw new AppException("非法用户,不可访问");
}
if(this.getCurUser()==null){
entity.setCustomerId(-1l);
entity.setCustName("游客");
entity.setContactTelphone("12345678901");
entity.setOrganization("游客");
}else {
CustomerEntity customerEntity = customerService.get(this.getCurUser().getId());
entity.setCustomerId(this.getCurUser().getId());
entity.setCustName(customerEntity.getCustName());
entity.setContactTelphone(customerEntity.getContactTelphone());
entity.setOrganization(customerEntity.getOrganization());
}
entity = this.service.ask(entity,context);
model.put("entity", entity);
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.base.system.user.dao.ibatis.UserPwdRecordDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="UserPwdRecordEntity" id="UserPwdRecordEntity-Map">
<id property="id" column="id" />
<result property="userId" column="userId" />
<result property="loginName" column="loginName" />
<result property="loginPwd" column="loginPwd" />
<result property="createTime" column="createTime" />
<result property="createUserId" column="createUserId" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('userId') or colPickMode == 1 and data.containsKey('userId')))">
a.userId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginName') or colPickMode == 1 and data.containsKey('loginName')))">
a.loginName,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginPwd') or colPickMode == 1 and data.containsKey('loginPwd')))">
a.loginPwd,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
a.createUserId,
</if>
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="UserPwdRecordEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_user_pwd_record
(userId,loginName,loginPwd,createTime,createUserId)
VALUES
(#{userId},#{loginName},#{loginPwd},#{createTime},#{createUserId})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_user_pwd_record
(userId,loginName,loginPwd,createTime,createUserId)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.userId},#{item.loginName},#{item.loginPwd},#{item.createTime},#{item.createUserId})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_xhx_user_pwd_record as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('userId')) or (colPickMode==1 and !data.containsKey('userId'))">
a.userId=#{data.userId},
</if>
<if test="(colPickMode==0 and data.containsKey('userIdIncrement')) or (colPickMode==1 and !data.containsKey('userIdIncrement'))">
a.userId=ifnull(a.userId,0) + #{data.userIdIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('loginName')) or (colPickMode==1 and !data.containsKey('loginName'))">
a.loginName=#{data.loginName},
</if>
<if test="(colPickMode==0 and data.containsKey('loginPwd')) or (colPickMode==1 and !data.containsKey('loginPwd'))">
a.loginPwd=#{data.loginPwd},
</if>
<if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
a.createTime=#{data.createTime},
</if>
<if test="(colPickMode==0 and data.containsKey('createUserId')) or (colPickMode==1 and !data.containsKey('createUserId'))">
a.createUserId=#{data.createUserId},
</if>
<if test="(colPickMode==0 and data.containsKey('createUserIdIncrement')) or (colPickMode==1 and !data.containsKey('createUserIdIncrement'))">
a.createUserId=ifnull(a.createUserId,0) + #{data.createUserIdIncrement},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 批量更新 -->
<update id="updateBatch" parameterType="paramDto">
update mortals_xhx_user_pwd_record as a
<trim prefix="set" suffixOverrides=",">
<trim prefix="userId=(case" suffix="ELSE userId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('userId')) or (colPickMode==1 and !item.containsKey('userId'))">
when a.id=#{item.id} then #{item.userId}
</when>
<when test="(colPickMode==0 and item.containsKey('userIdIncrement')) or (colPickMode==1 and !item.containsKey('userIdIncrement'))">
when a.id=#{item.id} then ifnull(a.userId,0) + #{item.userIdIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="loginName=(case" suffix="ELSE loginName end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('loginName')) or (colPickMode==1 and !item.containsKey('loginName'))">
when a.id=#{item.id} then #{item.loginName}
</if>
</foreach>
</trim>
<trim prefix="loginPwd=(case" suffix="ELSE loginPwd end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('loginPwd')) or (colPickMode==1 and !item.containsKey('loginPwd'))">
when a.id=#{item.id} then #{item.loginPwd}
</if>
</foreach>
</trim>
<trim prefix="createTime=(case" suffix="ELSE createTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
when a.id=#{item.id} then #{item.createTime}
</if>
</foreach>
</trim>
<trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
when a.id=#{item.id} then #{item.createUserId}
</when>
<when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
</when>
</choose>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="UserPwdRecordEntity-Map">
select <include refid="_columns"/>
from mortals_xhx_user_pwd_record as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_xhx_user_pwd_record as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_xhx_user_pwd_record where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据主健列表删除一批,针对单一主健有效 -->
<delete id="deleteByKeyList">
delete from mortals_xhx_user_pwd_record where id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据对象列表删除一批,针对单一主健有效 -->
<delete id="deleteByEntityList">
delete from mortals_xhx_user_pwd_record where id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item.id}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_xhx_user_pwd_record as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="UserPwdRecordEntity-Map">
select <include refid="_columns"/>
from mortals_xhx_user_pwd_record as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_xhx_user_pwd_record as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<!-- 条件映射-普通条件 -->
<include refid="_condition_param_">
<property name="_conditionParam_" value="condition"/>
<property name="_conditionType_" value="and"/>
</include>
<!-- 条件映射-集合之间使用AND,集合中元素使用OR-(list[0].1 or list[0].2) and (list[1].3 or list[1].4) -->
<if test="condition.containsKey('andConditionList') and !condition.andConditionList.isEmpty()">
and
<foreach collection="condition.andConditionList" open="(" close=")" index="index" item="andCondition" separator=" and ">
<trim prefixOverrides="or" prefix="(" suffix=")">
<include refid="_condition_param_">
<property name="_conditionParam_" value="andCondition"/>
<property name="_conditionType_" value="or"/>
</include>
</trim>
</foreach>
</if>
<!-- 条件映射-集合之间使用OR,集合中元素使用AND-(list[0].1 and list[0].2) or (list[1].3 and list[1].4) -->
<if test="condition.containsKey('orConditionList') and !condition.orConditionList.isEmpty()">
and
<foreach collection="condition.orConditionList" open="(" close=")" index="index" item="orCondition" separator=" or ">
<trim prefixOverrides="and" prefix="(" suffix=")">
<include refid="_condition_param_">
<property name="_conditionParam_" value="orCondition"/>
<property name="_conditionType_" value="and"/>
</include>
</trim>
</foreach>
</if>
</if>
</sql>
<!-- 条件映射-代参数 -->
<sql id="_condition_param_">
<bind name="conditionParamRef" value="${_conditionParam_}"/>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null">
${_conditionType_} a.id=#{${_conditionParam_}.id}
</if>
</if>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null ">
${_conditionType_} a.id = #{${_conditionParam_}.id}
</if>
<if test="conditionParamRef.id == null">
${_conditionType_} a.id is null
</if>
</if>
<if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
${_conditionType_} a.id in
<foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idNotList') and conditionParamRef.idNotList.size() > 0">
${_conditionType_} a.id not in
<foreach collection="conditionParamRef.idNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
</if>
<if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
</if>
<if test="conditionParamRef.containsKey('userId')">
<if test="conditionParamRef.userId != null ">
${_conditionType_} a.userId = #{${_conditionParam_}.userId}
</if>
<if test="conditionParamRef.userId == null">
${_conditionType_} a.userId is null
</if>
</if>
<if test="conditionParamRef.containsKey('userIdList') and conditionParamRef.userIdList.size() > 0">
${_conditionType_} a.userId in
<foreach collection="conditionParamRef.userIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('userIdNotList') and conditionParamRef.userIdNotList.size() > 0">
${_conditionType_} a.userId not in
<foreach collection="conditionParamRef.userIdNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('userIdStart') and conditionParamRef.userIdStart != null">
${_conditionType_} a.userId <![CDATA[ >= ]]> #{${_conditionParam_}.userIdStart}
</if>
<if test="conditionParamRef.containsKey('userIdEnd') and conditionParamRef.userIdEnd != null">
${_conditionType_} a.userId <![CDATA[ <= ]]> #{${_conditionParam_}.userIdEnd}
</if>
<if test="conditionParamRef.containsKey('loginName')">
<if test="conditionParamRef.loginName != null and conditionParamRef.loginName != ''">
${_conditionType_} a.loginName like #{${_conditionParam_}.loginName}
</if>
<if test="conditionParamRef.loginName == null">
${_conditionType_} a.loginName is null
</if>
</if>
<if test="conditionParamRef.containsKey('loginNameList') and conditionParamRef.loginNameList.size() > 0">
${_conditionType_} a.loginName in
<foreach collection="conditionParamRef.loginNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginNameNotList') and conditionParamRef.loginNameNotList.size() > 0">
${_conditionType_} a.loginName not in
<foreach collection="conditionParamRef.loginNameNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginPwd')">
<if test="conditionParamRef.loginPwd != null and conditionParamRef.loginPwd != ''">
${_conditionType_} a.loginPwd like #{${_conditionParam_}.loginPwd}
</if>
<if test="conditionParamRef.loginPwd == null">
${_conditionType_} a.loginPwd is null
</if>
</if>
<if test="conditionParamRef.containsKey('loginPwdList') and conditionParamRef.loginPwdList.size() > 0">
${_conditionType_} a.loginPwd in
<foreach collection="conditionParamRef.loginPwdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginPwdNotList') and conditionParamRef.loginPwdNotList.size() > 0">
${_conditionType_} a.loginPwd not in
<foreach collection="conditionParamRef.loginPwdNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createTime')">
<if test="conditionParamRef.createTime != null ">
${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
</if>
<if test="conditionParamRef.createTime == null">
${_conditionType_} a.createTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createUserId')">
<if test="conditionParamRef.createUserId != null ">
${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
</if>
<if test="conditionParamRef.createUserId == null">
${_conditionType_} a.createUserId is null
</if>
</if>
<if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
${_conditionType_} a.createUserId in
<foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createUserIdNotList') and conditionParamRef.createUserIdNotList.size() > 0">
${_conditionType_} a.createUserId not in
<foreach collection="conditionParamRef.createUserIdNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
</if>
<if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('userId')">
a.userId
<if test='orderCol.userId != null and "DESC".equalsIgnoreCase(orderCol.userId)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('loginName')">
a.loginName
<if test='orderCol.loginName != null and "DESC".equalsIgnoreCase(orderCol.loginName)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('loginPwd')">
a.loginPwd
<if test='orderCol.loginPwd != null and "DESC".equalsIgnoreCase(orderCol.loginPwd)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createUserId')">
a.createUserId
<if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
......@@ -28,6 +28,11 @@
<result property="lastLoginAddress" column="lastLoginAddress" />
<result property="lastModPwdTime" column="lastModPwdTime" />
<result property="lastModPwdAddr" column="lastModPwdAddr" />
<result property="saltKey" column="saltKey" />
<result property="lastUpdatePwdTime" column="lastUpdatePwdTime" />
<result property="errorCount" column="errorCount" />
<result property="loginLock" column="loginLock" />
<result property="lockTime" column="lockTime" />
</resultMap>
<!-- 表所有列 -->
......@@ -102,23 +107,38 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('lastModPwdAddr') or colPickMode == 1 and data.containsKey('lastModPwdAddr')))">
a.lastModPwdAddr as lastModPwdAddr,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('saltKey') or colPickMode == 1 and data.containsKey('saltKey')))">
a.saltKey,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('lastUpdatePwdTime') or colPickMode == 1 and data.containsKey('lastUpdatePwdTime')))">
a.lastUpdatePwdTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('errorCount') or colPickMode == 1 and data.containsKey('errorCount')))">
a.errorCount,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginLock') or colPickMode == 1 and data.containsKey('loginLock')))">
a.loginLock,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('lockTime') or colPickMode == 1 and data.containsKey('lockTime')))">
a.lockTime,
</if>
</trim>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="UserEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_user
(loginName,loginPwd,loginPwd1,loginPwd2,loginPwd3,loginLimitAddress,realName,mobile,phone,email,qq,userType,siteId,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,lastModPwdTime,lastModPwdAddr)
(loginName,loginPwd,loginPwd1,loginPwd2,loginPwd3,loginLimitAddress,realName,mobile,phone,email,qq,userType,siteId,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,lastModPwdTime,lastModPwdAddr,saltKey,lastUpdatePwdTime,errorCount,loginLock,lockTime)
VALUES
(#{loginName},#{loginPwd},#{loginPwd1},#{loginPwd2},#{loginPwd3},#{loginLimitAddress},#{realName},#{mobile},#{phone},#{email},#{qq},#{userType},#{siteId},#{status},#{customerId},#{createTime},#{createUserId},#{createUserName},#{lastLoginTime},#{lastLoginAddress},#{lastModPwdTime},#{lastModPwdAddr})
(#{loginName},#{loginPwd},#{loginPwd1},#{loginPwd2},#{loginPwd3},#{loginLimitAddress},#{realName},#{mobile},#{phone},#{email},#{qq},#{userType},#{siteId},#{status},#{customerId},#{createTime},#{createUserId},#{createUserName},#{lastLoginTime},#{lastLoginAddress},#{lastModPwdTime},#{lastModPwdAddr},#{saltKey},#{lastUpdatePwdTime},#{errorCount},#{loginLock},#{lockTime})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_user
(loginName,loginPwd,loginPwd1,loginPwd2,loginPwd3,loginLimitAddress,realName,mobile,phone,email,qq,userType,siteId,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,lastModPwdTime,lastModPwdAddr)
(loginName,loginPwd,loginPwd1,loginPwd2,loginPwd3,loginLimitAddress,realName,mobile,phone,email,qq,userType,siteId,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,lastModPwdTime,lastModPwdAddr,saltKey,lastUpdatePwdTime,errorCount,loginLock,lockTime)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.loginName},#{item.loginPwd},#{item.loginPwd1},#{item.loginPwd2},#{item.loginPwd3},#{item.loginLimitAddress},#{item.realName},#{item.mobile},#{item.phone},#{item.email},#{item.qq},#{item.userType},#{item.siteId},#{item.status},#{item.customerId},#{item.createTime},#{item.createUserId},#{item.createUserName},#{item.lastLoginTime},#{item.lastLoginAddress},#{item.lastModPwdTime},#{item.lastModPwdAddr})
(#{item.loginName},#{item.loginPwd},#{item.loginPwd1},#{item.loginPwd2},#{item.loginPwd3},#{item.loginLimitAddress},#{item.realName},#{item.mobile},#{item.phone},#{item.email},#{item.qq},#{item.userType},#{item.siteId},#{item.status},#{item.customerId},#{item.createTime},#{item.createUserId},#{item.createUserName},#{item.lastLoginTime},#{item.lastLoginAddress},#{item.lastModPwdTime},#{item.lastModPwdAddr},#{item.saltKey},#{item.lastUpdatePwdTime},#{item.errorCount},#{item.loginLock},#{item.lockTime})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
......@@ -207,6 +227,27 @@
<if test="(colPickMode==0 and data.containsKey('lastModPwdAddr')) or (colPickMode==1 and !data.containsKey('lastModPwdAddr'))">
a.lastModPwdAddr=#{data.lastModPwdAddr},
</if>
<if test="(colPickMode==0 and data.containsKey('saltKey')) or (colPickMode==1 and !data.containsKey('saltKey'))">
a.saltKey=#{data.saltKey},
</if>
<if test="(colPickMode==0 and data.containsKey('lastUpdatePwdTime')) or (colPickMode==1 and !data.containsKey('lastUpdatePwdTime'))">
a.lastUpdatePwdTime=#{data.lastUpdatePwdTime},
</if>
<if test="(colPickMode==0 and data.containsKey('errorCount')) or (colPickMode==1 and !data.containsKey('errorCount'))">
a.errorCount=#{data.errorCount},
</if>
<if test="(colPickMode==0 and data.containsKey('errorCountIncrement')) or (colPickMode==1 and !data.containsKey('errorCountIncrement'))">
a.errorCount=ifnull(a.errorCount,0) + #{data.errorCountIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('loginLock')) or (colPickMode==1 and !data.containsKey('loginLock'))">
a.loginLock=#{data.loginLock},
</if>
<if test="(colPickMode==0 and data.containsKey('loginLockIncrement')) or (colPickMode==1 and !data.containsKey('loginLockIncrement'))">
a.loginLock=ifnull(a.loginLock,0) + #{data.loginLockIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('lockTime')) or (colPickMode==1 and !data.containsKey('lockTime'))">
a.lockTime=#{data.lockTime},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
......@@ -421,6 +462,51 @@
</if>
</foreach>
</trim>
<trim prefix="saltKey=(case" suffix="ELSE saltKey end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('saltKey')) or (colPickMode==1 and !item.containsKey('saltKey'))">
when a.id=#{item.id} then #{item.saltKey}
</if>
</foreach>
</trim>
<trim prefix="lastUpdatePwdTime=(case" suffix="ELSE lastUpdatePwdTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('lastUpdatePwdTime')) or (colPickMode==1 and !item.containsKey('lastUpdatePwdTime'))">
when a.id=#{item.id} then #{item.lastUpdatePwdTime}
</if>
</foreach>
</trim>
<trim prefix="errorCount=(case" suffix="ELSE errorCount end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('errorCount')) or (colPickMode==1 and !item.containsKey('errorCount'))">
when a.id=#{item.id} then #{item.errorCount}
</when>
<when test="(colPickMode==0 and item.containsKey('errorCountIncrement')) or (colPickMode==1 and !item.containsKey('errorCountIncrement'))">
when a.id=#{item.id} then ifnull(a.errorCount,0) + #{item.errorCountIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="loginLock=(case" suffix="ELSE loginLock end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('loginLock')) or (colPickMode==1 and !item.containsKey('loginLock'))">
when a.id=#{item.id} then #{item.loginLock}
</when>
<when test="(colPickMode==0 and item.containsKey('loginLockIncrement')) or (colPickMode==1 and !item.containsKey('loginLockIncrement'))">
when a.id=#{item.id} then ifnull(a.loginLock,0) + #{item.loginLockIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="lockTime=(case" suffix="ELSE lockTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('lockTime')) or (colPickMode==1 and !item.containsKey('lockTime'))">
when a.id=#{item.id} then #{item.lockTime}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
......@@ -901,6 +987,110 @@
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('saltKey')">
<if test="conditionParamRef.saltKey != null and conditionParamRef.saltKey != ''">
${_conditionType_} a.saltKey like #{${_conditionParam_}.saltKey}
</if>
<if test="conditionParamRef.saltKey == null">
${_conditionType_} a.saltKey is null
</if>
</if>
<if test="conditionParamRef.containsKey('saltKeyList')">
${_conditionType_} a.saltKey in
<foreach collection="conditionParamRef.saltKeyList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('saltKeyNotList')">
${_conditionType_} a.saltKey not in
<foreach collection="conditionParamRef.saltKeyNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('lastUpdatePwdTime')">
<if test="conditionParamRef.lastUpdatePwdTime != null ">
${_conditionType_} a.lastUpdatePwdTime = #{${_conditionParam_}.lastUpdatePwdTime}
</if>
<if test="conditionParamRef.lastUpdatePwdTime == null">
${_conditionType_} a.lastUpdatePwdTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('lastUpdatePwdTimeStart') and conditionParamRef.lastUpdatePwdTimeStart != null and conditionParamRef.lastUpdatePwdTimeStart!=''">
${_conditionType_} a.lastUpdatePwdTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lastUpdatePwdTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('lastUpdatePwdTimeEnd') and conditionParamRef.lastUpdatePwdTimeEnd != null and conditionParamRef.lastUpdatePwdTimeEnd!=''">
${_conditionType_} a.lastUpdatePwdTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lastUpdatePwdTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('errorCount')">
<if test="conditionParamRef.errorCount != null ">
${_conditionType_} a.errorCount = #{${_conditionParam_}.errorCount}
</if>
<if test="conditionParamRef.errorCount == null">
${_conditionType_} a.errorCount is null
</if>
</if>
<if test="conditionParamRef.containsKey('errorCountList')">
${_conditionType_} a.errorCount in
<foreach collection="conditionParamRef.errorCountList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('errorCountNotList')">
${_conditionType_} a.errorCount not in
<foreach collection="conditionParamRef.errorCountNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('errorCountStart') and conditionParamRef.errorCountStart != null">
${_conditionType_} a.errorCount <![CDATA[ >= ]]> #{${_conditionParam_}.errorCountStart}
</if>
<if test="conditionParamRef.containsKey('errorCountEnd') and conditionParamRef.errorCountEnd != null">
${_conditionType_} a.errorCount <![CDATA[ <= ]]> #{${_conditionParam_}.errorCountEnd}
</if>
<if test="conditionParamRef.containsKey('loginLock')">
<if test="conditionParamRef.loginLock != null ">
${_conditionType_} a.loginLock = #{${_conditionParam_}.loginLock}
</if>
<if test="conditionParamRef.loginLock == null">
${_conditionType_} a.loginLock is null
</if>
</if>
<if test="conditionParamRef.containsKey('loginLockList')">
${_conditionType_} a.loginLock in
<foreach collection="conditionParamRef.loginLockList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginLockNotList')">
${_conditionType_} a.loginLock not in
<foreach collection="conditionParamRef.loginLockNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginLockStart') and conditionParamRef.loginLockStart != null">
${_conditionType_} a.loginLock <![CDATA[ >= ]]> #{${_conditionParam_}.loginLockStart}
</if>
<if test="conditionParamRef.containsKey('loginLockEnd') and conditionParamRef.loginLockEnd != null">
${_conditionType_} a.loginLock <![CDATA[ <= ]]> #{${_conditionParam_}.loginLockEnd}
</if>
<if test="conditionParamRef.containsKey('lockTime')">
<if test="conditionParamRef.lockTime != null ">
${_conditionType_} a.lockTime = #{${_conditionParam_}.lockTime}
</if>
<if test="conditionParamRef.lockTime == null">
${_conditionType_} a.lockTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('lockTimeStart') and conditionParamRef.lockTimeStart != null and conditionParamRef.lockTimeStart!=''">
${_conditionType_} a.lockTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lockTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('lockTimeEnd') and conditionParamRef.lockTimeEnd != null and conditionParamRef.lockTimeEnd!=''">
${_conditionType_} a.lockTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lockTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
......@@ -1029,6 +1219,31 @@
<if test='orderCol.lastModPwdAddr != null and "DESC".equalsIgnoreCase(orderCol.lastModPwdAddr)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('saltKey')">
a.saltKey
<if test='orderCol.saltKey != null and "DESC".equalsIgnoreCase(orderCol.saltKey)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('lastUpdatePwdTime')">
a.lastUpdatePwdTime
<if test='orderCol.lastUpdatePwdTime != null and "DESC".equalsIgnoreCase(orderCol.lastUpdatePwdTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('errorCount')">
a.errorCount
<if test='orderCol.errorCount != null and "DESC".equalsIgnoreCase(orderCol.errorCount)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('loginLock')">
a.loginLock
<if test='orderCol.loginLock != null and "DESC".equalsIgnoreCase(orderCol.loginLock)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('lockTime')">
a.lockTime
<if test='orderCol.lockTime != null and "DESC".equalsIgnoreCase(orderCol.lockTime)'>DESC</if>
,
</if>
</trim>
</if>
</sql>
......
......@@ -26,6 +26,11 @@
<result property="lastLoginTime" column="lastLoginTime" />
<result property="lastLoginAddress" column="lastLoginAddress" />
<result property="openId" column="openId" />
<result property="saltKey" column="saltKey" />
<result property="lastUpdatePwdTime" column="lastUpdatePwdTime" />
<result property="errorCount" column="errorCount" />
<result property="loginLock" column="loginLock" />
<result property="lockTime" column="lockTime" />
</resultMap>
......@@ -96,23 +101,38 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('openId') or colPickMode == 1 and data.containsKey('openId')))">
a.openId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('saltKey') or colPickMode == 1 and data.containsKey('saltKey')))">
a.saltKey,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('lastUpdatePwdTime') or colPickMode == 1 and data.containsKey('lastUpdatePwdTime')))">
a.lastUpdatePwdTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('errorCount') or colPickMode == 1 and data.containsKey('errorCount')))">
a.errorCount,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginLock') or colPickMode == 1 and data.containsKey('loginLock')))">
a.loginLock,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('lockTime') or colPickMode == 1 and data.containsKey('lockTime')))">
a.lockTime,
</if>
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="CustomerEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_customer
(loginName,password,memberLevel,custName,organization,contactTelphone,enterpriseConsultant,siteId,sex,mailbox,job,avatar,customerSrc,status,createUserId,createTime,updateTime,lastLoginTime,lastLoginAddress,openId)
(loginName,password,memberLevel,custName,organization,contactTelphone,enterpriseConsultant,siteId,sex,mailbox,job,avatar,customerSrc,status,createUserId,createTime,updateTime,lastLoginTime,lastLoginAddress,openId,saltKey,lastUpdatePwdTime,errorCount,loginLock,lockTime)
VALUES
(#{loginName},#{password},#{memberLevel},#{custName},#{organization},#{contactTelphone},#{enterpriseConsultant},#{siteId},#{sex},#{mailbox},#{job},#{avatar},#{customerSrc},#{status},#{createUserId},#{createTime},#{updateTime},#{lastLoginTime},#{lastLoginAddress},#{openId})
(#{loginName},#{password},#{memberLevel},#{custName},#{organization},#{contactTelphone},#{enterpriseConsultant},#{siteId},#{sex},#{mailbox},#{job},#{avatar},#{customerSrc},#{status},#{createUserId},#{createTime},#{updateTime},#{lastLoginTime},#{lastLoginAddress},#{openId},#{saltKey},#{lastUpdatePwdTime},#{errorCount},#{loginLock},#{lockTime})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_customer
(loginName,password,memberLevel,custName,organization,contactTelphone,enterpriseConsultant,siteId,sex,mailbox,job,avatar,customerSrc,status,createUserId,createTime,updateTime,lastLoginTime,lastLoginAddress,openId)
(loginName,password,memberLevel,custName,organization,contactTelphone,enterpriseConsultant,siteId,sex,mailbox,job,avatar,customerSrc,status,createUserId,createTime,updateTime,lastLoginTime,lastLoginAddress,openId,saltKey,lastUpdatePwdTime,errorCount,loginLock,lockTime)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.loginName},#{item.password},#{item.memberLevel},#{item.custName},#{item.organization},#{item.contactTelphone},#{item.enterpriseConsultant},#{item.siteId},#{item.sex},#{item.mailbox},#{item.job},#{item.avatar},#{item.customerSrc},#{item.status},#{item.createUserId},#{item.createTime},#{item.updateTime},#{item.lastLoginTime},#{item.lastLoginAddress},#{item.openId})
(#{item.loginName},#{item.password},#{item.memberLevel},#{item.custName},#{item.organization},#{item.contactTelphone},#{item.enterpriseConsultant},#{item.siteId},#{item.sex},#{item.mailbox},#{item.job},#{item.avatar},#{item.customerSrc},#{item.status},#{item.createUserId},#{item.createTime},#{item.updateTime},#{item.lastLoginTime},#{item.lastLoginAddress},#{item.openId},#{item.saltKey},#{item.lastUpdatePwdTime},#{item.errorCount},#{item.loginLock},#{item.lockTime})
</foreach>
</insert>
......@@ -200,6 +220,27 @@
<if test="(colPickMode==0 and data.containsKey('openId')) or (colPickMode==1 and !data.containsKey('openId'))">
a.openId=#{data.openId},
</if>
<if test="(colPickMode==0 and data.containsKey('saltKey')) or (colPickMode==1 and !data.containsKey('saltKey'))">
a.saltKey=#{data.saltKey},
</if>
<if test="(colPickMode==0 and data.containsKey('lastUpdatePwdTime')) or (colPickMode==1 and !data.containsKey('lastUpdatePwdTime'))">
a.lastUpdatePwdTime=#{data.lastUpdatePwdTime},
</if>
<if test="(colPickMode==0 and data.containsKey('errorCount')) or (colPickMode==1 and !data.containsKey('errorCount'))">
a.errorCount=#{data.errorCount},
</if>
<if test="(colPickMode==0 and data.containsKey('errorCountIncrement')) or (colPickMode==1 and !data.containsKey('errorCountIncrement'))">
a.errorCount=ifnull(a.errorCount,0) + #{data.errorCountIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('loginLock')) or (colPickMode==1 and !data.containsKey('loginLock'))">
a.loginLock=#{data.loginLock},
</if>
<if test="(colPickMode==0 and data.containsKey('loginLockIncrement')) or (colPickMode==1 and !data.containsKey('loginLockIncrement'))">
a.loginLock=ifnull(a.loginLock,0) + #{data.loginLockIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('lockTime')) or (colPickMode==1 and !data.containsKey('lockTime'))">
a.lockTime=#{data.lockTime},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
......@@ -382,6 +423,51 @@
</if>
</foreach>
</trim>
<trim prefix="saltKey=(case" suffix="ELSE saltKey end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('saltKey')) or (colPickMode==1 and !item.containsKey('saltKey'))">
when a.id=#{item.id} then #{item.saltKey}
</if>
</foreach>
</trim>
<trim prefix="lastUpdatePwdTime=(case" suffix="ELSE lastUpdatePwdTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('lastUpdatePwdTime')) or (colPickMode==1 and !item.containsKey('lastUpdatePwdTime'))">
when a.id=#{item.id} then #{item.lastUpdatePwdTime}
</if>
</foreach>
</trim>
<trim prefix="errorCount=(case" suffix="ELSE errorCount end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('errorCount')) or (colPickMode==1 and !item.containsKey('errorCount'))">
when a.id=#{item.id} then #{item.errorCount}
</when>
<when test="(colPickMode==0 and item.containsKey('errorCountIncrement')) or (colPickMode==1 and !item.containsKey('errorCountIncrement'))">
when a.id=#{item.id} then ifnull(a.errorCount,0) + #{item.errorCountIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="loginLock=(case" suffix="ELSE loginLock end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('loginLock')) or (colPickMode==1 and !item.containsKey('loginLock'))">
when a.id=#{item.id} then #{item.loginLock}
</when>
<when test="(colPickMode==0 and item.containsKey('loginLockIncrement')) or (colPickMode==1 and !item.containsKey('loginLockIncrement'))">
when a.id=#{item.id} then ifnull(a.loginLock,0) + #{item.loginLockIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="lockTime=(case" suffix="ELSE lockTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('lockTime')) or (colPickMode==1 and !item.containsKey('lockTime'))">
when a.id=#{item.id} then #{item.lockTime}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
......@@ -963,6 +1049,110 @@
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('saltKey')">
<if test="conditionParamRef.saltKey != null and conditionParamRef.saltKey != ''">
${_conditionType_} a.saltKey like #{${_conditionParam_}.saltKey}
</if>
<if test="conditionParamRef.saltKey == null">
${_conditionType_} a.saltKey is null
</if>
</if>
<if test="conditionParamRef.containsKey('saltKeyList')">
${_conditionType_} a.saltKey in
<foreach collection="conditionParamRef.saltKeyList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('saltKeyNotList')">
${_conditionType_} a.saltKey not in
<foreach collection="conditionParamRef.saltKeyNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('lastUpdatePwdTime')">
<if test="conditionParamRef.lastUpdatePwdTime != null ">
${_conditionType_} a.lastUpdatePwdTime = #{${_conditionParam_}.lastUpdatePwdTime}
</if>
<if test="conditionParamRef.lastUpdatePwdTime == null">
${_conditionType_} a.lastUpdatePwdTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('lastUpdatePwdTimeStart') and conditionParamRef.lastUpdatePwdTimeStart != null and conditionParamRef.lastUpdatePwdTimeStart!=''">
${_conditionType_} a.lastUpdatePwdTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lastUpdatePwdTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('lastUpdatePwdTimeEnd') and conditionParamRef.lastUpdatePwdTimeEnd != null and conditionParamRef.lastUpdatePwdTimeEnd!=''">
${_conditionType_} a.lastUpdatePwdTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lastUpdatePwdTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('errorCount')">
<if test="conditionParamRef.errorCount != null ">
${_conditionType_} a.errorCount = #{${_conditionParam_}.errorCount}
</if>
<if test="conditionParamRef.errorCount == null">
${_conditionType_} a.errorCount is null
</if>
</if>
<if test="conditionParamRef.containsKey('errorCountList')">
${_conditionType_} a.errorCount in
<foreach collection="conditionParamRef.errorCountList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('errorCountNotList')">
${_conditionType_} a.errorCount not in
<foreach collection="conditionParamRef.errorCountNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('errorCountStart') and conditionParamRef.errorCountStart != null">
${_conditionType_} a.errorCount <![CDATA[ >= ]]> #{${_conditionParam_}.errorCountStart}
</if>
<if test="conditionParamRef.containsKey('errorCountEnd') and conditionParamRef.errorCountEnd != null">
${_conditionType_} a.errorCount <![CDATA[ <= ]]> #{${_conditionParam_}.errorCountEnd}
</if>
<if test="conditionParamRef.containsKey('loginLock')">
<if test="conditionParamRef.loginLock != null ">
${_conditionType_} a.loginLock = #{${_conditionParam_}.loginLock}
</if>
<if test="conditionParamRef.loginLock == null">
${_conditionType_} a.loginLock is null
</if>
</if>
<if test="conditionParamRef.containsKey('loginLockList')">
${_conditionType_} a.loginLock in
<foreach collection="conditionParamRef.loginLockList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginLockNotList')">
${_conditionType_} a.loginLock not in
<foreach collection="conditionParamRef.loginLockNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginLockStart') and conditionParamRef.loginLockStart != null">
${_conditionType_} a.loginLock <![CDATA[ >= ]]> #{${_conditionParam_}.loginLockStart}
</if>
<if test="conditionParamRef.containsKey('loginLockEnd') and conditionParamRef.loginLockEnd != null">
${_conditionType_} a.loginLock <![CDATA[ <= ]]> #{${_conditionParam_}.loginLockEnd}
</if>
<if test="conditionParamRef.containsKey('lockTime')">
<if test="conditionParamRef.lockTime != null ">
${_conditionType_} a.lockTime = #{${_conditionParam_}.lockTime}
</if>
<if test="conditionParamRef.lockTime == null">
${_conditionType_} a.lockTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('lockTimeStart') and conditionParamRef.lockTimeStart != null and conditionParamRef.lockTimeStart!=''">
${_conditionType_} a.lockTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lockTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('lockTimeEnd') and conditionParamRef.lockTimeEnd != null and conditionParamRef.lockTimeEnd!=''">
${_conditionType_} a.lockTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.lockTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
......@@ -1081,6 +1271,31 @@
<if test='orderCol.openId != null and "DESC".equalsIgnoreCase(orderCol.openId)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('saltKey')">
a.saltKey
<if test='orderCol.saltKey != null and "DESC".equalsIgnoreCase(orderCol.saltKey)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('lastUpdatePwdTime')">
a.lastUpdatePwdTime
<if test='orderCol.lastUpdatePwdTime != null and "DESC".equalsIgnoreCase(orderCol.lastUpdatePwdTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('errorCount')">
a.errorCount
<if test='orderCol.errorCount != null and "DESC".equalsIgnoreCase(orderCol.errorCount)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('loginLock')">
a.loginLock
<if test='orderCol.loginLock != null and "DESC".equalsIgnoreCase(orderCol.loginLock)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('lockTime')">
a.lockTime
<if test='orderCol.lockTime != null and "DESC".equalsIgnoreCase(orderCol.lockTime)'>DESC</if>
,
</if>
</trim>
</if>
</sql>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.customer.dao.ibatis.CustomerPwdRecordDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="CustomerPwdRecordEntity" id="CustomerPwdRecordEntity-Map">
<id property="id" column="id" />
<result property="userId" column="userId" />
<result property="loginName" column="loginName" />
<result property="loginPwd" column="loginPwd" />
<result property="createTime" column="createTime" />
<result property="createUserId" column="createUserId" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('id') or colPickMode == 1 and data.containsKey('id')))">
a.id,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('userId') or colPickMode == 1 and data.containsKey('userId')))">
a.userId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginName') or colPickMode == 1 and data.containsKey('loginName')))">
a.loginName,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('loginPwd') or colPickMode == 1 and data.containsKey('loginPwd')))">
a.loginPwd,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createTime') or colPickMode == 1 and data.containsKey('createTime')))">
a.createTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('createUserId') or colPickMode == 1 and data.containsKey('createUserId')))">
a.createUserId,
</if>
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="CustomerPwdRecordEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_customer_pwd_record
(userId,loginName,loginPwd,createTime,createUserId)
VALUES
(#{userId},#{loginName},#{loginPwd},#{createTime},#{createUserId})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_customer_pwd_record
(userId,loginName,loginPwd,createTime,createUserId)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.userId},#{item.loginName},#{item.loginPwd},#{item.createTime},#{item.createUserId})
</foreach>
</insert>
<!-- 根据ParamDto更新 -->
<update id="update" parameterType="paramDto">
update mortals_xhx_customer_pwd_record as a
set
<trim suffixOverrides="," suffix="">
<if test="(colPickMode==0 and data.containsKey('userId')) or (colPickMode==1 and !data.containsKey('userId'))">
a.userId=#{data.userId},
</if>
<if test="(colPickMode==0 and data.containsKey('userIdIncrement')) or (colPickMode==1 and !data.containsKey('userIdIncrement'))">
a.userId=ifnull(a.userId,0) + #{data.userIdIncrement},
</if>
<if test="(colPickMode==0 and data.containsKey('loginName')) or (colPickMode==1 and !data.containsKey('loginName'))">
a.loginName=#{data.loginName},
</if>
<if test="(colPickMode==0 and data.containsKey('loginPwd')) or (colPickMode==1 and !data.containsKey('loginPwd'))">
a.loginPwd=#{data.loginPwd},
</if>
<if test="(colPickMode==0 and data.containsKey('createTime')) or (colPickMode==1 and !data.containsKey('createTime'))">
a.createTime=#{data.createTime},
</if>
<if test="(colPickMode==0 and data.containsKey('createUserId')) or (colPickMode==1 and !data.containsKey('createUserId'))">
a.createUserId=#{data.createUserId},
</if>
<if test="(colPickMode==0 and data.containsKey('createUserIdIncrement')) or (colPickMode==1 and !data.containsKey('createUserIdIncrement'))">
a.createUserId=ifnull(a.createUserId,0) + #{data.createUserIdIncrement},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</update>
<!-- 批量更新 -->
<update id="updateBatch" parameterType="paramDto">
update mortals_xhx_customer_pwd_record as a
<trim prefix="set" suffixOverrides=",">
<trim prefix="userId=(case" suffix="ELSE userId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('userId')) or (colPickMode==1 and !item.containsKey('userId'))">
when a.id=#{item.id} then #{item.userId}
</when>
<when test="(colPickMode==0 and item.containsKey('userIdIncrement')) or (colPickMode==1 and !item.containsKey('userIdIncrement'))">
when a.id=#{item.id} then ifnull(a.userId,0) + #{item.userIdIncrement}
</when>
</choose>
</foreach>
</trim>
<trim prefix="loginName=(case" suffix="ELSE loginName end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('loginName')) or (colPickMode==1 and !item.containsKey('loginName'))">
when a.id=#{item.id} then #{item.loginName}
</if>
</foreach>
</trim>
<trim prefix="loginPwd=(case" suffix="ELSE loginPwd end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('loginPwd')) or (colPickMode==1 and !item.containsKey('loginPwd'))">
when a.id=#{item.id} then #{item.loginPwd}
</if>
</foreach>
</trim>
<trim prefix="createTime=(case" suffix="ELSE createTime end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('createTime')) or (colPickMode==1 and !item.containsKey('createTime'))">
when a.id=#{item.id} then #{item.createTime}
</if>
</foreach>
</trim>
<trim prefix="createUserId=(case" suffix="ELSE createUserId end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<choose>
<when test="(colPickMode==0 and item.containsKey('createUserId')) or (colPickMode==1 and !item.containsKey('createUserId'))">
when a.id=#{item.id} then #{item.createUserId}
</when>
<when test="(colPickMode==0 and item.containsKey('createUserIdIncrement')) or (colPickMode==1 and !item.containsKey('createUserIdIncrement'))">
when a.id=#{item.id} then ifnull(a.createUserId,0) + #{item.createUserIdIncrement}
</when>
</choose>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
<!-- 根据主健查询 -->
<select id="getByKey" parameterType="paramDto" resultMap="CustomerPwdRecordEntity-Map">
select <include refid="_columns"/>
from mortals_xhx_customer_pwd_record as a
where a.id=#{condition.id}
</select>
<!-- 根据主健删除 -->
<delete id="deleteByKey" parameterType="paramDto">
delete a.* from mortals_xhx_customer_pwd_record as a where a.id=#{condition.id}
</delete>
<!-- 根据主健删除一批,针对单一主健有效 -->
<delete id="deleteByKeys">
delete from mortals_xhx_customer_pwd_record where id in
<foreach collection="array" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据主健列表删除一批,针对单一主健有效 -->
<delete id="deleteByKeyList">
delete from mortals_xhx_customer_pwd_record where id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<!-- 根据对象列表删除一批,针对单一主健有效 -->
<delete id="deleteByEntityList">
delete from mortals_xhx_customer_pwd_record where id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item.id}
</foreach>
</delete>
<!-- 根据paramDto删除一批 -->
<delete id="deleteByMap" parameterType="paramDto">
delete a.* from mortals_xhx_customer_pwd_record as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</delete>
<!-- 获取列表 -->
<select id="getList" parameterType="paramDto" resultMap="CustomerPwdRecordEntity-Map">
select <include refid="_columns"/>
from mortals_xhx_customer_pwd_record as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
<include refid="_orderCols_"/>
</select>
<!-- 获取 -->
<select id="getListCount" parameterType="paramDto" resultType="int">
select count(1)
from mortals_xhx_customer_pwd_record as a
<trim suffixOverrides="where" suffix="">
where
<trim prefixOverrides="and" prefix="">
<include refid="_condition_"/>
</trim>
</trim>
</select>
<!-- 条件映射 -->
<sql id="_condition_">
<if test="condition != null and !condition.isEmpty()">
<!-- 条件映射-普通条件 -->
<include refid="_condition_param_">
<property name="_conditionParam_" value="condition"/>
<property name="_conditionType_" value="and"/>
</include>
<!-- 条件映射-集合之间使用AND,集合中元素使用OR-(list[0].1 or list[0].2) and (list[1].3 or list[1].4) -->
<if test="condition.containsKey('andConditionList') and !condition.andConditionList.isEmpty()">
and
<foreach collection="condition.andConditionList" open="(" close=")" index="index" item="andCondition" separator=" and ">
<trim prefixOverrides="or" prefix="(" suffix=")">
<include refid="_condition_param_">
<property name="_conditionParam_" value="andCondition"/>
<property name="_conditionType_" value="or"/>
</include>
</trim>
</foreach>
</if>
<!-- 条件映射-集合之间使用OR,集合中元素使用AND-(list[0].1 and list[0].2) or (list[1].3 and list[1].4) -->
<if test="condition.containsKey('orConditionList') and !condition.orConditionList.isEmpty()">
and
<foreach collection="condition.orConditionList" open="(" close=")" index="index" item="orCondition" separator=" or ">
<trim prefixOverrides="and" prefix="(" suffix=")">
<include refid="_condition_param_">
<property name="_conditionParam_" value="orCondition"/>
<property name="_conditionType_" value="and"/>
</include>
</trim>
</foreach>
</if>
</if>
</sql>
<!-- 条件映射-代参数 -->
<sql id="_condition_param_">
<bind name="conditionParamRef" value="${_conditionParam_}"/>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null">
${_conditionType_} a.id=#{${_conditionParam_}.id}
</if>
</if>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null ">
${_conditionType_} a.id = #{${_conditionParam_}.id}
</if>
<if test="conditionParamRef.id == null">
${_conditionType_} a.id is null
</if>
</if>
<if test="conditionParamRef.containsKey('idList') and conditionParamRef.idList.size() > 0">
${_conditionType_} a.id in
<foreach collection="conditionParamRef.idList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idNotList') and conditionParamRef.idNotList.size() > 0">
${_conditionType_} a.id not in
<foreach collection="conditionParamRef.idNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('idStart') and conditionParamRef.idStart != null">
${_conditionType_} a.id <![CDATA[ >= ]]> #{${_conditionParam_}.idStart}
</if>
<if test="conditionParamRef.containsKey('idEnd') and conditionParamRef.idEnd != null">
${_conditionType_} a.id <![CDATA[ <= ]]> #{${_conditionParam_}.idEnd}
</if>
<if test="conditionParamRef.containsKey('userId')">
<if test="conditionParamRef.userId != null ">
${_conditionType_} a.userId = #{${_conditionParam_}.userId}
</if>
<if test="conditionParamRef.userId == null">
${_conditionType_} a.userId is null
</if>
</if>
<if test="conditionParamRef.containsKey('userIdList') and conditionParamRef.userIdList.size() > 0">
${_conditionType_} a.userId in
<foreach collection="conditionParamRef.userIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('userIdNotList') and conditionParamRef.userIdNotList.size() > 0">
${_conditionType_} a.userId not in
<foreach collection="conditionParamRef.userIdNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('userIdStart') and conditionParamRef.userIdStart != null">
${_conditionType_} a.userId <![CDATA[ >= ]]> #{${_conditionParam_}.userIdStart}
</if>
<if test="conditionParamRef.containsKey('userIdEnd') and conditionParamRef.userIdEnd != null">
${_conditionType_} a.userId <![CDATA[ <= ]]> #{${_conditionParam_}.userIdEnd}
</if>
<if test="conditionParamRef.containsKey('loginName')">
<if test="conditionParamRef.loginName != null and conditionParamRef.loginName != ''">
${_conditionType_} a.loginName like #{${_conditionParam_}.loginName}
</if>
<if test="conditionParamRef.loginName == null">
${_conditionType_} a.loginName is null
</if>
</if>
<if test="conditionParamRef.containsKey('loginNameList') and conditionParamRef.loginNameList.size() > 0">
${_conditionType_} a.loginName in
<foreach collection="conditionParamRef.loginNameList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginNameNotList') and conditionParamRef.loginNameNotList.size() > 0">
${_conditionType_} a.loginName not in
<foreach collection="conditionParamRef.loginNameNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginPwd')">
<if test="conditionParamRef.loginPwd != null and conditionParamRef.loginPwd != ''">
${_conditionType_} a.loginPwd like #{${_conditionParam_}.loginPwd}
</if>
<if test="conditionParamRef.loginPwd == null">
${_conditionType_} a.loginPwd is null
</if>
</if>
<if test="conditionParamRef.containsKey('loginPwdList') and conditionParamRef.loginPwdList.size() > 0">
${_conditionType_} a.loginPwd in
<foreach collection="conditionParamRef.loginPwdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('loginPwdNotList') and conditionParamRef.loginPwdNotList.size() > 0">
${_conditionType_} a.loginPwd not in
<foreach collection="conditionParamRef.loginPwdNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createTime')">
<if test="conditionParamRef.createTime != null ">
${_conditionType_} a.createTime = #{${_conditionParam_}.createTime}
</if>
<if test="conditionParamRef.createTime == null">
${_conditionType_} a.createTime is null
</if>
</if>
<if test="conditionParamRef.containsKey('createTimeStart') and conditionParamRef.createTimeStart != null and conditionParamRef.createTimeStart!=''">
${_conditionType_} a.createTime <![CDATA[ >= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeStart},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createTimeEnd') and conditionParamRef.createTimeEnd != null and conditionParamRef.createTimeEnd!=''">
${_conditionType_} a.createTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.createTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('createUserId')">
<if test="conditionParamRef.createUserId != null ">
${_conditionType_} a.createUserId = #{${_conditionParam_}.createUserId}
</if>
<if test="conditionParamRef.createUserId == null">
${_conditionType_} a.createUserId is null
</if>
</if>
<if test="conditionParamRef.containsKey('createUserIdList') and conditionParamRef.createUserIdList.size() > 0">
${_conditionType_} a.createUserId in
<foreach collection="conditionParamRef.createUserIdList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createUserIdNotList') and conditionParamRef.createUserIdNotList.size() > 0">
${_conditionType_} a.createUserId not in
<foreach collection="conditionParamRef.createUserIdNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('createUserIdStart') and conditionParamRef.createUserIdStart != null">
${_conditionType_} a.createUserId <![CDATA[ >= ]]> #{${_conditionParam_}.createUserIdStart}
</if>
<if test="conditionParamRef.containsKey('createUserIdEnd') and conditionParamRef.createUserIdEnd != null">
${_conditionType_} a.createUserId <![CDATA[ <= ]]> #{${_conditionParam_}.createUserIdEnd}
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
<if test="(orderColList == null or orderColList.isEmpty()) and orderCol != null and !orderCol.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<if test="orderCol.containsKey('id')">
a.id
<if test='orderCol.id != null and "DESC".equalsIgnoreCase(orderCol.id)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('userId')">
a.userId
<if test='orderCol.userId != null and "DESC".equalsIgnoreCase(orderCol.userId)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('loginName')">
a.loginName
<if test='orderCol.loginName != null and "DESC".equalsIgnoreCase(orderCol.loginName)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('loginPwd')">
a.loginPwd
<if test='orderCol.loginPwd != null and "DESC".equalsIgnoreCase(orderCol.loginPwd)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createTime')">
a.createTime
<if test='orderCol.createTime != null and "DESC".equalsIgnoreCase(orderCol.createTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('createUserId')">
a.createUserId
<if test='orderCol.createUserId != null and "DESC".equalsIgnoreCase(orderCol.createUserId)'>DESC</if>
,
</if>
</trim>
</if>
</sql>
<sql id="_group_by_">
<if test="groupList != null and !groupList.isEmpty()">
GROUP BY
<trim suffixOverrides="," suffix="">
<foreach collection="groupList" open="" close="" index="index" item="item" separator=",">
${item}
</foreach>
</trim>
</if>
</sql>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment