From 72a696a00cba0e1837664f5280b8a3919ed66630 Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期三, 26 六月 2019 16:02:52 +0800 Subject: [PATCH] 分享红包商品bug优化 --- fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java | 133 ++++++++++++++++++++++++++++++++------------ 1 files changed, 96 insertions(+), 37 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java index 37fb8a0..080f0d3 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java @@ -29,15 +29,18 @@ import com.yeshi.fanli.service.inter.goods.CommonGoodsService; import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService; +import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService; import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService; import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinDetailService; import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService; import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService; import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinReportService; +import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserMoneyExtraService; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.RedisManager; +import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TaoBaoConstant; import com.yeshi.fanli.util.factory.CommonGoodsFactory; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; @@ -84,11 +87,19 @@ @Resource private UserInfoExtraService userInfoExtraService; + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @Resource + private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService; + @Override public UserTaoLiJinRecord selectByPrimaryKey(Long id) { return userTaoLiJinRecordMapper.selectByPrimaryKey(id); } + + @Transactional @Override public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException { @@ -115,16 +126,40 @@ // 鏂颁汉绾㈠寘 鑷喘涓�鍏� BigDecimal perface = new BigDecimal(1); - String pid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT; - if (goods.getMaterialLibType() == null || goods.getMaterialLibType() == 0) - pid = TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID; - return createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, sendStartTime, sendEndTime, null, - useEndTime, pid); + if (goods.getMaterialLibType() == null || goods.getMaterialLibType() == 0) {// 闈炶繑鍒╁簱鍟嗗搧 + String relationId = null; + try { + relationId = taoBaoBuyRelationMapService.getRelationId(uid); + } catch (Exception e) { + LogHelper.errorDetailInfo(e, "uid:" + uid, null); + } + + if (StringUtil.isNullOrEmpty(relationId)) { + throw new UserTaoLiJinRecordException(101, "娓犻亾鏈妗�"); + } + UserTaoLiJinRecord record = createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, + sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID); + record.setSendUrl(record.getSendUrl() + "&relationId=" + relationId); + UserTaoLiJinRecord updateRecoed=new UserTaoLiJinRecord(); + updateRecoed.setId(record.getId()); + updateRecoed.setSendUrl(record.getSendUrl()); + userTaoLiJinRecordMapper.updateByPrimaryKeySelective(record); + return record; + } else {// 杩斿埄搴撳晢鍝� + return createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, sendStartTime, sendEndTime, null, + useEndTime, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT); + } + } + @Transactional @Override public UserTaoLiJinRecord createShareTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException { + String relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid); + if (StringUtil.isNullOrEmpty(relationId)) + throw new UserTaoLiJinRecordException(101, "娓犻亾鏈巿鏉�"); + Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @@ -164,37 +199,58 @@ perface = TaoLiJinUtil.getSpreadMoney(warningRate, goods); } - return createUserTaoLiJin(2, uid, goods.getAuctionId(), perface, totalNum, name, sendStartTime, sendEndTime, - null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT); + UserTaoLiJinRecord record = createUserTaoLiJin(2, uid, goods.getAuctionId(), perface, totalNum, name, + sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT); + String sendUrl = record.getSendUrl() + "&relationId=" + relationId; + record.setSendUrl(sendUrl); + UserTaoLiJinRecord updateRecoed=new UserTaoLiJinRecord(); + updateRecoed.setId(record.getId()); + updateRecoed.setSendUrl(sendUrl); + userTaoLiJinRecordMapper.updateByPrimaryKeySelective(record); + return record; } @Override @Transactional - public UserTaoLiJinRecord createUserTaoLiJin(int origin, Long uid, Long auctionId, BigDecimal perface, int totalNum, String name, - Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime,String pid) throws UserTaoLiJinRecordException{ - + public UserTaoLiJinRecord createUserTaoLiJin(int origin, Long uid, Long auctionId, BigDecimal perface, int totalNum, + String name, Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, String pid) + throws UserTaoLiJinRecordException { + // 鐢ㄦ埛鍓╀綑鍙互娣樼ぜ閲戦獙璇� UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid); if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) { throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻"); } - + // 杩囨湡 userTaoLiJinOriginService.overdueHongBao(uid); - - BigDecimal tlj = userMoneyExtra.getTlj(); + + // 鎬绘帹骞跨孩鍖� BigDecimal totalMoney = MoneyBigDecimalUtil.mul(perface, new BigDecimal(totalNum)); - if (totalMoney.compareTo(tlj) > 0) { + + // 鑷喘鏃剁殑绾㈠寘浣欓 + if (origin == 1) { + BigDecimal tljSelf = userMoneyExtra.getTljSelf(); + if (tljSelf == null || tljSelf.compareTo(totalMoney) < 0) { + throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻"); + } + } + + // 鍒嗕韩鏃剁殑绾㈠寘浣欓 + BigDecimal tlj = userMoneyExtra.getTlj(); + if (tlj == null || tlj.compareTo(totalMoney) < 0) { throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻"); } + // 鍒涘缓娣樼ぜ閲戠孩鍖� - TaoLiJinDTO taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, sendEndTime, useStartTime, useEndTime, pid); + TaoLiJinDTO taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, + sendEndTime, useStartTime, useEndTime, pid); if (taoLiJinDTO == null) { throw new UserTaoLiJinRecordException(101, "绾㈠寘鍒涘缓澶辫触"); } - - // 淇濆瓨璁板綍 + + // 淇濆瓨璁板綍 UserTaoLiJinRecord record = new UserTaoLiJinRecord(); record.setUid(uid); record.setGoodsId(auctionId); @@ -209,17 +265,22 @@ record.setSendUrl(taoLiJinDTO.getSendUrl()); record.setCreateTime(new Date()); userTaoLiJinRecordMapper.insertSelective(record); + + + UserMoneyExtra updateExtra = new UserMoneyExtra(); + updateExtra.setUid(uid); + if (origin == 1) { // 鍓╀綑娣樼ぜ閲�-- 鑷喘 + updateExtra.setTljSelf(MoneyBigDecimalUtil.sub(userMoneyExtra.getTljSelf(), totalMoney)); + } // 鍓╀綑娣樼ぜ閲� BigDecimal surplusTlj = MoneyBigDecimalUtil.sub(tlj, totalMoney); - UserMoneyExtra updateExtra = new UserMoneyExtra(); - updateExtra.setUid(uid); updateExtra.setTlj(surplusTlj); updateExtra.setUpdateTime(new Date()); userMoneyExtraService.updateByPrimaryKeySelective(updateExtra); - + record.setSurplusMoney(surplusTlj); - + // 寮傛 String rightsId = taoLiJinDTO.getRightsId(); executor.execute(new Runnable() { @@ -237,30 +298,29 @@ } catch (Exception e) { LogHelper.errorDetailInfo(e); } - - + // 鎴愬姛浣跨敤绾㈠寘 try { BigDecimal total = totalMoney; BigDecimal lastMoney = null; BigDecimal zero = new BigDecimal(0); - + // 淇敼浣欓 List<UserTaoLiJinOrigin> list = userTaoLiJinOriginService.getSurplusLiJin(uid); if (list != null && list.size() > 0) { - for (UserTaoLiJinOrigin taoLiJinOrigin: list) { - if (total.compareTo(zero) < 1 ) { + for (UserTaoLiJinOrigin taoLiJinOrigin : list) { + if (total.compareTo(zero) < 1) { break; } BigDecimal moneySurplus = taoLiJinOrigin.getMoneySurplus(); lastMoney = total; total = MoneyBigDecimalUtil.sub(total, moneySurplus); - if (total.compareTo(zero) >= 0 ) { + if (total.compareTo(zero) >= 0) { moneySurplus = zero; } else { moneySurplus = MoneyBigDecimalUtil.sub(moneySurplus, lastMoney); } - + UserTaoLiJinOrigin usertlj = new UserTaoLiJinOrigin(); usertlj.setId(taoLiJinOrigin.getId()); usertlj.setMoneySurplus(moneySurplus); @@ -271,35 +331,34 @@ } catch (Exception e) { LogHelper.errorDetailInfo(e); } - - - + // 浣跨敤鎴愬姛娑堟伅 try { String beizhu = "鏈棰嗗彇/浣跨敤鐨勯儴鍒嗗皢浼氶��鍥�"; - + SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd hh.mm"); String time = sd.format(new Date()); MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO(); content.setState("绾㈠寘鎵i櫎"); content.setSource(time + " 鍒涘缓鐨勫垎浜褰�"); content.setMoney(totalMoney); - + userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content); } catch (Exception e) { LogHelper.errorDetailInfo(e); } - + // 鍒涘缓鎶ュ憡 try { userTaoLiJinReportService.insertDefault(rightsId); } catch (Exception e) { LogHelper.errorDetailInfo(e); } - + // 妫�娴嬪晢鍝佹槸鍚﹀瓨鍦� try { - CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(auctionId, CommonGoods.GOODS_TYPE_TB); + CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(auctionId, + CommonGoods.GOODS_TYPE_TB); if (commonGoods == null) { TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId); if (taoBaoGoodsBrief != null) { @@ -311,7 +370,7 @@ } } }); - + return record; } -- Gitblit v1.8.0