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.CommonEnum;
|
import com.xzx.gc.common.constant.OrderEnum;
|
import com.xzx.gc.common.constant.PayEnum;
|
import com.xzx.gc.common.utils.BusinessUtil;
|
import com.xzx.gc.common.utils.IdUtils;
|
import com.xzx.gc.entity.AccountLog;
|
import com.xzx.gc.entity.PartnerAccountLog;
|
import com.xzx.gc.model.comon.account.AllAcountParamDto;
|
import com.xzx.gc.order.mapper.AccountLogMapper;
|
import com.xzx.gc.order.mapper.PayInfoMapper;
|
import com.xzx.gc.order.mapper.RedPaperMapper;
|
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 WeightRebateService extends BaseAccountService {
|
|
@Autowired
|
private PartnerAccountService partnerAccountService;
|
|
|
@Autowired
|
private AccountService accountService;
|
|
|
@Autowired
|
private PartnerAccountLogService partnerAccountLogService;
|
|
|
@Autowired
|
private AccountLogService accountLogService;
|
|
@Autowired
|
private PayInfoMapper payInfoMapper;
|
|
|
@Autowired
|
private IdUtils idUtils;
|
|
|
@Autowired
|
private BusinessUtil businessUtil;
|
|
|
|
@Override
|
public Object account(AllAcountParamDto allAcountParamDto) {
|
String now=DateUtil.now();
|
|
//无返利
|
if (allAcountParamDto.getOtherMoney().compareTo(BigDecimal.ZERO) == 0&&allAcountParamDto.getMoney().compareTo(BigDecimal.ZERO)==0) {
|
return null;
|
}
|
|
log.debug("准备进行重量返利支出操作:{}",JSONUtil.toJsonPrettyStr(allAcountParamDto));
|
//重量支出返利 回收员和合伙人扣钱,用户加钱 自助下单回收员需要帮合伙人垫付支出
|
|
Map<String,Object> payMap = new HashMap();
|
//正常下单
|
if(allAcountParamDto.getOrderType()==0) {
|
/**
|
* 回收员
|
* otherMoney 回收员返利
|
*/
|
if (allAcountParamDto.getOtherMoney().compareTo(BigDecimal.ZERO) > 0) {
|
String otherPayOrderId = idUtils.generate("ZF", 0);
|
payMap.put("payOrderId", otherPayOrderId);
|
payMap.put("orderId", allAcountParamDto.getFlowNo());
|
payMap.put("createUserId", allAcountParamDto.getOtherUserId());
|
payMap.put("money", allAcountParamDto.getOtherMoney());
|
payMap.put("accountId", allAcountParamDto.getOtherAccountId());
|
payMap.put("payType", PayEnum.按重量返利.getValue());
|
payMap.put("status", PayEnum.已支付.getValue());
|
payMap.put("createTime", now);
|
payInfoMapper.payInfoAdd(payMap);
|
|
AccountLog accountLog = new AccountLog();
|
accountLog.setAccountId(allAcountParamDto.getOtherAccountId());
|
accountLog.setCreateUserId(allAcountParamDto.getOtherUserId());
|
if (allAcountParamDto.getOtherMoneyType() == 1) {
|
accountLog.setOldLimit(Convert.toStr(allAcountParamDto.getOtherOldMoney()));
|
accountLog.setNewLimit(Convert.toStr(NumberUtil.sub(Convert.toBigDecimal(accountLog.getOldLimit()), allAcountParamDto.getOtherMoney())));
|
} else if(allAcountParamDto.getOtherMoneyType()==2){
|
accountLog.setOldMoney(Convert.toStr(allAcountParamDto.getOtherOldMoney()));
|
accountLog.setNewMoney(Convert.toStr(NumberUtil.sub(Convert.toBigDecimal(accountLog.getOldMoney()), allAcountParamDto.getOtherMoney())));
|
}
|
accountLog.setChannelType(Convert.toShort(CommonEnum.重量返利支出.getValue()));
|
accountLog.setOrderId(otherPayOrderId);
|
accountLogService.add(accountLog);
|
}
|
|
|
/**
|
* 用户
|
* money 合伙人返利
|
* otherMoney 回收员返利
|
* oldmoney 用户增加了回收订单金额的金额
|
*/
|
BigDecimal sub2 = NumberUtil.add(allAcountParamDto.getOtherMoney(), allAcountParamDto.getMoney());
|
if (sub2.compareTo(BigDecimal.ZERO) > 0) {
|
payMap.clear();
|
String payOrderId = idUtils.generate("ZF", 0);
|
payMap.put("payOrderId", payOrderId);
|
payMap.put("orderId", allAcountParamDto.getFlowNo());
|
payMap.put("createUserId", allAcountParamDto.getUserId());
|
payMap.put("money", Convert.toStr(sub2));
|
payMap.put("accountId", allAcountParamDto.getAccountId());
|
payMap.put("payType", PayEnum.按重量返利.getValue());
|
payMap.put("status", PayEnum.已支付.getValue());
|
payMap.put("createTime", now);
|
payInfoMapper.payInfoAdd(payMap);
|
|
AccountLog accountLog = new AccountLog();
|
accountLog.setAccountId(allAcountParamDto.getAccountId());
|
accountLog.setCreateUserId(allAcountParamDto.getUserId());
|
accountLog.setChannelType(Convert.toShort(CommonEnum.重量返利支出.getValue()));
|
accountLog.setOldMoney(Convert.toStr(allAcountParamDto.getOldMoney()));
|
accountLog.setNewMoney(Convert.toStr(NumberUtil.add(Convert.toBigDecimal(accountLog.getOldMoney()), sub2)));
|
accountLog.setOrderId(payOrderId);
|
accountLogService.add(accountLog);
|
}
|
//自助下单
|
}else if(allAcountParamDto.getOrderType()==1) {
|
|
/**
|
* 回收员
|
*/
|
if (allAcountParamDto.getOtherMoney().compareTo(BigDecimal.ZERO) > 0) {
|
payMap.clear();
|
String otherPayOrderId = idUtils.generate("ZF", 0);
|
payMap.put("payOrderId", otherPayOrderId);
|
payMap.put("orderId", allAcountParamDto.getFlowNo());
|
payMap.put("createUserId", allAcountParamDto.getOtherUserId());
|
payMap.put("money", allAcountParamDto.getOtherMoney());
|
payMap.put("accountId", allAcountParamDto.getOtherAccountId());
|
payMap.put("payType", PayEnum.按重量返利.getValue());
|
payMap.put("status", PayEnum.已支付.getValue());
|
payMap.put("createTime", now);
|
payInfoMapper.payInfoAdd(payMap);
|
}
|
|
if (allAcountParamDto.getMoney().compareTo(BigDecimal.ZERO) > 0) {
|
|
//发送环保金明细
|
payMap.clear();
|
String otherPayOrderId = idUtils.generate("ZF", 0);
|
payMap.put("payOrderId", otherPayOrderId);
|
payMap.put("orderId", allAcountParamDto.getFlowNo());
|
payMap.put("createUserId", allAcountParamDto.getOtherUserId());
|
payMap.put("money", Convert.toStr(allAcountParamDto.getMoney()));
|
payMap.put("accountId", allAcountParamDto.getOtherAccountId());
|
payMap.put("payType", PayEnum.垫付合伙人.getValue());
|
payMap.put("status", PayEnum.已支付.getValue());
|
payMap.put("createTime", now);
|
payInfoMapper.payInfoAdd(payMap);
|
|
//添加日志
|
accountService.updateMoneyByUserId( allAcountParamDto.getOtherUserId(),allAcountParamDto.getMoney());
|
AccountLog log = new AccountLog();
|
log.setCreateTime(now);
|
log.setAccountId(allAcountParamDto.getOtherAccountId());
|
log.setCreateUserId(allAcountParamDto.getOtherUserId());
|
log.setChannelType(Convert.toShort(CommonEnum.垫付合伙人.getValue()));
|
log.setOldMoney(Convert.toStr(allAcountParamDto.getOtherOldMoney()));
|
log.setNewMoney(Convert.toStr(NumberUtil.add(Convert.toBigDecimal(log.getOldMoney()), allAcountParamDto.getMoney())));
|
log.setOrderId(otherPayOrderId);
|
accountLogService.add(log);
|
}
|
}
|
|
/**
|
* 合伙人
|
*/
|
if(allAcountParamDto.getMoney().compareTo(BigDecimal.ZERO) > 0) {
|
PartnerAccountLog partnerAccountLog = new PartnerAccountLog();
|
partnerAccountLog.setPartnerId(allAcountParamDto.getPartnerId());
|
partnerAccountLog.setFlowNo(allAcountParamDto.getFlowNo());
|
partnerAccountLog.setType(OrderEnum.重量返利支出.getValue());
|
partnerAccountLog.setMoney("-" + businessUtil.changeMoney(allAcountParamDto.getMoney()));
|
partnerAccountLog.setRuleId(allAcountParamDto.getRuleId());
|
partnerAccountLogService.add(partnerAccountLog);
|
//修改合伙人账户
|
partnerAccountService.updateReduceMoneyByPartnerId(allAcountParamDto.getPartnerId(), allAcountParamDto.getMoney());
|
}
|
|
log.debug("重量返利支出操作已完成");
|
return null;
|
}
|
}
|