From ca09811d792054129fb345ebc2927d4a05b981a9 Mon Sep 17 00:00:00 2001 From: qi_liang Date: Mon, 9 Mar 2020 23:00:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/lq/cms/vo/SysInfoVo.java | 24 +++++++++++++----- .../com/lq/code/cache/RedisShiroCache.java | 7 +++++ .../java/com/lq/dao/WechatKeywordDao.java | 2 ++ .../lq/wechat/mode/message/BaseMessage.java | 1 + .../com/lq/wechat/web/WechatController.java | 2 +- src/main/profile/dev/jdbc.properties | 2 +- .../mapping/SysRoleResourcePermissionDao.xml | 2 +- .../mybatis/mapping/WechatKeywordDao.xml | 2 ++ src/main/resources/spring-import.xml | 2 +- .../resources/code/images/images404.jpg | Bin 0 -> 17458 bytes .../java/com/lq/code/util/os/NetUtilTest.java | 20 +++++++++++++++ 11 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 src/main/webapp/resources/code/images/images404.jpg create mode 100644 src/test/java/com/lq/code/util/os/NetUtilTest.java diff --git a/src/main/java/com/lq/cms/vo/SysInfoVo.java b/src/main/java/com/lq/cms/vo/SysInfoVo.java index a1b9cdd..a8491b9 100755 --- a/src/main/java/com/lq/cms/vo/SysInfoVo.java +++ b/src/main/java/com/lq/cms/vo/SysInfoVo.java @@ -9,17 +9,29 @@ import com.lq.code.util.os.mode.OsInfo; */ public class SysInfoVo { - //服务器ip + /** + * 服务器ip + */ private String sysIp; - //客服端ip + /** + * 客服端ip + */ private String userIP; - //操作系统信息 + /** + * 操作系统信息 + */ private OsInfo osInfo; - //数据库产品信息 + /** + * 数据库产品信息 + */ private DbInfo dbInfo; - //服务器版本信息 + /** + * 服务器版本信息 + */ private String serverInfo; - //jvm信息 + /** + * jvm信息 + */ private JvmInfo jvmInfo; public String getSysIp() { diff --git a/src/main/java/com/lq/code/cache/RedisShiroCache.java b/src/main/java/com/lq/code/cache/RedisShiroCache.java index ac3d14f..599412b 100644 --- a/src/main/java/com/lq/code/cache/RedisShiroCache.java +++ b/src/main/java/com/lq/code/cache/RedisShiroCache.java @@ -7,6 +7,7 @@ import org.springframework.data.redis.core.RedisTemplate; import java.util.Collection; import java.util.Set; +import java.util.concurrent.TimeUnit; /** * @Author: qi @@ -15,6 +16,11 @@ import java.util.Set; */ public class RedisShiroCache implements Cache{ + /** + * 过期时间默认2小时 + */ + private int defaultExpireTime=7200; + @Autowired private RedisTemplate redisTemplate; @@ -28,6 +34,7 @@ public class RedisShiroCache implements Cache{ @Override public V put(K k, V v) throws CacheException { redisTemplate.opsForValue().set(k,v); + redisTemplate.expire(k,this.defaultExpireTime, TimeUnit.SECONDS); return v; } diff --git a/src/main/java/com/lq/dao/WechatKeywordDao.java b/src/main/java/com/lq/dao/WechatKeywordDao.java index 089cb93..e2c6d60 100644 --- a/src/main/java/com/lq/dao/WechatKeywordDao.java +++ b/src/main/java/com/lq/dao/WechatKeywordDao.java @@ -14,4 +14,6 @@ import java.util.List; public interface WechatKeywordDao extends BaseDao{ List findByWechatRuleIdAndStatus(@Param("wechatRuleId") Long wehcatRuleId,@Param("status") Integer status); + + List findBykeywordAndWechatInfoId(@Param("keyword")String keyword,@Param("wechatInfoId")Long wechatInfoId); } diff --git a/src/main/java/com/lq/wechat/mode/message/BaseMessage.java b/src/main/java/com/lq/wechat/mode/message/BaseMessage.java index 9d8c3ee..f5bebec 100755 --- a/src/main/java/com/lq/wechat/mode/message/BaseMessage.java +++ b/src/main/java/com/lq/wechat/mode/message/BaseMessage.java @@ -2,6 +2,7 @@ package com.lq.wechat.mode.message; /** * 被动消息回复父类 + * @author qi */ public class BaseMessage { /** diff --git a/src/main/java/com/lq/wechat/web/WechatController.java b/src/main/java/com/lq/wechat/web/WechatController.java index 3ffb1c5..746bd02 100755 --- a/src/main/java/com/lq/wechat/web/WechatController.java +++ b/src/main/java/com/lq/wechat/web/WechatController.java @@ -105,7 +105,7 @@ public class WechatController extends BaseController { baseMessage.setFromUserName(wechatOpenId); baseMessage.setToUserName(openId); }else { - // + //默认回复逻辑 text.setContent("服务器繁忙!"); baseMessage = text; diff --git a/src/main/profile/dev/jdbc.properties b/src/main/profile/dev/jdbc.properties index 8741005..cf92f01 100644 --- a/src/main/profile/dev/jdbc.properties +++ b/src/main/profile/dev/jdbc.properties @@ -1,6 +1,6 @@ #--------- jdbc 配置--------- jdbc.driver=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://192.168.31.19:3306/ssm?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8 +jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8 jdbc.user=root jdbc.password=mysql #--------数据库连接池配置 ------- diff --git a/src/main/resources/mybatis/mapping/SysRoleResourcePermissionDao.xml b/src/main/resources/mybatis/mapping/SysRoleResourcePermissionDao.xml index feaefc3..2ba4399 100644 --- a/src/main/resources/mybatis/mapping/SysRoleResourcePermissionDao.xml +++ b/src/main/resources/mybatis/mapping/SysRoleResourcePermissionDao.xml @@ -11,7 +11,7 @@ + + \ No newline at end of file diff --git a/src/main/resources/spring-import.xml b/src/main/resources/spring-import.xml index 01d8f73..1721c3c 100644 --- a/src/main/resources/spring-import.xml +++ b/src/main/resources/spring-import.xml @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/src/main/webapp/resources/code/images/images404.jpg b/src/main/webapp/resources/code/images/images404.jpg new file mode 100644 index 0000000000000000000000000000000000000000..773e6f242ff78edb805300565ad6ee055b842070 GIT binary patch literal 17458 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