fanli/src/main/java/com/yeshi/fanli/aspect/ActiveUserAspect.java
@@ -4,8 +4,9 @@ import javax.annotation.Resource; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.DefaultParameterNameDiscoverer; @@ -14,8 +15,10 @@ import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.stereotype.Component; import org.yeshi.utils.NumberUtil; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.annotation.UserActive; @@ -29,19 +32,20 @@ * @author Administrator * */ // @Component // @Aspect // @Order(6) @Component @Aspect public class ActiveUserAspect { @Resource private JedisPool jedisPool; @Resource private UserInfoModifyRecordService userInfoModifyRecordService; private ExpressionParser parser = new SpelExpressionParser(); private DefaultParameterNameDiscoverer nameDiscoverer = new DefaultParameterNameDiscoverer(); public String generateKeyBySpEL(String spELString, ProceedingJoinPoint joinPoint) { public String generateKeyBySpEL(String spELString, JoinPoint joinPoint) { MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); String[] paramNames = nameDiscoverer.getParameterNames(methodSignature.getMethod()); Expression expression = parser.parseExpression(spELString); @@ -56,7 +60,7 @@ public static final String EDP = "execution(* com.yeshi.fanli.controller.client.*.*.*(..))"; @Before(EDP) public void activeBefore(ProceedingJoinPoint joinPoint) { public void activeBefore(JoinPoint joinPoint) { try { Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; @@ -73,12 +77,11 @@ String key = "useractive-" + uidStr; Jedis jedis = jedisPool.getResource(); try { if (jedis.setnx(key, "1") > 0) { jedis.expire(key, 60);// 60s内不处理 jedis.expire(key, 60*5);// 5分钟内不处理 try { // TODO 用户活跃处理 userInfoModifyRecordService.syncBeforeInfo(Long.parseLong(uidStr)); } catch (Exception e) { } } fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
@@ -113,6 +113,7 @@ import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.account.UserUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKey; import com.yeshi.fanli.util.annotation.UserActive; import com.yeshi.fanli.util.email.MailSenderUtil; import com.yeshi.fanli.util.factory.AccountDetailsFactory; import com.yeshi.fanli.util.factory.HongBaoFactory; @@ -216,10 +217,9 @@ @Resource private UserTaoLiJinDetailService userTaoLiJinDetailService; @Resource private UserInfoModifyRecordService userInfoModifyRecordService; private static final String PASSWORD_MAX_ERROR = "password_max_error"; private static final String EXTRACT_MIN_MONEY = "extract_min_money"; @@ -1394,7 +1394,6 @@ } } /** * h5收藏 * @@ -1701,7 +1700,6 @@ } /** * 用户队员列表查询 1.5.3查询有效队员 * @@ -1836,7 +1834,6 @@ e.printStackTrace(); } } /** * 用户队员信息保存 1.4.1 @@ -2041,6 +2038,7 @@ * @param requst * @param out */ @UserActive(uid = "#uid") @RequestMapping(value = "getuserinfoNew", method = RequestMethod.POST) public void getuserinfoNew(AcceptData acceptData, Long uid, HttpServletRequest requst, PrintWriter out) { try { @@ -2128,20 +2126,20 @@ userInfo.setRankNamePicture(null); userInfo.setRankIcon(null); } // 1.6.5 之后返回性别、微信号 if(VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) { if(userInfoExtra.getSex() != null) if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) { if (userInfoExtra.getSex() != null) userInfo.setSex(userInfoExtra.getSex()); if(!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) userInfo.setWeiXin(userInfoExtra.getWeiXin()); } } // 1.6.5 之后返回 微信号提示 if(VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) userInfo.setWeiXinTip("添加微信号后,你的邀请人和一级队员可以通过微信与你建立联系。"); data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo)); data.put("invitCode", invitCode); // 邀请码 data.put("welfareCenterNews", welfareCenterNews);// 福利中心消息 @@ -2226,7 +2224,7 @@ userInfoService.uploadPortrait(file, uid); out.print(JsonUtil.loadTrueResult("保存成功")); } catch (UserInfoException e) { out.print(JsonUtil.loadFalseResult(e.getMsg())); try { @@ -2260,7 +2258,8 @@ * @param out */ @RequestMapping(value = "saveInfo") public void saveInfo(AcceptData acceptData, String nickName, String weiXin, Integer sex, Long uid, PrintWriter out) { public void saveInfo(AcceptData acceptData, String nickName, String weiXin, Integer sex, Long uid, PrintWriter out) { try { if (uid == null) { out.print(JsonUtil.loadFalseResult("用户未登录")); @@ -2273,34 +2272,34 @@ out.print(JsonUtil.loadFalseResult("昵称过长")); return; } if (maskKeyService.examineContent(nickName)) { out.print(JsonUtil.loadFalseResult("不能包含敏感词汇")); return; } userInfoService.saveUserInfo(nickName, uid); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.nickName, nickName); } // 修改微信号 if (!StringUtil.isNullOrEmpty(weiXin)) { if (weiXin.length() > 32) { out.print(JsonUtil.loadFalseResult("微信号过长")); return; } UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra != null) { UserInfoExtra extra = new UserInfoExtra(); extra.setId(userInfoExtra.getId()); extra.setWeiXin(weiXin); userInfoExtraService.saveUserInfoExtra(extra); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.setWeiXinNum, weiXin); } } // 修改性别 if (sex != null && sex > 0 && sex < 3) { UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); @@ -2309,7 +2308,7 @@ extra.setId(userInfoExtra.getId()); extra.setSex(sex); userInfoExtraService.saveUserInfoExtra(extra); userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.gender, sex + ""); } } fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserInfoModifyRecordMapper.java
@@ -6,13 +6,24 @@ import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord; public interface UserInfoModifyRecordMapper extends BaseMapper<UserInfoModifyRecord> { /** * 统计修改次数 * * @param uid * @param type 可为空则查询所有类型 * @param type * 可为空则查询所有类型 * @return */ long countByUid(@Param("uid") Long uid, @Param("type") String type); /** * 根据修改类型与用户ID查询最近一次的修改记录 * * @param uid * @param type * @return */ UserInfoModifyRecord selectLatestByUidAndType(@Param("uid") Long uid, @Param("type") String type); } fanli/src/main/java/com/yeshi/fanli/mapping/user/UserInfoModifyRecordMapper.xml
@@ -2,48 +2,83 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yeshi.fanli.dao.mybatis.user.UserInfoModifyRecordMapper"> <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord"> <id column="umr_id" property="id" jdbcType="BIGINT"/> <result column="umr_uid" property="uid" jdbcType="BIGINT"/> <result column="umr_type" property="type" jdbcType="VARCHAR"/> <result column="umr_value" property="value" jdbcType="VARCHAR"/> <result column="umr_create_time" property="createTime" jdbcType="TIMESTAMP"/> </resultMap> <sql id="Base_Column_List">umr_id,umr_uid,umr_type,umr_value,umr_create_time</sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">select <include refid="Base_Column_List"/>from yeshi_ec_user_modify_record where umr_id = #{id,jdbcType=BIGINT} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_user_modify_record where umr_id = #{id,jdbcType=BIGINT}</delete> <insert id="insert" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_modify_record (umr_id,umr_uid,umr_type,umr_value,umr_create_time) values (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{type,jdbcType=VARCHAR},#{value,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP})</insert> <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_modify_record <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">umr_id,</if> <if test="uid != null">umr_uid,</if> <if test="type != null">umr_type,</if> <if test="value != null">umr_value,</if> <if test="createTime != null">umr_create_time,</if> </trim>values <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">#{id,jdbcType=BIGINT},</if> <if test="uid != null">#{uid,jdbcType=BIGINT},</if> <if test="type != null">#{type,jdbcType=VARCHAR},</if> <if test="value != null">#{value,jdbcType=VARCHAR},</if> <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if> </trim> </insert> <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord">update yeshi_ec_user_modify_record set umr_uid = #{uid,jdbcType=BIGINT},umr_type = #{type,jdbcType=VARCHAR},umr_value = #{value,jdbcType=VARCHAR},umr_create_time = #{createTime,jdbcType=TIMESTAMP} where umr_id = #{id,jdbcType=BIGINT}</update> <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord">update yeshi_ec_user_modify_record <set> <if test="uid != null">umr_uid=#{uid,jdbcType=BIGINT},</if> <if test="type != null">umr_type=#{type,jdbcType=VARCHAR},</if> <if test="value != null">umr_value=#{value,jdbcType=VARCHAR},</if> <if test="createTime != null">umr_create_time=#{createTime,jdbcType=TIMESTAMP},</if> </set> where umr_id = #{id,jdbcType=BIGINT} </update> <select id="countByUid" resultType="Long"> SELECT IFNULL(COUNT(d.`umr_id`),0) FROM yeshi_ec_user_modify_record d WHERE d.`umr_uid` = #{uid} <if test="type != null">AND d.`umr_type`= #{type}</if> </select> <resultMap id="BaseResultMap" type="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord"> <id column="umr_id" property="id" jdbcType="BIGINT" /> <result column="umr_uid" property="uid" jdbcType="BIGINT" /> <result column="umr_type" property="type" jdbcType="VARCHAR" /> <result column="umr_value" property="value" jdbcType="VARCHAR" /> <result column="umr_create_time" property="createTime" jdbcType="TIMESTAMP" /> </resultMap> <sql id="Base_Column_List">umr_id,umr_uid,umr_type,umr_value,umr_create_time</sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long"> select <include refid="Base_Column_List" /> from yeshi_ec_user_modify_record where umr_id = #{id,jdbcType=BIGINT} </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_user_modify_record where umr_id = #{id,jdbcType=BIGINT} </delete> <insert id="insert" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord" useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_user_modify_record (umr_id,umr_uid,umr_type,umr_value,umr_create_time) values (#{id,jdbcType=BIGINT},#{uid,jdbcType=BIGINT},#{type,jdbcType=VARCHAR},#{value,jdbcType=VARCHAR},#{createTime,jdbcType=TIMESTAMP}) </insert> <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord" useGeneratedKeys="true" keyProperty="id"> insert into yeshi_ec_user_modify_record <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">umr_id,</if> <if test="uid != null">umr_uid,</if> <if test="type != null">umr_type,</if> <if test="value != null">umr_value,</if> <if test="createTime != null">umr_create_time,</if> </trim> values <trim prefix="(" suffix=")" suffixOverrides=","> <if test="id != null">#{id,jdbcType=BIGINT},</if> <if test="uid != null">#{uid,jdbcType=BIGINT},</if> <if test="type != null">#{type,jdbcType=VARCHAR},</if> <if test="value != null">#{value,jdbcType=VARCHAR},</if> <if test="createTime != null">#{createTime,jdbcType=TIMESTAMP},</if> </trim> </insert> <update id="updateByPrimaryKey" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord">update yeshi_ec_user_modify_record set umr_uid = #{uid,jdbcType=BIGINT},umr_type = #{type,jdbcType=VARCHAR},umr_value = #{value,jdbcType=VARCHAR},umr_create_time = #{createTime,jdbcType=TIMESTAMP} where umr_id = #{id,jdbcType=BIGINT} </update> <update id="updateByPrimaryKeySelective" parameterType="com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord"> update yeshi_ec_user_modify_record <set> <if test="uid != null">umr_uid=#{uid,jdbcType=BIGINT},</if> <if test="type != null">umr_type=#{type,jdbcType=VARCHAR},</if> <if test="value != null">umr_value=#{value,jdbcType=VARCHAR},</if> <if test="createTime != null">umr_create_time=#{createTime,jdbcType=TIMESTAMP},</if> </set> where umr_id = #{id,jdbcType=BIGINT} </update> <select id="countByUid" resultType="Long"> SELECT IFNULL(COUNT(d.`umr_id`),0) FROM yeshi_ec_user_modify_record d WHERE d.`umr_uid` = #{uid} <if test="type != null">AND d.`umr_type`= #{type}</if> </select> <select id="selectLatestByUidAndType" resultMap="BaseResultMap"> SELECT * FROM yeshi_ec_user_modify_record d WHERE d.`umr_uid` = #{uid} <if test="type != null">AND d.`umr_type`= #{type}</if> order by umr_id desc limit 1 </select> </mapper> fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoModifyRecordServiceImpl.java
@@ -8,11 +8,19 @@ import org.springframework.stereotype.Service; import com.yeshi.fanli.dao.mybatis.user.UserInfoModifyRecordMapper; import com.yeshi.fanli.entity.bus.user.BindingAccount; import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord; import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.integral.IntegralGetService; import com.yeshi.fanli.service.inter.user.BindingAccountService; import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.util.StringUtil; @Service @@ -20,9 +28,21 @@ @Resource private UserInfoModifyRecordMapper userInfoModifyRecordMapper; @Resource private IntegralGetService integralGetService; @Resource private UserInfoService userInfoService; @Resource private UserInfoExtraService userInfoExtraService; @Resource private BindingAccountService bindingAccountService; @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; @Async() @Override @@ -30,7 +50,7 @@ try { if (uid == null || StringUtil.isNullOrEmpty(value)) return; long count = countByUid(uid, type.name()); if (count == 0) { if (type == ModifyTypeEnum.bindPhone) { @@ -51,13 +71,16 @@ integralGetService.addSetWeiXinNum(uid); } } UserInfoModifyRecord record = new UserInfoModifyRecord(); record.setUid(uid); record.setType(type); record.setValue(value); record.setCreateTime(new Date()); userInfoModifyRecordMapper.insertSelective(record); UserInfoModifyRecord oldRecord = userInfoModifyRecordMapper.selectLatestByUidAndType(uid, type.name()); if (oldRecord == null || !oldRecord.getValue().equalsIgnoreCase(value)) {// 不能修改重复的数据 UserInfoModifyRecord record = new UserInfoModifyRecord(); record.setUid(uid); record.setType(type); record.setValue(value); record.setCreateTime(new Date()); userInfoModifyRecordMapper.insertSelective(record); } } catch (Exception e) { e.printStackTrace(); LogHelper.errorDetailInfo(e); @@ -68,4 +91,46 @@ public long countByUid(Long uid, String type) { return userInfoModifyRecordMapper.countByUid(uid, type); } @Override public void syncBeforeInfo(Long uid) { // 获取用户基本信息 UserInfo user = userInfoService.selectByPKey(uid); if (user == null || user.getState() != UserInfo.STATE_NORMAL) {// 用户不正常 return; } if (!StringUtil.isNullOrEmpty(user.getPhone())) { addModifyRecord(uid, ModifyTypeEnum.bindPhone, user.getPhone()); } BindingAccount account = bindingAccountService.getBindingAccountByUidAndType(uid, BindingAccount.TYPE_ALIPAY); if (account != null) { addModifyRecord(uid, ModifyTypeEnum.bindAlipay, account.getAccount()); } if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) { addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, user.getWxUnionId()); } if (user.getNickName() != null && !user.getNickName().startsWith("返利券")) { addModifyRecord(uid, ModifyTypeEnum.nickName, user.getNickName() + ""); } UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra != null) { if (userInfoExtra.getSex() != null) addModifyRecord(uid, ModifyTypeEnum.gender, userInfoExtra.getSex() + ""); if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) addModifyRecord(uid, ModifyTypeEnum.setWeiXinNum, userInfoExtra.getWeiXin()); } UserExtraTaoBaoInfo taoBaoExtra = userExtraTaoBaoInfoService.getByUid(uid); if (taoBaoExtra != null && !StringUtil.isNullOrEmpty(taoBaoExtra.getRelationId()) && !StringUtil.isNullOrEmpty(taoBaoExtra.getSpecialId()) && taoBaoExtra.getRelationValid() && taoBaoExtra.getSpecialValid()) { addModifyRecord(uid, ModifyTypeEnum.bindTaoBao, taoBaoExtra.getTaoBaoUid()); } } } fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoModifyRecordService.java
@@ -7,13 +7,20 @@ public void addModifyRecord(Long uid, ModifyTypeEnum type, String value); /** * 统计修改次数 * 同步之前的用户信息 * * @param uid * @param type 可为空则查询所有类型 */ public void syncBeforeInfo(Long uid); /** * 统计修改次数 * * @param uid * @param type * 可为空则查询所有类型 * @return */ public long countByUid(Long uid, String type); }