3 Commits 24beb11fb3 ... 9755e03259

Author SHA1 Message Date
  wulianwei 9755e03259 add:等保认证 1 week ago
  wulianwei 2494b5e9f3 init 2 months ago
  wulianwei c65b1c2588 init 4 months ago

+ 5 - 1
src/main/java/com/tuoren/forward/config/amqp/AmqpClient1.java

@@ -330,7 +330,11 @@ public class AmqpClient1 {
     						mqttUtil.pub(t, mqttJson.toString());
     					}
     				}else {
-    					mqttUtil.pub(CommonConstant.MQTT_PUBLISH_PREFIX+hospitalCode, mqttJson.toString());
+    					if("8879".equals(hospitalCode)) {
+    						remoteUtil.postDeviceDataToHospital(mqttJson.toString());
+    					}else {
+    						mqttUtil.pub(CommonConstant.MQTT_PUBLISH_PREFIX+hospitalCode, mqttJson.toString());
+    					}
     				}
     			}
     		}

+ 5 - 1
src/main/java/com/tuoren/forward/config/amqp/AmqpClient2.java

@@ -337,7 +337,11 @@ public class AmqpClient2 {
     						mqttUtil.pub(t, mqttJson.toString());
     					}
     				}else {
-    					mqttUtil.pub(CommonConstant.MQTT_PUBLISH_PREFIX+hospitalCode, mqttJson.toString());
+    					if("8879".equals(hospitalCode)) {
+    						remoteUtil.postDeviceDataToHospital(mqttJson.toString());
+    					}else {
+    						mqttUtil.pub(CommonConstant.MQTT_PUBLISH_PREFIX+hospitalCode, mqttJson.toString());
+    					}
     				}
     			}
     		}

+ 13 - 0
src/main/java/com/tuoren/forward/controller/DeviceController.java

@@ -216,4 +216,17 @@ public class DeviceController {
 		return deviceService.resendRecord(req);
 	}
 	
+	/**
+	 * 
+	 * @param req
+	 * @return
+	 */
+	@PostMapping("searchResendProcess")
+    @ResponseBody
+    @Operation(summary = "日志重发进度查询")
+	public ResultData<DeviceRecordProcessResp> searchResendProcess(@RequestBody IdReq req){
+		log.info("searchResendProcess>>:{}",req);
+		return deviceService.searchResendProcess(req.getId());
+	}
+	
 }

+ 20 - 0
src/main/java/com/tuoren/forward/controller/OpenController.java

@@ -23,6 +23,7 @@ import com.tuoren.forward.entity.resp.CaptchaResp;
 import com.tuoren.forward.service.HospitalService;
 import com.tuoren.forward.service.UserService;
 import com.tuoren.forward.util.AliyunMessageUtil;
+import com.tuoren.forward.util.RemoteUtil;
 import com.tuoren.forward.util.Result;
 import com.tuoren.forward.util.ResultData;
 import com.tuoren.forward.util.UUIDUtil;
@@ -56,6 +57,9 @@ public class OpenController {
 	@Autowired
 	AliyunMessageUtil aliyunMessageUtil; 
 	
+	@Autowired
+    RemoteUtil remoteUtil;
+	
 	private final String SECRET = "yunzhineng";
 	
 //	@PostMapping("addHospital")
@@ -131,6 +135,22 @@ public class OpenController {
 		return Result.success();
 	}
 	
+	@PostMapping("testSend")
+    @ResponseBody
+    @Operation(summary = "验证发送接口")
+	public Result testSend(@RequestBody String data) {
+		remoteUtil.postDeviceDataToHospital(data);
+		return Result.success();
+	}
+	
+	@PostMapping("testRecevice")
+    @ResponseBody
+    @Operation(summary = "验证接受接口")
+	public Result testRecevice(@RequestBody String data) {
+		System.out.println("===testRecevice==="+data);
+		return Result.success();
+	}
+	
 	
 	public static void main(String[] args) {
 		String content="test3&yunzhineng";

+ 3 - 0
src/main/java/com/tuoren/forward/entity/User.java

@@ -48,6 +48,9 @@ public class User {
     @Schema(description = "登录令牌")
     private String token;
     
+    @Schema(description = "无效登录次数")
+    private Integer invalidCount;
+    
     @Schema(description="角色ID, 'roleId1,roleId2'")
     private List<String> roleIds;
 }

+ 3 - 0
src/main/java/com/tuoren/forward/entity/req/UserAddReq.java

@@ -36,6 +36,9 @@ public class UserAddReq {
     @Schema(description = "详细地址")
     private String address;
     
+    @Schema(description = "无效登录次数")
+    private Integer invalidCount;
+    
     @Schema(description="角色ID, 'roleId1,roleId2'")
     private List<String> roleIds;
 }

+ 2 - 2
src/main/java/com/tuoren/forward/netty/AES.java

@@ -99,9 +99,9 @@ public class AES {
         json.put("networkType", "3");
         json.put("networkProtocol", 1);
         json.put("productId", "1dbfd476b7nm2");
-        json.put("deviceId", "6365736869303036");
+        json.put("deviceId", "02303B560DB60132");
         json.put("sim", "898604C4192290738888");
-        json.put("netMac","dc:54:75:74:32:d0");
+        json.put("netMac","64:e8:33:b3:8a:f4");
         json.put("userId", "1000");
 
         System.out.println(json.toString());

+ 8 - 5
src/main/java/com/tuoren/forward/netty/MyServer.java

@@ -135,7 +135,10 @@ class MyServerHandler extends ChannelInboundHandlerAdapter {
         byte[] resultByte = new byte[result.readableBytes()];
         result.readBytes(resultByte);
         result.release();
-
+        for (byte a : resultByte) {
+            System.out.printf("%02x", a);
+        }
+        System.out.println();
         String msgStr = AES.decrypt(resultByte, key);
         System.out.println("aes decrypt:" + msgStr);
         logger.info("aes decrypt:" + msgStr);
@@ -186,7 +189,7 @@ class MyServerHandler extends ChannelInboundHandlerAdapter {
             registLog.setStatus("2");//异常
             registLog.setMsg(e.getMessage());
             registLogMapper.insert(registLog);
-            logger.error("regist error:" + e);
+            logger.error("regist error" , e);
         }
         //执行加密操作
         byte[] resultRegister = AES.encrypt(jsonString, key);
@@ -244,11 +247,11 @@ class MyServerHandler extends ChannelInboundHandlerAdapter {
             //查询出来返回给他ip范围(需要就注册用,不需要就传"")
             Device deviceMac = deviceMapper.selectByMac(deviceName);
             //ip范围
-            String ipAddress = deviceMac.getIpAddress();
+            String ipAddress = deviceMac == null?"":deviceMac.getIpAddress();
             //网关
-            String gateWay = deviceMac.getGateWay();
+            String gateWay = deviceMac == null?"":deviceMac.getGateWay();
             //子网掩码
-            String netMask = deviceMac.getNetMask();
+            String netMask = deviceMac == null?"":deviceMac.getNetMask();
 
             //通过查询获取到参数
             String id = userIdCode.getId();

+ 26 - 2
src/main/java/com/tuoren/forward/service/DeviceService.java

@@ -275,8 +275,10 @@ public class DeviceService {
 				|| StringUtils.isBlank(req.getUserCode())) {
 			return ResultData.failNull(CommonConstant.LACK_PARAM);
 		}
-		DeviceRecordProcessResp resp = new DeviceRecordProcessResp();
 		User user = userMapper.selectByCode(req.getUserCode());	
+		if(user == null) {
+			return ResultData.failNull("不存在该用户,检查用户编码");
+		}
 		String processKey = UUIDUtil.get32UUID();
 		Runnable task = () -> {
 			Query query = new Query();
@@ -328,10 +330,32 @@ public class DeviceService {
 				}
 			}
 		};
-		resp.setProcessKey(processKey);
 		new Thread(task).start();
+		DeviceRecordProcessResp resp = new DeviceRecordProcessResp();
+		resp.setProcessKey(processKey);
+		return ResultData.success(resp);
+	}
+	
+	/**
+	 * @return
+	 * @title 日志重发进度
+	 */
+	public ResultData<DeviceRecordProcessResp> searchResendProcess(String token) {
+		if (StringUtils.isBlank(token)) {
+			return ResultData.failNull(CommonConstant.LACK_PARAM);
+		}
+		DeviceRecordProcessResp resp = new DeviceRecordProcessResp();
+		resp.setProcessKey(token);
+		String proStr = (String)redisTemplate.opsForHash().get(CommonConstant.LOG_RESERND_REDIS_PROCESS, token);
+		if(StringUtils.isBlank(proStr)) {
+			return ResultData.success(resp,"传输结束");
+		}
+		JSONObject jdata = JSONObject.parseObject(proStr);
+		resp.setTotal(jdata.getInteger("total"));
+		resp.setSendNum(jdata.getInteger("sendNum"));
 		return ResultData.success(resp);
 	}
 
 
+
 }

+ 29 - 3
src/main/java/com/tuoren/forward/service/UserService.java

@@ -39,11 +39,14 @@ import com.tuoren.forward.util.ResultPage;
 import com.tuoren.forward.util.UUIDUtil;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.Hutool;
 import cn.hutool.captcha.generator.MathGenerator;
+import cn.hutool.core.util.ReUtil;
 
 @Service
 public class UserService {
-	
+	private  final  Integer MAXCOUNT = 5;
+	private  final  Integer PWDLEN = 8;
 	@Autowired
 	RedisTemplate<String, Object> redisTemplate;
 	
@@ -81,9 +84,25 @@ public class UserService {
 		if(!mg.verify(verifyCode, captchaCode)) {
 			return ResultData.failNull("验证码错误");
 		}
+		if(req.getPassword().length()<8) {
+			return ResultData.failNull("密码长度不得小于8位");
+		}
+		if(!ReUtil.isMatch("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).+$", req.getPassword())) {
+			return ResultData.failNull("密码要包含特殊字符字母和数字");
+		}
 		User loginUser = userMapper.selectByUsername(req.getUsername());
-		if(loginUser == null || !MD5Util.encode32(req.getPassword()).equals(loginUser.getPassword())) {
-			return ResultData.failNull("用户名或密码错误");
+		if(loginUser == null) {
+			return ResultData.failNull("用户不存在");
+		}
+		if(!MD5Util.encode32(req.getPassword()).equals(loginUser.getPassword())) {
+			Integer invalidCount = loginUser.getInvalidCount()+1;
+			if(invalidCount > MAXCOUNT) {
+				return ResultData.failNull("密码次数太多,请联系管理员解锁");
+			}else {
+				loginUser.setInvalidCount(invalidCount);
+				userMapper.updateByPrimaryKeySelective(loginUser);
+				return ResultData.failNull("密码错误,还有"+(MAXCOUNT-invalidCount)+"次机会");
+			}
 		}
 		Date date= new Date();
 		List<String> roleIds = roleMapper.selectIdByUserId(loginUser.getId());
@@ -97,6 +116,7 @@ public class UserService {
 		user.setId(loginUser.getId());
 		user.setLasttime(date);
 		user.setToken(token);
+		user.setInvalidCount(0);
 		userMapper.updateByPrimaryKeySelective(user);
 		
 		if(logMapper.existLoginTodayByUseid(user.getId()) == null) {
@@ -354,6 +374,12 @@ public class UserService {
 		User user = new User();
 		BeanUtils.copyProperties(req, user);
 		if(!StringUtils.isEmpty(user.getPassword())) {
+			if(req.getPassword().length()<8) {
+				return ResultData.failNull("密码长度不得小于8位");
+			}
+			if(!ReUtil.isMatch("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).+$", req.getPassword())) {
+				return ResultData.failNull("密码要包含特殊字符字母和数字");
+			}
 			user.setPassword(MD5Util.encode32(user.getPassword()));
 		}
 		userMapper.updateByPrimaryKeySelective(user);

+ 18 - 0
src/main/java/com/tuoren/forward/util/RemoteUtil.java

@@ -13,6 +13,8 @@ import org.springframework.web.client.RestTemplate;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 
 @Component
 public class RemoteUtil {
@@ -101,5 +103,21 @@ public class RemoteUtil {
 		}
 		return null;
 	}
+	
+	public JSONObject postDeviceDataToHospital(String data) {
+
+		HttpHeaders headers = new HttpHeaders();
+	    headers.setContentType(MediaType.APPLICATION_JSON);
+	    
+		HttpEntity<String> request = new HttpEntity<String>(data, headers);
+		String result = restTemplate.postForObject("https://nuc.xzfkyy.cn:8090/gateway/ztb/xzyy/acceptance", request, String.class);
+//		String result = restTemplate.postForObject("http://192.168.104.3:8585/open/testRecevice", request, String.class);
+		System.out.println("result========="+result);
+		JSONObject json = JSONObject.parseObject(result);
+		if(json.containsKey("data")) {
+			return json.getJSONObject("data");
+		}
+		return null;
+	}
 
 }

+ 1 - 1
src/main/resources/application.yml

@@ -112,7 +112,7 @@ register:
 
 #阿里云配置
 aliyun1:
-  enable: true
+  enable: false
   accessKey: LTAI4G7FA9ytMc76oNkJ45YJ
   accessSecret: R7hOvMfiHb0PYroDqUDXAYgB9htQss
   consumerGroupId: Zlpp6svZNbJN4slY0rwJ000100

+ 2 - 0
src/main/resources/db/migration/V1.0.4__user.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `forward`.`user` 
+ADD COLUMN `invalid_count` INT NULL DEFAULT 0 COMMENT '无效登录次数' AFTER `token`;

+ 8 - 2
src/main/resources/mapper/UserMapper.xml

@@ -14,9 +14,11 @@
     <result column="code" jdbcType="VARCHAR" property="code" />
     <result column="region_code" jdbcType="VARCHAR" property="regionCode" />
     <result column="address" jdbcType="VARCHAR" property="address" />
+    <result column="token" jdbcType="VARCHAR" property="address" />
+    <result column="invalid_count" jdbcType="INTEGER" property="invalidCount" />
   </resultMap>
   <sql id="Base_Column_List">
-    id, username, password, mobile, email, salt, enabled, createtime, lasttime,code,region_code,address,token
+    id, username, password, mobile, email, salt, enabled, createtime, lasttime,code,region_code,address,token,invalid_count
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
     select 
@@ -213,6 +215,9 @@
       <if test="token != null">
         token = #{token,jdbcType=VARCHAR},
       </if>
+      <if test="invalidCount != null">
+        invalid_count = #{invalidCount,jdbcType=INTEGER},
+      </if>
     </set>
     where id = #{id,jdbcType=VARCHAR}
   </update>
@@ -229,7 +234,8 @@
       code = #{code,jdbcType=VARCHAR},
       region_code = #{regionCode,jdbcType=VARCHAR},
       address = #{address,jdbcType=VARCHAR},
-      token = #{token,jdbcType=VARCHAR}
+      token = #{token,jdbcType=VARCHAR},
+      invalid_count = #{invalidCount,jdbcType=INTEGER}
     where id = #{id,jdbcType=VARCHAR}
   </update>
 </mapper>