From 604be616a6ba9e2604c8616be562c5a1c49f073c Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 25 十一月 2020 16:51:25 +0800
Subject: [PATCH] 大淘客接口编码修改
---
fanli/src/main/java/com/yeshi/fanli/service/impl/tlj/UserTaoLiJinRecordServiceImpl.java | 936 +++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 593 insertions(+), 343 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 221814e..2c9280b 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
@@ -9,378 +9,628 @@
import javax.annotation.Resource;
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
import org.springframework.core.task.TaskExecutor;
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.vip.UserLevelEnum;
import com.yeshi.fanli.entity.bus.user.UserMoneyExtra;
import com.yeshi.fanli.entity.goods.CommonGoods;
-import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
+import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
+import com.yeshi.common.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.tlj.GoodsTaoLiJinRateService;
+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.UserMoneyExtraService;
-import com.yeshi.fanli.util.MoneyBigDecimalUtil;
+import com.yeshi.fanli.service.inter.user.TokenRecordService;
+import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.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.vo.msg.ClientTextStyleVO;
+import com.yeshi.fanli.util.taobao.TaoLiJinUtil;
+import com.yeshi.common.vo.ClientTextStyleVO;
import com.yeshi.fanli.vo.user.UserTaoLiJinRecordVO;
@Service
public class UserTaoLiJinRecordServiceImpl implements UserTaoLiJinRecordService {
- @Resource(name = "taskExecutor")
- private TaskExecutor executor;
-
- @Resource
- private RedisManager redisManager;
-
- @Resource
- private UserTaoLiJinRecordMapper userTaoLiJinRecordMapper;
-
- @Resource
- private CommonGoodsService commonGoodsService;
-
- @Resource
- private HongBaoManageService hongBaoManageService;
-
- @Resource
- private UserMoneyExtraService userMoneyExtraService;
-
- @Resource
- private UserTaoLiJinReportService userTaoLiJinReportService;
-
- @Resource
- private UserTaoLiJinDetailService userTaoLiJinDetailService;
-
- @Resource
- private UserTaoLiJinOriginService userTaoLiJinOriginService;
-
- @Resource
- private GoodsTaoLiJinRateService goodsTaoLiJinRateService;
-
- @Resource
- private UserOtherMsgNotificationService userOtherMsgNotificationService;
-
-
-
- @Override
- public UserTaoLiJinRecord selectByPrimaryKey(Long id){
- return userTaoLiJinRecordMapper.selectByPrimaryKey(id);
- }
-
-
- @Override
- public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException{
- Date date = new Date();
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String date_str = format.format(date);
- String sendEndTime_str = date_str + " 22:00:00";
- String useEndTime_str = date_str + " 23:59:59";
- /* 鍒涘缓娣樼ぜ閲� */
- String name = "鑷喘娣樼ぜ閲戠孩鍖�";
- // 鍙戞斁寮�濮嬫椂闂�
- Date sendStartTime = date;
- // 鍙戞斁鎴鏃堕棿 - 鍒嗕韩褰撴棩22:00
- Date sendEndTime = null;
- // 浣跨敤缁撴潫鏃ユ湡 - 鍒嗕韩褰撴棩 23锛�59
- Date useEndTime = null;
- try {
- sendEndTime = formatStr.parse(sendEndTime_str);
- useEndTime = formatStr.parse(useEndTime_str);
- } catch (ParseException e2) {
- e2.printStackTrace();
- }
- BigDecimal perface = goodsTaoLiJinRateService.getGoodsSpreadMoney(goods);
-
- return createUserTaoLiJin(1, uid, goods.getAuctionId(), perface, 1, name, sendStartTime,
- sendEndTime, null, useEndTime);
- }
-
-
- @Override
- public UserTaoLiJinRecord createShareTaoLiJin(Long uid, int totalNum, TaoBaoGoodsBrief goods) throws UserTaoLiJinRecordException{
- Date date = new Date();
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String date_str = format.format(date);
- String sendEndTime_str = date_str + " 22:00:00";
- String useEndTime_str = date_str + " 23:59:59";
- /* 鍒涘缓娣樼ぜ閲� */
- String name = "鍒嗕韩娣樼ぜ閲戠孩鍖�";
- // 鍙戞斁寮�濮嬫椂闂�
- Date sendStartTime = date;
- // 鍙戞斁鎴鏃堕棿 - 鍒嗕韩褰撴棩22:00
- Date sendEndTime = null;
- // 浣跨敤缁撴潫鏃ユ湡 - 鍒嗕韩褰撴棩 23锛�59
- Date useEndTime = null;
- try {
- sendEndTime = formatStr.parse(sendEndTime_str);
- useEndTime = formatStr.parse(useEndTime_str);
- } catch (ParseException e2) {
- e2.printStackTrace();
- }
-
- BigDecimal perface = goodsTaoLiJinRateService.getGoodsSpreadMoney(goods);
-
- return createUserTaoLiJin(2, uid, goods.getAuctionId(), perface, totalNum, name, sendStartTime,
- sendEndTime, null, useEndTime);
- }
-
-
- @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) 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) {
- throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻");
- }
-
- // 鍒涘缓娣樼ぜ閲戠孩鍖�
- TaoLiJinDTO taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, name, perface, totalNum, sendStartTime, sendEndTime, useStartTime, useEndTime);
- if (taoLiJinDTO == null) {
- throw new UserTaoLiJinRecordException(101, "绾㈠寘鍒涘缓澶辫触");
- }
-
- // 淇濆瓨璁板綍
- UserTaoLiJinRecord record = new UserTaoLiJinRecord();
- record.setUid(uid);
- record.setGoodsId(auctionId);
- record.setName(name);
- record.setPerFace(perface);
- record.setTotalNum(totalNum);
- record.setSendStartTime(sendStartTime);
- record.setSendEndTime(sendEndTime);
- record.setUseStartTime(useStartTime);
- record.setUseEndTime(useEndTime);
- record.setRightsId(taoLiJinDTO.getRightsId());
- record.setSendUrl(taoLiJinDTO.getSendUrl());
- record.setCreateTime(new Date());
- userTaoLiJinRecordMapper.insertSelective(record);
-
- // 鍓╀綑娣樼ぜ閲�
- 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() {
- @Override
- public void run() {
- try {
- // 鎻掑叆鏄庣粏
- UserTaoLiJinDetail detail = new UserTaoLiJinDetail();
- detail.setUid(uid);
- detail.setMoney(new BigDecimal("-" + totalMoney));
- detail.setTitle(TaoLiJinDetailTypeEnum.reduce.getDesc());
- detail.setType(TaoLiJinDetailTypeEnum.reduce);
- detail.setCreateTime(new Date());
- userTaoLiJinDetailService.insertSelective(detail);
- } 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 ) {
- 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);
- }
-
-
-
- // 浣跨敤鎴愬姛娑堟伅
- 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);
- if (commonGoods == null) {
- TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
- if (taoBaoGoodsBrief != null) {
- commonGoodsService.addCommonGoods(CommonGoodsFactory.create(taoBaoGoodsBrief));
- }
- }
- } catch (Exception e) {
- LogHelper.errorDetailInfo(e);
- }
- }
- });
-
- return record;
- }
+ @Resource(name = "taskExecutor")
+ private TaskExecutor executor;
-
- @Override
- public List<UserTaoLiJinRecordVO> getRecordByUid(long start, int count, Long uid){
- List<UserTaoLiJinRecordVO> list = userTaoLiJinRecordMapper.getRecordByUid(start, count, uid);
- if (list == null || list.size() == 0) {
- return list;
- }
-
-
- List<Long> listGoodsId = new ArrayList<Long>();
- for (UserTaoLiJinRecordVO userTaoLiJinRecordVO: list) {
- listGoodsId.add(userTaoLiJinRecordVO.getAuctionId());
- }
-
- if (listGoodsId.size() == 0) {
- return null;
- }
-
- List<CommonGoods> listGoods = commonGoodsService.getByListGoodsId(listGoodsId);
- if (listGoods == null || listGoods.size() == 0) {
- return null;
- }
-
-
- // 缁勭粐鐩稿叧鏁版嵁
- for (UserTaoLiJinRecordVO userTaoLiJinRecordVO: list) {
- long auctionId = userTaoLiJinRecordVO.getAuctionId().longValue();
-
- // 鍟嗗搧淇℃伅
- for (int i = 0; i< listGoods.size(); i++) {
- CommonGoods commonGoods = listGoods.get(i);
- long goodsId = commonGoods.getGoodsId().longValue();
- if (auctionId == goodsId) {
- userTaoLiJinRecordVO.setTitle(commonGoods.getTitle());
- userTaoLiJinRecordVO.setPictUrl(commonGoods.getPicture());
- if(CommonGoods.SHOP_TYPE_TB == commonGoods.getShopType()) {
- userTaoLiJinRecordVO.setUserType(0);
- } else {
- userTaoLiJinRecordVO.setUserType(1);
- }
-
- listGoods.remove(i);
- break;
- }
- }
-
- // 璁$畻鍓╀綑鏈鍙栨暟閲�
- int winNum = userTaoLiJinRecordVO.getWinNum();
- int totalNum = userTaoLiJinRecordVO.getTotalNum();
- userTaoLiJinRecordVO.setSurplusNum(totalNum - winNum);
-
-
- // 璁$畻鍒嗕韩濂栭噾
- BigDecimal shareMoney = new BigDecimal(0);
- BigDecimal commission = userTaoLiJinRecordVO.getCommission();
- if (commission != null && commission.compareTo(shareMoney) > 1) {
- BigDecimal shareRate = hongBaoManageService.getShareRate();
- shareMoney = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(commission, new BigDecimal("0.01")), MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
- shareMoney = BigDecimalUtil.getWithNoZera(shareMoney);
- }
-
- ClientTextStyleVO desc = new ClientTextStyleVO();
- desc.setColor("#FFFFFF");
- desc.setContent("棰勪及鍒嗕韩濂栭噾锛氾骏" + shareMoney);
- desc.setBottomColor("#E8AE48");
- userTaoLiJinRecordVO.setDesc(desc);
- }
- return list;
- }
-
- @Override
- public long countRecordByUid(Long uid) {
- return userTaoLiJinRecordMapper.countRecordByUid(uid);
- }
-
- @Override
- public long countTodayNum(Long uid) {
- return userTaoLiJinRecordMapper.countTodayNum(uid);
- }
-
-
- @Override
- public BigDecimal getShareHongBaoByUidAndGoodsId(Long uid, Long goodsId) {
- return userTaoLiJinRecordMapper.getShareHongBaoByUidAndGoodsId(uid, goodsId);
- }
-
- @Override
- public UserTaoLiJinRecord getByRightsId(String rightsId) {
- return userTaoLiJinRecordMapper.getByRightsId(rightsId);
- }
-
+ @Resource
+ private RedisManager redisManager;
+
+ @Resource
+ private ConfigService configService;
+
+ @Resource
+ private UserTaoLiJinRecordMapper userTaoLiJinRecordMapper;
+
+ @Resource
+ private CommonGoodsService commonGoodsService;
+
+ @Resource
+ private HongBaoManageService hongBaoManageService;
+
+ @Resource
+ private UserMoneyExtraService userMoneyExtraService;
+
+ @Resource
+ private UserTaoLiJinReportService userTaoLiJinReportService;
+
+ @Resource
+ private UserTaoLiJinDetailService userTaoLiJinDetailService;
+
+ @Resource
+ private UserTaoLiJinOriginService userTaoLiJinOriginService;
+
+ @Resource
+ private ConfigTaoLiJinService configTaoLiJinService;
+
+ @Resource
+ private UserOtherMsgNotificationService userOtherMsgNotificationService;
+
+ @Resource
+ private UserInfoExtraService userInfoExtraService;
+
+ @Resource
+ private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
+
+ @Resource
+ private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
+
+ @Resource
+ private ShareHotGoodsService shareHotGoodsService;
+
+ @Resource
+ private TokenRecordService tokenRecordService;
+
+ @Resource
+ private UserTaoLiJinGiveRecordService userTaoLiJinGiveRecordService;
+
+ @Resource
+ private UserInfoService userInfoService;
+
+ @Override
+ public UserTaoLiJinRecord selectByPrimaryKey(Long id) {
+ return userTaoLiJinRecordMapper.selectByPrimaryKey(id);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public UserTaoLiJinRecord createSelfBuyTaoLiJin(Long uid, BigDecimal couplePrice, TaoBaoGoodsBrief goods)
+ throws UserTaoLiJinRecordException {
+ Date date = new Date();
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String date_str = format.format(date);
+ String sendEndTime_str = date_str + " 22:00:00";
+ String useEndTime_str = date_str + " 23:59:59";
+ /* 鍒涘缓娣樼ぜ閲� */
+ String name = "鑷喘娣樼ぜ閲戠孩鍖�";
+ // 鍙戞斁寮�濮嬫椂闂�
+ Date sendStartTime = date;
+ // 鍙戞斁鎴鏃堕棿 - 鍒嗕韩褰撴棩22:00
+ Date sendEndTime = null;
+ // 浣跨敤缁撴潫鏃ユ湡 - 鍒嗕韩褰撴棩 23锛�59
+ Date useEndTime = null;
+ try {
+ sendEndTime = formatStr.parse(sendEndTime_str);
+ useEndTime = formatStr.parse(useEndTime_str);
+ } catch (ParseException e2) {
+ e2.printStackTrace();
+ }
+
+ if (!TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {// 闈炶繑鍒╁簱鍟嗗搧
+ 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(), couplePrice, 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(), couplePrice, 1, name, sendStartTime, sendEndTime, null,
+ useEndTime, TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
+ }
+
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @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");
+ String date_str = format.format(date);
+ String sendEndTime_str = date_str + " 22:00:00";
+ String useEndTime_str = date_str + " 23:59:59";
+ /* 鍒涘缓娣樼ぜ閲� */
+ String name = "鍒嗕韩娣樼ぜ閲戠孩鍖�";
+ // 鍙戞斁寮�濮嬫椂闂�
+ Date sendStartTime = date;
+ // 鍙戞斁鎴鏃堕棿 - 鍒嗕韩褰撴棩22:00
+ Date sendEndTime = null;
+ // 浣跨敤缁撴潫鏃ユ湡 - 鍒嗕韩褰撴棩 23锛�59
+ Date useEndTime = null;
+ try {
+ sendEndTime = formatStr.parse(sendEndTime_str);
+ useEndTime = formatStr.parse(useEndTime_str);
+ } catch (ParseException e2) {
+ e2.printStackTrace();
+ }
+
+ boolean isNewUser = userInfoExtraService.isNewUser(uid);
+ if (isNewUser) {
+ // 鍒ゅ畾涓鸿�佺敤鎴凤細 鏂颁汉鍙浣跨敤浜嗘柊浜虹孩鍖咃紝涔熷氨鏄偅1鍧楅挶锛岄偅涔堬紝浠栫湅鍒扮殑鍒嗕韩鐖嗘涓殑鍟嗗搧-灏卞彧鑳藉垎浜��
+ long countRecord = userTaoLiJinRecordMapper.countRecordByUid(uid);
+ if (countRecord > 0) {
+ isNewUser = false;
+ }
+ }
+
+ BigDecimal perface = null;
+ if (isNewUser) {
+ perface = new BigDecimal(1);
+ } else {
+ // 璁$畻鎺ㄥ箍绾㈠寘
+ 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_TLJ_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(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 {
+
+ // 鐢ㄦ埛鍓╀綑鍙互娣樼ぜ閲戦獙璇�
+ UserMoneyExtra userMoneyExtra = userMoneyExtraService.selectByPrimaryKey(uid);
+ if (userMoneyExtra == null || userMoneyExtra.getTlj() == null) {
+ throw new UserTaoLiJinRecordException(101, "绾㈠寘浣欓涓嶈冻");
+ }
+
+ // 杩囨湡 -鍙栨秷鏀跺洖
+ // 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,
+ 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() == TaoLiJinCreateException.CODE_TLJ_FORBIDDEN) {
+ // 璇ュ晢鍝佷笉鏀寔鍒涘缓娣樼ぜ閲戠孩鍖�
+ shareHotGoodsService.deleteByGoodsId(auctionId);
+ } else if (e.getCode() == TaoLiJinCreateException.CODE_TLJ_NO_MONEY) {
+ // 瀹樻柟鐜╂硶閽卞寘浣欓涓嶈冻 TODO
+ }
+ }
+ });
+ } catch (TaoKeApiException e1) {
+ }
+
+ if (taoLiJinDTO == null) {
+ throw new UserTaoLiJinRecordException(101, "娣樺疂API鎺ㄥ箍绾㈠寘鍒涘缓澶辫触");
+ }
+
+ // 淇濆瓨璁板綍
+ UserTaoLiJinRecord record = new UserTaoLiJinRecord();
+ record.setUid(uid);
+ record.setGoodsId(auctionId);
+ record.setName(name);
+ record.setPerFace(perface);
+ record.setTotalNum(totalNum);
+ record.setSendStartTime(sendStartTime);
+ record.setSendEndTime(sendEndTime);
+ record.setUseStartTime(useStartTime);
+ record.setUseEndTime(useEndTime);
+ record.setRightsId(taoLiJinDTO.getRightsId());
+ record.setSendUrl(taoLiJinDTO.getSendUrl());
+ record.setCreateTime(new Date());
+ if (origin == 1) { // 鑷喘
+ record.setUseType(1);
+ } else { // 鍒嗕韩
+ record.setUseType(2);
+ }
+
+ userTaoLiJinRecordMapper.insertSelective(record);
+
+ 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);
+
+ record.setSurplusMoney(surplusTlj);
+
+ // 寮傛
+ String rightsId = taoLiJinDTO.getRightsId();
+ executor.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ // 鎻掑叆鏄庣粏
+ UserTaoLiJinDetail detail = new UserTaoLiJinDetail();
+ detail.setUid(uid);
+ detail.setMoney(new BigDecimal("-" + totalMoney));
+ detail.setTitle(TaoLiJinDetailTypeEnum.reduce.getDesc());
+ detail.setType(TaoLiJinDetailTypeEnum.reduce);
+ detail.setCreateTime(new Date());
+ userTaoLiJinDetailService.insertSelective(detail);
+ } 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) {
+ 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);
+ }
+
+ // 鍒涘缓鎶ュ憡
+ try {
+ userTaoLiJinReportService.insertDefault(rightsId);
+ } catch (Exception e) {
+ LogHelper.errorDetailInfo(e);
+ }
+
+ if (origin == 1) {
+ return; // 鑷喘涓嶆帹閫佹秷鎭�
+ }
+
+ // 浣跨敤鎴愬姛娑堟伅
+ 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 {
+ CommonGoods commonGoods = commonGoodsService.getCommonGoodsByGoodsIdAndGoodsType(auctionId,
+ CommonGoods.GOODS_TYPE_TB);
+ if (commonGoods == null) {
+ TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
+ if (taoBaoGoodsBrief != null) {
+ commonGoodsService.addCommonGoods(CommonGoodsFactory.create(taoBaoGoodsBrief));
+ }
+ }
+ } catch (Exception e) {
+ LogHelper.errorDetailInfo(e);
+ }
+ }
+ });
+
+ return record;
+ }
+
+ @Override
+ public List<UserTaoLiJinRecordVO> getRecordByUid(long start, int count, Long uid) {
+ List<UserTaoLiJinRecordVO> list = userTaoLiJinRecordMapper.getRecordByUid(start, count, uid);
+ if (list == null || list.size() == 0) {
+ return list;
+ }
+
+ List<Long> listGoodsId = new ArrayList<Long>();
+ for (UserTaoLiJinRecordVO userTaoLiJinRecordVO : list) {
+ listGoodsId.add(userTaoLiJinRecordVO.getAuctionId());
+ }
+
+ if (listGoodsId.size() == 0) {
+ return null;
+ }
+
+ List<CommonGoods> listGoods = commonGoodsService.getByListGoodsId(listGoodsId, Constant.SOURCE_TYPE_TAOBAO);
+ if (listGoods == null || listGoods.size() == 0) {
+ return null;
+ }
+
+ // 缁勭粐鐩稿叧鏁版嵁
+ for (UserTaoLiJinRecordVO userTaoLiJinRecordVO : list) {
+ long auctionId = userTaoLiJinRecordVO.getAuctionId().longValue();
+
+ // 鍟嗗搧淇℃伅
+ for (int i = 0; i < listGoods.size(); i++) {
+ CommonGoods commonGoods = listGoods.get(i);
+ long goodsId = commonGoods.getGoodsId().longValue();
+ if (auctionId == goodsId) {
+ userTaoLiJinRecordVO.setTitle(commonGoods.getTitle());
+ userTaoLiJinRecordVO.setPictUrl(commonGoods.getPicture());
+ if (CommonGoods.SHOP_TYPE_TB == commonGoods.getShopType()) {
+ userTaoLiJinRecordVO.setUserType(0);
+ } else {
+ userTaoLiJinRecordVO.setUserType(1);
+ }
+ break;
+ }
+ }
+
+ // 璁$畻鍓╀綑鏈鍙栨暟閲�
+ int winNum = userTaoLiJinRecordVO.getWinNum();
+ int totalNum = userTaoLiJinRecordVO.getTotalNum();
+ userTaoLiJinRecordVO.setSurplusNum(totalNum - winNum);
+ SystemEnum system = userInfoService.getUserSystem(uid);
+
+ // 璁$畻鍒嗕韩濂栭噾
+ BigDecimal shareMoney = new BigDecimal(0);
+ BigDecimal commission = userTaoLiJinRecordVO.getCommission();
+ if (commission != null && commission.compareTo(shareMoney) > 0) {
+ BigDecimal shareRate = hongBaoManageService.getShareRate(UserLevelEnum.daRen,system);
+ shareMoney = MoneyBigDecimalUtil.mul(commission,
+ MoneyBigDecimalUtil.div(shareRate, new BigDecimal(100)));
+ shareMoney = BigDecimalUtil.getWithNoZera(shareMoney);
+ }
+
+ ClientTextStyleVO desc = new ClientTextStyleVO();
+ desc.setColor("#FFFFFF");
+ desc.setContent("棰勪及鍒嗕韩濂栭噾锛氾骏" + shareMoney);
+ desc.setBottomColor("#E8AE48");
+ userTaoLiJinRecordVO.setDesc(desc);
+ }
+ return list;
+ }
+
+ @Override
+ public long countRecordByUid(Long uid) {
+ return userTaoLiJinRecordMapper.countRecordByUid(uid);
+ }
+
+ @Override
+ public long countShareRecordByUid(Long uid) {
+ return userTaoLiJinRecordMapper.countShareRecordByUid(uid);
+ }
+
+ @Override
+ public long countTodayNum(Long uid) {
+ return userTaoLiJinRecordMapper.countTodayNum(uid);
+ }
+
+ @Override
+ public BigDecimal getShareHongBaoByUidAndGoodsId(Long uid, Long goodsId) {
+ return userTaoLiJinRecordMapper.getShareHongBaoByUidAndGoodsId(uid, goodsId);
+ }
+
+ @Override
+ public UserTaoLiJinRecord getByRightsId(String rightsId) {
+ 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);
+
+ SystemEnum system = userInfoService.getUserSystem(uid);
+
+ 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.getValue(ConfigKeyEnum.appDownLink.getKey(), system)).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