fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderTeamRewardMapper.xml
@@ -141,8 +141,7 @@ otr_subsidy_id = #{0} </select> <select id="listCanSettleByUid" resultMap="BaseResultMap" parameterType="java.lang.Long">SELECT * FROM yeshi_ec_order_team_reward WHERE <select id="listCanSettleByUid" resultMap="BaseResultMap">SELECT * FROM yeshi_ec_order_team_reward WHERE otr_uid =#{uid} AND otr_state=1 AND NOW()>otr_pre_get_time limit @@ -152,7 +151,7 @@ <select id="countCanSettle" resultType="java.lang.Long" parameterType="java.lang.Long">SELECT count(*) FROM yeshi_ec_order_team_reward WHERE otr_uid =#{0} AND otr_state=1 AND NOW()>otr_pre_get_time otr_uid =#{uid} AND otr_state=1 AND NOW()>otr_pre_get_time </select> fanli/src/main/java/com/yeshi/fanli/service/impl/money/UserMoneyServiceImpl.java
@@ -14,6 +14,7 @@ import com.yeshi.fanli.entity.money.UserMoneyDetail; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.money.UserMoneyService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.cmq.UserMoneyChangeCMQManager; @Service @@ -53,6 +54,7 @@ userMoneyDetailMapper.insertSelective(detail); userInfoMapper.subHongBaoByUid(uid, money); try { if (!Constant.IS_TEST) UserMoneyChangeCMQManager.getInstance() .addUserMoneyChangeMsg(new UserMoneyChangeDTO(uid, new BigDecimal(0).subtract(money))); } catch (Exception e) { @@ -70,6 +72,7 @@ userMoneyDetailMapper.insertSelective(detail); userInfoMapper.addHongBaoByUid(uid, money); try { if (!Constant.IS_TEST) UserMoneyChangeCMQManager.getInstance().addUserMoneyChangeMsg(new UserMoneyChangeDTO(uid, money)); } catch (Exception e) { try { fanli/src/main/java/com/yeshi/fanli/service/impl/money/msg/MsgMoneyDetailServiceImpl.java
@@ -152,6 +152,13 @@ detail.setUpdateTime(new Date()); detail.setRead(false); msgMoneyDetailMapper.insertSelective(detail); } else if (detail.getMsgType() == MsgTypeMoneyTypeEnum.orderTeamReward) { if (detail.getMoney() == null || detail.getUser() == null) throw new MsgMoneyDetailException(2, "消息信息不全"); detail.setCreateTime(new Date()); detail.setUpdateTime(new Date()); detail.setRead(false); msgMoneyDetailMapper.insertSelective(detail); } userMsgReadStateService.addMoneyMsgUnReadCount(detail.getUser().getId(), 1); } fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -538,7 +538,8 @@ taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 加入返还记录 // 加入邀请补贴返还记录 doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney,weiQuanOrder.getOrderItemId()); doInviteOrderSubsidy(orderId, Constant.SOURCE_TYPE_TAOBAO, uid, settleMent, wqMoney, weiQuanOrder.getOrderItemId()); // 如果资金大于0才扣除 @@ -598,6 +599,7 @@ debt.setOriginMoney(drawBackMoney); debt.setUid(uid); debt.setCreateTime(new Date()); debt.setSourceId(subSidy.getId()); debt.setTradeId(tradeId); try { inviteOrderSubsidyDebtService.addDebt(debt); @@ -631,6 +633,7 @@ debt.setUid(reward.getUid()); debt.setCreateTime(new Date()); debt.setTradeId(tradeId); debt.setSourceId(reward.getId()); try { orderTeamRewardDebtService.addDebt(debt); } catch (OrderTeamRewardDebtException e) { fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -322,7 +322,6 @@ Integer sourceType = order.getSourceType(); Integer hongBaoType = order.getHongBaoType(); BigDecimal totalPay = new BigDecimal(0); BigDecimal totalActual = new BigDecimal(0); // 商品信息组合 @@ -1716,7 +1715,8 @@ } @Override public List<CommonOrderVO> searchOrderByUid(AcceptData acceptData, int page, int size, Long uid, List<ESOrder> list) throws Exception { public List<CommonOrderVO> searchOrderByUid(AcceptData acceptData, int page, int size, Long uid, List<ESOrder> list) throws Exception { List<CommonOrderVO> listVO = commonOrderMapper.searchOrderByUid((page - 1) * size, size, uid, list); // 订单信息为空 @@ -1746,8 +1746,8 @@ * @param listGoods * @param uid */ private void orderVOFactoryNew(AcceptData acceptData, List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods, Long uid) throws Exception { private void orderVOFactoryNew(AcceptData acceptData, List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods, Long uid) throws Exception { List<String> listTB = new ArrayList<String>(); List<String> listJD = new ArrayList<String>(); List<String> listPDD = new ArrayList<String>(); @@ -1824,7 +1824,6 @@ } } SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); SimpleDateFormat formatday = new SimpleDateFormat("yyyy.MM.dd"); // 2019.8.1开始返回维权信息 @@ -1840,7 +1839,6 @@ String orderNo = order.getOrderNo(); Integer sourceType = order.getSourceType(); Integer hongBaoType = order.getHongBaoType(); BigDecimal totalPay = new BigDecimal(0); BigDecimal totalActual = new BigDecimal(0); @@ -1876,7 +1874,6 @@ totalPay = MoneyBigDecimalUtil.add(totalPay, totalSettlement); // 商品价格 BigDecimal actualPrice = commonGoodsVO.getActualPrice(); if (actualPrice != null) { @@ -1884,7 +1881,6 @@ totalActual = MoneyBigDecimalUtil.add(totalActual, MoneyBigDecimalUtil.mul(new BigDecimal(totalCount), actualPrice)); } // 邀请订单信息保护 if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType @@ -2271,4 +2267,12 @@ } } @Override public Date getThirdCreateTime(String orderId, int sourceType) { List<CommonOrder> list = listBySourceTypeAndOrderId(sourceType, orderId); if (list == null || list.size() == 0) return null; return list.get(0).getThirdCreateTime(); } } fanli/src/main/java/com/yeshi/fanli/service/impl/order/InviteOrderSubsidyServiceImplV2.java
@@ -200,7 +200,9 @@ if (list != null && list.size() > 0) { // 必须是自购订单才返利 HongBaoV2 parent = hongBaoV2Service.selectByPrimaryKey(list.get(0).getHongBaoV2().getId()); if (parent != null && parent.getUrank() != UserLevelEnum.superVIP.getOrderRank()) {// 不是超级会员的自购/分享才补贴 if (parent != null && parent.getUrank() != UserLevelEnum.superVIP.getOrderRank() && (parent.getType() == HongBaoV2.TYPE_SHARE_GOODS || parent.getType() == HongBaoV2.TYPE_ZIGOU)) {// 不是超级会员的自购/分享才补贴 boolean isShare = (parent.getType() == HongBaoV2.TYPE_SHARE_GOODS); List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(sourceType, orderId); if (orderList == null || orderList.size() == 0) @@ -282,7 +284,7 @@ else orderSubsidy.setLevel(InviteOrderSubsidy.LEVEL_TWO); // 会员才能补贴 if (userLevel != UserLevelEnum.daRen) if (userLevel != UserLevelEnum.daRen) { try { addOrderSubsidy(orderSubsidy); } catch (OrderTeamRewardException e) { @@ -290,6 +292,11 @@ } catch (CommonOrderException e) { throw new InviteOrderSubsidyException(e.getCode(), e.getMsg()); } // 分享赚不能使用返利奖励券,不用等待5天 if (isShare) { validByOrderIdAndSourceType(orderId, sourceType); } } } } } fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -739,6 +739,7 @@ order.setOrderType(Constant.SOURCE_TYPE_TAOBAO); order.setUserInfo(new UserInfo(uid)); try { if (!Constant.IS_TEST) PlaceOrderCMQManager.getInstance().addPlaceOrderMsg(order); } catch (Exception e) { } fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java
@@ -99,8 +99,6 @@ @Resource private MsgAccountDetailService msgAccountDetailService; @Override @Transactional(rollbackFor = Exception.class) public void addUserVIPInfo(UserVIPInfo info) throws UserVIPInfoException { @@ -271,8 +269,14 @@ @Override public boolean isVIP(Long uid) { return isVIP(uid, System.currentTimeMillis()); } @Override public boolean isVIP(Long uid, Long time) { UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKey(uid); if (userInfo != null && userInfo.getState() == UserVIPInfo.STATE_SUCCESS) if (userInfo != null && userInfo.getState() == UserVIPInfo.STATE_SUCCESS && userInfo.getSuccessTime().getTime() < time) return true; else return false; @@ -315,7 +319,8 @@ // 1、直接粉丝(从 2020 年 1 月 1 日起直接粉丝产生有效订单) BigDecimal payMoney = new BigDecimal(userVipConfigService.getValueByKey("require_order_pay")); // long teamNum = hongBaoV2CountService.countValidOrderTeamUserByUid(uid, // long teamNum = // hongBaoV2CountService.countValidOrderTeamUserByUid(uid, // TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney); long teamNum = 0L; long vipBegin = TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME); @@ -327,17 +332,13 @@ continue; } // 1、邀请关系成功后;2、单(分享 + 自购)实付款大于1元 long countValid = hongBaoV2CountService.countValidOrderByUidAndTime(worker.getId(), three.getSucceedTime(), payMoney); long countValid = hongBaoV2CountService.countValidOrderByUidAndTime(worker.getId(), three.getSucceedTime(), payMoney); if (countValid > 0) { teamNum ++; } } } // 区分老用户和新用户 String limtDate = userVipConfigService.getValueByKey("vip_execute_time"); @@ -450,7 +451,6 @@ } } @Transactional(rollbackFor = Exception.class) @Override public void applyVIPNew(Long uid) throws UserVIPInfoException { @@ -480,7 +480,6 @@ info.setUpdateTime(new Date()); userVIPInfoMapper.updateByPrimaryKeySelective(info); MsgAccountDetail detail = new MsgAccountDetail(); detail.setTitle("尊敬的高级会员,系统已收到你的超级会员升级申请,正在受理中"); detail.setBeiZhu("如有疑问请联系我的-人工客服"); @@ -495,8 +494,6 @@ e.printStackTrace(); } } @Transactional(rollbackFor = Exception.class) @Override @@ -558,14 +555,12 @@ throw new UserVIPInfoException(1, "券赠送失败"); } // 消息 MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); msgDto.setStatus("已将你的账户由高级会员升级为超级会员"); msgDto.setEquity("从收到本消息起,你将获得全部超级会员权益"); msgAccountDetailService.addMsgVIP(uid, "恭喜你!经人工审核你满足升级超级会员条件", "如有疑问请联系我的-人工客服", msgDto); } /** * 验证是否符合VIP @@ -590,7 +585,6 @@ return false; } @Transactional(rollbackFor = Exception.class) @Override public void rejectVIPApplyNew(Long uid, String reason) throws UserVIPInfoException { @@ -614,4 +608,5 @@ msgDto.setReason(reason); msgAccountDetailService.addMsgVIP(uid, "很抱歉!经人工审核你未满足或不符合升级超级会员的条件", "如有疑问请联系我的-人工客服", msgDto); } } fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java
@@ -40,8 +40,6 @@ @Resource private MsgAccountDetailService msgAccountDetailService; @Override public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException { if (info == null || info.getUid() == null || info.getProcess() == null) @@ -73,6 +71,27 @@ return infoList.get(0); } @Override public UserVIPPreInfo getProcessInfo(Long uid, Date time) { List<UserVIPPreInfo> infoList = userVIPPreInfoMapper.listByUid(uid); if (infoList == null || infoList.size() == 0) return null; Comparator<UserVIPPreInfo> cm = new Comparator<UserVIPPreInfo>() { @Override public int compare(UserVIPPreInfo o1, UserVIPPreInfo o2) { return o2.getProcess() - o1.getProcess(); } }; Collections.sort(infoList, cm); for (UserVIPPreInfo info : infoList) { if (time.getTime() >= info.getCreateTime().getTime()) return info; } return null; } @RequestSerializableByKeyService(key = "#uid") @Transactional(rollbackFor = Exception.class) @Override fanli/src/main/java/com/yeshi/fanli/service/inter/order/CommonOrderService.java
@@ -375,5 +375,17 @@ public List<CommonOrderVO> searchOrderByUid(AcceptData acceptData, int page, int size, Long uid, List<ESOrder> list) throws Exception; public long countSearchOrderByUid(Long uid, List<ESOrder> list); /** * 返回订单的第三方创建时间 * @Title: getThirdCreateTime * @Description: * @param orderId * @param sourceType * @return * Date 返回类型 * @throws */ public Date getThirdCreateTime(String orderId,int sourceType); } fanli/src/main/java/com/yeshi/fanli/service/inter/user/vip/UserVIPInfoService.java
@@ -52,6 +52,19 @@ * @return */ public boolean isVIP(Long uid); /** * 在某个时间是否为VIP * @Title: isVIP * @Description: * @param uid * @param time * @return * boolean 返回类型 * @throws */ public boolean isVIP(Long uid,Long time); /** * 根据UID检索 fanli/src/main/java/com/yeshi/fanli/service/inter/user/vip/UserVIPPreInfoService.java
@@ -1,5 +1,7 @@ package com.yeshi.fanli.service.inter.user.vip; import java.util.Date; import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo; import com.yeshi.fanli.exception.user.vip.UserVIPInfoException; import com.yeshi.fanli.exception.user.vip.UserVIPPreInfoException; @@ -29,6 +31,14 @@ public UserVIPPreInfo getLatestProcessInfo(Long uid); /** * 获取某个时间的进度 * * @param uid * @return */ public UserVIPPreInfo getProcessInfo(Long uid,Date time); /** * 会员等级添加并验证 * @param uid * @param inviteSuccess fanli/src/main/java/com/yeshi/fanli/service/manger/user/UserLevelManager.java
@@ -50,10 +50,9 @@ * @throws */ public UserLevelEnum getUserLevel(Long uid,Date date) { //TODO 按时间段获取 if (userVIPInfoService.isVIP(uid)) if (userVIPInfoService.isVIP(uid, date.getTime())) return UserLevelEnum.superVIP; UserVIPPreInfo info = userVIPPreInfoService.getLatestProcessInfo(uid); UserVIPPreInfo info = userVIPPreInfoService.getProcessInfo(uid, date); if (info != null) for (UserLevelEnum level : UserLevelEnum.values()) if (level.getLevel() == info.getProcess()) fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/order/InviteOrderSubsidyMessageListener.java
@@ -1,6 +1,7 @@ package com.yeshi.fanli.util.rocketmq.consumer.order; import java.util.Date; import java.util.List; import javax.annotation.Resource; @@ -20,16 +21,22 @@ import com.yeshi.fanli.dto.mq.user.body.UserSystemCouponUseMQMsg; import com.yeshi.fanli.entity.bus.user.UserSystemCouponRecord; import com.yeshi.fanli.entity.mq.MQUnSendInfo; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.system.SystemCoupon; import com.yeshi.fanli.exception.money.OrderMoneySettleException; import com.yeshi.fanli.exception.mq.MQUnSendInfoException; import com.yeshi.fanli.exception.order.CommonOrderException; import com.yeshi.fanli.exception.order.InviteOrderSubsidyException; import com.yeshi.fanli.exception.order.OrderTeamRewardException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.mq.MQUnSendInfoService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService; import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyServiceV2; import com.yeshi.fanli.service.inter.order.OrderMoneySettleService; import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; import com.yeshi.fanli.util.rocketmq.MQTopicName; @@ -45,6 +52,9 @@ private InviteOrderSubsidyService inviteOrderSubsidyService; @Resource private InviteOrderSubsidyServiceV2 inviteOrderSubsidyServiceV2; @Resource private UserSystemCouponRecordService userSystemCouponRecordService; @Resource(name = "producer") @@ -55,6 +65,12 @@ @Resource private OrderMoneySettleService orderMoneySettleService; @Resource private CommonOrderService commonOrderService; // 团队奖励开始时间 private static final long TEAM_REWARD_START_TIME = TimeUtil.convertToTimeTemp("2019-04-15", "yyyy-MM-dd"); public InviteOrderSubsidyMessageListener() { @@ -72,11 +88,32 @@ // 查询上级红包 OrderMQMsg dto = new Gson().fromJson(new String(message.getBody()), OrderMQMsg.class); if (dto != null) { // 查询出订单创建时间 Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getType()); if (orderTime.getTime() >= TEAM_REWARD_START_TIME) { try { inviteOrderSubsidyServiceV2.addOrUpdateByOrder(dto.getOrderId(), dto.getType()); return Action.CommitMessage; } catch (InviteOrderSubsidyException e) { e.printStackTrace(); LogHelper.errorDetailInfo(e, new Gson().toJson(dto), ""); } catch (OrderTeamRewardException e) { e.printStackTrace(); LogHelper.errorDetailInfo(e, new Gson().toJson(dto), ""); } catch (CommonOrderException e) { e.printStackTrace(); LogHelper.errorDetailInfo(e, new Gson().toJson(dto), ""); } return Action.ReconsumeLater; } else { try { inviteOrderSubsidyService.addOrUpdateByOrder(dto.getOrderId(), dto.getType()); } catch (InviteOrderSubsidyException e) { LogHelper.errorDetailInfo(e, new Gson().toJson(dto), ""); return Action.ReconsumeLater; } } } } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderFanLiActual.name())) { OrderMoneyRecievedMQMsg dto = new Gson().fromJson(new String(message.getBody()), @@ -115,11 +152,25 @@ && record.getCouponType() .equalsIgnoreCase(SystemCoupon.CouponTypeEnum.rebatePercentCoupon.name()) && record.getGoodSource() == dto.getSourceType()) {// 成功使用了奖励券 Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getType()); if (orderTime.getTime() >= TEAM_REWARD_START_TIME) { inviteOrderSubsidyServiceV2.invalidByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); } else inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); } else { // 使数据有效 try { Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getType()); if (orderTime.getTime() >= TEAM_REWARD_START_TIME) { inviteOrderSubsidyServiceV2.validByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); } else inviteOrderSubsidyService.validByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); } catch (InviteOrderSubsidyException e) { @@ -141,7 +192,13 @@ dto.getSourceType()); if (count > 0) { // 使相关订单失效 inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); Date orderTime = commonOrderService.getThirdCreateTime(dto.getOrderId(), dto.getSourceType()); if (orderTime.getTime() >= TEAM_REWARD_START_TIME) { inviteOrderSubsidyServiceV2.invalidByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); } else inviteOrderSubsidyService.invalidByOrderIdAndSourceType(dto.getOrderId(), dto.getSourceType()); } return Action.CommitMessage; } fanli/src/main/java/com/yeshi/fanli/util/rocketmq/order/MQLocalTransactionChecker.java
@@ -19,7 +19,6 @@ import com.yeshi.fanli.service.inter.hongbao.HongBaoV2SettleTempService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.order.HongBaoOrderService; import com.yeshi.fanli.service.inter.order.InviteOrderSubsidyService; import com.yeshi.fanli.util.rocketmq.MQTopicName; @Component @@ -30,9 +29,6 @@ @Resource private HongBaoV2SettleTempService hongBaoV2SettleTempService; @Resource private InviteOrderSubsidyService inviteOrderSubsidyService; @Resource private CommonOrderService commonOrderService;