From 9032cfa7b177ddbdaa3c46139d4edc2325bc28cd Mon Sep 17 00:00:00 2001 From: zhouyuan <1069065057@qq.com> Date: Fri, 6 Aug 2021 22:45:06 +0800 Subject: [PATCH] update --- .../api/controller/ApiAuthController.java | 16 +- .../api/controller/ApiBaseDataController.java | 4 +- .../boot/api/controller/ApiDbController.java | 3 +- .../api/controller/ApiUserController.java | 7 +- .../com/ydool/boot/api/util/CodecUtils.java | 123 +++---- .../ydool/boot/modules/rddb/entity/Db.java | 8 + .../boot/modules/rddb/entity/Office.java | 13 +- .../boot/modules/rddb/entity/dto/UserDto.java | 301 ++++++++++++++++++ .../boot/modules/rddb/service/DbService.java | 2 + .../modules/rddb/service/OfficeService.java | 2 +- .../com/ydool/boot/modules/rddb/vo/DbVO.java | 102 +++++- .../ydool/boot/modules/rddb/vo/OfficeVo.java | 102 ++++++ .../rddb/web/ActivityAuditUserController.java | 3 +- .../modules/rddb/web/AuditUserController.java | 3 +- .../rddb/web/ConferenceUserController.java | 9 +- .../boot/modules/rddb/web/DbController.java | 32 +- .../modules/rddb/web/LoginController.java | 143 +++++++++ .../modules/rddb/web/OfficeController.java | 11 +- .../rddb/web/ReadFileUserController.java | 3 +- .../web/SuperviseThingUserController.java | 3 +- .../modules/rddb/web/VoterController.java | 22 +- .../rddb/web/VoterSuggestSolveController.java | 3 +- .../boot/modules/rddb/wrapper/DbWrapper.java | 4 + .../modules/rddb/wrapper/OfficeWrapper.java | 36 +++ .../modules/rddb/wrapper/UserDtoWrapper.java | 39 +++ 25 files changed, 854 insertions(+), 140 deletions(-) create mode 100644 src/main/java/com/ydool/boot/modules/rddb/entity/dto/UserDto.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/vo/OfficeVo.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/web/LoginController.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/wrapper/OfficeWrapper.java create mode 100644 src/main/java/com/ydool/boot/modules/rddb/wrapper/UserDtoWrapper.java diff --git a/src/main/java/com/ydool/boot/api/controller/ApiAuthController.java b/src/main/java/com/ydool/boot/api/controller/ApiAuthController.java index f24b462..c2b4696 100644 --- a/src/main/java/com/ydool/boot/api/controller/ApiAuthController.java +++ b/src/main/java/com/ydool/boot/api/controller/ApiAuthController.java @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.xiaoymin.knife4j.annotations.DynamicParameter; import com.github.xiaoymin.knife4j.annotations.DynamicResponseParameters; +import com.ydool.boot.api.util.CodecUtils; import com.ydool.boot.api.util.Kv; import com.ydool.boot.api.util.SmsUtil; import com.ydool.boot.api.util.TokenUtil; @@ -99,6 +100,7 @@ public class ApiAuthController extends ApiBaseController { if (StrUtil.isBlank(type)) fail("身份类型不能为空"); if ((!"admin".equals(type)) && (!"admin".equals(type)) && (!"street".equals(type)) && (!"contact".equals(type)) && (!"rddb".equals(type)) && (!"voter".equals(type))) fail("请检查身份类型"); + phone= CodecUtils.encrypt(phone); User user = userService.getOne(new LambdaQueryWrapper().eq(User::getLoginName, phone).eq(User::getAccountType, type)); if (user != null) { //直接登录 @@ -106,6 +108,7 @@ public class ApiAuthController extends ApiBaseController { } else { user = new User(); user.setLoginName(phone); + user.setPhone(phone); user.setSalt(RandomUtil.randomString(6)); user.setPassword(Ydool.password(user.getSalt(), ConfigUtils.getStr("sys.user.initPassword", "888888"))); user.setInitPwd(false); @@ -163,6 +166,7 @@ public class ApiAuthController extends ApiBaseController { @DynamicParameter(name = "type", value = "身份 admin县级人大工作人员 street乡镇负责人 contact联络站负责人 rddb各级人大代表 voter选民用户") }) public void auth(String login, String pwd) { + login=CodecUtils.encrypt(login); Ret ret = userService.login(login, pwd); if (ret.isFail()) { render(Ret.fail(ret.get("msg").toString())); @@ -185,8 +189,9 @@ public class ApiAuthController extends ApiBaseController { render(Ret.fail("发送验证码过于频繁,请稍后重试")); } + String secretPhone=CodecUtils.encrypt(phone); //作为loginName的手机号不能重复 - User repeatUser = checkPhoneRepeat(phone); + User repeatUser = checkPhoneRepeat(secretPhone); if (repeatUser != null) render(Ret.fail("该手机号已被占用")); //存储验证码 @@ -207,16 +212,18 @@ public class ApiAuthController extends ApiBaseController { }) public void register(String phone, String code, @NumberLetter(message = "密码需带有英文,数字") String password, String type) { if (StringUtils.isNotBlank(phone) && StringUtils.isNotBlank(code) && StringUtils.isNotBlank(password)) { + String secretPhone=CodecUtils.encrypt(phone); //作为loginName的手机号不能重复 - User repeatUser = checkPhoneRepeat(phone); + User repeatUser = checkPhoneRepeat(secretPhone); if (repeatUser != null) render(Ret.fail("该手机号已被占用")); if (redisTemplate.hasKey(phone)) { String redisCode = (String) redisTemplate.opsForValue().get(phone); if (code.equals(redisCode)) { User user = new User(); - user.setLoginName(phone); + user.setLoginName(secretPhone); + user.setPhone(secretPhone); user.setSalt(RandomUtil.randomString(6)); user.setPassword(Ydool.password(user.getSalt(), password)); user.setInitPwd(false); @@ -285,8 +292,9 @@ public class ApiAuthController extends ApiBaseController { System.out.println("login:"+login); System.out.println("password:"+password); System.out.println("dingOpenid:"+dingOpenid); + String secretPhone=CodecUtils.encrypt(login); - User user = userService.getOne(new QueryWrapper().eq("login_name", login)); + User user = userService.getOne(new QueryWrapper().eq("login_name", secretPhone)); if (user!=null) { if(!user.getPassword().equals(Ydool.password(user.getSalt(), password))) return Ret.fail("账号或密码错误,绑定失败"); diff --git a/src/main/java/com/ydool/boot/api/controller/ApiBaseDataController.java b/src/main/java/com/ydool/boot/api/controller/ApiBaseDataController.java index 15d7dc1..f1fbc69 100644 --- a/src/main/java/com/ydool/boot/api/controller/ApiBaseDataController.java +++ b/src/main/java/com/ydool/boot/api/controller/ApiBaseDataController.java @@ -7,6 +7,7 @@ import com.ydool.boot.common.cache.StreetUtils; import com.ydool.boot.common.result.Ret; import com.ydool.boot.modules.rddb.entity.*; import com.ydool.boot.modules.rddb.service.*; +import com.ydool.boot.modules.rddb.wrapper.OfficeWrapper; import com.ydool.boot.modules.sys.entity.DictData; import com.ydool.boot.modules.sys.entity.Street; import com.ydool.boot.modules.sys.service.StreetService; @@ -84,8 +85,7 @@ public class ApiBaseDataController extends ApiBaseController { @ApiImplicitParam(name = "id", value = "联络站id") public void contactDetail(String id) { Office office = officeService.getById(id); - if (office != null) office.fullInfo(); - render(Ret.ok().data(office)); + render(Ret.ok().data(OfficeWrapper.build().entityVO(office))); } @GetMapping("dict") diff --git a/src/main/java/com/ydool/boot/api/controller/ApiDbController.java b/src/main/java/com/ydool/boot/api/controller/ApiDbController.java index a82f5be..3aee848 100644 --- a/src/main/java/com/ydool/boot/api/controller/ApiDbController.java +++ b/src/main/java/com/ydool/boot/api/controller/ApiDbController.java @@ -24,7 +24,6 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -59,7 +58,7 @@ public class ApiDbController extends ApiBaseController { render(Ret.ok().paged(DbWrapper.build().pageVO(paged))); } else { List list = dbService.list(qw); - render(Ret.ok().data(list)); + render(Ret.ok().data(DbWrapper.build().listVO(list))); } } diff --git a/src/main/java/com/ydool/boot/api/controller/ApiUserController.java b/src/main/java/com/ydool/boot/api/controller/ApiUserController.java index e98b5ae..8533ba6 100644 --- a/src/main/java/com/ydool/boot/api/controller/ApiUserController.java +++ b/src/main/java/com/ydool/boot/api/controller/ApiUserController.java @@ -13,7 +13,6 @@ import com.ydool.boot.common.cache.ConfigUtils; import com.ydool.boot.common.config.Global; import com.ydool.boot.common.result.Ret; import com.ydool.boot.core.validator.NumberLetter; -import com.ydool.boot.core.validator.Password; import com.ydool.boot.modules.rddb.entity.Const; import com.ydool.boot.modules.rddb.entity.Db; import com.ydool.boot.modules.rddb.entity.Office; @@ -22,6 +21,7 @@ import com.ydool.boot.modules.rddb.service.DbService; import com.ydool.boot.modules.rddb.service.OfficeService; import com.ydool.boot.modules.rddb.service.SyncNameService; import com.ydool.boot.modules.rddb.service.UserTypeService; +import com.ydool.boot.modules.rddb.wrapper.OfficeWrapper; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.service.UserService; import io.swagger.annotations.Api; @@ -67,10 +67,7 @@ public class ApiUserController extends ApiBaseController { //机关干部 if (isAdmin() || isStreet() || isContact()) { Office office = officeService.getOne(new QueryWrapper().eq("user_id", user.getId())); - if (office != null) { - office.fullInfo(); - } - kv.set("office", office); + kv.set("office", OfficeWrapper.build().entityVO(office)); } //人大代表 if (isRddb()) { diff --git a/src/main/java/com/ydool/boot/api/util/CodecUtils.java b/src/main/java/com/ydool/boot/api/util/CodecUtils.java index 0839d94..40814dc 100644 --- a/src/main/java/com/ydool/boot/api/util/CodecUtils.java +++ b/src/main/java/com/ydool/boot/api/util/CodecUtils.java @@ -1,8 +1,8 @@ package com.ydool.boot.api.util; +import cn.hutool.core.util.StrUtil; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; -import org.springframework.util.ObjectUtils; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; @@ -19,69 +19,70 @@ import java.io.UnsupportedEncodingException; */ public class CodecUtils { - private static Cipher encryptCipher; // 加密cipher - private static Cipher decryptChipher; // 解密chipher - private static final String ENCODING = "UTF-8"; + private static Cipher encryptCipher; // 加密cipher + private static Cipher decryptChipher; // 解密chipher + private static final String ENCODING = "UTF-8"; - static { - try { - encryptCipher = Cipher.getInstance("AES"); - decryptChipher = Cipher.getInstance("AES"); - encryptCipher.init(Cipher.ENCRYPT_MODE, generateAESKey("ydool", ENCODING)); - decryptChipher.init(Cipher.DECRYPT_MODE, generateAESKey("ydool", ENCODING)); - } catch (Exception e) { - e.printStackTrace(); - } - } + static { + try { + encryptCipher = Cipher.getInstance("AES"); + decryptChipher = Cipher.getInstance("AES"); + encryptCipher.init(Cipher.ENCRYPT_MODE, generateAESKey("ydool", ENCODING)); + decryptChipher.init(Cipher.DECRYPT_MODE, generateAESKey("ydool", ENCODING)); + } catch (Exception e) { + e.printStackTrace(); + } + } - public static SecretKeySpec generateAESKey(final String key, final String encoding) { - try { - final byte[] finalKey = new byte[16]; - int i = 0; - for (byte b : key.getBytes(encoding)) - finalKey[i++ % 16] ^= b; - return new SecretKeySpec(finalKey, "AES"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } + public static SecretKeySpec generateAESKey(final String key, final String encoding) { + try { + final byte[] finalKey = new byte[16]; + int i = 0; + for (byte b : key.getBytes(encoding)) + finalKey[i++ % 16] ^= b; + return new SecretKeySpec(finalKey, "AES"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } - /** - * 加密算法 - * - * @param encryptString - * @return - */ - public static String encrypt(String encryptString) { - try { - if(encryptString == null) return null; - return new String(Hex.encodeHex(encryptCipher.doFinal(encryptString.getBytes(ENCODING)))).toUpperCase(); - } catch (BadPaddingException e) { - throw new RuntimeException(e); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } catch (IllegalBlockSizeException e) { - throw new RuntimeException(e); - } - } + /** + * 加密算法 + * + * @param encryptString + * @return + */ + public static String encrypt(String encryptString) { + try { + if (StrUtil.isBlank(encryptString)) return ""; + return new String(Hex.encodeHex(encryptCipher.doFinal(encryptString.getBytes(ENCODING)))).toUpperCase(); + } catch (BadPaddingException e) { + throw new RuntimeException(e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } catch (IllegalBlockSizeException e) { + throw new RuntimeException(e); + } + } - /** - * 解密算法 - * - * @param decryptString - * @return - */ - public static String decrypt(String decryptString) { + /** + * 解密算法 + * + * @param decryptString + * @return + */ + public static String decrypt(String decryptString) { + + if (StrUtil.isBlank(decryptString)) return ""; + try { + return new String(decryptChipher.doFinal(Hex.decodeHex(decryptString.toCharArray()))); + } catch (DecoderException nspe) { + return decryptString; + } catch (BadPaddingException nsae) { + return decryptString; + } catch (IllegalBlockSizeException ike) { + return decryptString; + } + } - if(ObjectUtils.isEmpty(decryptString)) return null; - try { - return new String(decryptChipher.doFinal(Hex.decodeHex(decryptString.toCharArray()))); - } catch (DecoderException nspe) { - throw new RuntimeException(nspe); - } catch (BadPaddingException nsae) { - throw new RuntimeException(nsae); - } catch (IllegalBlockSizeException ike) { - throw new RuntimeException(ike); - } - } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/Db.java b/src/main/java/com/ydool/boot/modules/rddb/entity/Db.java index b78e3e3..da7c852 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/entity/Db.java +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/Db.java @@ -3,6 +3,7 @@ package com.ydool.boot.modules.rddb.entity; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.ydool.boot.api.util.CodecUtils; import com.ydool.boot.core.entity.BaseEntity; import com.ydool.boot.core.validator.Chinese; import io.swagger.annotations.ApiModel; @@ -121,4 +122,11 @@ public class Db extends BaseEntity { return this.phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); return null; } + + /** + * 解密手机号 + */ + public void decryptPhone() { + this.phone = CodecUtils.decrypt(phone); + } } \ No newline at end of file diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/Office.java b/src/main/java/com/ydool/boot/modules/rddb/entity/Office.java index b366ac9..613382e 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/entity/Office.java +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/Office.java @@ -1,11 +1,9 @@ package com.ydool.boot.modules.rddb.entity; import com.baomidou.mybatisplus.annotation.TableName; -import com.ydool.boot.common.cache.DictUtils; -import com.ydool.boot.common.cache.StreetUtils; +import com.ydool.boot.api.util.CodecUtils; import com.ydool.boot.core.entity.BaseEntity; import com.ydool.boot.core.validator.Chinese; -import com.ydool.boot.core.validator.Number; import lombok.Data; import lombok.EqualsAndHashCode; @@ -109,13 +107,10 @@ public class Office extends BaseEntity { private String content; /** - * 字典值转中文 + * 加密手机号 */ - public void fullInfo() { - //辖区 - setStreet(StreetUtils.getStreetName(street)); - //职务 - setDuty(DictUtils.getDictLabel("office_duty", getDuty())); + public void encryptPhone() { + this.phone = CodecUtils.encrypt(phone); } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/entity/dto/UserDto.java b/src/main/java/com/ydool/boot/modules/rddb/entity/dto/UserDto.java new file mode 100644 index 0000000..d02ee94 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/entity/dto/UserDto.java @@ -0,0 +1,301 @@ +package com.ydool.boot.modules.rddb.entity.dto; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.ydool.boot.common.Ydool; +import com.ydool.boot.common.cache.ConfigUtils; +import com.ydool.boot.core.entity.BaseEntity; +import com.ydool.boot.core.validator.Phone; +import com.ydool.boot.core.validator.Unique; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + +@EqualsAndHashCode(callSuper = true) +public class UserDto extends BaseEntity { + + + /** + * 部门ID + */ + @NotBlank(message = "请选择所属部门") + private String deptId; + + /** + * 所属街道 + */ + private String streetId; + + + /** + * 登录账号 + */ + @NotBlank(message = "请输入登录账号") + @Unique(message = "登录账号必须是唯一的") + private String loginName; + + private String openId; + + @NotBlank(message = "请选择账号类型") + private String accountType; + + /** + * 用户昵称 + */ + @NotBlank(message = "请输入用户昵称") + private String userName; + /** + * 用户邮箱 + */ + @Email(message = "用户邮箱格式不正确") + private String email; + + /** + * 手机号码 + */ + @Phone(message = "手机号码格式不正确") + private String phone; + + /** + * 办公室号码 + */ + private String officePhone; + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + /** + * 头像路径 + */ + private String avatar; + /** + * 密码 + */ + @JsonIgnore + private String password; + /** + * 盐加密 + */ + @JsonIgnore + private String salt; + /** + * 帐号状态(1正常 0停用) + */ + private Integer status; + + private String remarks; + + /** + * true 需要提示 是否重置密码 + */ + private Boolean initPwd; + + /** + * 最后修改密码的时间 + */ + private LocalDateTime lastUpdatePwd; + + /** + * 最后登陆IP + */ + private String loginIp; + /** + * 最后登陆时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime loginDate; + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getStreetId() { + return streetId; + } + + public void setStreetId(String streetId) { + this.streetId = streetId; + } + + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public String getAccountType() { + return accountType; + } + + public void setAccountType(String accountType) { + this.accountType = accountType; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getOfficePhone() { + return officePhone; + } + + public void setOfficePhone(String officePhone) { + this.officePhone = officePhone; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getSalt() { + return salt; + } + + public void setSalt(String salt) { + this.salt = salt; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public Boolean getInitPwd() { + return initPwd; + } + + public void setInitPwd(Boolean initPwd) { + this.initPwd = initPwd; + } + + public LocalDateTime getLastUpdatePwd() { + return lastUpdatePwd; + } + + public void setLastUpdatePwd(LocalDateTime lastUpdatePwd) { + this.lastUpdatePwd = lastUpdatePwd; + } + + public String getLoginIp() { + return loginIp; + } + + public void setLoginIp(String loginIp) { + this.loginIp = loginIp; + } + + public LocalDateTime getLoginDate() { + return loginDate; + } + + public void setLoginDate(LocalDateTime loginDate) { + this.loginDate = loginDate; + } + + public Boolean isLocked() { + return this.status == 0; + } + + // 是否要提示修改面膜 + public String isModifyPwdTip() { + + if (ConfigUtils.getInt("sys.user.initPasswordModify", 0) == 1) { + if (this.initPwd) return "您的密码还是初始密码,请修改密码!"; + if (ConfigUtils.getInt("sys.user.passwordModifyCycle", 0) > 0) { + if (ObjectUtil.isEmpty(this.lastUpdatePwd)) return "为了安全,请修改您的密码!"; + if (this.lastUpdatePwd.plusDays(ConfigUtils.getInt("sys.user.passwordModifyCycle") + 1L).isBefore(LocalDateTime.now())) + return "您的密码已有 " + Ydool.toDiffDays(this.lastUpdatePwd) + " 天未修改,请修改您的密码!"; + } + } + + return null; + } + + private String deptName; + + private String streetName; + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getStreetName() { + return streetName; + } + + public void setStreetName(String streetName) { + this.streetName = streetName; + } +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/DbService.java b/src/main/java/com/ydool/boot/modules/rddb/service/DbService.java index eb24ad4..7a9a476 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/service/DbService.java +++ b/src/main/java/com/ydool/boot/modules/rddb/service/DbService.java @@ -58,6 +58,8 @@ public class DbService extends BaseService { @Transactional(rollbackFor = Exception.class) public Ret saveOrUpdate(DbVO vo) { + vo.encryptPhone(); + Boolean repeatFlag = false; //校验手机号重复 diff --git a/src/main/java/com/ydool/boot/modules/rddb/service/OfficeService.java b/src/main/java/com/ydool/boot/modules/rddb/service/OfficeService.java index d1caa22..ec75351 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/service/OfficeService.java +++ b/src/main/java/com/ydool/boot/modules/rddb/service/OfficeService.java @@ -55,7 +55,7 @@ public class OfficeService extends BaseService { @Transactional(rollbackFor = Exception.class) public Ret insertOrUpdate(Office office, User loginUser) { - + office.encryptPhone(); //校验名称重复 Office repeatOffice = getOne(office.getName()); if (repeatOffice != null) { diff --git a/src/main/java/com/ydool/boot/modules/rddb/vo/DbVO.java b/src/main/java/com/ydool/boot/modules/rddb/vo/DbVO.java index 54631a6..2cf327e 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/vo/DbVO.java +++ b/src/main/java/com/ydool/boot/modules/rddb/vo/DbVO.java @@ -1,23 +1,106 @@ package com.ydool.boot.modules.rddb.vo; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableField; +import com.ydool.boot.api.util.CodecUtils; import com.ydool.boot.common.cache.DictUtils; import com.ydool.boot.common.cache.StreetUtils; import com.ydool.boot.common.utils.SpringUtils; -import com.ydool.boot.modules.rddb.entity.Db; +import com.ydool.boot.core.entity.BaseEntity; +import com.ydool.boot.core.validator.Chinese; import com.ydool.boot.modules.rddb.entity.Office; import com.ydool.boot.modules.rddb.service.OfficeService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + /** * @author chenchen * @date 2020/09/29 */ @EqualsAndHashCode(callSuper = true) @Data -public class DbVO extends Db { +public class DbVO extends BaseEntity { + + private String createdId; + private String updatedId; + private String userId; + /** + * 姓名 + */ + @NotBlank(message = "请输入姓名") + @Chinese(message = "姓名只能输入中文") + @Size(max = 20, message = "姓名最大长度为20") + @ApiModelProperty(value = "姓名") + private String name; + /** + * 联系方式 + */ + @NotBlank(message = "请输入联系方式") + @ApiModelProperty(value = "联系方式") + private String phone; + /** + * 性别 + */ + @NotBlank(message = "请选择性别") + @ApiModelProperty(value = "性别") + private String sex; + + /** + * 籍贯 + */ + @Chinese(message = "籍贯只能输入中文") + @ApiModelProperty(value = "籍贯") + private String nativePlace; + + /** + * 工作单位及职务 + */ + @NotBlank(message = "请输入工作单位及职务") + @Chinese(message = "工作单位及职务只能输入中文") + @ApiModelProperty(value = "工作单位及职务") + private String unit; + + /** + * 选区地址 + */ + @NotBlank(message = "请选择选区地址") + @ApiModelProperty(value = "选区地址") + private String precinctAddress; + /** + * 代表身份 + */ + @NotBlank(message = "请选择代表身份 省级人大代表1 市级人大代表2 县级人大代表3 乡镇级人大代表4") + @ApiModelProperty(value = "代表身份") + private String dbIdentity; + + /* @NotBlank(message = "请选择是否连任") + private String isReappointment;*/ + + /** + * 机关人员id 联络站 + */ + @NotBlank(message = "请选择联络站") + @ApiModelProperty(value = "联络站") + private String officeId; + + @ApiModelProperty(value = "排序") + private Integer sortNo; + + @ApiModelProperty(value = "是否显示到大屏") + private Integer showScreen; + + @TableField(exist = false) + private String phoneNumber; + + public String getPhoneNumber(){ + if(StrUtil.isNotBlank(this.phone)) + return this.phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); + return null; + } /** * 选区地址 @@ -40,10 +123,6 @@ public class DbVO extends Db { if (StrUtil.isNotBlank(getSex())) { setSex(DictUtils.getDictLabel("sys_user_sex", getSex())); } - //民族 -// if (StrUtil.isNotBlank(getNation())) { -// setNation(DictUtils.getDictLabel("sys_nation", getNation())); -// } //选区地址 if (StrUtil.isNotBlank(getPrecinctAddress())) { setPrecinctAddress(StreetUtils.getStreetName(getPrecinctAddress())); @@ -52,10 +131,6 @@ public class DbVO extends Db { if (StrUtil.isNotBlank(getDbIdentity())) { setDbIdentity(DictUtils.getDictLabel("sys_db_identity", getDbIdentity())); } - //是否连任 -// if (StrUtil.isNotBlank(getIsReappointment())) { -// setIsReappointment(DictUtils.getDictLabel("sys_yes_no", getIsReappointment())); -// } //联络站用户 if (StrUtil.isNotBlank(getOfficeId())) { OfficeService officeService = SpringUtils.getBean(OfficeService.class); @@ -63,4 +138,11 @@ public class DbVO extends Db { setOfficeId(office!=null?office.getName():""); } } + + /** + * 加密手机号 + */ + public void encryptPhone() { + this.phone = CodecUtils.encrypt(phone); + } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/vo/OfficeVo.java b/src/main/java/com/ydool/boot/modules/rddb/vo/OfficeVo.java new file mode 100644 index 0000000..9f8dd95 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/vo/OfficeVo.java @@ -0,0 +1,102 @@ +package com.ydool.boot.modules.rddb.vo; + +import com.ydool.boot.core.entity.BaseEntity; +import com.ydool.boot.core.validator.Chinese; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + *

+ * 机关 + *

+ * + * @author zhouyuan + * @since 2020-09-29 + */ +@Data +public class OfficeVo extends BaseEntity { + + private String userId; + + /** + * 创建者 + */ + private String createdId; + + /** + * 更新者 + */ + private String updatedId; + + + /** + * 姓名 + */ + @NotBlank(message = "姓名不能为空") + private String name; + + /** + * 联系方式 + */ + @NotBlank(message = "联系方式不能为空") + private String phone; + + /** + * 性别 + */ + @NotBlank(message = "性别不能为空") + private String sex; + + /** + * 出生年月 + */ + @NotBlank(message = "出生年月不能为空") + private String birthday; + + /** + * 党派 + */ + @Chinese(message = "党派只能是中文") + private String partyCadre; + + /** + * 民族 + */ + private String nation; + + /** + * 籍贯 + */ + @Chinese(message = "籍贯只能是中文") + @NotBlank(message = "籍贯不能为空") + private String nativePlace; + + /** + * 学历 + */ + @NotBlank(message = "学历不能为空") + private String culture; + + /** + * 职务 + */ + @NotBlank(message = "职务不能为空") + private String duty; + + /** + * 辖区 + */ + private String street; + + /** + * 该联络站的简介 + */ + private String remarks; + + /** + * 该联络站的执勤表 + */ + private String content; + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java index 28d8b9f..9f5fad2 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ActivityAuditUserController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.boot.common.result.Ret; import com.ydool.boot.core.web.BaseController; import com.ydool.boot.modules.rddb.entity.ActivityAuditUser; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.rddb.service.ActivityAuditUserService; import com.ydool.boot.modules.rddb.service.ActivityService; import com.ydool.boot.modules.rddb.wrapper.ActivityAuditUserWrapper; @@ -73,7 +74,7 @@ public class ActivityAuditUserController extends BaseController { if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); if(StrUtil.isNotBlank(loginName)) userQueryWrapper.like("login_name",loginName); Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); } } \ No newline at end of file diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java index 3e8bc0e..c80f6d3 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/AuditUserController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.boot.api.controller.ApiBaseController; import com.ydool.boot.common.result.Ret; import com.ydool.boot.modules.rddb.entity.AuditUser; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.rddb.service.AuditUserService; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.service.UserService; @@ -65,7 +66,7 @@ public class AuditUserController extends ApiBaseController { if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); if(StrUtil.isNotBlank(loginName)) userQueryWrapper.like("login_name",loginName); Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java index 151284d..8ebcd77 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ConferenceUserController.java @@ -5,18 +5,17 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.boot.common.result.Ret; +import com.ydool.boot.core.web.BaseController; import com.ydool.boot.modules.rddb.entity.ConferenceUser; -import com.ydool.boot.modules.rddb.entity.SuperviseThingUser; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.rddb.service.ConferenceUserService; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.service.UserService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.stereotype.Controller; -import com.ydool.boot.core.web.BaseController; import org.springframework.web.bind.annotation.ResponseBody; /** @@ -67,7 +66,7 @@ public class ConferenceUserController extends BaseController { if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); if(StrUtil.isNotBlank(loginName)) userQueryWrapper.like("login_name",loginName); Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/DbController.java b/src/main/java/com/ydool/boot/modules/rddb/web/DbController.java index 937c936..cf5931d 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/DbController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/DbController.java @@ -80,7 +80,7 @@ public class DbController extends BaseAdminController { @PostMapping("/list") @ResponseBody public void list(DbVO dbVO) { - QueryWrapper qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex(),dbVO.getShowScreen()); + QueryWrapper qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex(), dbVO.getShowScreen()); IPage paged = dbService.page(new Page<>(getPageNum(), getPageSize()), qw); renderJson(Ret.ok().paged(DbWrapper.build().pageVO(paged))); } @@ -98,7 +98,7 @@ public class DbController extends BaseAdminController { public void save(String id) { Db db = dbService.getById(id); User user = userService.getById(db.getUserId()); - if(user!=null){ + if (user != null) { user.setOpenId(""); userService.updateById(user); } @@ -118,17 +118,15 @@ public class DbController extends BaseAdminController { Db bean = dbService.getById(id); if (bean != null) { List list = userTypeService.list(new LambdaQueryWrapper().eq(UserType::getUserId, bean.getUserId()).ne(UserType::getType, Const.TYPE_RDDB)); - if (CollectionUtil.isNotEmpty(list)) { - if (list.size() == 0) { - //仅有代表角色时候删掉整个user - userRoleService.remove(new QueryWrapper().eq("user_id", bean.getUserId())); - userService.removeById(bean.getUserId()); - } else { - //还有其他角色,否则切换当前角色 - User user = userService.getById(bean.getUserId()); - user.setAccountType(list.get(0).getType()); - userService.updateById(user); - } + if (CollectionUtil.isEmpty(list)) { + //仅有代表角色时候删掉整个user + userRoleService.remove(new QueryWrapper().eq("user_id", bean.getUserId())); + userService.removeById(bean.getUserId()); + } else { + //还有其他角色,否则切换当前角色 + User user = userService.getById(bean.getUserId()); + user.setAccountType(list.get(0).getType()); + userService.updateById(user); } //删除代表的角色 userTypeService.remove(new LambdaQueryWrapper().eq(UserType::getUserId, bean.getUserId()).eq(UserType::getType, Const.TYPE_RDDB)); @@ -165,7 +163,7 @@ public class DbController extends BaseAdminController { @PostMapping("/export") @ResponseBody public void export(DbVO dbVO, String[] ids) { - QueryWrapper qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex(),dbVO.getShowScreen()); + QueryWrapper qw = getQueryWrapper(dbVO.getName(), dbVO.getPhone(), dbVO.getSex(), dbVO.getShowScreen()); if (ArrayUtil.isNotEmpty(ids)) { qw.in("id", Arrays.asList(ids)); } @@ -195,7 +193,7 @@ public class DbController extends BaseAdminController { render(Ret.ok().data(officeList)); } - private QueryWrapper getQueryWrapper(String name, String phone, String sex,Integer showScreen) { + private QueryWrapper getQueryWrapper(String name, String phone, String sex, Integer showScreen) { QueryWrapper qw = new QueryWrapper<>(); Condition.appendIfNotEmpty(name, "name#like", qw); Condition.appendIfNotEmpty(phone, "phone#like", qw); @@ -221,7 +219,7 @@ public class DbController extends BaseAdminController { @PostMapping("/show") public void show(String id) { Db db = dbService.getById(id); - if(db!=null){ + if (db != null) { db.setShowScreen(1); dbService.updateById(db); render(Ret.ok()); @@ -232,7 +230,7 @@ public class DbController extends BaseAdminController { @PostMapping("/hide") public void hide(String id) { Db db = dbService.getById(id); - if(db!=null){ + if (db != null) { db.setShowScreen(0); dbService.updateById(db); render(Ret.ok()); diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/LoginController.java b/src/main/java/com/ydool/boot/modules/rddb/web/LoginController.java new file mode 100644 index 0000000..267c525 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/web/LoginController.java @@ -0,0 +1,143 @@ +package com.ydool.boot.modules.rddb.web; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.ydool.boot.api.util.CodecUtils; +import com.ydool.boot.common.Ydool; +import com.ydool.boot.common.cache.ConfigUtils; +import com.ydool.boot.common.properties.YdoolProperty; +import com.ydool.boot.common.result.Ret; +import com.ydool.boot.common.utils.TokenUtils; +import com.ydool.boot.common.utils.WebUtils; +import com.ydool.boot.common.utils.YdConst; +import com.ydool.boot.core.web.BaseController; +import com.ydool.boot.modules.sys.entity.User; +import com.ydool.boot.modules.sys.entity.UserRole; +import com.ydool.boot.modules.sys.service.UserRoleService; +import com.ydool.boot.modules.sys.service.UserService; +import io.jsonwebtoken.Claims; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; +import java.util.List; + +/** + * @author zhouyuan + * @date 2021年08月06日22:07:48 + */ +@Controller("_loginController") +@RequestMapping("${ydool.path}") +@Validated +public class LoginController extends BaseController { + + private String USER_LOGIN_TIMES = "USER_LOGIN_TIMES"; + + private String USER_LOGIN_LOCKED_TIME = "USER_LOGIN_LOCKED_TIME"; + + @Autowired + private UserService userService; + + @Autowired + private UserRoleService userRoleService; + + @Autowired + private YdoolProperty ydoolProperty; + + @GetMapping(value = "login") + public String login(Model model) { + + String userId = (String) WebUtils.getSession().getAttribute(Ydool.LOGIN_NAME); + + + String returnUrl = request.getParameter("returnUrl"); + if(StrUtil.isEmpty(returnUrl)) returnUrl = ydoolProperty.getPath(); + else returnUrl = Base64.decodeStr(returnUrl); + + if(StrUtil.isBlank(userId)) { + String token = WebUtils.getCookie("rememberMe"); + Claims claims = TokenUtils.parseToken(token); + if (claims != null) { + userId = claims.get(Ydool.LOGIN_NAME, String.class); + } + } + + if(StrUtil.isNotBlank(userId)) { + User user = userService.getById(userId); + if(user != null) { + List userRoleList = userRoleService.getUserRoleList(user.getId()); + if(!userRoleList.isEmpty()) { + WebUtils.getSession().setAttribute(Ydool.LOGIN_NAME, userId); + WebUtils.redirect(response, returnUrl); + } + } + + } + + model.addAttribute("returnUrl", returnUrl); + return "themes/default/modules/sysLogin.html"; + } + + @PostMapping(value = "login") + public void doLogin(@NotBlank(message = "请输入账号或邮箱") String login, @NotBlank(message = "请输入登录密码") String pwd, String captcha, @RequestParam(defaultValue = "false") Boolean rememberUserCode, @RequestParam(defaultValue = "false") Boolean rememberMe) { + Boolean checkCaptchaCode = ConfigUtils.getInt(ConfigUtils.LOGIN_CAPTCHA_CODE, 1) == 1; + if(checkCaptchaCode && StrUtil.isEmpty(captcha)) renderJson(Ret.fail("请输入验证码")); + + if(WebUtils.getSession().getAttribute(USER_LOGIN_LOCKED_TIME) != null) { + LocalDateTime datetime = (LocalDateTime) WebUtils.getSession().getAttribute(USER_LOGIN_LOCKED_TIME); + if(LocalDateTime.now().isBefore(datetime)) { + renderJson(Ret.fail("连续登录失败多次,当前禁止登录")); + }else { + WebUtils.getSession().removeAttribute(USER_LOGIN_TIMES); + WebUtils.getSession().removeAttribute(USER_LOGIN_LOCKED_TIME); + } + } + if(checkCaptchaCode) { + String code = (String) WebUtils.getSession().getAttribute(Ydool.CAPTCHA_CODE); + if (!captcha.equals(code)&&!YdConst.SUPER_CODE.equals(captcha)) renderJson(Ret.fail("验证码错误")); + } + Ret ret = userService.login(CodecUtils.encrypt(login), pwd); + if(ret.isFail() && ret.get("msg").equals("账号或者密码错误")) { + // 记录次数 + int failedTimes = ConfigUtils.getInt(ConfigUtils.LOGIN_FAILED_TIMES, 0); + if(failedTimes == 0) { + renderJson(ret); + } + int times = Convert.toInt(WebUtils.getSession().getAttribute(USER_LOGIN_TIMES), 0) + 1; + WebUtils.getSession().setAttribute(USER_LOGIN_TIMES, times); + if(times == failedTimes) { + int minute = ConfigUtils.getInt(ConfigUtils.LOGIN_FAILED_LOCK_MINUTE, 5); + WebUtils.getSession().setAttribute(USER_LOGIN_LOCKED_TIME, LocalDateTime.now().plusMinutes(minute)); + renderJson(ret.msg("连续登录失败多次,禁止登录,请在" + minute + "分钟后在尝试登录")); + } + renderJson(ret); + }else { + if(rememberUserCode) WebUtils.setCookie("rememberUserCode", login); + else WebUtils.removeCookie("rememberUserCode"); + + if(rememberMe) { + String token = TokenUtils.getUserLoginToken(); + WebUtils.setCookie("rememberMe", token); + }else { + WebUtils.removeCookie("rememberMe"); + } + + WebUtils.getSession().removeAttribute(USER_LOGIN_TIMES); + WebUtils.getSession().removeAttribute(USER_LOGIN_LOCKED_TIME); + if(checkCaptchaCode) WebUtils.getSession().removeAttribute(Ydool.CAPTCHA_CODE); + + renderJson(ret); + } + + } + + +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/OfficeController.java b/src/main/java/com/ydool/boot/modules/rddb/web/OfficeController.java index b64da46..ccd5b0c 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/OfficeController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/OfficeController.java @@ -4,11 +4,11 @@ package com.ydool.boot.modules.rddb.web; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ydool.boot.common.cache.StreetUtils; import com.ydool.boot.common.result.Ret; import com.ydool.boot.core.auth.PreAuth; import com.ydool.boot.modules.rddb.entity.Office; import com.ydool.boot.modules.rddb.service.OfficeService; +import com.ydool.boot.modules.rddb.wrapper.OfficeWrapper; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.service.UserService; import com.ydool.boot.modules.sys.web.BaseAdminController; @@ -51,12 +51,9 @@ public class OfficeController extends BaseAdminController { if (StringUtils.isNotBlank(office.getName())) wrapper.like("name", office.getName()); if (StringUtils.isNotBlank(office.getPhone())) wrapper.like("phone", office.getPhone()); if (StringUtils.isNotBlank(office.getDuty())) wrapper.like("duty", office.getDuty()); + wrapper.orderByDesc("created_at"); Page page = officeService.page(new Page(getPageNum(), getPageSize()), wrapper); - page.getRecords().forEach(item -> { - Office o = (Office) item; - o.setStreet(StreetUtils.getStreetName(o.getStreet())); - }); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(OfficeWrapper.build().pageVO(page))); } @PreAuth("rddb:office:form") @@ -69,7 +66,7 @@ public class OfficeController extends BaseAdminController { //新增的生日默认1980 office.setBirthday("1980-01"); } - model.addAttribute("office", office); + model.addAttribute("office", OfficeWrapper.build().entityVO(office)); return "modules/rddb/office/form.html"; } diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java index af1df6e..e1684c9 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/ReadFileUserController.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.boot.common.result.Ret; import com.ydool.boot.modules.rddb.entity.ReadFileUser; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.rddb.service.ReadFileUserService; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.service.UserService; @@ -65,7 +66,7 @@ public class ReadFileUserController extends BaseAdminController { if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); if(StrUtil.isNotBlank(loginName)) userQueryWrapper.like("login_name",loginName); Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java b/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java index 45a747d..9f7bce4 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/SuperviseThingUserController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.boot.common.result.Ret; import com.ydool.boot.core.web.BaseController; import com.ydool.boot.modules.rddb.entity.SuperviseThingUser; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.rddb.service.SuperviseThingUserService; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.service.UserService; @@ -65,7 +66,7 @@ public class SuperviseThingUserController extends BaseController { if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); if(StrUtil.isNotBlank(loginName)) userQueryWrapper.like("login_name",loginName); Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); } } diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/VoterController.java b/src/main/java/com/ydool/boot/modules/rddb/web/VoterController.java index 45d64d9..caa9a95 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/VoterController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/VoterController.java @@ -2,9 +2,9 @@ package com.ydool.boot.modules.rddb.web; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.ydool.boot.api.util.CodecUtils; import com.ydool.boot.common.Ydool; import com.ydool.boot.common.cache.ConfigUtils; import com.ydool.boot.common.config.Global; @@ -12,18 +12,15 @@ import com.ydool.boot.common.result.Ret; import com.ydool.boot.core.auth.PreAuth; import com.ydool.boot.core.mybatis.Condition; import com.ydool.boot.core.mybatis.Query; -import com.ydool.boot.modules.rddb.entity.Const; -import com.ydool.boot.modules.rddb.entity.UserType; -import com.ydool.boot.modules.rddb.service.UserTypeService; +import com.ydool.boot.modules.rddb.entity.dto.UserDto; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.sys.entity.Role; import com.ydool.boot.modules.sys.entity.User; import com.ydool.boot.modules.sys.entity.UserRole; import com.ydool.boot.modules.sys.service.RoleService; import com.ydool.boot.modules.sys.service.UserRoleService; import com.ydool.boot.modules.sys.service.UserService; -import com.ydool.boot.modules.sys.vo.UserVO; import com.ydool.boot.modules.sys.web.BaseAdminController; -import com.ydool.boot.modules.sys.wrapper.UserWrapper; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -41,8 +38,6 @@ public class VoterController extends BaseAdminController { @Autowired private UserService userService; @Autowired - private UserTypeService userTypeService; - @Autowired private RoleService roleService; @Autowired private UserRoleService userRoleService; @@ -60,22 +55,26 @@ public class VoterController extends BaseAdminController { @PostMapping("list") @PreAuth("sys:rddb:list") public void list(User user, Query query) { + user.setLoginName(CodecUtils.decrypt(user.getLoginName())); QueryWrapper wrapper = Condition.getQueryWrapper(user, "loginName#like", "accountType"); IPage paged = userService.page(Condition.getPage(query), wrapper.orderByDesc("created_at")); - render(Ret.ok().paged(UserWrapper.build().pageVO(paged))); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(paged))); } @GetMapping("form") @PreAuth("sys:rddb:add") public String form(User user, Model model) { - UserVO userVO = UserWrapper.build().entityVO(user); - model.addAttribute("voter", userVO); + UserDto userDto = UserDtoWrapper.build().entityVO(user); + model.addAttribute("voter", userDto); return "modules/rddb/voter/form.html"; } @PostMapping("save") @PreAuth("sys:rddb:add") public void save(User user) { + String secretPhone = CodecUtils.encrypt(user.getLoginName()); + user.setLoginName(secretPhone); + user.setPhone(secretPhone); if (StrUtil.isBlank(user.getLoginName())) renderJson(Ret.fail("登录账号不能为空")); if (StrUtil.isBlank(user.getUserName())) renderJson(Ret.fail("用户名不能为空")); @@ -111,7 +110,6 @@ public class VoterController extends BaseAdminController { user.setInitPwd(true); user.setAccountType("voter"); } - user.setPhone(user.getLoginName()); boolean flag = userService.saveOrUpdate(user); Role role = roleService.getOne(new QueryWrapper().eq("code", "default")); diff --git a/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java b/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java index 413336c..27bf861 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java +++ b/src/main/java/com/ydool/boot/modules/rddb/web/VoterSuggestSolveController.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydool.boot.common.result.Ret; import com.ydool.boot.core.web.BaseController; import com.ydool.boot.modules.rddb.entity.VoterSuggestSolve; +import com.ydool.boot.modules.rddb.wrapper.UserDtoWrapper; import com.ydool.boot.modules.rddb.service.VoterSuggestService; import com.ydool.boot.modules.rddb.service.VoterSuggestSolveService; import com.ydool.boot.modules.rddb.wrapper.VoterSuggestSolveWrapper; @@ -73,7 +74,7 @@ public class VoterSuggestSolveController extends BaseController { if(StrUtil.isNotBlank(userName)) userQueryWrapper.like("user_name",userName); if(StrUtil.isNotBlank(loginName)) userQueryWrapper.like("login_name",loginName); Page page = userService.page(new Page(getPageNum(), getPageSize()), userQueryWrapper); - render(Ret.ok().paged(page)); + render(Ret.ok().paged(UserDtoWrapper.build().pageVO(page))); } } \ No newline at end of file diff --git a/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java b/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java index 7138c19..0425b1c 100644 --- a/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java +++ b/src/main/java/com/ydool/boot/modules/rddb/wrapper/DbWrapper.java @@ -25,6 +25,7 @@ public class DbWrapper extends BaseWrapper { @Override public DbVO entityVO(Db db) { + db.decryptPhone(); DbVO vo = BeanUtil.copyProperties(db, DbVO.class); vo.setPrecinctAddressStr(StreetUtils.getStreetName(db.getPrecinctAddress())); vo.setDbIdentityStr(DictUtils.getDictLabel("sys_db_identity", db.getDbIdentity())); @@ -41,6 +42,7 @@ public class DbWrapper extends BaseWrapper { @SuppressWarnings({"unchecked"}) public T entityReadHead(DbReadHead dbReadHead, Class vo) { DbVO dbVO = (DbVO) BeanUtil.copyProperties(dbReadHead, vo); + dbVO.encryptPhone(); //性别 if (StrUtil.isNotBlank(dbVO.getSex())) { @@ -71,8 +73,10 @@ public class DbWrapper extends BaseWrapper { @SuppressWarnings({"unchecked", "DuplicatedCode"}) @Override public T entityHead(Db entity, Class head) { + entity.decryptPhone(); DbReadHead entityHead = (DbReadHead) super.entityHead(entity, head); + //性别 if (StrUtil.isNotBlank(entityHead.getSex())) { entityHead.setSex(DictUtils.getDictLabel("sys_user_sex", entityHead.getSex())); diff --git a/src/main/java/com/ydool/boot/modules/rddb/wrapper/OfficeWrapper.java b/src/main/java/com/ydool/boot/modules/rddb/wrapper/OfficeWrapper.java new file mode 100644 index 0000000..9434ea0 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/wrapper/OfficeWrapper.java @@ -0,0 +1,36 @@ +package com.ydool.boot.modules.rddb.wrapper; + +import cn.hutool.core.bean.BeanUtil; +import com.ydool.boot.api.util.CodecUtils; +import com.ydool.boot.common.cache.DictUtils; +import com.ydool.boot.common.cache.StreetUtils; +import com.ydool.boot.core.wrapper.BaseWrapper; +import com.ydool.boot.modules.rddb.entity.Office; +import com.ydool.boot.modules.rddb.vo.OfficeVo; + +/** + * @author chenchen + * @date 2020/06/05 + */ + +public class OfficeWrapper extends BaseWrapper { + + public static OfficeWrapper build() { + return new OfficeWrapper(); + } + + @Override + public OfficeVo entityVO(Office office) { + if(office!=null){ + OfficeVo vo = BeanUtil.copyProperties(office, OfficeVo.class); + vo.setPhone(CodecUtils.decrypt(vo.getPhone())); + + //辖区 + vo.setStreet(StreetUtils.getStreetName(vo.getStreet())); + //职务 + vo.setDuty(DictUtils.getDictLabel("office_duty", vo.getDuty())); + return vo; + } + return null; + } +} diff --git a/src/main/java/com/ydool/boot/modules/rddb/wrapper/UserDtoWrapper.java b/src/main/java/com/ydool/boot/modules/rddb/wrapper/UserDtoWrapper.java new file mode 100644 index 0000000..30e8a34 --- /dev/null +++ b/src/main/java/com/ydool/boot/modules/rddb/wrapper/UserDtoWrapper.java @@ -0,0 +1,39 @@ +package com.ydool.boot.modules.rddb.wrapper; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; +import com.ydool.boot.api.util.CodecUtils; +import com.ydool.boot.common.cache.SysCacheUtils; +import com.ydool.boot.core.wrapper.BaseWrapper; +import com.ydool.boot.modules.rddb.entity.dto.UserDto; +import com.ydool.boot.modules.sys.entity.Dept; +import com.ydool.boot.modules.sys.entity.Street; +import com.ydool.boot.modules.sys.entity.User; + +/** + * @author zhouyuan + * @date 2021年08月06日19:47:57 + */ +public class UserDtoWrapper extends BaseWrapper { + + public static UserDtoWrapper build() { + return new UserDtoWrapper(); + } + + @Override + public UserDto entityVO(User entity) { + UserDto userDto = BeanUtil.copyProperties(entity, UserDto.class); + if (StrUtil.isNotBlank(userDto.getDeptId())) { + Dept dept = SysCacheUtils.getDept(userDto.getDeptId()); + if (dept != null) userDto.setDeptName(dept.getName()); + } + if (StrUtil.isNotBlank(userDto.getStreetId())) { + Street street = SysCacheUtils.getStreet(userDto.getStreetId()); + if (street != null) userDto.setStreetName(street.getName()); + } + userDto.setLoginName(CodecUtils.decrypt(userDto.getLoginName())); + userDto.setPhone(CodecUtils.decrypt(userDto.getPhone())); + return userDto; + } + +}