瀏覽代碼

1、公出统计列表缓存优化
2、用户锁定踢出用户优化,原每次接口访问查询状态改为登录记录token,修改清除缓存token

anderx 4 年之前
父節點
當前提交
4b83507500

+ 18 - 12
src/main/java/com/goafanti/admin/controller/AdminSuperviserApiController.java

@@ -6,6 +6,8 @@ import java.util.List;
 import java.util.UUID;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+
+import com.goafanti.common.utils.RedisUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -39,7 +41,7 @@ public class AdminSuperviserApiController extends CertifyApiController {
 	@Resource
 	private AdminLocationService	adminLocationService;
 	@Resource
-	private UserService				userService;
+	private RedisUtil redisUtil;
 
 	/**管理员列表*/
 	@RequestMapping(value = "/adminList", method = RequestMethod.GET)
@@ -57,7 +59,7 @@ public class AdminSuperviserApiController extends CertifyApiController {
 		res.setData(newAdminService.listAdmin(alb,rid,roleName, pNo, pSize));
 		return res;
 	}
-	
+
 	/**
 	 * 新增管理员
 	 */
@@ -142,13 +144,13 @@ public class AdminSuperviserApiController extends CertifyApiController {
 				return res;
 			}
 			Admin a = newAdminService.selectByPrimaryKey(admin.getId());
-			if (null == a) {	
-				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "用户id"));				
-				return res;	
-			}	
+			if (null == a) {
+				res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "用户id"));
+				return res;
+			}
 			if (newAdminService.checkAdminRole(roles,admin)) {
-				res.getError().add(buildError(ErrorConstants.PARAM_BEING_ERROR, "", "咨询师管理员"));				
-				return res;	
+				res.getError().add(buildError(ErrorConstants.PARAM_BEING_ERROR, "", "咨询师管理员"));
+				return res;
 			}
 			Admin ad = new Admin();
 			BeanUtils.copyProperties(admin, ad);
@@ -156,6 +158,10 @@ public class AdminSuperviserApiController extends CertifyApiController {
 			if (!res.getError().isEmpty()) {
 				return res;
 			}
+			//如果锁定,清楚登陆者的token
+			if (!aa.getStatus().equals(ad.getStatus())&&!ad.getStatus().equals("正常")){
+				redisUtil.deleteString("SHIRO_SESSION:"+aa.getToken());
+			}
 		res.setData(newAdminService.updateByPrimaryKeySelective(ad, roles));
 		}
 		return res;
@@ -282,12 +288,12 @@ public class AdminSuperviserApiController extends CertifyApiController {
 		res.setData(handleFile(res, "/customer_sys_file/", false, req, sign));
 		return res;
 	}
-	
+
 	/**新增获取ID**/
 	@RequestMapping(value = "/newId", method = RequestMethod.GET)
 	public Result newId(){
-		Result res = new Result();		
-		res.setData(UUID.randomUUID().toString());		
+		Result res = new Result();
+		res.setData(UUID.randomUUID().toString());
 		return res;
 	}
 	/**编辑页面信息获取**/
@@ -304,7 +310,7 @@ public class AdminSuperviserApiController extends CertifyApiController {
 		newAdminService.deleteById(id);
 		return res;
 	}
-	
+
 	/**
 	 * 查询下级或平级
 	 * @return

+ 9 - 12
src/main/java/com/goafanti/admin/service/impl/NewAdminServiceImpl.java

@@ -1,10 +1,6 @@
 package com.goafanti.admin.service.impl;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.UUID;
+import java.util.*;
 
 import com.goafanti.common.model.Role;
 import org.springframework.beans.BeanUtils;
@@ -33,7 +29,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 	private UserRoleMapper		userRoleMapper;
 	@Autowired
 	private AdminLocationMapper	adminLocationMapper;
-	
+
 	@Override
 	public Pagination<AdminListBo> listAdmin(AdminListBo alb, String rid,String roleName,Integer pageNo, Integer pageSize) {
 		Map<String,Object> params = new HashMap<String, Object>();
@@ -45,7 +41,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		if(StringUtils.isNotBlank(alb.getPosition())) params.put("position", alb.getPosition());
 		if(StringUtils.isNotBlank(alb.getStatus())) params.put("status", alb.getStatus());
 		if(StringUtils.isNotBlank(alb.getMobile())) params.put("mobile", alb.getMobile());
-		if(StringUtils.isNotBlank(alb.getSuperiorId())) params.put("superiorId", alb.getSuperiorId());		
+		if(StringUtils.isNotBlank(alb.getSuperiorId())) params.put("superiorId", alb.getSuperiorId());
 		Pagination<AdminListBo> p=(Pagination<AdminListBo>)findPage("selectAdminListByPage","selectAdminCount",params,pageNo,pageSize);
 		List<AdminListBo> list=(List<AdminListBo>)p.getList();
 		for(AdminListBo i:list){
@@ -54,7 +50,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		}
 		return p;
 	}
-	
+
 	@Override
 	public List<Admin> selectAllAdmin() {
 		return adminMapper.selectAllAdmin(null);
@@ -94,6 +90,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		return count;
 	}
 
+
 	private int sumType(List<String > roleIds) {
 		int type=0;
 		for (String roleId : roleIds) {
@@ -250,7 +247,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 
 	@Override
 	public List<Admin> listAdminByName(String name) {
-		
+
 		return adminMapper.listAdminByName(name);
 	}
 
@@ -265,7 +262,7 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 		adminMapper.deleteById(id);
 		if(id!="1"){
 			userRoleMapper.deleteByUserId(id);
-		}		
+		}
 		return 1;
 	}
 
@@ -289,12 +286,12 @@ public class NewAdminServiceImpl extends BaseMybatisDao<AdminMapper> implements
 							return true;
 						}
 					}
-					
+
 				}
 			}
 		}
 		return false;
-		
+
 	}
 
 }

+ 1 - 1
src/main/java/com/goafanti/common/dao/AdminMapper.java

@@ -144,4 +144,4 @@ public interface AdminMapper {
     List<String> getFinanceDep(String aid);
 
     List<String> getLowerFinanceDep(String aid);
-}
+}

+ 35 - 22
src/main/java/com/goafanti/common/mapper/AdminMapper.xml

@@ -24,14 +24,15 @@
     <result column="open_id" jdbcType="VARCHAR" property="openId" />
     <result column="type" jdbcType="INTEGER" property="type" />
     <result column="reviewer" jdbcType="VARCHAR" property="reviewer" />
+    <result column="token" jdbcType="VARCHAR" property="token" />
   </resultMap>
   <sql id="Base_Column_List">
-    id, mobile, `name`, `password`, email, create_time, `number`, province, `position`, 
-    superior_id, city, department_id, `status`, user_no, duty, district, head_portrait_url, 
-    contact_mobile, last_login_time, open_id, `type`, reviewer
+    id, mobile, `name`, `password`, email, create_time, `number`, province, `position`,
+    superior_id, city, department_id, `status`, user_no, duty, district, head_portrait_url,
+    contact_mobile, last_login_time, open_id, `type`, reviewer, token
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
-    select 
+    select
     <include refid="Base_Column_List" />
     from admin
     where id = #{id,jdbcType=VARCHAR}
@@ -41,22 +42,22 @@
     where id = #{id,jdbcType=VARCHAR}
   </delete>
   <insert id="insert" parameterType="com.goafanti.common.model.Admin">
-    insert into admin (id, mobile, `name`, 
-      `password`, email, create_time, 
-      `number`, province, `position`, 
-      superior_id, city, department_id, 
-      `status`, user_no, duty, 
-      district, head_portrait_url, contact_mobile, 
-      last_login_time, open_id, `type`, 
-      reviewer)
-    values (#{id,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
-      #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{number,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR}, 
-      #{superiorId,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{departmentId,jdbcType=VARCHAR}, 
-      #{status,jdbcType=VARCHAR}, #{userNo,jdbcType=VARCHAR}, #{duty,jdbcType=VARCHAR}, 
-      #{district,jdbcType=VARCHAR}, #{headPortraitUrl,jdbcType=VARCHAR}, #{contactMobile,jdbcType=VARCHAR}, 
-      #{lastLoginTime,jdbcType=TIMESTAMP}, #{openId,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER}, 
-      #{reviewer,jdbcType=VARCHAR})
+    insert into admin (id, mobile, `name`,
+      `password`, email, create_time,
+      `number`, province, `position`,
+      superior_id, city, department_id,
+      `status`, user_no, duty,
+      district, head_portrait_url, contact_mobile,
+      last_login_time, open_id, `type`,
+      reviewer, token)
+    values (#{id,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
+      #{password,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
+      #{number,jdbcType=INTEGER}, #{province,jdbcType=VARCHAR}, #{position,jdbcType=VARCHAR},
+      #{superiorId,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{departmentId,jdbcType=VARCHAR},
+      #{status,jdbcType=VARCHAR}, #{userNo,jdbcType=VARCHAR}, #{duty,jdbcType=VARCHAR},
+      #{district,jdbcType=VARCHAR}, #{headPortraitUrl,jdbcType=VARCHAR}, #{contactMobile,jdbcType=VARCHAR},
+      #{lastLoginTime,jdbcType=TIMESTAMP}, #{openId,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER},
+      #{reviewer,jdbcType=VARCHAR}, #{token,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.goafanti.common.model.Admin">
     insert into admin
@@ -127,6 +128,9 @@
       <if test="reviewer != null">
         reviewer,
       </if>
+      <if test="token != null">
+        token,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -195,6 +199,9 @@
       <if test="reviewer != null">
         #{reviewer,jdbcType=VARCHAR},
       </if>
+      <if test="token != null">
+        #{token,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.goafanti.common.model.Admin">
@@ -263,6 +270,9 @@
       <if test="reviewer != null">
         reviewer = #{reviewer,jdbcType=VARCHAR},
       </if>
+      <if test="token != null">
+        token = #{token,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=VARCHAR}
   </update>
@@ -288,7 +298,8 @@
       last_login_time = #{lastLoginTime,jdbcType=TIMESTAMP},
       open_id = #{openId,jdbcType=VARCHAR},
       `type` = #{type,jdbcType=INTEGER},
-      reviewer = #{reviewer,jdbcType=VARCHAR}
+      reviewer = #{reviewer,jdbcType=VARCHAR},
+      token = #{token,jdbcType=VARCHAR}
     where id = #{id,jdbcType=VARCHAR}
   </update>
 
@@ -696,6 +707,8 @@
     where
       id=#{id,jdbcType=VARCHAR}
   </update>
+
+
   <select id="selectIdBySuperiorId" parameterType="java.lang.String" resultType="java.lang.String">
     select id
     from admin
@@ -1031,4 +1044,4 @@
     select b.id from admin a left join department b on a.id=b.finance_id
     where a.superior_id = #{aid}
   </select>
-</mapper>
+</mapper>

+ 11 - 2
src/main/java/com/goafanti/common/model/Admin.java

@@ -8,7 +8,7 @@ import java.util.Date;
 
 /**
  * admin
- * @author 
+ * @author
  */
 public class Admin extends BaseModel implements AftUser {
     private static final long	serialVersionUID	= 1L;
@@ -117,6 +117,7 @@ public class Admin extends BaseModel implements AftUser {
      */
     private String reviewer;
 
+    private String token;
     /**
      * 上级管理用户名称
      */
@@ -328,4 +329,12 @@ public class Admin extends BaseModel implements AftUser {
     public void setReviewer(String reviewer) {
         this.reviewer = reviewer;
     }
-}
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+}

+ 28 - 10
src/main/java/com/goafanti/common/utils/RedisUtil.java

@@ -6,8 +6,17 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
+import com.goafanti.common.model.Admin;
+import com.goafanti.common.model.AftUser;
+import com.goafanti.core.shiro.token.ShiroToken;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.session.mgt.SimpleSession;
+import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -18,7 +27,7 @@ import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;
 /**
  * redis辅助类
- * @author 
+ * @author
  *
  */
 @Component
@@ -29,9 +38,9 @@ public class RedisUtil {
 	private  String pwd;
 	@Autowired
 	private  JedisPool pool;//创建代理对象
-	
-	
-	
+
+
+
 //	 /**
 //     * 初始化Redis连接池
 //     */
@@ -40,7 +49,7 @@ public class RedisUtil {
 //    		try {
 //    			JedisPoolConfig config = new JedisPoolConfig();
 //    			config.setBlockWhenExhausted(false);
-//    			config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy"); 
+//    			config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
 //    			config.setJmxEnabled(true);
 //    			config.setJmxNamePrefix("pool");
 //    			config.setLifo(true);
@@ -61,8 +70,8 @@ public class RedisUtil {
 //		}
 //    }
 
-	
-	
+
+
 	public boolean presence(String key){
 		Jedis jedis = pool.getResource();
 		boolean bool=true;
@@ -143,7 +152,7 @@ public class RedisUtil {
 			jedis.close();
 		}
 	}
-	
+
 		public void setString(String key, String value) {
 			Jedis jedis = pool.getResource();
 			try {
@@ -152,7 +161,16 @@ public class RedisUtil {
 				jedis.close();
 			}
 		}
-		
+
+		public Set<String> keys(String key){
+			Jedis jedis = pool.getResource();
+			try {
+				return  jedis.keys(key);
+			} finally {
+				jedis.close();
+			}
+		}
+
 		public void deleteString(String key) {
 			Jedis jedis = pool.getResource();
 			try {
@@ -161,7 +179,7 @@ public class RedisUtil {
 				jedis.close();
 			}
 		}
-		
+
 		public String getString(String key) {
 			Jedis jedis = pool.getResource();
 			String str=new String();

+ 74 - 0
src/main/java/com/goafanti/core/cache/ExtendedRedisCacheManager.java

@@ -0,0 +1,74 @@
+package com.goafanti.core.cache;
+
+import com.goafanti.common.utils.LoggerUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.data.redis.cache.RedisCache;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.core.RedisOperations;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+public class ExtendedRedisCacheManager extends RedisCacheManager {
+
+    private static final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
+
+    private static final Pattern pattern = Pattern.compile("[+\\-*/%]");
+
+    /**
+     * 分隔符
+     */
+    private char separator = '#';
+
+    public ExtendedRedisCacheManager(RedisOperations redisOperations) {
+        super(redisOperations);
+    }
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    protected RedisCache createCache(String cacheName) {
+        // 获取默认时间
+        long expiration = computeExpiration(cacheName);
+        int index = cacheName.indexOf(this.getSeparator());
+        if (index > 0) {
+            expiration = getExpiration(cacheName, index, expiration);
+        }
+        LoggerUtils.debug(this.getClass(),cacheName+",缓存时间="+expiration);
+        return new RedisCache(cacheName, (isUsePrefix() ? getCachePrefix().prefix(cacheName) : null),
+                getRedisOperations(), expiration);
+    }
+
+    /**
+     * 计算缓存时间
+     * @param name 缓存名字 cache#60*60
+     * @param separatorIndex 分隔符位置
+     * @param defalutExp 默认缓存时间
+     * @return
+     */
+    protected long getExpiration(final String name, final int separatorIndex, final long defalutExp) {
+        Long expiration = null;
+        String expirationAsString = name.substring(separatorIndex + 1);
+        try {
+            if (pattern.matcher(expirationAsString).find()) {
+                expiration = NumberUtils.toLong(scriptEngine.eval(expirationAsString).toString(), defalutExp);
+            } else {
+                expiration = NumberUtils.toLong(expirationAsString, defalutExp);
+            }
+        } catch (ScriptException e) {
+            LoggerUtils.fmtError(this.getClass(),e,"缓存时间转换错误:{},异常:{}",name,e.getMessage());
+        }
+        return Objects.nonNull(expiration) ? expiration.longValue() : defalutExp;
+    }
+
+    public char getSeparator() {
+        return separator;
+    }
+
+    public void setSeparator(char separator) {
+        this.separator = separator;
+    }
+}

+ 3 - 1
src/main/java/com/goafanti/core/cache/serializer/FastJsonRedisSerializer.java

@@ -1,5 +1,6 @@
 package com.goafanti.core.cache.serializer;
 
+import com.goafanti.weChat.bo.InputPublicStatistics;
 import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.data.redis.serializer.SerializationException;
 
@@ -23,7 +24,8 @@ public class FastJsonRedisSerializer implements RedisSerializer<Object> {
 		pc.addAccept("com.goafanti.news.bo.NewsPortalList");
 		pc.addAccept("com.goafanti.common.model.Activity");
 		pc.addAccept("com.goafanti.portal.bo.InternationalListBo");
-		pc.addAccept("com.goafanti.easemob.bo.EasemobInfo");
+		pc.addAccept("com.goafanti.weChat.bo.OutPublicStatistics");
+		pc.addAccept("com.goafanti.core.mybatis.page.Pagination");
 	}
 
 	@Override

+ 46 - 1
src/main/java/com/goafanti/core/shiro/cache/ShiroRedisCacheManager.java

@@ -1,21 +1,66 @@
 package com.goafanti.core.shiro.cache;
 
+import com.goafanti.common.utils.LoggerUtils;
+import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.shiro.cache.AbstractCacheManager;
 import org.apache.shiro.cache.Cache;
 import org.apache.shiro.cache.CacheException;
 import org.springframework.data.redis.core.RedisTemplate;
 
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.util.Objects;
+import java.util.regex.Pattern;
+
 public class ShiroRedisCacheManager extends AbstractCacheManager {
 
 	private RedisTemplate<String, Object>	redisTemplate;
 
-	private long							expire	= -1l;	// 秒
+	private long							expire	= 2592000l;	// 秒
+
+	private static final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("JavaScript");
+
+	private static final Pattern pattern = Pattern.compile("[+\\-*/%]");
+
+	/**
+	 * 分隔符
+	 */
+	private char separator = '#';
 
 	@Override
 	protected Cache<String, Object> createCache(String name) throws CacheException {
+		// 获取默认时间
+		long expiration = getExpire();
+		int index = name.indexOf(separator);
+		if (index > 0) {
+			expiration = getExpiration(name, index, expiration);
+		}
 		return new ShiroRedisCache(redisTemplate, name, expire);
 	}
 
+	/**
+	 * 计算缓存时间
+	 * @param name 缓存名字 cache#60*60
+	 * @param separatorIndex 分隔符位置
+	 * @param defalutExp 默认缓存时间
+	 * @return
+	 */
+	protected long getExpiration(final String name, final int separatorIndex, final long defalutExp) {
+		Long expiration = null;
+		String expirationAsString = name.substring(separatorIndex + 1);
+		try {
+			if (pattern.matcher(expirationAsString).find()) {
+				expiration = NumberUtils.toLong(scriptEngine.eval(expirationAsString).toString(), defalutExp);
+			} else {
+				expiration = NumberUtils.toLong(expirationAsString, defalutExp);
+			}
+		} catch (ScriptException e) {
+			LoggerUtils.fmtError(ShiroRedisCacheManager.class,e,"缓存时间转换错误:{},异常:{}", name, e.getMessage());
+		}
+		return Objects.nonNull(expiration) ? expiration.longValue() : defalutExp;
+	}
+
 	public RedisTemplate<String, Object> getRedisTemplate() {
 		return redisTemplate;
 	}

+ 0 - 6
src/main/java/com/goafanti/core/shiro/filter/AdminFilter.java

@@ -30,12 +30,6 @@ public class AdminFilter extends AccessControlFilter {
 
 		AftUser token = TokenManager.getToken();
 		if (token instanceof Admin) {
-			Admin admin=adminMapper.selectByPrimaryKey(TokenManager.getAdminId());
-			if (admin !=null&&admin.getStatus()!=null&&!admin.getStatus().equals("正常")) {
-				LoggerUtils.debug(getClass(), "当前用户已被锁定!");
-				shiroFilterUtils.out((HttpServletResponse) response, new Result().error(new Error("", "403", "当前用户已被锁定!")));
-				return Boolean.FALSE;
-			}
 			return Boolean.TRUE;
 		}
 		return Boolean.FALSE;

+ 22 - 24
src/main/java/com/goafanti/order/controller/OrderChangeApiController.java

@@ -1,8 +1,6 @@
 package com.goafanti.order.controller;
 
 
-
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -26,11 +24,11 @@ import com.goafanti.order.service.OrderChangeService;
 @RestController
 @RequestMapping(value = "/api/admin/orderChange")
 public class OrderChangeApiController extends CertifyApiController {
-	
+
 	@Autowired
 	private OrderChangeService	orderChangeService;
-	
-	
+
+
 	/**
 	 *  新增变更
 	 */
@@ -48,7 +46,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.addOrderChange(t,startRemarks));
 		return res;
 	}
-	
+
 	@RequestMapping(value = "/addChangeTask", method = RequestMethod.POST)
 	public Result addChangeTask(TChangeTask t){
 		Result res = new Result();
@@ -75,7 +73,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.addChangeTask(t));
 		return res;
 	}
-	
+
 	/**
 	 *  变更项目列表
 	 * @return
@@ -119,7 +117,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.deleteChangeTask(t.getId()));
 		return res;
 	}
-	
+
 	/**
 	 *  修改变更项目
 	 * @param t
@@ -270,7 +268,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		return res;
 	}
 	/**
-	 *	  变更文件上传 
+	 *	  变更文件上传
 	 */
 	@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
 	public Result uploadRefundOrderFile(HttpServletRequest req,String sign){
@@ -308,7 +306,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.data(orderChangeService.addOrderRefundInvoice(o));
 		return res;
 	}
-	
+
 	/**
 	 *  新增回收发票
 	 */
@@ -348,7 +346,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.data(orderChangeService.listOrderRefundInvoice(orderNo));
 		return res;
 	}
-	
+
 	/**
 	 *  回收发票列表
 	 */
@@ -405,11 +403,11 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.data(orderChangeService.updateCancelOrderChange(nb));
 		return res;
 	}
-	
-	
+
+
 	/**
 	 * 	导出变更列表
-     * 
+     *
      * @param response
      * @return
      */
@@ -425,13 +423,13 @@ public class OrderChangeApiController extends CertifyApiController {
 				e.printStackTrace();
 				return res;
 			}
-         res.data(1); 
+         res.data(1);
     	return res;
     }
-	
-    
+
+
     /**
-	 *	  变更退款图片文件上传 
+	 *	  变更退款图片文件上传
 	 */
 	@RequestMapping(value = "/uploadRefund", method = RequestMethod.POST)
 	public Result uploadRefund(HttpServletRequest req,String sign){
@@ -450,9 +448,9 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(handleFile(res, "/order_change_attachment/", false, req, sign));
 		return res;
 	}
-	
+
 	/**
-	 *	  新增退款信息 
+	 *	  新增退款信息
 	 */
 	@RequestMapping(value = "/addRefund", method = RequestMethod.POST)
 	public Result addRefund(InputNewOrderRefund or){
@@ -472,7 +470,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.addOrderRefund(or));
 		return res;
 	}
-	
+
 	/**
 	 * 删除退款信息
 	 */
@@ -482,7 +480,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.deleteRefund(id));
 		return res;
 	}
-	
+
 	/**
 	 * 退款信息列表
 	 */
@@ -492,7 +490,7 @@ public class OrderChangeApiController extends CertifyApiController {
 		res.setData(orderChangeService.listRefund(id));
 		return res;
 	}
-	
+
 	/**
 	 * 确认退款
 	 */
@@ -503,5 +501,5 @@ public class OrderChangeApiController extends CertifyApiController {
 		return res;
 	}
 
-	
+
 }

+ 8 - 7
src/main/java/com/goafanti/user/controller/UserLoginController.java

@@ -37,7 +37,7 @@ public class UserLoginController extends BaseController {
 	private UserService userService;
 	@Autowired
 	private AdminMapper			adminMapper;
-	
+
 	@RequestMapping(value = "/login", method = RequestMethod.GET)
 	@ResponseBody
 	public Result login(HttpServletRequest request, Model model) {
@@ -48,7 +48,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 用户登录
-	 * 
+	 *
 	 * @param user
 	 * @param remember
 	 * @param request
@@ -71,7 +71,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 用户登录
-	 * 
+	 *
 	 * @param user
 	 * @param remember
 	 * @param request
@@ -82,7 +82,7 @@ public class UserLoginController extends BaseController {
 	public Result mLogin(User user, Boolean remember, HttpServletRequest request) {
 		Result res = new Result();
 		JSONObject jo = (JSONObject) JSON.toJSON(TokenManager.login(user, remember));
-		
+
 		UserBasicInfo ubi=userService.selectBaseInfo();
 		jo.put("easemobName",ubi.getEasemobName());
 		jo.put("easemobPass",ubi.getEasemobPass());
@@ -94,7 +94,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 管理端登录
-	 * 
+	 *
 	 * @param request
 	 * @return
 	 */
@@ -116,6 +116,7 @@ public class UserLoginController extends BaseController {
 		Admin a =adminMapper.selectByMobile(admin.getMobile());
 		if (a!=null) {
 			a.setLastLoginTime(new Date());
+			a.setToken(TokenManager.getSession().getId().toString());
 			adminMapper.updateByPrimaryKeySelective(a);
 		}
 		return res;
@@ -123,7 +124,7 @@ public class UserLoginController extends BaseController {
 
 	/**
 	 * 忘记密码 使用手机号+手机验证码登录
-	 * 
+	 *
 	 * @param mobileCode
 	 * @return
 	 */
@@ -145,5 +146,5 @@ public class UserLoginController extends BaseController {
 		}
 		return res;
 	}
-	
+
 }

+ 18 - 13
src/main/java/com/goafanti/weChat/service/impl/PublicReleaseServiceImpl.java

@@ -11,6 +11,7 @@ import java.util.UUID;
 import com.goafanti.common.dao.*;
 import com.goafanti.order.service.OrderService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.web.socket.TextMessage;
 
@@ -51,7 +52,7 @@ import cn.jiguang.common.utils.StringUtils;
 @Service
 public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper> implements PublicReleaseService {
 	@Autowired
-	private PublicReleaseMapper	publicReleaseMapper; 
+	private PublicReleaseMapper	publicReleaseMapper;
 	@Autowired
 	private PublicReleaseLogMapper publicReleaseLogMapper;
 	@Autowired
@@ -72,7 +73,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 	private SystemWebSocketHandler	systemWebSocketHandler;
 	@Autowired
 	private TOrderNewMapper tOrderNewMapper;
-	
+
 	@Override
 	public Map<String, Object> addPublicRelease(InputPublicRelease in) {
 		Date date =new Date();
@@ -104,8 +105,8 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 				sendEmail(my, a,1);
 			}
 			map.put("code", res);
-			
-			
+
+
 		}else {
 			sendEmail(my, a,1);
 			map.put("code", 2);
@@ -140,7 +141,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 			asyncUtils.send(email);
 		}
 	}
-	
+
 	@Override
 	public int updatePublicRelease(InputPublicRelease in) {
 		try {
@@ -172,7 +173,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		Map<String,Object> map =new HashMap<String, Object>();
 		map.put("type", in.getType()==null?0:in.getType());
 		map.put("aid", TokenManager.getAdminId());
-		if (StringUtils.isNotEmpty(in.getClockTime()))	map.put("clockTime", in.getClockTime());	
+		if (StringUtils.isNotEmpty(in.getClockTime()))	map.put("clockTime", in.getClockTime());
 		if(StringUtils.isNotEmpty(in.getReleaseStarts()))	map.put("releaseStarts", in.getReleaseStarts());
 		if(StringUtils.isNotEmpty(in.getReleaseEnds()))	map.put("publicEnd", in.getReleaseEnds()+" 23:59:59");
 		if(StringUtils.isNotEmpty(in.getUserName()))	map.put("userName", in.getUserName());
@@ -217,25 +218,25 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		sendNoticeAndSoucket(a.getId(),type,content);
 		if (my.getOpenId()!=null) {
 			if (remarks.length()>19) {
-				remarks=remarks.substring(0, 15)+"...";	
+				remarks=remarks.substring(0, 15)+"...";
 			}
 			Integer res=weChatUtils.addNotice(a.getOpenId(),p.getStatus(),p.getId(),date,my.getName(),remarks);
 			if (res!=0) {
 				sendEmail( my,  a, status);
-				
+
 			}
 			return res;
 		}
 			return 1;
 	}
-	
+
 	@Override
 	public List<outPublicReleaseLog> listPublicReleaseLog(Integer id,String ufid) {
 		List<outPublicReleaseLog> list=publicReleaseLogMapper.listPublicReleaseLog(id,ufid);
 		return list;
 	}
 
-	
+
 	@Override
 	public int pushPublicReleaseClockIn(Integer id,String photoUrl) {
 		PublicRelease p=new PublicRelease();
@@ -295,14 +296,18 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		}
 		return out;
 	}
-	
+
 	@Override
 	public OutPublicRelease followDtails(String id) {
-		return	publicReleaseMapper.selectDtails(null,id); 
+		return	publicReleaseMapper.selectDtails(null,id);
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override
+	@Cacheable(value = "publicReleaseStatistics#300", key = "'publicReleaseStatistics:" +
+			"aid:'+#in.aid+'depId:'+#in.depId+'clockStart:'+#in.clockStart+" +
+			"'clockEnd:'+#in.clockEnd+'createStart:'+#in.createStart+'createEnd'+#in.createEnd+" +
+			"'pageNo:'+#in.pageNo+'pageSzie:'+#in.pageSize")
 	public Object publicReleaseStatistics(InputPublicStatistics in) {
 		Map<String,Object> map =new HashMap<String, Object>();
 		if(in.getAid()!=null)map.put("aid", in.getAid());
@@ -314,7 +319,7 @@ public class PublicReleaseServiceImpl extends BaseMybatisDao<PublicReleaseMapper
 		return (Pagination<OutPublicStatistics>) findPage("listPublicStatistics", "countPublicStatistics", map, in.getPageNo(), in.getPageSize());
 	}
 
-	
+
 
 	@SuppressWarnings("unchecked")
 	@Override

+ 5 - 5
src/main/resources/spring/spring-shiro.xml

@@ -24,7 +24,7 @@
         <property name="maxWaitMillis" value="100000"/>
         <property name="maxTotal" value="10000"/>
     </bean>
-	
+
 	 <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
         <constructor-arg name="poolConfig" ref="poolConfig"/>
         <constructor-arg name="host" value="${jedis.host}"/>
@@ -55,15 +55,15 @@
 	</bean>
 
 	<bean id="cacheManager"
-		class="org.springframework.data.redis.cache.RedisCacheManager">
+		class="com.goafanti.core.cache.ExtendedRedisCacheManager">
 		<constructor-arg index="0" ref="redisTemplate" />
-		<property name="defaultExpiration" value="86400" />
+		<property name="defaultExpiration" value="1800" />
 	</bean>
 
 	<bean id="shrioRedisCacheManager"
 		class="com.goafanti.core.shiro.cache.ShiroRedisCacheManager">
 		<property name="redisTemplate" ref="sessionRedisTemplate" />
-		<property name="expire" value="2592000" />
+		<property name="expire" value="7200" />
 	</bean>
 
 
@@ -190,4 +190,4 @@
 	<!-- -->
 	<bean id="lifecycleBeanPostProcessor"
 		class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
-</beans>
+</beans>