| | |
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.text.SimpleDateFormat;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | |
| | | 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.bus.user.UserInfo;
|
| | | import com.yeshi.fanli.entity.redpack.RedPackDetail;
|
| | | import com.yeshi.fanli.entity.redpack.RedPackDetail.RedPackDetailTypeEnum;
|
| | | import com.yeshi.fanli.entity.redpack.RedPackGiveRecord;
|
| | | import com.yeshi.fanli.exception.redpack.RedPackBalanceException;
|
| | | import com.yeshi.fanli.entity.system.ConfigKeyEnum;
|
| | | import com.yeshi.fanli.exception.redpack.RedPackGiveRecordException;
|
| | | import com.yeshi.fanli.log.LogHelper;
|
| | | import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
|
| | | 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.service.inter.user.UserInfoService;
|
| | | 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;
|
| | | import com.yeshi.fanli.vo.redpack.RedPackGiveVO;
|
| | |
|
| | | @Service
|
| | | public class RedPackGiveRecordServiceImpl implements RedPackGiveRecordService {
|
| | |
| | | @Resource
|
| | | private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
|
| | |
|
| | | @Resource
|
| | | private RedPackForbidService redPackForbidService;
|
| | | |
| | | @Resource(name = "producer")
|
| | | private Producer producer;
|
| | | |
| | | @Resource
|
| | | private UserInfoService userInfoService;
|
| | |
|
| | | @Override
|
| | | public RedPackGiveRecord selectByPrimaryKey(Long id) {
|
| | |
| | | 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 + "元");
|
| | |
|
| | | BigDecimal balance = null;
|
| | | try {
|
| | | balance = redPackBalanceService.getBalance(uid);
|
| | | } catch (RedPackBalanceException e1) {
|
| | | throw new RedPackGiveRecordException(1, e1.getMsg());
|
| | | }
|
| | |
|
| | | BigDecimal balance = redPackBalanceService.getBalance(uid);
|
| | | if (balance == null || amount.compareTo(balance) > 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);
|
| | |
|
| | | // 口令记录
|
| | |
| | | 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);
|
| | |
|
| | |
| | | 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 = new Message(MQTopicName.TOPIC_USER.name(), UserTopicTagEnum.redPackGiftDrawback.name(),
|
| | | new Gson().toJson(msg).getBytes());
|
| | | try {
|
| | | producer.send(message);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | throw new RedPackGiveRecordException(1, "红包创建失败");
|
| | | }
|
| | |
|
| | |
|
| | | // 发送消息(非测试下)
|
| | | if (!Constant.IS_TEST) {
|
| | | 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) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | throw new RedPackGiveRecordException(1, "红包创建失败");
|
| | | }
|
| | | }
|
| | | |
| | | return tips;
|
| | | }
|
| | |
|
| | |
| | | return giveRecord;
|
| | | }
|
| | |
|
| | | |
| | | @Override
|
| | | public List<RedPackGiveVO> getGiveList(int page, int pageSzie, Long uid) {
|
| | | List<RedPackGiveVO> list = redPackGiveRecordMapper.getGiveList((page-1)*pageSzie, pageSzie, uid);
|
| | | if (list == null) {
|
| | | list = new ArrayList<RedPackGiveVO>();
|
| | | }
|
| | | |
| | | if (list.isEmpty()) {
|
| | | return list;
|
| | | }
|
| | | |
| | | String tips = redPackConfigService.getValueByKey("give_tips");
|
| | | String appLink = redPackConfigService.getValueByKey("app_down_link");
|
| | | String projectChineseName = Constant.systemCommonConfig.getProjectChineseName();
|
| | |
|
| | | for (RedPackGiveVO record: list) {
|
| | | Long receiveUid = record.getReceiveUid();
|
| | | if (receiveUid != null) {
|
| | | UserInfo userInfo = userInfoService.selectByPKey(receiveUid);
|
| | | record.setReceiveName(userInfo.getNickName());
|
| | | record.setReceivePortrait(userInfo.getPortrait());
|
| | | record.setReceiveTip("领取了你的红包");
|
| | | }
|
| | | TokenRecord token = tokenRecordService.getByTypeAndIdentify(TokenTypeEnum.redPack.name(), |
| | | record.getId().toString());
|
| | | |
| | | String desc = tips;
|
| | | while (desc.contains("{APP名称}")) {
|
| | | desc = desc.replace("{APP名称}", projectChineseName);
|
| | | }
|
| | | desc = desc.replace("{口令}", token.getToken()).replace("{下载链接}", appLink).replace("{面额}", record.getAmount().setScale(2).toString());
|
| | | record.setDesc(desc);
|
| | | }
|
| | | |
| | | return list;
|
| | | }
|
| | | |
| | | @Override
|
| | | public long countGiveList(Long uid) {
|
| | | return redPackGiveRecordMapper.countGiveList(uid);
|
| | | }
|
| | | |
| | | }
|