From f4a0f2acc63d7785eab108419a4e16f5f688cb95 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期六, 18 一月 2020 12:06:27 +0800 Subject: [PATCH] 用户注册信息 --- fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java | 227 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 177 insertions(+), 50 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 2ce75b7..4d5ac54 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 @@ -13,39 +13,51 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.BigDecimalUtil; +import org.yeshi.utils.DateUtil; import com.yeshi.fanli.dao.mybatis.tlj.UserTaoLiJinRecordMapper; import com.yeshi.fanli.dto.msg.MsgOtherTaoLiJinContentDTO; import com.yeshi.fanli.dto.taobao.TaoLiJinDTO; import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail; import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail.TaoLiJinDetailTypeEnum; +import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinGiveRecord; import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinOrigin; import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord; +import com.yeshi.fanli.entity.bus.user.TokenRecord; +import com.yeshi.fanli.entity.bus.user.TokenRecord.TokenTypeEnum; import com.yeshi.fanli.entity.bus.user.UserMoneyExtra; import com.yeshi.fanli.entity.goods.CommonGoods; +import com.yeshi.fanli.entity.system.ConfigKeyEnum; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; +import com.yeshi.fanli.entity.taobao.TaoKeAppInfo; import com.yeshi.fanli.exception.taobao.TaoKeApiException; +import com.yeshi.fanli.exception.tlj.TaoLiJinCreateException; import com.yeshi.fanli.exception.tlj.UserTaoLiJinRecordException; import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.goods.CommonGoodsService; -import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService; +import com.yeshi.fanli.service.inter.money.UserMoneyExtraService; import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService; +import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.service.inter.taobao.ShareHotGoodsService; 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.UserTaoLiJinGiveRecordService; 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.TokenRecordService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; -import com.yeshi.fanli.service.inter.user.UserMoneyExtraService; +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.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TaoBaoConstant; +import com.yeshi.fanli.util.TokenUtil; import com.yeshi.fanli.util.factory.CommonGoodsFactory; +import com.yeshi.fanli.util.taobao.TaoBaoUtil; import com.yeshi.fanli.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.util.taobao.TaoLiJinUtil; import com.yeshi.fanli.vo.msg.ClientTextStyleVO; @@ -59,6 +71,9 @@ @Resource private RedisManager redisManager; + + @Resource + private ConfigService configService; @Resource private UserTaoLiJinRecordMapper userTaoLiJinRecordMapper; @@ -98,16 +113,21 @@ @Resource private ShareHotGoodsService shareHotGoodsService; - + + @Resource + private TokenRecordService tokenRecordService; + + @Resource + private UserTaoLiJinGiveRecordService userTaoLiJinGiveRecordService; + @Override public UserTaoLiJinRecord selectByPrimaryKey(Long id) { return userTaoLiJinRecordMapper.selectByPrimaryKey(id); } - - @Transactional + @Transactional(rollbackFor=Exception.class) @Override - public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) + public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, BigDecimal couplePrice, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); @@ -129,10 +149,8 @@ } catch (ParseException e2) { e2.printStackTrace(); } - // 鏂颁汉绾㈠寘 鑷喘涓�鍏� - BigDecimal perface = new BigDecimal(1); - if (goods.getMaterialLibType() == null || goods.getMaterialLibType() == 0) {// 闈炶繑鍒╁簱鍟嗗搧 + if (!TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {// 闈炶繑鍒╁簱鍟嗗搧 String relationId = null; try { relationId = taoBaoBuyRelationMapService.getRelationId(uid); @@ -143,22 +161,22 @@ if (StringUtil.isNullOrEmpty(relationId)) { throw new UserTaoLiJinRecordException(101, "娓犻亾鏈妗�"); } - UserTaoLiJinRecord record = createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, + UserTaoLiJinRecord record = createUserTaoLiJin(1, uid, goods.getAuctionId(), couplePrice, 1, name, sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID); record.setSendUrl(record.getSendUrl() + "&relationId=" + relationId); - UserTaoLiJinRecord updateRecoed=new UserTaoLiJinRecord(); + 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, + return createUserTaoLiJin(1, uid, goods.getAuctionId(), couplePrice, 1, name, sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT); } } - @Transactional + @Transactional(rollbackFor=Exception.class) @Override public UserTaoLiJinRecord createShareTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException { @@ -201,15 +219,15 @@ perface = new BigDecimal(1); } else { // 璁$畻鎺ㄥ箍绾㈠寘 - String warningRate = configTaoLiJinService.getValueByKey("warning_value"); + String warningRate = configTaoLiJinService.getValueByKey("warning_value", new Date()); perface = TaoLiJinUtil.getSpreadMoney(warningRate, goods); } UserTaoLiJinRecord record = createUserTaoLiJin(2, uid, goods.getAuctionId(), perface, totalNum, name, - sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT); + sendStartTime, sendEndTime, null, useEndTime, TaoBaoConstant.TAOBAO_TLJ_RELATION_PID_DEFAULT); String sendUrl = record.getSendUrl() + "&relationId=" + relationId; record.setSendUrl(sendUrl); - UserTaoLiJinRecord updateRecoed=new UserTaoLiJinRecord(); + UserTaoLiJinRecord updateRecoed = new UserTaoLiJinRecord(); updateRecoed.setId(record.getId()); updateRecoed.setSendUrl(sendUrl); userTaoLiJinRecordMapper.updateByPrimaryKeySelective(record); @@ -217,7 +235,7 @@ } @Override - @Transactional + @Transactional(rollbackFor=Exception.class) 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 { @@ -228,47 +246,48 @@ throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻"); } - // 杩囨湡 - userTaoLiJinOriginService.overdueHongBao(uid); - + // 杩囨湡 -鍙栨秷鏀跺洖 + // userTaoLiJinOriginService.overdueHongBao(uid); + // 鎬绘帹骞跨孩鍖� BigDecimal totalMoney = MoneyBigDecimalUtil.mul(perface, new BigDecimal(totalNum)); - + // 鑷喘鏃剁殑绾㈠寘浣欓 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 = null; try { - taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, - sendEndTime, useStartTime, useEndTime, pid); - } catch (TaoKeApiException e) { + taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, sendEndTime, + useStartTime, useEndTime, + new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET, pid)); + } catch (TaoLiJinCreateException e) { LogHelper.errorDetailInfo(e); executor.execute(new Runnable() { @Override public void run() { - if (e.getCode() == TaoKeApiException.CODE_TLJ_FORBIDDEN) { + if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_FORBIDDEN) { // 璇ュ晢鍝佷笉鏀寔鍒涘缓娣樼ぜ閲戠孩鍖� shareHotGoodsService.deleteByGoodsId(auctionId); - } else if (e.getCode() == TaoKeApiException.CODE_TLJ_NO_MONEY) { - // 瀹樻柟鐜╂硶閽卞寘浣欓涓嶈冻 TODO + } else if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_NO_MONEY) { + // 瀹樻柟鐜╂硶閽卞寘浣欓涓嶈冻 TODO } } }); + } catch (TaoKeApiException e1) { } - + if (taoLiJinDTO == null) { throw new UserTaoLiJinRecordException(101, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触"); } @@ -287,21 +306,21 @@ record.setRightsId(taoLiJinDTO.getRightsId()); record.setSendUrl(taoLiJinDTO.getSendUrl()); record.setCreateTime(new Date()); - if (origin == 1) { // 鑷喘 + if (origin == 1) { // 鑷喘 record.setUseType(1); - } else { // 鍒嗕韩 + } else { // 鍒嗕韩 record.setUseType(2); } - + userTaoLiJinRecordMapper.insertSelective(record); - BigDecimal surplusTlj = MoneyBigDecimalUtil.sub(tlj, totalMoney); - + BigDecimal surplusTlj = MoneyBigDecimalUtil.sub(tlj, totalMoney); + UserMoneyExtra updateExtra = new UserMoneyExtra(); updateExtra.setUid(uid); if (origin == 1) { // 鍓╀綑娣樼ぜ閲�-- 鑷喘 updateExtra.setTljSelf(MoneyBigDecimalUtil.sub(userMoneyExtra.getTljSelf(), totalMoney)); - } + } updateExtra.setTlj(surplusTlj); updateExtra.setUpdateTime(new Date()); userMoneyExtraService.updateByPrimaryKeySelective(updateExtra); @@ -365,18 +384,15 @@ } catch (Exception e) { LogHelper.errorDetailInfo(e); } - - - if (origin == 1) { - return; // 鑷喘涓嶆帹閫佹秷鎭� + + if (origin == 1) { + return; // 鑷喘涓嶆帹閫佹秷鎭� } - - + // 浣跨敤鎴愬姛娑堟伅 try { - String beizhu = "鏈棰嗗彇/浣跨敤鐨勯儴鍒嗗皢浼氶��鍥�"; - - SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd hh.mm"); + String beizhu = "鏈棰嗗彇鎴栭鍙栧悗鏈娇鐢ㄩ儴鍒嗛��鍥�"; + SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm"); String time = sd.format(new Date()); MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO(); content.setState("绾㈠寘鎵i櫎"); @@ -458,7 +474,8 @@ BigDecimal commission = userTaoLiJinRecordVO.getCommission(); if (commission != null && commission.compareTo(shareMoney) > 0) { BigDecimal shareRate = hongBaoManageService.getShareRate(); - shareMoney = MoneyBigDecimalUtil.mul(commission, MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100))); + shareMoney = MoneyBigDecimalUtil.mul(commission, + MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100))); shareMoney = BigDecimalUtil.getWithNoZera(shareMoney); } @@ -480,8 +497,7 @@ public long countShareRecordByUid(Long uid) { return userTaoLiJinRecordMapper.countShareRecordByUid(uid); } - - + @Override public long countTodayNum(Long uid) { return userTaoLiJinRecordMapper.countTodayNum(uid); @@ -497,4 +513,115 @@ return userTaoLiJinRecordMapper.getByRightsId(rightsId); } + @Override + public String giveTaolijin(Long uid, BigDecimal amount) throws UserTaoLiJinRecordException { + if (uid == null || amount == null) + throw new UserTaoLiJinRecordException(1, "鍙傛暟涓嶆纭�"); + + String giveMin = configTaoLiJinService.getValueByKey("give_min_amount"); + if (amount.compareTo(new BigDecimal(giveMin)) < 0) + throw new UserTaoLiJinRecordException(1, "璧犻�佹帹骞跨孩鍖呴噾棰濊嚦灏�" + giveMin + "鍏�"); + + // 鐢ㄦ埛鍓╀綑鍙互娣樼ぜ閲戦獙璇� + UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid); + if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) + throw new UserTaoLiJinRecordException(1, "绾㈠寘浣欓涓嶈冻"); + + BigDecimal tlj = userMoneyExtra.getTlj(); + if (amount.compareTo(tlj) > 0) + throw new UserTaoLiJinRecordException(1, "绾㈠寘浣欓涓嶈冻"); + + Date nowDate = new Date(); + // 璧犻�佽褰� + UserTaoLiJinGiveRecord giveRecord = new UserTaoLiJinGiveRecord(); + giveRecord.setAmount(amount); + giveRecord.setGiveUid(uid); + giveRecord.setState(UserTaoLiJinGiveRecord.STATE_INIT); + giveRecord.setGiveTime(nowDate); + giveRecord.setEndTime(DateUtil.plusDayDate(Constant.GIVE_DAYS, new Date())); + userTaoLiJinGiveRecordService.insertSelective(giveRecord); + + // 鍙d护璁板綍 + TokenRecord tokenRecord = new TokenRecord(); + tokenRecord.setUid(uid); + tokenRecord.setIdentify(giveRecord.getId() + ""); + tokenRecord.setType(TokenTypeEnum.taoLiJin); + tokenRecord.setStartTime(nowDate); + tokenRecord.setEndTime(DateUtil.plusDayDate(Constant.TOKEN_DAYS, new Date())); + tokenRecord.setState(0); + tokenRecordService.insertSelective(tokenRecord); + + // 鍒涘缓鍙d护 + String token = TokenUtil.createToken(tokenRecord.getId()); + tokenRecord.setToken(token); + tokenRecordService.updateByPrimaryKeySelective(tokenRecord); + + // 鏇存柊浣欓 + UserMoneyExtra updateExtra = new UserMoneyExtra(); + updateExtra.setUid(uid); + updateExtra.setTlj(MoneyBigDecimalUtil.sub(tlj, amount)); + updateExtra.setUpdateTime(new Date()); + userMoneyExtraService.updateByPrimaryKeySelective(updateExtra); + + String tips = configTaoLiJinService.getValueByKey("give_taolijin_tips"); + String projectChineseName = Constant.systemCommonConfig.getProjectChineseName(); + while (tips.contains("{APP鍚嶇О}")) { + tips = tips.replace("{APP鍚嶇О}", projectChineseName); + } + tips = tips.replace("{鍙d护}", token).replace("{涓嬭浇閾炬帴}", configService.get(ConfigKeyEnum.appDownLink.getKey())).replace("{闈㈤}", + amount.setScale(0).toString()); + + executor.execute(new Runnable() { + @Override + public void run() { + try { + // 鎻掑叆鏄庣粏 + UserTaoLiJinDetail detail = new UserTaoLiJinDetail(); + detail.setUid(uid); + detail.setMoney(new BigDecimal("-" + amount)); + detail.setTitle(TaoLiJinDetailTypeEnum.give.getDesc()); + detail.setType(TaoLiJinDetailTypeEnum.give); + detail.setCreateTime(new Date()); + userTaoLiJinDetailService.insertSelective(detail); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + + // 鎴愬姛浣跨敤绾㈠寘 + try { + BigDecimal total = amount; + 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) { + break; + } + BigDecimal moneySurplus = taoLiJinOrigin.getMoneySurplus(); + lastMoney = total; + total = MoneyBigDecimalUtil.sub(total, moneySurplus); + if (total.compareTo(zero) >= 0) { + moneySurplus = zero; + } else { + moneySurplus = MoneyBigDecimalUtil.sub(moneySurplus, lastMoney); + } + + UserTaoLiJinOrigin usertlj = new UserTaoLiJinOrigin(); + usertlj.setId(taoLiJinOrigin.getId()); + usertlj.setMoneySurplus(moneySurplus); + usertlj.setUpdateTime(new Date()); + userTaoLiJinOriginService.updateByPrimaryKeySelective(usertlj); + } + } + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + } + }); + + return tips; + } + } -- Gitblit v1.8.0