From 684779576c02c13cb2a18a7d93e88da7e57fd4b8 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期二, 31 三月 2020 11:25:13 +0800 Subject: [PATCH] 2.1 需求 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java | 305 +++++--------------------------------------------- 1 files changed, 33 insertions(+), 272 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java index b7f9e41..5f194e4 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java @@ -1,9 +1,5 @@ package com.yeshi.fanli.service.impl.user.vip; -import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -14,7 +10,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.yeshi.utils.DateUtil; import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPInfoMapper; import com.yeshi.fanli.dto.msg.MsgAccountVipDTO; @@ -26,12 +21,10 @@ import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; import com.yeshi.fanli.entity.bus.user.UserInviteSeparate; +import com.yeshi.fanli.entity.bus.user.UserInviteValidNum; import com.yeshi.fanli.entity.bus.user.UserSystemCoupon; import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo; import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo; -import com.yeshi.fanli.entity.integral.IntegralDetail; -import com.yeshi.fanli.entity.shop.BanLiShopOrder; -import com.yeshi.fanli.entity.system.ConfigKeyEnum; import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; import com.yeshi.fanli.exception.msg.MsgAccountDetailException; import com.yeshi.fanli.exception.user.vip.UserVIPInfoException; @@ -45,6 +38,7 @@ import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.service.inter.user.integral.IntegralDetailService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; +import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService; import com.yeshi.fanli.service.inter.user.msg.MsgAccountDetailService; import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService; import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService; @@ -99,6 +93,9 @@ @Resource private MsgAccountDetailService msgAccountDetailService; + + @Resource + private UserInviteValidNumService userInviteValidNumService; @Override @Transactional(rollbackFor = Exception.class) @@ -116,157 +113,6 @@ userVIPInfoMapper.insert(info); } - @Transactional(rollbackFor = Exception.class) - @Override - public void passVIPApply(Long uid) throws UserVIPInfoException { - UserVIPInfo userVIPInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); - if (userVIPInfo == null) { - throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); - } - if (userVIPInfo.getState() != UserVIPInfo.STATE_VERIFING) { - throw new UserVIPInfoException(2, "鐢宠鏈浜庡鏍哥姸鎬�"); - } - - if (!verifyConform(uid)) - throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢"); - - UserVIPInfo info = new UserVIPInfo(); - info.setId(userVIPInfo.getId()); - info.setSuccessTime(new Date()); - info.setState(UserVIPInfo.STATE_SUCCESS); - info.setUpdateTime(new Date()); - userVIPInfoMapper.updateByPrimaryKeySelective(info); - - // 涓嬬骇鐨勮秴绾т細鍛� 涓嶈劚绂� - userInviteSeparateService.updateInvalidByBossId(uid); - - // 棰濆淇℃伅 - UserInfoExtra userInfoExtra = userInfoExtraService.getByUidForUpdate(uid); - if (userInfoExtra == null) - throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); - - // 娣诲姞閲戝竵 - IntegralDetail detail = new IntegralDetail(); - detail.setTitle("鍗囩骇VIP绂忓埄"); - detail.setUid(uid); - detail.setMoney(Constant.VIP_COLDCOIN_NUM); - detail.setCreateTime(new Date()); - detail.setUniqueKey("VIP-" + uid); - integralDetailService.insertSelective(detail); - userInfoExtraService.addGoldCoinByUid(uid, Constant.VIP_COLDCOIN_NUM); - - try { - // 濂栧姳鍒� - BigDecimal percent = new BigDecimal(configService.get(ConfigKeyEnum.exchangeRebatePercent.getKey())); - for (int i = 0; i < Constant.VIP_COUPON_REWARD_NUM; i++) { - userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(), - UserSystemCoupon.SOURCE_SYSTEM_PUSH, percent, false); - } - - // 璧犻�佸厤鍗曞埜 - for (int i = 0; i < Constant.VIP_COUPON_GIVEFREE_NUM; i++) { - userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCouponGive.name(), - UserSystemCoupon.SOURCE_SYSTEM_PUSH, null, false); - } - } catch (Exception e) { - throw new UserVIPInfoException(1, "鍒歌禒閫佸け璐�"); - } - - // 娑堟伅 - MsgOtherVIPDTO msgOther = new MsgOtherVIPDTO(); - msgOther.setContent1("鎭枩浣狅紝宸叉垚涓鸿秴绾т細鍛�"); - msgOther.setContent2("婊¤冻鍗囩骇鏉′欢"); - msgOther.setContent3(TimeUtil.formatDateDot(new Date())); - userOtherMsgNotificationService.passVIPApplyMsg(uid, "杩斿埄濂栧姳鍒稿拰銆佽禒閫佸厤鍗曞埜鍜岄噾甯佽鍒版垜鐨�-绂忓埄涓績涓煡鐪�", msgOther); - - // 閫氱煡涓婄骇 - callBoss(uid); - } - - /** - * 閫氱煡涓婄骇鑴辩鍏崇郴 - * - * @param uid - */ - @Transactional - private void callBoss(Long uid) { - // 鏄惁瀛樺湪涓婄骇 - ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid); - if (threeSale == null) - return; - // 涓婄骇鏄惁涓轰細鍛� - Long bossId = threeSale.getBoss().getId(); - UserVIPInfo bossVIP = userVIPInfoMapper.selectByPrimaryKeyForUpdate(bossId); - if (bossVIP != null && bossVIP.getState() != null && bossVIP.getState() == UserVIPInfo.STATE_SUCCESS) - return; - - // 涔嬪墠鎻掑叆璁板綍澶辨晥 - userInviteSeparateService.updateStateByWorkerIdAndBossId(uid, bossId, UserInviteSeparate.STATE_INVALID); - - // 闄愬埗鏃堕棿 - int limitDays = Integer.parseInt(userVipConfigService.getValueByKey("invite_separate_limit_days")); - UserInviteSeparate inviteSeparate = new UserInviteSeparate(); - inviteSeparate.setBossId(bossId); - inviteSeparate.setWorkerId(uid); - inviteSeparate.setState(UserInviteSeparate.STATE_INIT); - inviteSeparate.setEndTime(DateUtil.plusDayDate(limitDays, new Date())); - inviteSeparate.setCreateTime(new Date()); - inviteSeparate.setUpdateTime(new Date()); - userInviteSeparateService.insertSelective(inviteSeparate); - - UserInfo userInfo = userInfoService.selectByPKey(uid); - // 娑堟伅 - MsgOtherVIPDTO msgboss = new MsgOtherVIPDTO(); - msgboss.setContent1(userInfo.getNickName() + " " + uid); - msgboss.setContent2("浜�" + TimeUtil.formatDateDot(new Date()) + "鎴愬姛鍗囩骇鎴愪负瓒呯骇浼氬憳"); - msgboss.setContent3("浠婃棩璧�" + limitDays + "澶╁唴锛屼綘鏈兘鎴愪负瓒呯骇浼氬憳灏嗕細涓庡叾鑴辩閭�璇峰叧绯� "); - userOtherMsgNotificationService.teamVIPCallBoss(bossId, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgboss); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void rejectVIPApply(Long uid, String reason) throws UserVIPInfoException { - UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); - if (userInfo == null) { - throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); - } - if (userInfo.getState() != UserVIPInfo.STATE_VERIFING) { - throw new UserVIPInfoException(2, "鐢宠鏈浜庡鏍哥姸鎬�"); - } - - UserVIPInfo info = new UserVIPInfo(); - info.setId(userInfo.getId()); - info.setState(UserVIPInfo.STATE_INVALID); - info.setUpdateTime(new Date()); - userVIPInfoMapper.updateByPrimaryKeySelective(info); - - // 娑堟伅 - MsgOtherVIPDTO msgOther = new MsgOtherVIPDTO(); - msgOther.setContent1("寰堟姳姝夛紝鏈�氳繃瓒呯骇浼氬憳鐢宠"); - msgOther.setContent2("鏈弧瓒宠秴绾т細鍛樺崌绾ф潯浠舵垨鐤戜技鍑虹幇杩濊 "); - userOtherMsgNotificationService.rejectVIPApply(uid, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgOther); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void applyVIP(Long uid) throws UserVIPInfoException { - UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); - if (userInfo == null) { - userInfo = new UserVIPInfo(); - userInfo.setId(uid); - addUserVIPInfo(userInfo); - } - - if (userInfo.getState() != UserVIPInfo.STATE_INVALID) - throw new UserVIPInfoException(2, "宸茬粡鐢宠杩�"); - - UserVIPInfo info = new UserVIPInfo(); - info.setId(userInfo.getId()); - info.setApplyTime(new Date()); - info.setState(UserVIPInfo.STATE_VERIFING); - info.setUpdateTime(new Date()); - userVIPInfoMapper.updateByPrimaryKeySelective(info); - } @Override public boolean isVIP(Long uid) { @@ -309,83 +155,6 @@ return map; } - @Override - public boolean verifyConform(Long uid) { - if (uid == null || uid <= 0) - return false; - - UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid); - if (extra == null) - return false; - - // 1銆佺洿鎺ョ矇涓濓紙浠� 2020 骞� 1 鏈� 1 鏃ヨ捣鐩存帴绮変笣浜х敓鏈夋晥璁㈠崟锛� - BigDecimal payMoney = new BigDecimal(userVipConfigService.getValueByKey("require_order_pay")); - // long teamNum = - // hongBaoV2CountService.countValidOrderTeamUserByUid(uid, - // TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney); - long teamNum = 0L; - long vipBegin = TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME); - List<ThreeSale> listThreeSale = threeSaleSerivce.getValidWorkerIdsByTime(uid, vipBegin); - if (listThreeSale != null && listThreeSale.size() > 0) { - for (ThreeSale three : listThreeSale) { - UserInfo worker = three.getWorker(); - if (worker == null || worker.getId() == null) { - continue; - } - // 1銆侀個璇峰叧绯绘垚鍔熷悗锛�2銆佸崟锛堝垎浜� + 鑷喘锛夊疄浠樻澶т簬1鍏� - long countValid = hongBaoV2CountService.countValidOrderByUidAndTime(worker.getId(), - three.getSucceedTime(), payMoney); - if (countValid > 0) { - teamNum++; - } - } - } - - // 鍖哄垎鑰佺敤鎴峰拰鏂扮敤鎴� - String limtDate = userVipConfigService.getValueByKey("vip_execute_time"); - Date executeDate = null; - try { - SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd"); - executeDate = format.parse(limtDate); - } catch (ParseException e) { - e.printStackTrace(); - } - if (executeDate == null) - return false; - - if (extra.getFirstLoginTime() == null || extra.getFirstLoginTime().getTime() < executeDate.getTime()) { - long limitNum = Long.parseLong(userVipConfigService.getValueByKey("require_invite_num_old_user")); - if (teamNum < limitNum) - return false; - } else { - long limitNum = Long.parseLong(userVipConfigService.getValueByKey("require_invite_num_new_user")); - if (teamNum < limitNum) - return false; - } - - // 2銆佺疮璁¤嚜璐繑鍒┾墺100 鍏冿紙浠庢敞鍐屾澘鏍楀揩鐪佽捣锛夛紱 - BigDecimal fanMoney = new BigDecimal(userVipConfigService.getValueByKey("require_fan_money")); - BigDecimal purchase = hongBaoV2CountService.getRewardMoneyBySelf(uid); - if (purchase.compareTo(fanMoney) < 0) - return false; - - // 3銆佺疮璁¢噾甯佲墺10000 鏋氾紙浠庢敞鍐屾澘鏍楀揩鐪佽捣锛夛紱 - BigDecimal goldCoin = integralDetailService.getCumulativeMoney(uid); - BigDecimal limitGoldCoin = new BigDecimal(userVipConfigService.getValueByKey("require_gold_coin")); - if (goldCoin.compareTo(limitGoldCoin) < 0) - return false; - - // 4銆佷娇鐢ㄧ孩鍖呪墺1 娆� - List<Integer> list = new ArrayList<Integer>(); - list.add(BanLiShopOrder.STATE_SUCCESS); - long useHongBao = banLiShopOrderService.countByUidAndState(uid, list); - long limitHongBao = Long.parseLong(userVipConfigService.getValueByKey("require_shop_buy")); - if (useHongBao < limitHongBao) - return false; - - // 绗﹀悎鏉′欢 - return true; - } @Override public List<UserVIPInfo> listQuery(int page, int count, String key, Integer state) { @@ -454,13 +223,13 @@ @Transactional(rollbackFor = Exception.class) @Override - public void applyVIPNew(Long uid) throws UserVIPInfoException { + public void applyVIP(Long uid) throws UserVIPInfoException { UserVIPPreInfo latestProcess = userVIPPreInfoService.getLatestProcessInfo(uid); if (latestProcess == null || latestProcess.getProcess() != UserVIPPreInfo.PROCESS_2) { throw new UserVIPInfoException(1, "璇ョ敤鎴疯繕涓嶆槸楂樼骇浼氬憳"); } - if (!verifyVipNew(uid)) + if (!verifyVip(uid)) throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢"); UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); @@ -498,7 +267,7 @@ @Transactional(rollbackFor = Exception.class) @Override - public void passVIPApplyNew(Long uid) throws UserVIPInfoException { + public void passVIPApply(Long uid) throws UserVIPInfoException { UserVIPInfo userVIPInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); if (userVIPInfo == null) { throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); @@ -512,7 +281,7 @@ throw new UserVIPInfoException(1, "璇ョ敤鎴疯繕涓嶆槸楂樼骇浼氬憳"); } - if (!verifyVipNew(uid)) + if (!verifyVip(uid)) throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢"); // 棰濆淇℃伅 @@ -528,34 +297,20 @@ info.setUpdateTime(new Date()); userVIPInfoMapper.updateByPrimaryKeySelective(info); - // 娣诲姞閲戝竵 - userInfoExtraService.addGoldCoinByUid(uid, Constant.VIP_COLDCOIN_NUM); - // 娣诲姞閲戝竵鏄庣粏 - IntegralDetail detail = new IntegralDetail(); - detail.setTitle("鍗囩骇VIP绂忓埄"); - detail.setUid(uid); - detail.setMoney(Constant.VIP_COLDCOIN_NUM); - detail.setCreateTime(new Date()); - detail.setUniqueKey("VIP-" + uid); - integralDetailService.insertSelective(detail); - try { - // 濂栧姳鍒� - BigDecimal percent = new BigDecimal(configService.get(ConfigKeyEnum.exchangeRebatePercent.getKey())); - for (int i = 0; i < Constant.VIP_COUPON_REWARD_NUM; i++) { - userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(), - UserSystemCoupon.SOURCE_SYSTEM_PUSH, percent, false); - } - // 璧犻�佸厤鍗曞埜 - for (int i = 0; i < Constant.VIP_COUPON_GIVEFREE_NUM; i++) { - userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCouponGive.name(), - UserSystemCoupon.SOURCE_SYSTEM_PUSH, null, false); + String giveCoupon = userVipConfigService.getValueByKey("vip_pre_10_gift_givefree_coupon"); + if (!StringUtil.isNullOrEmpty(giveCoupon)) { + int num = Integer.parseInt(giveCoupon); + for (int i = 0; i < num; i++) { + userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCouponGive.name(), + UserSystemCoupon.SOURCE_SYSTEM_PUSH, null, false); + } } } catch (Exception e) { throw new UserVIPInfoException(1, "鍒歌禒閫佸け璐�"); } - + // 娑堟伅 MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); msgDto.setStatus("宸插皢浣犵殑璐︽埛鐢遍珮绾т細鍛樺崌绾т负瓒呯骇浼氬憳"); @@ -568,16 +323,22 @@ * @param uid * @return */ - private boolean verifyVipNew(Long uid) { - // 閭�璇疯鍗� - long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + private boolean verifyVip(Long uid) { + // 鑷喘璁㈠崟 + long doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_ZIGOU); - // 閭�璇疯鍗� - long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + // 鍒嗕韩璁㈠崟 + long doneShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_SHARE_GOODS); - // 闃熷憳 - long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1); - long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1); + + // 鏈夋晥绮変笣 + int doneFirst = 0; + int doneSecond = 0; + UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid); + if (userInviteValidNum != null) { + doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst(); + doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond(); + } long limitZiGou = 0; String zigou = userVipConfigService.getValueByKey("vip_pre_10_zigou_order_count"); @@ -603,7 +364,7 @@ limitSecond = Long.parseLong(second); } - if (countZiGou >= limitZiGou || countShare >= limitShare || (firstTeam >= limitFirst && secondTeam >= limitSecond)) { + if (doneZiGou >= limitZiGou || doneShare >= limitShare || (doneFirst >= limitFirst && doneSecond >= limitSecond)) { return true; } return false; @@ -611,7 +372,7 @@ @Transactional(rollbackFor = Exception.class) @Override - public void rejectVIPApplyNew(Long uid, String reason) throws UserVIPInfoException { + public void rejectVIPApply(Long uid, String reason) throws UserVIPInfoException { UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); if (userInfo == null) { throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); -- Gitblit v1.8.0