package com.xzx.gc.order.service;
|
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.json.JSONUtil;
|
import com.xzx.gc.common.constant.*;
|
import com.xzx.gc.common.exception.RestException;
|
import com.xzx.gc.common.utils.BusinessUtil;
|
import com.xzx.gc.common.utils.IdUtils;
|
import com.xzx.gc.entity.AccountInfo;
|
import com.xzx.gc.entity.AccountLog;
|
import com.xzx.gc.entity.RedPaper;
|
import com.xzx.gc.entity.SysMessage;
|
import com.xzx.gc.model.comon.account.AllAcountParamDto;
|
import com.xzx.gc.order.mapper.*;
|
import com.xzx.gc.service.BaseAccountService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
@Service
|
@Transactional
|
@Slf4j
|
public class RedpaperRebateService extends BaseAccountService {
|
|
@Autowired
|
private RedPaperRuleService redPaperRuleService;
|
@Autowired
|
private AccountService accountService;
|
@Autowired
|
private BusinessUtil businessUtil;
|
|
@Autowired
|
private PayInfoMapper payInfoMapper;
|
|
@Autowired
|
private SysMessageMapper sysMessageMapper;
|
|
@Autowired
|
private AccountLogMapper accountLogMapper;
|
|
@Autowired
|
private IdUtils idUtils;
|
|
|
@Autowired
|
private RedPaperMapper redPaperMapper;
|
|
|
|
@Override
|
public Object account(AllAcountParamDto allAcountParamDto) {
|
|
String now=DateUtil.now();
|
//判断红包已被领取
|
RedPaper redPaper3=new RedPaper();
|
redPaper3.setRuleId(Convert.toInt(allAcountParamDto.getRuleId()));
|
redPaper3.setReceiveUserId(allAcountParamDto.getUserId());
|
int i = redPaperMapper.selectCount(redPaper3);
|
if(i>0){
|
throw new RestException(-1,"红包已被领取");
|
}
|
RedPaper redPaper = redPaperMapper.getOne(Convert.toInt(allAcountParamDto.getRuleId()));
|
if(redPaper==null||redPaper.getMoney()==null||redPaper.getMoney().compareTo(BigDecimal.ZERO)==0){
|
throw new RestException(-1,"红包已被领完");
|
}
|
boolean isvalid = redPaperRuleService.isvalid(Convert.toInt(allAcountParamDto.getRuleId()));
|
if(!isvalid){
|
throw new RestException(-1,"红包已失效");
|
}
|
|
//添加账户记录
|
AccountInfo accountInfo1 = accountService.findByUserId(allAcountParamDto.getUserId());
|
if(accountInfo1==null){
|
throw new RestException(-3,"账户不存在");
|
}
|
allAcountParamDto.setAccountId(accountInfo1.getAccountId());
|
allAcountParamDto.setOldMoney(Convert.toBigDecimal(accountInfo1.getMoney(),Constants.MONEY_INIT));
|
allAcountParamDto.setMoney(redPaper.getMoney());
|
allAcountParamDto.setFlowNo(redPaper.getId().toString());
|
|
|
log.debug("准备进行领取红包操作:{}",JSONUtil.toJsonPrettyStr(allAcountParamDto));
|
//合伙人扣钱(在红包生成后已经在后台扣除了),用户加钱
|
String payOrderId=idUtils.generate("ZF",0);
|
|
AccountLog accountLog=new AccountLog();
|
accountLog.setCreateTime(now);
|
accountLog.setAccountId(allAcountParamDto.getAccountId());
|
accountLog.setOldMoney(allAcountParamDto.getOldMoney().toString());
|
String newMoney=businessUtil.changeMoney(Convert.toStr(NumberUtil.add(Convert.toBigDecimal(accountLog.getOldMoney()),allAcountParamDto.getMoney())));
|
accountLog.setNewMoney(newMoney);
|
accountLog.setCreateUserId(allAcountParamDto.getUserId());
|
accountLog.setChannelType(Convert.toShort(CommonEnum.领取红包操作.getValue()));
|
accountLog.setOrderId(payOrderId);
|
accountLogMapper.insertSelective(accountLog);
|
|
//更新账户余额
|
AccountInfo accountInfo2=new AccountInfo();
|
accountInfo2.setAccountId(allAcountParamDto.getAccountId());
|
accountInfo2.setMoney(newMoney);
|
accountInfo2.setUpdateTime(DateUtil.now());
|
accountService.update(accountInfo2);
|
|
//更新红包领取状态
|
RedPaper redPaper2=new RedPaper();
|
redPaper2.setId(Convert.toInt(allAcountParamDto.getFlowNo()));
|
redPaper2.setReceiveFlag(Convert.toShort(OrderEnum.已领取红包.getValue()));
|
redPaper2.setReceiveTime(now);
|
redPaper2.setReceiveUserId(allAcountParamDto.getUserId());
|
redPaperMapper.updateByPrimaryKeySelective(redPaper2);
|
|
//添加操作记录 我的环保金明细展示
|
Map<String,Object> payMap = new HashMap();
|
|
payMap.put("payOrderId",payOrderId);
|
payMap.put("orderId",allAcountParamDto.getFlowNo());
|
payMap.put("createUserId",allAcountParamDto.getUserId());
|
payMap.put("money",allAcountParamDto.getMoney());
|
payMap.put("accountId",allAcountParamDto.getAccountId());
|
payMap.put("payType", PayEnum.红包.getValue());
|
payMap.put("status",PayEnum.已支付.getValue());
|
payMap.put("createTime",now);
|
payInfoMapper.payInfoAdd(payMap);
|
|
//消息记录
|
SysMessage sysMessage = new SysMessage();
|
sysMessage.setCreateTime(now);
|
sysMessage.setCreateUserId(allAcountParamDto.getUserId());
|
sysMessage.setFlag(SysEnum.未读.getValue());
|
sysMessage.setMessage("您收到红包" + allAcountParamDto.getMoney().toString() + "元");
|
sysMessage.setMessageSubTypeName("红包");
|
sysMessage.setMessageType(SysEnum.红包.getValue());
|
sysMessage.setUserId(allAcountParamDto.getUserId());
|
sysMessageMapper.insertSelective(sysMessage);
|
log.debug("领取红包操作已完成:用户:{},金额:{}",allAcountParamDto.getUserId(),allAcountParamDto.getMoney().toString());
|
return redPaper;
|
}
|
}
|