From b9b613a285ebe0da27ca7dd2c3434c8c917abb74 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 02 四月 2020 11:19:03 +0800 Subject: [PATCH] 订单修改 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java | 323 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 265 insertions(+), 58 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 38917a3..e3be82e 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,6 +1,5 @@ package com.yeshi.fanli.service.impl.user.vip; -import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -8,13 +7,41 @@ import javax.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPInfoMapper; +import com.yeshi.fanli.dto.msg.MsgAccountVipDTO; +import com.yeshi.fanli.entity.bus.msg.MsgAccountDetail; +import com.yeshi.fanli.entity.bus.msg.MsgAccountDetail.MsgTypeAccountTypeEnum; +import com.yeshi.fanli.entity.bus.user.HongBaoV2; +import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.bus.user.UserInfoExtra; +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.system.SystemCoupon.CouponTypeEnum; +import com.yeshi.fanli.exception.msg.MsgAccountDetailException; import com.yeshi.fanli.exception.user.vip.UserVIPInfoException; +import com.yeshi.fanli.service.inter.config.ConfigService; +import com.yeshi.fanli.service.inter.count.HongBaoV2CountService; +import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService; +import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService; +import com.yeshi.fanli.service.inter.user.UserInfoExtraService; +import com.yeshi.fanli.service.inter.user.UserInfoService; +import com.yeshi.fanli.service.inter.user.UserInviteSeparateService; +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; +import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.StringUtil; @Service public class UserVIPInfoServiceImpl implements UserVIPInfoService { @@ -22,7 +49,52 @@ @Resource private UserVIPInfoMapper userVIPInfoMapper; + @Resource + private UserInfoService userInfoService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private UserVipConfigService userVipConfigService; + + @Lazy + @Resource + private HongBaoV2CountService hongBaoV2CountService; + + @Resource + private IntegralDetailService integralDetailService; + + @Resource + private BanLiShopOrderService banLiShopOrderService; + + @Resource + private UserOtherMsgNotificationService userOtherMsgNotificationService; + + @Resource + private ThreeSaleSerivce threeSaleSerivce; + + @Resource + private UserInviteSeparateService userInviteSeparateService; + + @Resource + private ConfigService configService; + + @Lazy + @Resource + private UserSystemCouponService userSystemCouponService; + + @Resource + private UserVIPPreInfoService userVIPPreInfoService; + + @Resource + private MsgAccountDetailService msgAccountDetailService; + + @Resource + private UserInviteValidNumService userInviteValidNumService; + @Override + @Transactional(rollbackFor = Exception.class) public void addUserVIPInfo(UserVIPInfo info) throws UserVIPInfoException { if (info.getId() == null) { throw new UserVIPInfoException(1, "淇℃伅涓嶅畬鏁�"); @@ -37,67 +109,17 @@ userVIPInfoMapper.insert(info); } - @Transactional - @Override - public void passVIPApply(Long uid) 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.setSuccessTime(new Date()); - info.setState(UserVIPInfo.STATE_SUCCESS); - info.setUpdateTime(new Date()); - userVIPInfoMapper.updateByPrimaryKeySelective(info); - } - - @Transactional - @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); - } - - @Transactional - @Override - public void applyVIP(Long uid) throws UserVIPInfoException { - UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid); - if (userInfo == null) { - throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); - } - - 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) { + 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; @@ -129,4 +151,189 @@ return map; } + + @Override + public List<UserVIPInfo> listQuery(int page, int count, String key, Integer state) { + return userVIPInfoMapper.listQuery((page - 1) * count, count, key, state); + } + + @Override + public long countQuery(String key, Integer state) { + return userVIPInfoMapper.countQuery(key, state); + } + + + @Transactional(rollbackFor = Exception.class) + @Override + 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 (!verifyVip(uid)) + throw new UserVIPInfoException(1, "涓嶆弧瓒冲崌绾ф潯浠�"); + + 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); + + MsgAccountDetail detail = new MsgAccountDetail(); + detail.setTitle("灏婃暚鐨勯珮绾т細鍛橈紝绯荤粺宸叉敹鍒颁綘鐨勮秴绾т細鍛樺崌绾х敵璇凤紝姝e湪鍙楃悊涓�"); + detail.setBeiZhu("濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇"); + detail.setRead(false); + detail.setCreateTime(new Date()); + detail.setUser(new UserInfo(uid)); + detail.setContent("鎴戜滑灏嗕細鍦�48灏忔椂鍐呭畬鎴愬鏍�"); + detail.setType(MsgTypeAccountTypeEnum.vipApply); + try { + msgAccountDetailService.addMsgAccountDetail(detail); + } catch (MsgAccountDetailException e) { + e.printStackTrace(); + } + } + + @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, "鐢宠鏈浜庡鏍哥姸鎬�"); + } + + UserVIPPreInfo latestProcess = userVIPPreInfoService.getLatestProcessInfo(uid); + if (latestProcess == null || latestProcess.getProcess() != UserVIPPreInfo.PROCESS_2) { + throw new UserVIPInfoException(1, "璇ョ敤鎴疯繕涓嶆槸楂樼骇浼氬憳"); + } + + if (!verifyVip(uid)) + throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢"); + + // 棰濆淇℃伅 + UserInfoExtra userInfoExtra = userInfoExtraService.getByUidForUpdate(uid); + if (userInfoExtra == null) + 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); + + try { + // 璧犻�佸厤鍗曞埜 + 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("宸插皢浣犵殑璐︽埛鐢遍珮绾т細鍛樺崌绾т负瓒呯骇浼氬憳"); + msgDto.setEquity("浠庢敹鍒版湰娑堟伅璧凤紝浣犲皢鑾峰緱鍏ㄩ儴瓒呯骇浼氬憳鏉冪泭"); + msgAccountDetailService.addMsgVIP(uid, "鎭枩浣狅紒缁忎汉宸ュ鏍镐綘婊¤冻鍗囩骇瓒呯骇浼氬憳鏉′欢", "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgDto); + } + + /** + * 楠岃瘉鏄惁绗﹀悎VIP + * @param uid + * @return + */ + private boolean verifyVip(Long uid) { + // 鑷喘璁㈠崟 + long doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + HongBaoV2.TYPE_ZIGOU); + // 鍒嗕韩璁㈠崟 + long doneShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + HongBaoV2.TYPE_SHARE_GOODS); + + // 鏈夋晥绮変笣 + 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"); + if (!StringUtil.isNullOrEmpty(zigou)) { + limitZiGou = Long.parseLong(zigou); + } + + long limitShare = 0; + String share = userVipConfigService.getValueByKey("vip_pre_10_share_order_count"); + if (!StringUtil.isNullOrEmpty(share)) { + limitShare = Long.parseLong(share); + } + + long limitFirst = 0; + String first = userVipConfigService.getValueByKey("vip_pre_10_first_level_team_count"); + if (!StringUtil.isNullOrEmpty(first)) { + limitFirst = Long.parseLong(first); + } + + long limitSecond = 0; + String second = userVipConfigService.getValueByKey("vip_pre_10_second_level_team_count"); + if (!StringUtil.isNullOrEmpty(second)) { + limitSecond = Long.parseLong(second); + } + + if (doneZiGou >= limitZiGou || doneShare >= limitShare || (doneFirst >= limitFirst && doneSecond >= limitSecond)) { + return true; + } + return false; + } + + @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); + + // 娑堟伅 + MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); + msgDto.setStatus("浣犵殑璐﹀彿浠嶆槸楂樼骇浼氬憳"); + msgDto.setReason(reason); + msgAccountDetailService.addMsgVIP(uid, "寰堟姳姝夛紒缁忎汉宸ュ鏍镐綘鏈弧瓒虫垨涓嶇鍚堝崌绾ц秴绾т細鍛樼殑鏉′欢", "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgDto); + } + } -- Gitblit v1.8.0