From 5d2cfd4562f74496a5263db3451c1e78ff53aead Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: 星期四, 27 三月 2025 08:44:16 +0800
Subject: [PATCH] 单据增加查询返回字段

---
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java |  247 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 163 insertions(+), 84 deletions(-)

diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java
index 5004259..f77f75f 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.assess.common.api.CommonPage;
 import com.gkhy.assess.common.constant.CacheConstant;
+import com.gkhy.assess.common.domain.CustomerUsernamePasswordToken;
 import com.gkhy.assess.common.domain.vo.AccountVO;
 import com.gkhy.assess.common.domain.vo.LoginBody;
 import com.gkhy.assess.common.enums.AttachTypeEnum;
@@ -70,9 +71,13 @@
 
     @Override
     public AccountVO login(LoginBody loginBody) {
+        if(loginBody.getIdentity()==null){
+            throw new ApiException("请选择登录用户身份");
+        }
         // 验证码校验
-        //validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid());
-        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false);
+        validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid());
+     //   UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false);
+        CustomerUsernamePasswordToken usernamePasswordToken=new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()),loginBody.getIdentity());
         Subject subject= SecurityUtils.getSubject();
         String msg ;
         try {
@@ -87,9 +92,9 @@
                 accountVO.setAgentName(agency.getName());
                 accountVO.setAgentId(agency.getId());
             }
-            String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword());
+            String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity());
             accountVO.setToken(token);
-            cacheUserToken(sysUser.getUsername(),token);
+            cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token);
             return accountVO;
         }catch (UnknownAccountException | IncorrectCredentialsException uae){
             throw new ApiException("用户名/密码错误,请重新输入");
@@ -106,8 +111,9 @@
 
     @Override
     public AccountVO appLogin(LoginBody loginBody) {
-        // 验证码校验
-        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false);
+        // app端只能是专家用户登录
+        loginBody.setIdentity(UserIdentityEnum.EXPERT.getCode());
+        CustomerUsernamePasswordToken usernamePasswordToken = new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), loginBody.getIdentity());
         Subject subject= SecurityUtils.getSubject();
         String msg ;
         try {
@@ -122,10 +128,10 @@
                 accountVO.setAgentName(agency.getName());
                 accountVO.setAgentId(agency.getId());
             }
-            String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword());
+            String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity());
             accountVO.setToken(token);
-            cacheUserToken(sysUser.getUsername(),token);
-            accountVO.setUserFace(userFaceMapper.getFaceByUserId(sysUser.getId()));
+            cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token);
+            accountVO.setIdPhoto(sysUser.getIdPhoto());
             return accountVO;
         }catch (UnknownAccountException | IncorrectCredentialsException uae){
             throw new ApiException("用户名/密码错误,请重新输入");
@@ -142,22 +148,41 @@
      * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户
      * @param username
      */
-    public void cacheUserToken(String username,String newToken){
+//    public void cacheUserToken(String username,Integer identity,String newToken){
+//        String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity);
+//        String oldToken = (String) redisUtils.get(userKey);
+//        if (StringUtils.isNotBlank(oldToken)) {
+//            String oldTokenkey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + JwtTokenUtil.md5Encode(oldToken));
+//            redisUtils.del(oldTokenkey);
+//            redisUtils.del(userKey);
+//        }
+//        redisUtils.set(userKey, newToken,(JwtTokenUtil.EXPIRATION*2/1000)+2);
+//
+//
+//        String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(newToken));
+//        // 设置超时时间
+//        redisUtils.set(tokenKey,newToken);
+//        redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000);
+//    }
 
-        String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username);
-        String oldToken = (String) redisUtils.get(userKey);
-        if (StringUtils.isNotBlank(oldToken)) {
-            String oldTokenkey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + JwtTokenUtil.md5Encode(oldToken));
-            redisUtils.del(oldTokenkey);
-            redisUtils.del(userKey);
-        }
-        redisUtils.set(userKey, newToken,(JwtTokenUtil.EXPIRATION*2/1000)+2);
 
+    /**
+     * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户
+     * @param username
+     */
+    public void cacheUserToken(String username,Integer identity,String newToken){
+     //   String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity);
+//        String oldToken = (String) redisUtils.get(userKey);
+//        if (StringUtils.isNotBlank(oldToken)) {
+//            String oldTokenkey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + JwtTokenUtil.md5Encode(oldToken));
+//            redisUtils.del(oldTokenkey);
+//            redisUtils.del(userKey);
+//        }
+      //  redisUtils.set(userKey, newToken,(JwtTokenUtil.EXPIRATION*2/1000)+2);
 
         String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(newToken));
         // 设置超时时间
-        redisUtils.set(tokenKey,newToken);
-        redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000);
+        redisUtils.set(tokenKey,newToken,JwtTokenUtil.EXPIRATION*2/1000);
     }
 
     /**
@@ -191,11 +216,12 @@
         String jwtToken = request.getHeader(JwtTokenUtil.USER_LOGIN_TOKEN);
         if(StringUtils.isNotBlank(jwtToken)){
             String username=JwtTokenUtil.getUsername(jwtToken);
-            String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username);
+            Integer identity=JwtTokenUtil.getIdentity(jwtToken);
+           // String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity);
             String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken));
             //删除redis缓存
             redisUtils.del(tokenKey);
-            redisUtils.del(userKey);
+           // redisUtils.del(userKey);
         }
     }
 
@@ -238,8 +264,8 @@
     }
 
     @Override
-    public SysUser getUserByUsername(String username) {
-        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username);
+    public SysUser getUserByUsername(String username,Integer identity) {
+        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME + ":" + username+"_"+identity);
         SysUser sysUser =null;
         if(redisUtils.hasKey(key)){
             sysUser= (SysUser) redisUtils.get(key);
@@ -250,19 +276,20 @@
         return sysUser;
     }
 
-    public void delCacheByUsername(String username){
-        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username);
+    @Override
+    public void delCacheByUsername(String username,Integer identity){
+        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username+"_"+identity);
         redisUtils.del(key);
     }
 
     @Override
-    public SysUser getUserByUsernamePhone(String username) {
-        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username);
+    public SysUser getUserByUsernamePhone(String username,Integer identity) {
+        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username+"_"+identity);
         SysUser sysUser =null;
         if(redisUtils.hasKey(key)){
             sysUser= (SysUser) redisUtils.get(key);
         }else {
-            sysUser = baseMapper.getUserByUsernamePhone(username);
+            sysUser = baseMapper.getUserByUsernamePhone(username,identity);
             redisUtils.set(key,sysUser,10*60);
         }
         return sysUser;
@@ -280,7 +307,7 @@
         if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){
             throw new ApiException("用户名已存在");
         }
-        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){
+        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.MONITOR.getCode()))){
             throw new ApiException("手机号已存在");
         }
         String originPsword=Base64.decodeStr(user.getPassword());
@@ -303,7 +330,7 @@
         if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){
             throw new ApiException("用户名已存在");
         }
-        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){
+        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.AGENCY.getCode()))){
             throw new ApiException("手机号已存在");
         }
         String originPsword=Base64.decodeStr(user.getPassword());
@@ -317,15 +344,17 @@
         if(!agencyService.checkAgencyNameUnique(new SysAgency().setName(agency.getName()))){
             throw new ApiException("机构名称已存在");
         }
-        agency.setCreateBy(ShiroUtils.getSysUser().getUsername());
+        agency.setCreateBy(ShiroUtils.getSysUser()!=null?ShiroUtils.getSysUser().getUsername():"");
         boolean b=agencyService.save(agency);
         if(!b){
             throw new ApiException("保存机构信息失败");
         }
+
+        //创建机构用户
         user.setIdentity(UserIdentityEnum.AGENCY.getCode());
         user.setAgencyId(agency.getId());
         user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt()));
-        user.setCreateBy(ShiroUtils.getSysUser().getUsername());
+        user.setCreateBy(ShiroUtils.getSysUser()!=null?ShiroUtils.getSysUser().getUsername():"");
         b=save(user);
         if(!b){
             throw new ApiException("创建机构用户信息失败");
@@ -342,9 +371,20 @@
         if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){
             throw new ApiException("用户名已存在");
         }
-        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){
+        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.EXPERT.getCode()))){
             throw new ApiException("手机号已存在");
         }
+        List<SysAttach> socialAttach=user.getSocialAttach();
+        List<SysAttach> medicalAttach=user.getMedicalAttach();
+        List<SysAttach> salaryAttach=user.getSalaryAttach();
+        //疆外企业必须上传社保、医保、薪资
+        SysAgency agency=agencyService.getAgencyById(user.getAgencyId());
+        if(agency.getAttribute()==0){
+            if(ObjectUtil.isEmpty(socialAttach)||ObjectUtil.isEmpty(medicalAttach)||ObjectUtil.isEmpty(salaryAttach)){
+                throw new ApiException("疆内企业必须上传社保、医保、工资照片");
+            }
+        }
+
         String major=user.getMajor();
         List<Integer> majors=new ArrayList<>();
         JSONObject jsonObject=JSONObject.parseObject(major);
@@ -362,26 +402,32 @@
         if(!b){
             throw new ApiException("创建专家信息失败");
         }
-        List<SysAttach> socialAttach=user.getSocialAttach();
-        List<SysAttach> medicalAttach=user.getMedicalAttach();
-        List<SysAttach> salaryAttach=user.getSalaryAttach();
+
         List<SysAttach> attaches=new ArrayList<>();
-        for(SysAttach attach:socialAttach){
-            attach.setType(AttachTypeEnum.SOCIAL.getCode());
-            attach.setUserId(user.getId());
-            attaches.add(attach);
+        if(socialAttach!=null&& !socialAttach.isEmpty()) {
+            for (SysAttach attach : socialAttach) {
+                attach.setType(AttachTypeEnum.SOCIAL.getCode());
+                attach.setUserId(user.getId());
+                attaches.add(attach);
+            }
         }
-        for(SysAttach attach:medicalAttach){
-            attach.setType(AttachTypeEnum.MEDICAL.getCode());
-            attach.setUserId(user.getId());
-            attaches.add(attach);
+        if(medicalAttach!=null&& !medicalAttach.isEmpty()) {
+            for (SysAttach attach : medicalAttach) {
+                attach.setType(AttachTypeEnum.MEDICAL.getCode());
+                attach.setUserId(user.getId());
+                attaches.add(attach);
+            }
         }
-        for(SysAttach attach:salaryAttach){
-            attach.setType(AttachTypeEnum.SALARY.getCode());
-            attach.setUserId(user.getId());
-            attaches.add(attach);
+        if(salaryAttach!=null&& !salaryAttach.isEmpty()) {
+            for (SysAttach attach : salaryAttach) {
+                attach.setType(AttachTypeEnum.SALARY.getCode());
+                attach.setUserId(user.getId());
+                attaches.add(attach);
+            }
         }
-        attachService.saveBatch(attaches);
+        if(!attaches.isEmpty()) {
+            attachService.saveBatch(attaches);
+        }
         return 1;
     }
 
@@ -424,7 +470,8 @@
                 agencyService.updateById(agency);
             }
         }
-        delCacheByUsername(user.getUsername());
+        delCacheByUsername(user.getUsername(),user.getIdentity());
+        delCacheByUsername(user.getPhone(),user.getIdentity());
         user=new SysUser().setId(userId);
         user.setUpdateBy(ShiroUtils.getSysUser().getUsername());
         user.setDelFlag(DeleteFlagEnum.DELETED.getCode());
@@ -437,10 +484,11 @@
         if(!checkUsernameUnique(user)){
             throw new ApiException("用户名已存在");
         }
-        if(!checkPhoneUnique(user)){
+        if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.MONITOR.getCode()))){
             throw new ApiException("手机号已存在");
         }
-        delCacheByUsername(user.getUsername());
+        delCacheByUsername(user.getUsername(),UserIdentityEnum.MONITOR.getCode());
+        delCacheByUsername(user.getPhone(),UserIdentityEnum.MONITOR.getCode());
         user.setPassword(null);
         user.setUpdateBy(ShiroUtils.getSysUser().getUsername());
         boolean b=updateById(user);
@@ -458,7 +506,7 @@
         if(!checkUsernameUnique(user)){
             throw new ApiException("用户名已存在");
         }
-        if(!checkPhoneUnique(user)){
+        if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.AGENCY.getCode()))){
             throw new ApiException("手机号已存在");
         }
         SysAgency agency=user.getAgency();
@@ -470,12 +518,19 @@
         if(!agencyService.checkAgencyNameUnique(agency)){
             throw new ApiException("机构名称已存在");
         }
+        SysUser currentUser=ShiroUtils.getSysUser();
+        if(!currentUser.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){
+            if(!user.getId().equals(currentUser.getId())){
+                throw new ApiException("只能修改自身数据");
+            }
+        }
 
-        delCacheByUsername(user.getUsername());
-        agency.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        delCacheByUsername(user.getUsername(),UserIdentityEnum.AGENCY.getCode());
+        delCacheByUsername(user.getPhone(),UserIdentityEnum.AGENCY.getCode());
+        agency.setUpdateBy(currentUser.getUsername());
         agencyService.updateById(agency);
         user.setPassword(null);
-        user.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        user.setUpdateBy(currentUser.getUsername());
         boolean b=updateById(user);
         if(!b){
             throw new ApiException("更新用户失败");
@@ -490,9 +545,20 @@
         if(!checkUsernameUnique(user)){
             throw new ApiException("用户名已存在");
         }
-        if(!checkPhoneUnique(user)){
+        if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.EXPERT.getCode()))){
             throw new ApiException("手机号已存在");
         }
+        List<SysAttach> socialAttach=user.getSocialAttach();
+        List<SysAttach> medicalAttach=user.getMedicalAttach();
+        List<SysAttach> salaryAttach=user.getSalaryAttach();
+        //疆外企业必须上传社保、医保、薪资
+        SysAgency agency=agencyService.getAgencyById(user.getAgencyId());
+        if(agency.getAttribute()==0){
+            if(ObjectUtil.isEmpty(socialAttach)||ObjectUtil.isEmpty(medicalAttach)||ObjectUtil.isEmpty(salaryAttach)){
+                throw new ApiException("疆内企业必须上传社保、医保、工资照片");
+            }
+        }
+
         String major=user.getMajor();
         if(StringUtils.isNotBlank(major)){
             List<Integer> majors=new ArrayList<>();
@@ -511,38 +577,45 @@
         // 刪除旧数据
         // attachService.deleteAttachsByUserId(user.getId(),null);
 
-        List<SysAttach> socialAttach=user.getSocialAttach();
-        List<SysAttach> medicalAttach=user.getMedicalAttach();
-        List<SysAttach> salaryAttach=user.getSalaryAttach();
         List<SysAttach> attaches=new ArrayList<>();
-        for(SysAttach attach:socialAttach){
-            attach.setType(AttachTypeEnum.SOCIAL.getCode());
-            attach.setUserId(user.getId());
-            attaches.add(attach);
+        if(socialAttach!=null&& !socialAttach.isEmpty()) {
+            for (SysAttach attach : socialAttach) {
+                attach.setType(AttachTypeEnum.SOCIAL.getCode());
+                attach.setUserId(user.getId());
+                attaches.add(attach);
+            }
         }
-        for(SysAttach attach:medicalAttach){
-            attach.setType(AttachTypeEnum.MEDICAL.getCode());
-            attach.setUserId(user.getId());
-            attaches.add(attach);
+        if(medicalAttach!=null&& !medicalAttach.isEmpty()) {
+            for (SysAttach attach : medicalAttach) {
+                attach.setType(AttachTypeEnum.MEDICAL.getCode());
+                attach.setUserId(user.getId());
+                attaches.add(attach);
+            }
         }
-        for(SysAttach attach:salaryAttach){
-            attach.setType(AttachTypeEnum.SALARY.getCode());
-            attach.setUserId(user.getId());
-            attaches.add(attach);
+        if(salaryAttach!=null&& !salaryAttach.isEmpty()) {
+            for (SysAttach attach : salaryAttach) {
+                attach.setType(AttachTypeEnum.SALARY.getCode());
+                attach.setUserId(user.getId());
+                attaches.add(attach);
+            }
         }
-        attachService.saveOrUpdateBatch(attaches);
+        if(!attaches.isEmpty()) {
+            attachService.saveOrUpdateBatch(attaches);
+        }
 
-        List<Long> newIds=attaches.stream().map(SysAttach::getId).collect(Collectors.toList());
-        List<Long> delIds=new ArrayList<>();
-        for(SysAttach attach:existAttaches){
-            if(!newIds.contains(attach.getId())){
+        List<Long> newIds = attaches.stream().map(SysAttach::getId).collect(Collectors.toList());
+        List<Long> delIds = new ArrayList<>();
+        for (SysAttach attach : existAttaches) {
+            if (!newIds.contains(attach.getId())) {
                 delIds.add(attach.getId());
             }
         }
-        if(!delIds.isEmpty()){
+        if (!delIds.isEmpty()) {
             attachService.deleteAttachsByIds(delIds);
         }
-        delCacheByUsername(user.getUsername());
+
+        delCacheByUsername(user.getUsername(),UserIdentityEnum.EXPERT.getCode());
+        delCacheByUsername(user.getPhone(),UserIdentityEnum.EXPERT.getCode());
         return row;
     }
 
@@ -554,7 +627,8 @@
         SysUser oldUser=checkUserDataScope(user.getId());
         SysUser newUser=new SysUser().setId(user.getId()).setPassword(JwtTokenUtil.encryptPassword(oldUser.getUsername(),originPsword,oldUser.getSalt()));
         newUser.setUpdateBy(ShiroUtils.getSysUser().getUsername());
-        delCacheByUsername(oldUser.getUsername());
+        delCacheByUsername(oldUser.getUsername(),oldUser.getIdentity());
+        delCacheByUsername(oldUser.getPhone(),oldUser.getIdentity());
         return updateById(newUser);
     }
 
@@ -571,8 +645,11 @@
 
     @Override
     public boolean checkPhoneUnique(SysUser user) {
+        if(user.getIdentity()==null){
+            throw new ApiException("用户身份不能为空");
+        }
         Long userId = user.getId()==null ? -1L : user.getId();
-        SysUser info = baseMapper.checkPhoneUnique(user.getPhone());
+        SysUser info = baseMapper.checkPhoneUnique(user.getPhone(),user.getIdentity());
         if (info!=null && info.getId().longValue() != userId.longValue())
         {
             return false;
@@ -625,7 +702,8 @@
         SysUser existUser=checkUserDataScope(user.getId());
         SysUser su=new SysUser().setId(user.getId()).setStatus(user.getStatus());
         su.setUpdateBy(ShiroUtils.getSysUser().getUsername());
-        delCacheByUsername(existUser.getUsername());
+        delCacheByUsername(existUser.getUsername(),existUser.getIdentity());
+        delCacheByUsername(existUser.getPhone(),existUser.getIdentity());
         return updateById(su);
     }
 
@@ -634,7 +712,8 @@
         SysUser existUser=checkUserDataScope(user.getId());
         SysUser su=new SysUser().setId(user.getId()).setState(user.getState());
         su.setUpdateBy(ShiroUtils.getSysUser().getUsername());
-        delCacheByUsername(existUser.getUsername());
+        delCacheByUsername(existUser.getUsername(),existUser.getIdentity());
+        delCacheByUsername(existUser.getPhone(),existUser.getIdentity());
         return updateById(su);
     }
 }

--
Gitblit v1.9.2