| | |
| | | package com.yeshi.fanli.service.impl.tlj;
|
| | |
|
| | | import java.math.BigDecimal;
|
| | | import java.text.ParseException;
|
| | | import java.text.SimpleDateFormat;
|
| | | import java.util.Date;
|
| | | import java.util.List;
|
| | |
|
| | | import javax.annotation.Resource;
|
| | |
|
| | | import org.springframework.core.task.TaskExecutor;
|
| | | import org.springframework.stereotype.Service;
|
| | | import org.springframework.transaction.annotation.Transactional;
|
| | | import org.yeshi.utils.DateUtil;
|
| | |
|
| | | import com.yeshi.fanli.dao.mybatis.tlj.UserTaoLiJinOriginMapper;
|
| | | import com.yeshi.fanli.dto.msg.MsgOtherTaoLiJinContentDTO;
|
| | | import com.yeshi.fanli.entity.bus.tlj.DeviceTaoLiJinRecord;
|
| | | import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail;
|
| | | import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinDetail.TaoLiJinDetailTypeEnum;
|
| | | import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinOrigin;
|
| | | import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinOrigin.TaoLiJinOriginEnum;
|
| | | import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinRecord;
|
| | | import com.yeshi.fanli.entity.bus.tlj.UserTaoLiJinReport;
|
| | | import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
|
| | | import com.yeshi.fanli.entity.bus.user.UserRank;
|
| | | import com.yeshi.fanli.exception.tlj.UserTaoLiJinOriginException;
|
| | | import com.yeshi.fanli.log.LogHelper;
|
| | | import com.yeshi.fanli.service.inter.money.UserMoneyExtraService;
|
| | | import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService;
|
| | | import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
|
| | | import com.yeshi.fanli.service.inter.tlj.DeviceTaoLiJinRecordService;
|
| | | 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.UserInfoExtraService;
|
| | | import com.yeshi.fanli.service.inter.user.UserMoneyExtraService;
|
| | | import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
| | | import com.yeshi.fanli.util.StringUtil;
|
| | |
|
| | | @Service
|
| | | public class UserTaoLiJinOriginServiceImpl implements UserTaoLiJinOriginService{
|
| | |
| | | private UserTaoLiJinDetailService userTaoLiJinDetailService;
|
| | |
|
| | | @Resource
|
| | | private DeviceTaoLiJinRecordService deviceTaoLiJinRecordService;
|
| | | |
| | | @Resource
|
| | | private UserOtherMsgNotificationService userOtherMsgNotificationService;
|
| | |
|
| | | @Resource
|
| | |
| | |
|
| | | @Resource
|
| | | private UserTaoLiJinRecordService userTaoLiJinRecordService;
|
| | | |
| | | @Resource
|
| | | private UserTaoLiJinReportService userTaoLiJinReportService;
|
| | |
|
| | |
|
| | | @Override
|
| | |
| | | public UserTaoLiJinOrigin getRankByThisMonth(long uid, String type) {
|
| | | return userTaoLiJinOriginMapper.getRankByThisMonth(uid, type);
|
| | | }
|
| | | |
| | | @Override
|
| | | public boolean hasRankHongBao(long uid) {
|
| | | UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
| | | if (userInfoExtra == null) {
|
| | | return false;
|
| | | }
|
| | | |
| | | // 等级验证
|
| | | UserRank userRank = userInfoExtra.getUserRank();
|
| | | if (userRank == null || userRank.getId() <= 1) {
|
| | | return false;
|
| | | }
|
| | | |
| | | // 是否已领取
|
| | | long countRan = userTaoLiJinOriginMapper.countRankByThisMonth(uid);
|
| | | if (countRan > 0) {
|
| | | return false;
|
| | | }
|
| | | return true;
|
| | | }
|
| | | |
| | | |
| | | @Override
|
| | | public void synchDeviceHongbao(long uid, String device) {
|
| | | // 是否已领取
|
| | | long count = userTaoLiJinOriginMapper.countByUidAndType(uid, TaoLiJinOriginEnum.newbiesWin.name());
|
| | | if (count > 0) {
|
| | | return;
|
| | | }
|
| | | |
| | | // 设备是否已领取
|
| | | DeviceTaoLiJinRecord record = deviceTaoLiJinRecordService.getByDevice(device);
|
| | | if (record == null) {
|
| | | return;
|
| | | }
|
| | | |
| | | try {
|
| | | addNewbiesWinMoney(uid);
|
| | | } catch (UserTaoLiJinOriginException e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | |
| | | |
| | | @Override
|
| | | @Transactional
|
| | | public UserTaoLiJinOrigin addNewbiesWinMoney(Long uid) throws UserTaoLiJinOriginException{
|
| | | if (uid == null) {
|
| | | throw new UserTaoLiJinOriginException(1, "参数不能为空");
|
| | | }
|
| | | String value = configTaoLiJinService.getValueByKey("hongbao_newbies");
|
| | | if (StringUtil.isNullOrEmpty(value)) {
|
| | | throw new UserTaoLiJinOriginException(1, "系统红包不存在");
|
| | | }
|
| | | BigDecimal money = new BigDecimal(value);
|
| | | |
| | | // 是否可以自购
|
| | | boolean canSelfBuy = userInfoExtraService.isNewUser(uid);
|
| | | // 添加用户红包
|
| | | userMoneyExtraService.addTaoLiJin(uid, money, canSelfBuy);
|
| | | // 添加新增记录
|
| | | UserTaoLiJinOrigin origin = saveOrigin(uid, canSelfBuy?2:1, money, TaoLiJinOriginEnum.newbiesWin);
|
| | | // 红包明细
|
| | | userTaoLiJinDetailService.createAddDetail(origin);
|
| | | // 消息
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | String source = "";
|
| | | if(canSelfBuy) {
|
| | | source = "新人红包";
|
| | | } else {
|
| | | source = "分享红包";
|
| | | }
|
| | | |
| | | MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
|
| | | content.setState("红包增加");
|
| | | content.setSource(source);
|
| | | content.setMoney(money);
|
| | | userOtherMsgNotificationService.taoLiJinMsg(uid, "", content);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | });
|
| | | |
| | | return origin;
|
| | | }
|
| | | |
| | | |
| | | @Override
|
| | | @Transactional
|
| | | public UserTaoLiJinOrigin addRankWinMoney(Long uid, UserRank userRank) throws UserTaoLiJinOriginException{
|
| | | if (uid == null || userRank == null) {
|
| | | throw new UserTaoLiJinOriginException(1, "参数不能为空");
|
| | | }
|
| | | |
| | | String key = "";
|
| | | if (userRank.getId() == 2) {
|
| | | key = "hongbao_rank_silver";
|
| | | } else if (userRank.getId() == 3) {
|
| | | key = "hongbao_rank_gold";
|
| | | } else if (userRank.getId() == 4) {
|
| | | key = "hongbao_rank_platinum";
|
| | | } else {
|
| | | throw new UserTaoLiJinOriginException(2, "用户等级不足");
|
| | | }
|
| | | |
| | | String value = configTaoLiJinService.getValueByKey(key);
|
| | | if (StringUtil.isNullOrEmpty(value)) {
|
| | | throw new UserTaoLiJinOriginException(1, "系统红包不存在");
|
| | | }
|
| | | BigDecimal money = new BigDecimal(value);
|
| | | |
| | | // 添加红包余额
|
| | | userMoneyExtraService.addTaoLiJin(uid, money, false);
|
| | | // 添加新增记录
|
| | | UserTaoLiJinOrigin origin = saveOrigin(uid, 1, money, TaoLiJinOriginEnum.rankWin);
|
| | | // 红包明细
|
| | | userTaoLiJinDetailService.createAddDetail(origin);
|
| | | // 消息
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | String beizhu = "上月账户等级" + userRank.getName();
|
| | | MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
|
| | | content.setState("红包增加");
|
| | | content.setSource("账户等级福利");
|
| | | content.setMoney(money);
|
| | | userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | });
|
| | | return origin;
|
| | | }
|
| | | |
| | | |
| | | @Override
|
| | | @Transactional
|
| | | public UserTaoLiJinOrigin addInviteWinMoney(Long uid, String inviteName) throws UserTaoLiJinOriginException{
|
| | | if (uid == null || StringUtil.isNullOrEmpty(inviteName)) {
|
| | | throw new UserTaoLiJinOriginException(1, "参数不能为空");
|
| | | }
|
| | | |
| | | String value = configTaoLiJinService.getValueByKey("hongbao_invite");
|
| | | if (StringUtil.isNullOrEmpty(value)) {
|
| | | throw new UserTaoLiJinOriginException(1, "系统红包不存在");
|
| | | }
|
| | | BigDecimal money = new BigDecimal(value);
|
| | | |
| | | // 添加用户红包
|
| | | userMoneyExtraService.addTaoLiJin(uid, money, false);
|
| | | // 添加新增记录
|
| | | UserTaoLiJinOrigin origin = saveOrigin(uid, 1, money, TaoLiJinOriginEnum.inviteWin);
|
| | | // 红包明细
|
| | | userTaoLiJinDetailService.createAddDetail(origin);
|
| | | // 消息
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | String beizhu = "成功邀请队员" + inviteName;
|
| | | MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
|
| | | content.setState("红包增加");
|
| | | content.setSource("邀请队员奖励");
|
| | | content.setMoney(money);
|
| | | userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | });
|
| | | return origin;
|
| | | }
|
| | | |
| | | |
| | | @Override
|
| | | @Transactional
|
| | | public UserTaoLiJinOrigin addShareWinMoney(Long uid) throws UserTaoLiJinOriginException{
|
| | | if (uid == null) {
|
| | | throw new UserTaoLiJinOriginException(1, "用户未登录");
|
| | | }
|
| | | |
| | | String value = configTaoLiJinService.getValueByKey("hongbao_share");
|
| | | if (StringUtil.isNullOrEmpty(value)) {
|
| | | throw new UserTaoLiJinOriginException(1, "系统红包不存在");
|
| | | }
|
| | | BigDecimal money = new BigDecimal(value);
|
| | | |
| | | // 添加用户红包
|
| | | userMoneyExtraService.addTaoLiJin(uid, money, false);
|
| | | // 添加新增记录
|
| | | UserTaoLiJinOrigin origin = saveOrigin(uid, 1, money, TaoLiJinOriginEnum.shareWin);
|
| | | // 红包明细
|
| | | userTaoLiJinDetailService.createAddDetail(origin);
|
| | | // 消息
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | String beizhu = "近30天产生过分享(仅一次奖励)";
|
| | | MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
|
| | | content.setState("红包增加");
|
| | | content.setSource("分享订单奖励");
|
| | | content.setMoney(money);
|
| | | userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | });
|
| | | return origin;
|
| | | }
|
| | | |
| | | |
| | | // 添加新增记录
|
| | | public UserTaoLiJinOrigin saveOrigin(Long uid, int type, BigDecimal money, TaoLiJinOriginEnum originEnum) {
|
| | | UserTaoLiJinOrigin taoLiJinOrigin = new UserTaoLiJinOrigin();
|
| | | taoLiJinOrigin.setUid(uid);
|
| | | taoLiJinOrigin.setType(type);
|
| | | taoLiJinOrigin.setOrigin(originEnum);
|
| | | taoLiJinOrigin.setMoney(money);
|
| | | taoLiJinOrigin.setMoneySurplus(money);
|
| | | taoLiJinOrigin.setCreateTime(new Date());
|
| | | taoLiJinOrigin.setUpdateTime(new Date());
|
| | | taoLiJinOrigin.setRemark(originEnum.getDesc());
|
| | | userTaoLiJinOriginMapper.insertSelective(taoLiJinOrigin);
|
| | | return taoLiJinOrigin;
|
| | | }
|
| | | |
| | | |
| | | |
| | | @Override
|
| | | @Transactional
|
| | | public void refundMoney(UserTaoLiJinReport report) throws UserTaoLiJinOriginException{
|
| | | if (report == null) {
|
| | | throw new UserTaoLiJinOriginException(1, "参数不能为空");
|
| | | }
|
| | | String rightsId = report.getId();
|
| | | BigDecimal refundAmount = report.getRefundAmount();
|
| | | |
| | | // 已退回的金额
|
| | | BigDecimal moneyOrigin = userTaoLiJinOriginMapper.countMoneyByOrigin(rightsId, TaoLiJinOriginEnum.refund.name());
|
| | | if (refundAmount.compareTo(moneyOrigin) < 1) {
|
| | | return;
|
| | | }
|
| | | |
| | | // 查询用户信息
|
| | | UserTaoLiJinRecord record = userTaoLiJinRecordService.getByRightsId(rightsId);
|
| | | if (record == null) {
|
| | | return;
|
| | | }
|
| | | Long uid = record.getUid();
|
| | | |
| | | // 计算本次退回的金额
|
| | | BigDecimal money = MoneyBigDecimalUtil.sub(refundAmount, moneyOrigin);
|
| | | |
| | | // 添加用户红包
|
| | | userMoneyExtraService.addTaoLiJin(uid, money, false);
|
| | | |
| | | // 添加新增记录
|
| | | UserTaoLiJinOrigin taoLiJinOrigin = new UserTaoLiJinOrigin();
|
| | | taoLiJinOrigin.setUid(uid);
|
| | | taoLiJinOrigin.setType(1);
|
| | | taoLiJinOrigin.setRightsId(rightsId);
|
| | | taoLiJinOrigin.setMoney(money);
|
| | | taoLiJinOrigin.setMoneySurplus(money);
|
| | | taoLiJinOrigin.setOrigin(TaoLiJinOriginEnum.refund);
|
| | | taoLiJinOrigin.setRemark(TaoLiJinOriginEnum.refund.getDesc());
|
| | | taoLiJinOrigin.setCreateTime(new Date());
|
| | | taoLiJinOrigin.setUpdateTime(new Date());
|
| | | userTaoLiJinOriginMapper.insertSelective(taoLiJinOrigin);
|
| | | |
| | | // 红包明细
|
| | | userTaoLiJinDetailService.createAddDetail(taoLiJinOrigin);
|
| | | // 消息
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | String beizhu = "共创建:" + record.getTotalNum() + "个,已领取"+report.getWinNum()+"个,剩余"+report.getRefundNum()+ "个退回";
|
| | | SimpleDateFormat sd = new SimpleDateFormat("yyyy.MM.dd hh.mm");
|
| | | String time = sd.format(record.getCreateTime());
|
| | | MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
|
| | | content.setState("红包退回");
|
| | | content.setSource(time + " 创建的分享记录");
|
| | | content.setMoney(money);
|
| | | |
| | | userOtherMsgNotificationService.taoLiJinMsg(uid, beizhu, content);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | |
| | | |
| | | |
| | |
|
| | | @Override
|
| | | public void overdueHongBao(Long uid) {
|
| | | // 15天前过期
|
| | | Date date = null;
|
| | | try {
|
| | | date = DateUtil.reduceDay(15, new Date());
|
| | | } catch (ParseException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | |
| | | if (date == null) {
|
| | | return;
|
| | | }
|
| | | |
| | | List<UserTaoLiJinOrigin> list = userTaoLiJinOriginMapper.getOverdueTaoLiJin(uid, date);
|
| | | if (list == null || list.size() == 0) {
|
| | | return;
|
| | | }
|
| | | |
| | | BigDecimal total = new BigDecimal(0);
|
| | | for (UserTaoLiJinOrigin userTaoLiJinOrigin: list) {
|
| | | |
| | | UserTaoLiJinOrigin origin = new UserTaoLiJinOrigin();
|
| | | origin.setId(userTaoLiJinOrigin.getId());
|
| | | origin.setMoneySurplus(new BigDecimal(0));
|
| | | origin.setUpdateTime(new Date());
|
| | | userTaoLiJinOriginMapper.updateByPrimaryKeySelective(origin);
|
| | | |
| | | total = MoneyBigDecimalUtil.add(total, userTaoLiJinOrigin.getMoneySurplus());
|
| | | }
|
| | | |
| | | // 插入明细
|
| | | UserTaoLiJinDetail detail = new UserTaoLiJinDetail();
|
| | | detail.setUid(uid);
|
| | | detail.setMoney(new BigDecimal("-" + total.toString()));
|
| | | detail.setTitle(TaoLiJinDetailTypeEnum.sendBack.getDesc());
|
| | | detail.setType(TaoLiJinDetailTypeEnum.sendBack);
|
| | | detail.setCreateTime(date);
|
| | | userTaoLiJinDetailService.insertSelective(detail);
|
| | | |
| | | // 消息
|
| | | final BigDecimal totalMoney = total;
|
| | | executor.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | try {
|
| | | MsgOtherTaoLiJinContentDTO content = new MsgOtherTaoLiJinContentDTO();
|
| | | content.setState("红包扣除");
|
| | | content.setSource("15天内未产生过推广红包分享记录");
|
| | | content.setMoney(totalMoney);
|
| | | userOtherMsgNotificationService.taoLiJinMsg(uid, "清除后无法恢复", content);
|
| | | } catch (Exception e) {
|
| | | LogHelper.errorDetailInfo(e);
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | |
| | | @Override
|
| | | public List<UserTaoLiJinOrigin> getSurplusLiJin(long uid) {
|
| | | return userTaoLiJinOriginMapper.getSurplusLiJin(uid);
|
| | | }
|
| | |
|
| | |
|
| | | |
| | |
|
| | | }
|