hecheng 3 anni fa
parent
commit
0e43016a01

+ 1 - 1
zd-api/zd-api-system/src/main/java/com/zd/system/api/chemical/RemoteStockService.java

@@ -34,7 +34,7 @@ public interface RemoteStockService {
     @GetMapping(value = "/hxpUserecord/queryUplink")
     @GetMapping(value = "/hxpUserecord/queryUplink")
     public void queryUplinkResult();
     public void queryUplinkResult();
 
 
-    @GetMapping(value = "/sendSydSms")
+    @GetMapping(value = "/hxpStock/sendSydSms")
     public R sendSydSms(@RequestParam(value = "content", required = true) String content,
     public R sendSydSms(@RequestParam(value = "content", required = true) String content,
                         @RequestParam(value = "purpose", required = true) Integer purpose,
                         @RequestParam(value = "purpose", required = true) Integer purpose,
                         @RequestParam(value = "lockApplyId") Long lockApplyId,
                         @RequestParam(value = "lockApplyId") Long lockApplyId,

+ 6 - 5
zd-api/zd-api-system/src/main/java/com/zd/system/api/domain/SysUser.java

@@ -102,6 +102,7 @@ public class SysUser extends BaseEntity {
     /**
     /**
      * 最后登录时间
      * 最后登录时间
      */
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
     @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
     private Date loginDate;
     private Date loginDate;
 
 
@@ -118,27 +119,27 @@ public class SysUser extends BaseEntity {
      * 角色对象 -- 2.6 弃用
      * 角色对象 -- 2.6 弃用
      */
      */
     @Deprecated
     @Deprecated
-    private List<SysRole> roles;
+    private transient List<SysRole> roles;
 
 
     /**
     /**
      * 2.6 需求新权限数据
      * 2.6 需求新权限数据
      */
      */
-    private List<SysPermitInfo> permits;
+    private transient List<SysPermitInfo> permits;
 
 
     /**
     /**
      * 角色组
      * 角色组
      */
      */
-    private Long[] roleIds;
+    private transient Long[] roleIds;
 
 
     /**
     /**
      * 岗位组
      * 岗位组
      */
      */
-    private Long[] postIds;
+    private transient Long[] postIds;
 
 
     /**
     /**
      * 用户组
      * 用户组
      */
      */
-    private Long[] userIds;
+    private transient Long[] userIds;
 
 
     /**
     /**
      * 角色ID
      * 角色ID

+ 43 - 6
zd-auth/src/main/java/com/zd/auth/controller/TokenController.java

@@ -1,13 +1,12 @@
 package com.zd.auth.controller;
 package com.zd.auth.controller;
 
 
+import cn.hutool.core.util.RandomUtil;
 import com.zd.auth.form.LoginBody;
 import com.zd.auth.form.LoginBody;
 import com.zd.auth.form.RegisterBody;
 import com.zd.auth.form.RegisterBody;
 import com.zd.auth.service.SysLoginService;
 import com.zd.auth.service.SysLoginService;
-import com.zd.common.core.constant.CacheConstants;
-import com.zd.common.core.constant.Constants;
-import com.zd.common.core.constant.SecurityConstants;
-import com.zd.common.core.constant.UserConstants;
+import com.zd.common.core.constant.*;
 import com.zd.common.core.domain.R;
 import com.zd.common.core.domain.R;
+import com.zd.common.core.exception.CaptchaException;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.utils.IdUtils;
 import com.zd.common.core.utils.IdUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.utils.StringUtils;
@@ -15,23 +14,28 @@ import com.zd.common.core.web.domain.AjaxResult;
 import com.zd.common.redis.service.RedisService;
 import com.zd.common.redis.service.RedisService;
 import com.zd.common.security.service.TokenService;
 import com.zd.common.security.service.TokenService;
 import com.zd.system.api.RemoteUserService;
 import com.zd.system.api.RemoteUserService;
+import com.zd.system.api.chemical.RemoteStockService;
 import com.zd.system.api.domain.SysUser;
 import com.zd.system.api.domain.SysUser;
 import com.zd.system.api.model.LoginUser;
 import com.zd.system.api.model.LoginUser;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
+import static com.zd.common.core.constant.Constants.CODE_EXPIRATION;
+
 /**
 /**
  * token 控制
  * token 控制
  *
  *
@@ -53,14 +57,29 @@ public class TokenController {
     @Autowired
     @Autowired
     private RedisService redisService;
     private RedisService redisService;
 
 
+    @Resource
+    private RemoteStockService stockService;
+    @Resource
+    private RedisTemplate<String,String> redisTemplate;
+
     @PostMapping("login")
     @PostMapping("login")
     public R<?> login(@RequestBody LoginBody form) {
     public R<?> login(@RequestBody LoginBody form) {
         // 用户登录
         // 用户登录
         String authType = form.getAuthType() == null ? Constants.GRANT_TYPE_PASSWORD : form.getAuthType();
         String authType = form.getAuthType() == null ? Constants.GRANT_TYPE_PASSWORD : form.getAuthType();
         LoginUser userInfo;
         LoginUser userInfo;
         if (Objects.equals(authType, Constants.GRANT_TYPE_MOBILE)) {
         if (Objects.equals(authType, Constants.GRANT_TYPE_MOBILE)) {
-            //TODO 验证码校验过程,用户信息查询
-            userInfo = sysLoginService.login(form.getUsername(), UserConstants.USER_LOGIN_PC, form.getPassword());
+            String key = Constants.DEFAULT_CODE_KEY +  Constants.GRANT_TYPE_MOBILE + "@" + form.getUsername();
+            String code = redisTemplate.opsForValue().get(key);
+            if (form.getPassword().equals(code)){
+                R<LoginUser> userR = remoteUserService.getUserInfo(form.getUsername(), SecurityConstants.INNER);
+                if (userR.getCode()== HttpStatus.SUCCESS &&userR.getData()!=null){
+                    userInfo=userR.getData();
+                }else {
+                    throw new ServiceException("系统异常");
+                }
+            }else {
+                throw new CaptchaException("验证码不正确");
+            }
         }else {
         }else {
             userInfo = sysLoginService.login(form.getUsername(), UserConstants.USER_LOGIN_PC, form.getPassword());
             userInfo = sysLoginService.login(form.getUsername(), UserConstants.USER_LOGIN_PC, form.getPassword());
         }
         }
@@ -151,6 +170,24 @@ public class TokenController {
     }
     }
 
 
     /**
     /**
+     * 发送验证码
+     */
+    @PostMapping("/send/code")
+    public R<?> send(@RequestBody LoginBody form) {
+        String username = form.getUsername();
+        R<LoginUser> userR = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
+        if (userR.getCode()!=HttpStatus.SUCCESS || userR.getData()==null){
+            throw new ServiceException("登录用户:" + username + " 不存在",530);
+        }
+        String key = Constants.DEFAULT_CODE_KEY +  Constants.GRANT_TYPE_MOBILE + "@" + username;
+        String code = RandomUtil.randomNumbers(6);
+        redisTemplate.opsForValue().set(key,code,CODE_EXPIRATION,TimeUnit.MINUTES);
+        logger.info("========================>{}<=========================",code);
+        return R.ok(code);
+//        return stockService.sendSydSms(code, 2, null, form.getUsername());
+    }
+
+    /**
      * 学习一体机 用户端登录
      * 学习一体机 用户端登录
      * 接口修改为分两步操作,1 刷卡获取人员信息和token , 2 人脸验证之后再调用一次实现真实登录
      * 接口修改为分两步操作,1 刷卡获取人员信息和token , 2 人脸验证之后再调用一次实现真实登录
      * type : 1 和 2
      * type : 1 和 2

+ 13 - 0
zd-common/zd-common-core/src/main/java/com/zd/common/core/constant/Constants.java

@@ -167,6 +167,19 @@ public class Constants {
      */
      */
     public static final String GRANT_TYPE_MOBILE = "mobile";
     public static final String GRANT_TYPE_MOBILE = "mobile";
 
 
+    /**
+     * 手机号类型
+     */
+    public static final String UPDATE_TYPE_MOBILE = "update";
+
+    /**
+     * redis验证码前缀
+     */
 
 
+    public static final String DEFAULT_CODE_KEY = "DEFAULT_CODE_KEY_";
 
 
+    /**
+     * 手机登录验证码有效期(分钟)
+     */
+    public static final long CODE_EXPIRATION = 15;
 }
 }

+ 5 - 1
zd-modules/zd-chemical/src/main/java/com/zd/chemical/controller/HxpStockController.java

@@ -224,7 +224,11 @@ public class HxpStockController extends BaseController {
     }
     }
 
 
     /**
     /**
-     * 四医大短信发送方式
+     * 四医大平台发送短信
+     * @param content 发送内容
+     * @param purpose 短信用途 1 化学品告警,2 登录,3 开锁,4 气瓶告警,5 预案告警
+     * @param phones  手机号
+     * @return 发送结果
      */
      */
     @GetMapping(value = "/sendSydSms")
     @GetMapping(value = "/sendSydSms")
     public R sendSydSms(@RequestParam(value = "content", required = true) String content,
     public R sendSydSms(@RequestParam(value = "content", required = true) String content,

+ 7 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabHardwareController.java

@@ -26,6 +26,8 @@ import com.zd.laboratory.domain.vo.LabSensorVO;
 import com.zd.laboratory.service.ILabHardwareService;
 import com.zd.laboratory.service.ILabHardwareService;
 import com.zd.laboratory.service.ILabSensorService;
 import com.zd.laboratory.service.ILabSensorService;
 import com.zd.laboratory.service.ILabSubjectService;
 import com.zd.laboratory.service.ILabSubjectService;
+import com.zd.laboratory.service.impl.LabSubjectManagerService;
+import com.zd.laboratory.socket.command.Symbol;
 import com.zd.system.api.laboratory.domain.FunctionStatus;
 import com.zd.system.api.laboratory.domain.FunctionStatus;
 import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import com.zd.system.api.laboratory.domain.RemoteLabHardware;
 import com.zd.system.api.laboratory.domain.vo.HardwareCVO;
 import com.zd.system.api.laboratory.domain.vo.HardwareCVO;
@@ -62,6 +64,9 @@ public class LabHardwareController extends BaseController {
     private ILabSubjectService labSubjectService;
     private ILabSubjectService labSubjectService;
 
 
     @Autowired
     @Autowired
+    LabSubjectManagerService subjectManagerService;
+
+    @Autowired
     private TokenService tokenService;
     private TokenService tokenService;
 
 
     @Autowired
     @Autowired
@@ -386,6 +391,7 @@ public class LabHardwareController extends BaseController {
         remoteLabHardware.setType(labHardwareVO.getType().getHardwareTypeCode());
         remoteLabHardware.setType(labHardwareVO.getType().getHardwareTypeCode());
         HardwareOperate operate = labHardwareVO.getOperate();
         HardwareOperate operate = labHardwareVO.getOperate();
         if (operate==null || operate.getCode()==4){
         if (operate==null || operate.getCode()==4){
+            subjectManagerService.control(id, Symbol.command.open);
             R<Boolean> result = nettyService.startMonitorChannels(remoteLabHardware);
             R<Boolean> result = nettyService.startMonitorChannels(remoteLabHardware);
             if (result.getCode()== HttpStatus.SUCCESS){
             if (result.getCode()== HttpStatus.SUCCESS){
                 operate=HardwareOperate.OPEN;
                 operate=HardwareOperate.OPEN;
@@ -393,6 +399,7 @@ public class LabHardwareController extends BaseController {
                 return ResultData.fail(result.getMsg());
                 return ResultData.fail(result.getMsg());
             }
             }
         }else {
         }else {
+            subjectManagerService.control(id, Symbol.command.close);
             R<Boolean> result = nettyService.disconnect(remoteLabHardware);
             R<Boolean> result = nettyService.disconnect(remoteLabHardware);
             if (result.getCode()== HttpStatus.SUCCESS){
             if (result.getCode()== HttpStatus.SUCCESS){
                 operate=HardwareOperate.CLOSE;
                 operate=HardwareOperate.CLOSE;

+ 66 - 9
zd-modules/zd-modules-system/src/main/java/com/zd/system/controller/SysUserController.java

@@ -2,13 +2,19 @@ package com.zd.system.controller;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.zd.common.core.constant.Constants;
 import com.zd.common.core.constant.Constants;
+import com.zd.common.core.constant.HttpStatus;
+import com.zd.common.core.constant.SecurityConstants;
 import com.zd.common.core.domain.per.PerFun;
 import com.zd.common.core.domain.per.PerFun;
 import com.zd.common.core.domain.per.PerPrefix;
 import com.zd.common.core.domain.per.PerPrefix;
+import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.utils.file.ImageUtils;
 import com.zd.common.core.utils.file.ImageUtils;
 import com.zd.common.security.utils.DictUtils;
 import com.zd.common.security.utils.DictUtils;
 import com.zd.system.api.RemoteDeptService;
 import com.zd.system.api.RemoteDeptService;
@@ -24,6 +30,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -41,6 +48,8 @@ import com.zd.common.security.annotation.InnerAuth;
 import com.zd.common.security.annotation.PreAuthorize;
 import com.zd.common.security.annotation.PreAuthorize;
 import com.zd.system.api.model.LoginUser;
 import com.zd.system.api.model.LoginUser;
 
 
+import static com.zd.common.core.constant.Constants.CODE_EXPIRATION;
+
 /**
 /**
  * 用户信息
  * 用户信息
  *
  *
@@ -76,6 +85,9 @@ public class SysUserController extends BaseController {
     @Autowired
     @Autowired
     private ISysDeptService deptService;
     private ISysDeptService deptService;
 
 
+    @Resource
+    private RedisTemplate<String,String> redisTemplate;
+
 
 
     /**
     /**
      * 获取用户列表 "system:user:list"
      * 获取用户列表 "system:user:list"
@@ -430,14 +442,19 @@ public class SysUserController extends BaseController {
      */
      */
     @Log(title = "用户自己修改手机号", businessType = BusinessType.UPDATE)
     @Log(title = "用户自己修改手机号", businessType = BusinessType.UPDATE)
     @PutMapping("/change/phone")
     @PutMapping("/change/phone")
-    public AjaxResult changePhone(SysUser user) {
-        if (StringUtils.isNotEmpty(user.getPhonenumber())
-                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
-            return AjaxResult.error("修改用户'" + SecurityUtils.getUsername() + "'失败,手机号码已存在");
+    public AjaxResult changePhone(SysUser user,String code) {
+
+        Boolean check = check(user.getPhonenumber(), code);
+        if (check){
+            if (StringUtils.isNotEmpty(user.getPhonenumber())
+                    && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
+                return AjaxResult.error("修改用户'" + SecurityUtils.getUsername() + "'失败,手机号码已存在");
+            }
+            user.setUpdateBy(SecurityUtils.getUsername());
+            user.setUserId(SecurityUtils.getUserId());
+            return toAjax(userService.updateUser(user));
         }
         }
-        user.setUpdateBy(SecurityUtils.getUsername());
-        user.setUserId(SecurityUtils.getUserId());
-        return toAjax(userService.updateUser(user));
+        throw new ServiceException("验证码不正确,请重新输入");
     }
     }
 
 
     /**
     /**
@@ -657,12 +674,10 @@ public class SysUserController extends BaseController {
      */
      */
     @PostMapping("/querySignature")
     @PostMapping("/querySignature")
     public R querySignature(){
     public R querySignature(){
-
         SysUser user = userService.selectUserById(SecurityUtils.getUserId());
         SysUser user = userService.selectUserById(SecurityUtils.getUserId());
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
         map.put("isUpload", StringUtils.isNotBlank(user.getSignature()) ? true : false);
         map.put("isUpload", StringUtils.isNotBlank(user.getSignature()) ? true : false);
         map.put("signature", user.getSignature());
         map.put("signature", user.getSignature());
-
         return R.ok(map);
         return R.ok(map);
     }
     }
 
 
@@ -703,4 +718,46 @@ public class SysUserController extends BaseController {
         Long deptId ="0".equals(sysDept.getAncestors())==true?sysDept.getDeptId():Long.valueOf(sysDept.getAncestors().split(",")[1]);
         Long deptId ="0".equals(sysDept.getAncestors())==true?sysDept.getDeptId():Long.valueOf(sysDept.getAncestors().split(",")[1]);
         return deptId;
         return deptId;
     }
     }
+
+    /**
+     * 发送验证码
+     */
+    @PostMapping("/send/code")
+    public R<?> send(@RequestParam String phone) {
+        SysUser sysUser = userService.selectUserIdByPhone(phone);
+        if (sysUser==null){
+            throw new ServiceException("手机号:" + phone + " 关联用户不存在",530);
+        }
+        String key = Constants.DEFAULT_CODE_KEY +  Constants.UPDATE_TYPE_MOBILE + "@" + phone;
+        String code = RandomUtil.randomNumbers(6);
+        redisTemplate.opsForValue().set(key,code,CODE_EXPIRATION, TimeUnit.MINUTES);
+        logger.info("========================>{}<=========================",code);
+        return R.ok(code);
+//        return stockService.sendSydSms(code, 2, null, form.getUsername());
+    }
+
+    /**
+     * 发送验证码
+     */
+    @PostMapping("/check/code")
+    public R<?> checkCode(@RequestParam("phone") String phone,@RequestParam("code")String code) {
+        return R.ok(check(phone, code));
+    }
+
+    private Boolean check(String phone, String code) {
+        if (StringUtils.isEmpty(phone)){
+            throw new ServiceException("请输入手机号");
+        }
+        if (StringUtils.isEmpty(code)){
+            throw new ServiceException("请输入验证码");
+        }
+        String key = Constants.DEFAULT_CODE_KEY +  Constants.UPDATE_TYPE_MOBILE + "@" + phone;
+
+        String temp = redisTemplate.opsForValue().get(key);
+        if (temp==null){
+            throw new ServiceException("验证码已过期");
+        }
+        logger.info("========================>{}:{}<=========================", code,temp);
+        return temp.equals(code);
+    }
 }
 }

+ 1 - 1
zd-modules/zd-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -289,7 +289,7 @@
 
 
     <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
     <select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
         <include refid="selectUserNewVo"/>
         <include refid="selectUserNewVo"/>
-        where u.user_name = #{userName} and u.del_flag = 0
+        where (u.user_name = #{userName} or u.phonenumber=#{userName}) and u.del_flag = 0
     </select>
     </select>
 
 
     <select id="selectUserCenterByUserName" parameterType="String" resultMap="SysUserResult">
     <select id="selectUserCenterByUserName" parameterType="String" resultMap="SysUserResult">