From cd4d7c2ff85d68aebec276073020224b5de56415 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 05 十一月 2019 10:29:20 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 347 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 347 insertions(+), 0 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java new file mode 100644 index 0000000..31d1d4a --- /dev/null +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java @@ -0,0 +1,347 @@ +package com.yeshi.fanli.service.impl.redpack; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.DateUtil; + +import com.google.gson.Gson; +import com.yeshi.fanli.dao.mybatis.redpack.RedPackWinInviteMapper; +import com.yeshi.fanli.dto.msg.MsgRedPackAddContentDTO; +import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum; +import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; +import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.order.CommonOrder; +import com.yeshi.fanli.entity.redpack.RedPackWinInvite; +import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum; +import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService; +import com.yeshi.fanli.service.inter.order.CommonOrderService; +import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService; +import com.yeshi.fanli.service.inter.redpack.RedPackConfigService; +import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService; +import com.yeshi.fanli.service.inter.user.UserInfoService; +import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService; +import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; +import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.MoneyBigDecimalUtil; +import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; +import com.yeshi.fanli.util.annotation.redpack.RedPackGetVersionLimit; +import com.yeshi.fanli.util.factory.RedPackDetailFactory; +import com.yeshi.fanli.vo.order.CommonOrderVO; + +@Service +public class RedPackWinInviteServiceImpl implements RedPackWinInviteService { + + @Resource + private RedPackWinInviteMapper redPackWinInviteMapper; + + @Resource + private RedPackConfigService redPackConfigService; + + @Resource + private RedPackBalanceService redPackBalanceService; + + @Resource + private CommonOrderService commonOrderService; + + @Resource + private ThreeSaleSerivce threeSaleSerivce; + + @Resource + private UserMoneyMsgNotificationService userMoneyMsgNotificationService; + + @Resource + private UserInfoService userInfoService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @Resource + private IntegralTaskRecordService integralTaskRecordService; + + + @Override + public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) { + return redPackWinInviteMapper.getRewardList(start, count, uid); + } + + + @Override + public Long countRewardRecord(Long uid) { + return redPackWinInviteMapper.countRewardRecord(uid); + } + + @RedPackGetVersionLimit(uid = "#uid") + @RequestSerializableByKeyService(key = "#uid") + @Transactional(rollbackFor = Exception.class) + @Override + public void orderArriveReward(Long uid, Integer source, String orderNo) throws Exception { + if (uid == null || source == null || orderNo == null) + return; + + // 涓婁竴绾х殑濂栧姳 + UserInfo boss = threeSaleSerivce.getBoss(uid); + if(boss != null) { + firstReward(uid, source, orderNo); + bossReward(boss.getId(), uid, source, orderNo); + } + } + + + /** + * 涓婄骇濂栧姳 + * @param uid + * @param teamUid + * @param source + * @param orderNo + * @throws Exception + */ + @RedPackGetVersionLimit(uid = "#uid") + @Transactional + private void bossReward(Long uid, Long teamUid, Integer source, String orderNo) throws Exception { + firstSharedOrderRewardToBoss(uid, teamUid, source, orderNo); + firstSharedOrderRewardTheMonthToBoss(uid, teamUid, source, orderNo); + } + + + /** + * 琚個璇蜂汉涓嬮鍗曡繑鍒╋紙涓嬪崟灏辩粰锛夛細 + * 瀹屾垚棣栫瑪璁㈠崟 锛堝凡鍒拌处锛� 棣栧崟=涓嶉檺鍒堕噾棰濄�佷笉闄愬埗鍟嗗搧銆佷笉闄愬埗鏁伴噺銆佷笉闄愬埗璁㈠崟绫诲瀷锛� + * @param uid + * @param source + * @param orderNo + * @param bossId + */ + @Transactional + private void firstReward(Long uid, Integer source, String orderNo) throws Exception{ + // 濂栧姳涓�娆� + long total = redPackWinInviteMapper.countByUidAndType(uid, RedPackWinInviteTypeEnum.newUserReward.name()); + if (total > 0) + return; + + // 1銆佸垽鏂槸鍚︾敤鎴烽涓鍗� + CommonOrderVO order = commonOrderService.firstValidOrderByUid(uid); + if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo())) + return; + + // 閲戦 + BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("new_user_first_order")); + + // 3銆佽幏寰楃孩鍖呰褰� + RedPackWinInvite winInvite = new RedPackWinInvite(); + winInvite.setCreateTime(new Date()); + winInvite.setUpdateTime(new Date()); + winInvite.setType(RedPackWinInviteTypeEnum.newUserReward); + winInvite.setUid(uid); + winInvite.setTeamUid(null); + winInvite.setMoney(money); + winInvite.setSource(source); + winInvite.setOrderNo(orderNo); + redPackWinInviteMapper.insertSelective(winInvite); + + // 4銆佸鍔犵孩鍖� + redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createNewUserReward(winInvite)); + + //娑堟伅 + MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); + dto.setTitle("绾㈠寘澧炲姞"); + dto.setMoney("楼" + money.setScale(2)); + dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2)); + userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackNewUserReward, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�"); + } + + + /** + * 涓婄骇濂栧姳锛氳閭�璇蜂汉瀹屾垚棣栫瑪鍒嗕韩璁㈠崟 锛堝凡鍒拌处锛� + * @param uid + * @param source + * @param orderNo + * @param bossId + */ + @Transactional + private void firstSharedOrderRewardToBoss(Long uid, Long inviteeUid, Integer source, String orderNo) throws Exception{ + // 鍚屼竴闃熷憳濂栧姳涓�娆� + long totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(uid, inviteeUid, RedPackWinInviteTypeEnum.firstSharedOrder.name()); + if (totalReward > 0) + return; + + // 1銆佸垽鏂槸鍚︽槸鏀圭敤鎴烽涓垎浜鍗� + CommonOrderVO order = commonOrderService.firstValidOrderByUidAndType(inviteeUid, 2); + if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo())) + return; + + // 2銆佸垽鏂槸绗嚑涓汉 + long total = redPackWinInviteMapper.countByUidAndType(uid, RedPackWinInviteTypeEnum.firstSharedOrder.name()); + + + // 璁$畻搴斿鍔犵孩鍖呴噾棰� + BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("first_shared_order")); + long num = total % 9; + if (num > 0) { + BigDecimal addMoney = new BigDecimal(redPackConfigService.getValueByKey("first_shared_order_add")); + money = MoneyBigDecimalUtil.add(money, MoneyBigDecimalUtil.mul(addMoney, new BigDecimal(num))); + } + + // 3銆佽幏寰楃孩鍖呰褰� + RedPackWinInvite winInvite = new RedPackWinInvite(); + winInvite.setCreateTime(new Date()); + winInvite.setUpdateTime(new Date()); + winInvite.setType(RedPackWinInviteTypeEnum.firstSharedOrder); + winInvite.setUid(uid); + winInvite.setTeamUid(inviteeUid); + winInvite.setMoney(money); + winInvite.setSource(source); + winInvite.setOrderNo(orderNo); + redPackWinInviteMapper.insertSelective(winInvite); + + // 4銆佸鍔犵孩鍖� + redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createIncreaseReward(winInvite)); + + // 5銆佹秷鎭� + MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); + dto.setTitle("绾㈠寘澧炲姞"); + dto.setMoney("楼" + money.setScale(2)); + dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2)); + userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackFirstSharedOrder, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�"); + } + + + /** + * 涓婄骇濂栧姳锛氭鏈堝紑濮嬩骇鐢熸弧瓒虫潯浠剁殑鍒嗕韩璁㈠崟锛堝垎浜鍗曞疄浠樻鈮�10鍏冿級 杩炵画15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級姣忔湀鏈�楂�2鍏� + * @param uid + * @param source + * @param orderNo + * @param bossId + */ + @Transactional + private void firstSharedOrderRewardTheMonthToBoss(Long uid, Long inviteeUid, Integer source, String orderNo) throws Exception{ + // 1銆佸垽鏂槸鍚︽槸涓婁釜鏈堥鍗� + CommonOrderVO order = commonOrderService.firstValidOrderLastMonthByUidAndType(inviteeUid, 2); + if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo()) || + order.getAccountTime() == null) + return; + + // 鍒嗕韩璁㈠崟瀹炰粯娆锯墺10鍏� + if (order.getPayment() == null || order.getPayment().compareTo(Constant.RED_PACK_PAY_MIN) < 0) + return; + + // 鏌ヨ棣栧崟濂栧姳鏃堕棿 + CommonOrderVO firstorder = commonOrderService.firstValidOrderByUidAndType(inviteeUid, 2); + if (firstorder == null || firstorder.getAccountTime() == null) + return; + + // 绗竴娆″埌璐︾殑娆℃湀寮�濮嬭繛缁�15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級 + int monthSpace = DateUtil.getMonthSpace( order.getAccountTime(), firstorder.getAccountTime()); + if (monthSpace == 0 || monthSpace > Constant.RED_PACK_REWARd_MONTH) + return; + + + // 璁$畻闅忔満濂栧姳 + double randomMoney = Constant.RED_PACK_RANDOM_MIN + Math.random() * (Constant.RED_PACK_RANDOM_MAX - Constant.RED_PACK_RANDOM_MIN); + // 淇濈暀涓や綅灏忔暟 + BigDecimal money = new BigDecimal(randomMoney).setScale(2, BigDecimal.ROUND_HALF_UP); + + // 3銆佽幏寰楃孩鍖呰褰� + RedPackWinInvite winInvite = new RedPackWinInvite(); + winInvite.setCreateTime(new Date()); + winInvite.setUpdateTime(new Date()); + winInvite.setType(RedPackWinInviteTypeEnum.monthSharedOrder); + winInvite.setUid(uid); + winInvite.setTeamUid(inviteeUid); + winInvite.setMoney(money); + winInvite.setSource(source); + winInvite.setOrderNo(orderNo); + redPackWinInviteMapper.insertSelective(winInvite); + + // 4銆佸鍔犵孩鍖� + redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createSeriesReward(winInvite)); + + //娑堟伅 + MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); + dto.setTitle("绾㈠寘澧炲姞"); + dto.setMoney("楼" + money.setScale(2)); + dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2)); + userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackMonthSharedOrder, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�"); + } + + + @RequestSerializableByKeyService(key = "#uid") + @Override + @Transactional + public void inviteSucceedReward(Long uid) throws Exception{ + // 楠岃瘉鏄惁瀛樺湪涓婄骇 + UserInfo boss = threeSaleSerivce.getBoss(uid); + if(boss == null) + return; + + // 鍚屼竴闃熷憳濂栧姳涓�娆� + long totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(boss.getId(), uid, RedPackWinInviteTypeEnum.inviteSucceed.name()); + if (totalReward > 0) + return; + + // 1銆佺粦瀹氱數璇濆彿鐮� + UserInfo userInfo = userInfoService.selectByPKey(uid); + if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone())) + return; + + // 2銆佹巿鏉冩窐瀹� + UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid); + if (taoBaoInfo == null || StringUtil.isNullOrEmpty(taoBaoInfo.getTaoBaoUid())) + return; + + + boolean finishTask = false; + // 3.1銆佷骇鐢熶换鎰忔湁鏁堣鍗曪紙鏃犻渶鍒拌处锛� + CommonOrder commonOrder = commonOrderService.selectLatestValidByUid(uid); + if (commonOrder != null) + finishTask = true; + + // 3.2銆佸崟浣嶆椂闂寸被绱浜х敓鈮�200閲戝竵 + if (!finishTask) { + long totalGoldCoin = integralTaskRecordService.getTotalGoldCoinByUid(uid); + if (totalGoldCoin >= Constant.RED_PACK_GOLD_COIN) + finishTask = true; + } + + // 3.3銆佹垚鍔熼個璇蜂竴涓ソ鍙� + if (!finishTask) { + long countTeam = threeSaleSerivce.countSuccessFirstTeam(uid); + if (countTeam >= 1) + finishTask = true; + } + + if (finishTask) { + // 濂栧姳閲戦 + BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("invite_succeed")); + + // 鑾峰緱绾㈠寘璁板綍 + RedPackWinInvite winInvite = new RedPackWinInvite(); + winInvite.setCreateTime(new Date()); + winInvite.setUpdateTime(new Date()); + winInvite.setType(RedPackWinInviteTypeEnum.inviteSucceed); + winInvite.setUid(boss.getId()); + winInvite.setTeamUid(uid); + winInvite.setMoney(money); + redPackWinInviteMapper.insertSelective(winInvite); + + // 澧炲姞绾㈠寘 + redPackBalanceService.addRedPack(boss.getId(), money, RedPackDetailFactory.createInvite(winInvite)); + + // 娑堟伅 + MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); + dto.setTitle("绾㈠寘澧炲姞"); + dto.setMoney("楼" + money.setScale(2)); + dto.setBalance("楼" + redPackBalanceService.getBalance(boss.getId()).setScale(2)); + userMoneyMsgNotificationService.redPackMsg(boss.getId(), MsgTypeMoneyTypeEnum.redPackInviteSucceed, new Gson().toJson(dto), "绾㈠寘鍙敤浜庤喘涔颁細鍛�"); + } + } + + +} -- Gitblit v1.8.0