yujian
2019-11-06 11261b1ecf556ebb6cc4d619c6e685ed0e08e9a9
红包领取
12个文件已修改
1个文件已添加
275 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java 77 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/homemodule/FloatADMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/redpack/RedPackWinInviteMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/homemodule/FloatADMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/redpack/RedPackWinInviteMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/FloatADServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/FloatADService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinInviteService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinNewUserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/homemodule/FloatImgDetailVO.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java
@@ -1,6 +1,8 @@
package com.yeshi.fanli.controller.client.v2;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
@@ -14,12 +16,14 @@
import com.yeshi.fanli.entity.bus.homemodule.FloatAD;
import com.yeshi.fanli.entity.bus.msg.MsgDeviceReadState;
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.entity.config.AppHomeFloatImg;
import com.yeshi.fanli.entity.taobao.ClientTBPid;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.homemodule.FloatADService;
import com.yeshi.fanli.service.inter.msg.MsgDeviceReadStateService;
import com.yeshi.fanli.service.inter.redpack.RedPackWinNewUserService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
import com.yeshi.fanli.service.inter.user.TBPidService;
@@ -32,6 +36,7 @@
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.vo.homemodule.FloatImgDetailVO;
import net.sf.json.JSONObject;
@@ -71,6 +76,10 @@
    @Resource
    private UserActiveLogService userActiveLogService;
    @Resource
    private RedPackWinNewUserService redPackWinNewUserService;
    /**
     * s 首页配置信息
@@ -148,54 +157,44 @@
        if (uid != null && uid == 0L)
            uid = null;
        AppHomeFloatImg appHomeFloatImg = configService.getAppHomeFloatImg();
        if ("ios".equalsIgnoreCase(acceptData.getPlatform()) && !Constant.IS_TEST) {
            appHomeFloatImg = null;
        // 活动弹框
        List<FloatAD> listAD = null;
        if (redPackWinNewUserService.verifyHasReward(uid)) {
            listAD = floatADService.getValidByPosition(FloatAD.POSITION_INDEX);
        } else {
            listAD = floatADService.getValidCommonByPosition(FloatAD.POSITION_INDEX);
        }
        List<FloatImgDetailVO> listVO = new ArrayList<FloatImgDetailVO>();
        if (listAD != null && !listAD.isEmpty()) {
            for (FloatAD floatAD: listAD) {
                JumpDetailV2 jumpDetail = floatAD.getJumpDetail();
                if (jumpDetail != null) {
                    jumpDetail = jumpDetailV2Service.selectByPrimaryKey(jumpDetail.getId());
                    if (jumpDetail != null) {
                        jumpDetail.setNeedLogin(floatAD.isJumpNeedLogin());
                    }
                }
                FloatImgDetailVO floatImgVO = new FloatImgDetailVO();
                floatImgVO.setId(floatAD.getId().toString());
                floatImgVO.setImg(floatAD.getPicture());
                floatImgVO.setParams(floatAD.getParams());
                floatImgVO.setJumpDetail(jumpDetail);
                floatImgVO.setShowTime(floatAD.getShowMode());
                floatImgVO.setAccountLogin(floatAD.isJumpNeedLogin());
                listVO.add(floatImgVO);
            }
        }
        JSONObject data = new JSONObject();
        if (appHomeFloatImg != null) {
            data.put("floatImg", appHomeFloatImg);
        }
        String notifyImg = configService.getAppHomeFloatNotifyImg();
        if (!StringUtil.isNullOrEmpty(notifyImg)) {
            data.put("floatNotifyImg", notifyImg);
        }
        // 无新人弹框 则查询默认
        FloatAD floatAD = floatADService.getEffectiveFloatAD(FloatAD.POSITION_INDEX, 0);
        if (floatAD != null) {
            JSONObject detail = new JSONObject();
            detail.put("img", floatAD.getPicture());
            detail.put("jumpDetail", floatAD.getJumpDetail());
            detail.put("params", floatAD.getParams());
            detail.put("showTime", floatAD.getShowMode());
            detail.put("accountLogin", floatAD.isJumpNeedLogin());
            data.put("floatImgDetail", detail);
        }
        data.put("listAD", JsonUtil.getApiCommonGson().toJson(listVO));
        // 领券帮助链接,1.5.2后生效
        String couponHelp = configService.get("taobao_coupon_help");
        data.put("couponHelpUrl", couponHelp);
        // 底部网页链接
        // 是否显示热门功能按钮
        String platform = acceptData.getPlatform();
        if ("android".equalsIgnoreCase(platform)) {
            data.put("htmlLink", configService.get("index_html_link_android"));
        }
        // 判断新老用户
        UserActiveLog da = null;
        if (uid != null)
            da = userActiveLogService.getFirstActiveInfo(uid);
        // 新人
        if (da == null || (System.currentTimeMillis() - da.getCreateTime().getTime()) <= 1000 * 60 * 60 * 24 * 15L) {
            data.put("userTimeType", 0);
        } else {// 老人
            data.put("userTimeType", 1);
        }
        data.put("hotFuctionLink",
                configService.getByVersion("hot_function_url", platform, Integer.parseInt(acceptData.getVersion())));
        out.print(JsonUtil.loadTrueResult(data));
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RedPackControllerV2.java
@@ -356,13 +356,15 @@
        }
        JSONObject data = new JSONObject();
        data.put("winMoney", redPackWinInviteService.getRewardMoney(uid).setScale(2));
        data.put("count", redPackWinInviteService.countRewardRecord(uid));
        data.put("list", JsonUtil.getApiCommonGson().toJson(list));
        if (!StringUtil.isNullOrEmpty(callback)) {
            out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
        } else
        } else {
            out.print(JsonUtil.loadTrueResult(data));
    }
    }
    /**
     * 用户基础信息
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/homemodule/FloatADMapper.java
@@ -60,6 +60,14 @@
     */
    FloatAD getEffectiveFloatAD(@Param("position") String position, @Param("type") Integer type);
    /**
     * 查询有效弹出框
     * @param position
     * @return
     */
    List<FloatAD> getValidFloatAD(@Param("position") String position, @Param("type") Integer type);
}
    
    
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/redpack/RedPackWinInviteMapper.java
@@ -1,5 +1,6 @@
package com.yeshi.fanli.dao.mybatis.redpack;
import java.math.BigDecimal;
import java.util.List;
import org.apache.ibatis.annotations.Param;
@@ -37,4 +38,13 @@
    
    
    Long countRewardRecord(@Param("uid")Long uid); 
    /**
     * 统计领取总金额
     * @param uid
     * @return
     */
    BigDecimal getRewardMoney(@Param("uid")Long uid);
}
fanli/src/main/java/com/yeshi/fanli/mapping/homemodule/FloatADMapper.xml
@@ -157,4 +157,15 @@
        ORDER BY fd.`fa_order` 
        LIMIT 1
       </select>
       <select id="getValidFloatAD" resultMap="BaseResultMap">
           SELECT * FROM yeshi_ec_float_ad fd
        WHERE fd.`fa_position` = #{position} AND fd.`fa_state` = 1
               AND IF(fd.`fa_start_time` IS NULL,TRUE,fd.`fa_start_time` <![CDATA[<=]]> NOW())
               AND IF(fd.`fa_end_time` IS NULL,TRUE,fd.`fa_end_time` <![CDATA[>=]]> NOW())
               <if test="type != null">
                   AND fa_type = #{type}
               </if>
        ORDER BY fd.`fa_order`
       </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/mapping/redpack/RedPackWinInviteMapper.xml
@@ -79,4 +79,9 @@
    WHERE d.`rwr_uid` = #{uid}
  </select>
  
  <select id="getRewardMoney" resultType="BigDecimal">
      SELECT IFNULL(SUM(d.`rwr_money`),0) FROM yeshi_ec_red_pack_win_invite d
    WHERE d.`rwr_uid` = #{uid}
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/FloatADServiceImpl.java
@@ -283,5 +283,15 @@
        return floatAD;
    }
    
    @Override
    public List<FloatAD> getValidCommonByPosition(String position) {
        return floatADMapper.getValidFloatAD(position, 1);
    }
    @Override
    public List<FloatAD> getValidByPosition(String position) {
        return floatADMapper.getValidFloatAD(position, null);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
@@ -78,6 +78,12 @@
        return redPackWinInviteMapper.countRewardRecord(uid);
    }
    
    @Override
    public BigDecimal getRewardMoney(Long uid) {
        return redPackWinInviteMapper.getRewardMoney(uid);
    }
    @RedPackGetVersionLimit(uid = "#uid")
    @RequestSerializableByKeyService(key = "#uid")
    @Transactional(rollbackFor = Exception.class)
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java
@@ -12,6 +12,7 @@
import com.yeshi.fanli.dao.mongodb.redpack.RedPackWinNewUserDao;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.redpack.RedPackWinNewUser;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
@@ -42,10 +43,52 @@
    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
    
    
    @Override
    public boolean verifyHasReward(Long uid) {
        try {
            if (uid == null || uid <= 0)
                return true; // 未登录弹出
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null)
                return false;
            Date nowTime = new Date();
            Date firstLoginTime = userInfoExtra.getFirstLoginTime();
            int days = DateUtil.daysBetween2(firstLoginTime, nowTime);
            if (days > Constant.RED_PACK_NEW_USER_DAYS)
                return false; // 已经超出设置天数
            RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid);
            if (redPackWin != null) {
                if (redPackWin.getMoney().compareTo(Constant.RED_PACK_NEW_USER_MONEY) >= 0)
                    return false; // 已领取完
                Date updateTime = redPackWin.getUpdateTime();
                int daysNum = DateUtil.daysBetween2(updateTime, nowTime);
                if (daysNum == 0)
                    return false; // 今日已领取
                Integer num = redPackWin.getNum();
                if (num >= Constant.RED_PACK_NEW_USER_DAYS)
                    return false; // 领取次数超限
            }
            return true;
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        return false;
    }
    @RequestSerializableByKeyService(key = "#uid")
    @Transactional(rollbackFor = Exception.class)
    @Override
    public RedPackWinDetailVO receiveReward(Long uid) throws Exception {
        if (uid == null || uid <= 0)
            return null; // 未登录弹出
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null) 
            return null;
@@ -77,14 +120,15 @@
                money = Constant.RED_PACK_NEW_USER_MONEY;
            } else { // 计算随机奖励
                double randomNum = Constant.RED_PACK_NEW_USER_MIN +  Math.random() * (Constant.RED_PACK_NEW_USER_MAX - Constant.RED_PACK_NEW_USER_MIN);
                BigDecimal rate = new BigDecimal(randomNum/100).setScale(2);
                randomNum = randomNum/100;
                BigDecimal rate = new BigDecimal(randomNum).setScale(2, BigDecimal.ROUND_DOWN);
                money = MoneyBigDecimalUtil.mul(Constant.RED_PACK_NEW_USER_MONEY,rate);
            }
        } else if (days == Constant.RED_PACK_NEW_USER_DAYS) { // 最后一天
            money = MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY, redPackWin.getMoney());
        } else { // 计算剩余随机奖励 10%-25% 
            double randomNum = 10 +  Math.random() * (20 - 10);
            BigDecimal rate = new BigDecimal(randomNum/100).setScale(2);
            BigDecimal rate = new BigDecimal(randomNum/100).setScale(2, BigDecimal.ROUND_DOWN);
            money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY,redPackWin.getMoney()),rate);
        }
        
fanli/src/main/java/com/yeshi/fanli/service/inter/homemodule/FloatADService.java
@@ -58,5 +58,20 @@
     */
    public FloatAD getEffectiveFloatAD(String position, Integer type);
    /**
     * 返回多个 - 常规活动(不包含新人)
     * @param position
     * @param type
     * @return
     */
    public List<FloatAD> getValidCommonByPosition(String position);
    /**
     * 返回多个 - 所有活动
     * @param position
     * @return
     */
    public List<FloatAD> getValidByPosition(String position);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinInviteService.java
@@ -1,5 +1,6 @@
package com.yeshi.fanli.service.inter.redpack;
import java.math.BigDecimal;
import java.util.List;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
@@ -38,4 +39,11 @@
     */
    public void inviteSucceedReward(Long uid) throws Exception;
    
    /**
     * 统计总领取金额
     * @param uid
     * @return
     */
    public BigDecimal getRewardMoney(Long uid);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/redpack/RedPackWinNewUserService.java
@@ -12,6 +12,13 @@
     */
    public RedPackWinDetailVO receiveReward(Long uid) throws Exception;
    /**
     * 验证是否可领取红包
     * @param uid
     * @return
     */
    public boolean verifyHasReward(Long uid);
    
    
}
fanli/src/main/java/com/yeshi/fanli/vo/homemodule/FloatImgDetailVO.java
New file
@@ -0,0 +1,66 @@
package com.yeshi.fanli.vo.homemodule;
import com.google.gson.annotations.Expose;
public class FloatImgDetailVO {
    @Expose
    private String id;
    @Expose
    private String img;
    @Expose
    private String params;
    @Expose
    private Object jumpDetail;
    @Expose
    private String showTime;
    @Expose
    private boolean accountLogin;
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public String getParams() {
        return params;
    }
    public void setParams(String params) {
        this.params = params;
    }
    public Object getJumpDetail() {
        return jumpDetail;
    }
    public void setJumpDetail(Object jumpDetail) {
        this.jumpDetail = jumpDetail;
    }
    public String getShowTime() {
        return showTime;
    }
    public void setShowTime(String showTime) {
        this.showTime = showTime;
    }
    public boolean getAccountLogin() {
        return accountLogin;
    }
    public void setAccountLogin(boolean accountLogin) {
        this.accountLogin = accountLogin;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}