From eda5d0e998204c7a49ab84d8528569b765bec2f9 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期五, 20 十二月 2019 10:05:10 +0800 Subject: [PATCH] 品牌日志 --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackGiveRecordServiceImpl.java | 157 ++++++++++++++++++++++++++++++---------------------- 1 files changed, 91 insertions(+), 66 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackGiveRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackGiveRecordServiceImpl.java index 1a8d80e..64a5c9c 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackGiveRecordServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackGiveRecordServiceImpl.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.List; import javax.annotation.Resource; @@ -11,13 +10,16 @@ import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.DateUtil; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.Producer; import com.google.gson.Gson; import com.yeshi.fanli.dao.mybatis.redpack.RedPackGiveRecordMapper; +import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; +import com.yeshi.fanli.dto.mq.user.body.UserRedPackGiftMQMsg; import com.yeshi.fanli.dto.msg.MsgRedPackGiveContentDTO; import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum; import com.yeshi.fanli.entity.bus.user.TokenRecord; import com.yeshi.fanli.entity.bus.user.TokenRecord.TokenTypeEnum; -import com.yeshi.fanli.entity.redpack.RedPackBalance; import com.yeshi.fanli.entity.redpack.RedPackDetail; import com.yeshi.fanli.entity.redpack.RedPackDetail.RedPackDetailTypeEnum; import com.yeshi.fanli.entity.redpack.RedPackGiveRecord; @@ -26,12 +28,16 @@ import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService; import com.yeshi.fanli.service.inter.redpack.RedPackConfigService; import com.yeshi.fanli.service.inter.redpack.RedPackDetailService; +import com.yeshi.fanli.service.inter.redpack.RedPackForbidService; import com.yeshi.fanli.service.inter.redpack.RedPackGiveRecordService; import com.yeshi.fanli.service.inter.user.TokenRecordService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TokenUtil; +import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; import com.yeshi.fanli.util.factory.RedPackDetailFactory; +import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; @Service public class RedPackGiveRecordServiceImpl implements RedPackGiveRecordService { @@ -41,95 +47,101 @@ @Resource private RedPackConfigService redPackConfigService; - + @Resource private RedPackBalanceService redPackBalanceService; - @Resource private TokenRecordService tokenRecordService; - + @Resource private RedPackDetailService redPackDetailService; - + @Resource private UserMoneyMsgNotificationService userMoneyMsgNotificationService; + + @Resource + private RedPackForbidService redPackForbidService; - + @Resource(name = "producer") + private Producer producer; + @Override public RedPackGiveRecord selectByPrimaryKey(Long id) { return redPackGiveRecordMapper.selectByPrimaryKey(id); } - + @Override public void updateByPrimaryKeySelective(RedPackGiveRecord record) { redPackGiveRecordMapper.updateByPrimaryKeySelective(record); } - - + @Override - public List<RedPackGiveRecord> overdueList(int count) { - return redPackGiveRecordMapper.overdueList(count); - } - - @Override + @RequestSerializableByKeyService(key = "#id") @Transactional(rollbackFor = Exception.class) - public void overdue(List<RedPackGiveRecord> list) throws Exception { - if (list == null || list.size() == 0) + public void overdueByPrimaryKey(Long id) throws Exception { + if (id == null) return; - + + RedPackGiveRecord giveRecord = redPackGiveRecordMapper.selectByPrimaryKey(id); + if (giveRecord == null) + return; + + if (giveRecord.getState() != null && giveRecord.getState() != RedPackGiveRecord.STATE_INIT) + return; + + // 璧犻�佽褰曞け鏁� + RedPackGiveRecord updateRecord = new RedPackGiveRecord(); + updateRecord.setId(giveRecord.getId()); + updateRecord.setState(RedPackGiveRecord.STATE_OVERDUE); + redPackGiveRecordMapper.updateByPrimaryKeySelective(updateRecord); + + // 鍙d护澶辨晥 + tokenRecordService.invalidByRedPack(id); + + // 閫�鍥炵孩鍖� + redPackBalanceService.addRedPack(giveRecord.getGiveUid(), giveRecord.getAmount(), + RedPackDetailFactory.createGiveOthersFail(giveRecord)); + + // 閫�鍥炴秷鎭� SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd HH:mm"); - RedPackGiveRecord updateRecord = null; - for (RedPackGiveRecord giveRecord: list) { - updateRecord = new RedPackGiveRecord(); - updateRecord.setId(giveRecord.getId()); - updateRecord.setState(1); - redPackGiveRecordMapper.updateByPrimaryKeySelective(updateRecord); - - // 閫�鍥炵孩鍖� - redPackBalanceService.addRedPack(giveRecord.getGiveUid(), giveRecord.getAmount(), RedPackDetailFactory.createGiveOthersFail(giveRecord)); - - // 閫�鍥炴秷鎭� - MsgRedPackGiveContentDTO givedto = new MsgRedPackGiveContentDTO(); - givedto.setTitle("浣犺禒閫佺殑绾㈠寘鏈鎴愬姛棰嗗彇"); - givedto.setMoney("楼" + giveRecord.getAmount().setScale(2)); - givedto.setTime(sd.format(new Date())); - givedto.setGiveTime(sd.format(giveRecord.getGiveTime())); - userMoneyMsgNotificationService.redPackMsg(giveRecord.getGiveUid(), MsgTypeMoneyTypeEnum.redPackGiveBack, new Gson().toJson(givedto), "璇峰埌鎴戠殑-绾㈠寘鏌ョ湅"); - } + MsgRedPackGiveContentDTO givedto = new MsgRedPackGiveContentDTO(); + givedto.setTitle("浣犺禒閫佺殑绾㈠寘鏈鎴愬姛棰嗗彇"); + givedto.setMoney("楼" + giveRecord.getAmount().setScale(2)); + givedto.setTime(sd.format(new Date())); + givedto.setGiveTime(sd.format(giveRecord.getGiveTime())); + userMoneyMsgNotificationService.redPackMsg(giveRecord.getGiveUid(), MsgTypeMoneyTypeEnum.redPackGiveBack, + new Gson().toJson(givedto), "璇峰埌鎴戠殑-绾㈠寘鏌ョ湅"); + } - - + @Override @Transactional(rollbackFor = Exception.class) public String giving(Long uid, BigDecimal amount) throws RedPackGiveRecordException { if (uid == null || amount == null) throw new RedPackGiveRecordException(1, "鍙傛暟涓嶆纭�"); + if(redPackForbidService.verifyForbid(uid)) + throw new RedPackGiveRecordException(1, "绾㈠寘鍔熻兘宸茶灏佺"); + String giveMin = redPackConfigService.getValueByKey("give_money_min"); String giveMax = redPackConfigService.getValueByKey("give_money_max"); if (amount.compareTo(new BigDecimal(giveMin)) < 0 || amount.compareTo(new BigDecimal(giveMax)) > 0) throw new RedPackGiveRecordException(1, "璧犻�侀噾棰濊嚦灏�" + giveMin + "鍏冭嚦澶�" + giveMax + "鍏�"); - - RedPackBalance balance = redPackBalanceService.selectByPrimaryKey(uid); - if (balance == null) + + BigDecimal balance = redPackBalanceService.getBalance(uid); + if (balance == null || amount.compareTo(balance) > 0) throw new RedPackGiveRecordException(1, "浣欓涓嶈冻"); - - if (balance.getState() != null && balance.getState() == RedPackBalance.STATE_LOCKED) - throw new RedPackGiveRecordException(1, "绾㈠寘宸插皝绂侊紝鎰熻阿浣跨敤"); - - if (balance.getMoney() == null || amount.compareTo(balance.getMoney()) > 0) - throw new RedPackGiveRecordException(1, "浣欓涓嶈冻"); - Date nowDate = new Date(); + Date endTime = DateUtil.plusDayDate(Constant.TOKEN_DAYS, new Date()); // 璧犻�佽褰� RedPackGiveRecord giveRecord = new RedPackGiveRecord(); giveRecord.setAmount(amount); giveRecord.setGiveUid(uid); giveRecord.setState(RedPackGiveRecord.STATE_INIT); giveRecord.setGiveTime(nowDate); - giveRecord.setEndTime(DateUtil.plusDayDate(Constant.GIVE_DAYS, new Date())); + giveRecord.setEndTime(endTime); redPackGiveRecordMapper.insertSelective(giveRecord); // 鍙d护璁板綍 @@ -138,7 +150,7 @@ tokenRecord.setIdentify(giveRecord.getId() + ""); tokenRecord.setType(TokenTypeEnum.redPack); tokenRecord.setStartTime(nowDate); - tokenRecord.setEndTime(DateUtil.plusDayDate(Constant.TOKEN_DAYS, new Date())); + tokenRecord.setEndTime(endTime); tokenRecord.setState(0); tokenRecordService.insertSelective(tokenRecord); @@ -152,55 +164,68 @@ while (tips.contains("{APP鍚嶇О}")) { tips = tips.replace("{APP鍚嶇О}", projectChineseName); } - tips = tips.replace("{鍙d护}", token).replace("{涓嬭浇閾炬帴}", redPackConfigService.getValueByKey("app_down_link")).replace("{闈㈤}", - amount.setScale(2).toString()); - + tips = tips.replace("{鍙d护}", token).replace("{涓嬭浇閾炬帴}", redPackConfigService.getValueByKey("app_down_link")) + .replace("{闈㈤}", amount.setScale(2).toString()); + // 鍑忓皯绾㈠寘 try { redPackBalanceService.subRedPack(uid, amount, RedPackDetailFactory.createGiveOthers(giveRecord)); } catch (Exception e) { throw new RedPackGiveRecordException(1, "绾㈠寘鍒涘缓澶辫触"); } + + UserRedPackGiftMQMsg msg = new UserRedPackGiftMQMsg(); + msg.setId(giveRecord.getId()); + msg.setUid(uid); + Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.redPackGiftDrawback, + msg); + // 寤惰繜涓�鍒嗛挓 + message.setStartDeliverTime(endTime.getTime() + 1000 * 60); + try { + producer.send(message); + } catch (Exception e) { + throw new RedPackGiveRecordException(1, "绾㈠寘鍒涘缓澶辫触"); + } return tips; } - - + @Override @Transactional(rollbackFor = Exception.class) - public RedPackGiveRecord receiveFriendsGive(Long uid, Long id) throws RedPackGiveRecordException{ + public RedPackGiveRecord receiveFriendsGive(Long uid, Long id) throws RedPackGiveRecordException { RedPackGiveRecord giveRecord = redPackGiveRecordMapper.selectByPrimaryKey(id); if (giveRecord == null || giveRecord.getState() != RedPackGiveRecord.STATE_INIT) throw new RedPackGiveRecordException(1, "璧犻�佽褰曞け鏁堟垨宸茶棰嗗彇"); - + Date now = new Date(); Date endTime = giveRecord.getEndTime(); if (endTime != null && endTime.getTime() < now.getTime()) throw new RedPackGiveRecordException(1, "绾㈠寘宸插け鏁堜簡"); - + giveRecord.setReceiveUid(uid); giveRecord.setReceiveTime(now); giveRecord.setState(RedPackGiveRecord.STATE_RECEIVE); // 棰嗗彇浜哄鍔犵孩鍖� try { - redPackBalanceService.addRedPack(uid, giveRecord.getAmount(), RedPackDetailFactory.createGiveOthersReceive(giveRecord)); + redPackBalanceService.addRedPack(uid, giveRecord.getAmount(), + RedPackDetailFactory.createGiveOthersReceive(giveRecord)); } catch (Exception e) { throw new RedPackGiveRecordException(1, "绾㈠寘棰嗗彇澶辫触"); - } - + } + // 鏇存柊璧犻�佽褰� redPackGiveRecordMapper.updateByPrimaryKey(giveRecord); - + try { String identifyCode = StringUtil.Md5(RedPackDetailTypeEnum.giveOthers.name() + ":" + giveRecord.getId()); RedPackDetail redPackDetail = redPackDetailService.getByIdentifyCode(identifyCode); - - RedPackDetail updateDetail = RedPackDetailFactory.createGiveOthersSucceed(redPackDetail.getId(), giveRecord); + + RedPackDetail updateDetail = RedPackDetailFactory.createGiveOthersSucceed(redPackDetail.getId(), + giveRecord); redPackDetailService.updateByPrimaryKeySelective(updateDetail); } catch (Exception e) { - throw new RedPackGiveRecordException(1,"鏇存柊鎻愮幇鏄庣粏鍑洪敊"); + throw new RedPackGiveRecordException(1, "鏇存柊鎻愮幇鏄庣粏鍑洪敊"); } return giveRecord; } - } -- Gitblit v1.8.0