admin
2019-08-27 b863cc7f007a953a794c09729a034f5d34b26d9b
个人信息维护修改
6个文件已修改
300 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/aspect/ActiveUserAspect.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserInfoModifyRecordMapper.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserInfoModifyRecordMapper.xml 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoModifyRecordServiceImpl.java 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoModifyRecordService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
}