package com.supersavedriving.driver.modular.system.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.supersavedriving.driver.modular.system.dao.AccountChangeDetailMapper;
|
import com.supersavedriving.driver.modular.system.model.*;
|
import com.supersavedriving.driver.modular.system.service.*;
|
import com.supersavedriving.driver.modular.system.util.ResultUtil;
|
import com.supersavedriving.driver.modular.system.util.UUIDUtil;
|
import com.supersavedriving.driver.modular.system.warpper.BalanceDetailWarpper;
|
import com.supersavedriving.driver.modular.system.warpper.CommissionDetailListWarpper;
|
import com.supersavedriving.driver.modular.system.warpper.CommissionDetailWarpper;
|
import com.supersavedriving.driver.modular.system.warpper.IntegralIncomeAndExpensesWarpper;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 账户变动
|
* @author zhibing.pu
|
* @date 2023/3/4 11:34
|
*/
|
@Service
|
public class AccountChangeDetailServiceImpl extends ServiceImpl<AccountChangeDetailMapper, AccountChangeDetail> implements IAccountChangeDetailService {
|
|
@Autowired
|
private IDriverService driverService;
|
|
@Autowired
|
private ISystemConfigService systemConfigService;
|
|
@Autowired
|
private IRechargeRecordService rechargeRecordService;
|
|
@Autowired
|
private IOrderService orderService;
|
|
@Autowired
|
private IRevenueService revenueService;
|
|
@Autowired
|
private ICompanyFundFlowService companyFundFlowService;
|
|
|
|
|
|
/**
|
* 保存数据
|
* @param accountChangeDetail
|
* @throws Exception
|
*/
|
@Override
|
public void saveData(AccountChangeDetail accountChangeDetail) throws Exception {
|
accountChangeDetail.setCreateTime(new Date());
|
this.baseMapper.insert(accountChangeDetail);
|
}
|
|
|
/**
|
* 获取积分收支明细
|
* @param driverId
|
* @param type
|
* @param pageNum
|
* @param pageSize
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<IntegralIncomeAndExpensesWarpper> queryDriverIntegralIncomeAndExpenses(Integer driverId, Integer type, Integer pageNum, Integer pageSize) throws Exception {
|
pageNum = (pageNum - 1) * pageSize;
|
return this.baseMapper.queryDriverIntegralIncomeAndExpenses(driverId, type, pageNum, pageSize);
|
}
|
|
|
/**
|
* 获取佣金明细列表
|
* @param driverId
|
* @param time
|
* @param pageNum
|
* @param pageSize
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public CommissionDetailListWarpper queryCommissionDetail(Integer driverId, String time, Integer pageNum, Integer pageSize) throws Exception {
|
pageNum = (pageNum - 1) * pageSize;
|
List<CommissionDetailWarpper> commissionDetailWarppers = this.baseMapper.queryCommissionDetail(driverId, time, pageNum, pageSize);
|
Double aDouble = this.baseMapper.queryCommissionDetailTotal(driverId, time);
|
CommissionDetailListWarpper commissionDetailListWarpper = new CommissionDetailListWarpper();
|
commissionDetailListWarpper.setList(commissionDetailWarppers);
|
commissionDetailListWarpper.setTotal(aDouble);
|
return commissionDetailListWarpper;
|
}
|
|
/**
|
* 获取账户余额明细
|
* @param driverId
|
* @param time
|
* @param type
|
* @param pageNum
|
* @param pageSize
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<BalanceDetailWarpper> queryBalanceDetail(Integer driverId, String time, Integer type, Integer pageNum, Integer pageSize) throws Exception {
|
pageNum = (pageNum - 1) * pageSize;
|
List<BalanceDetailWarpper> balanceDetailWarppers = this.baseMapper.queryBalanceDetail(driverId, time, type, pageNum, pageSize);
|
return balanceDetailWarppers;
|
}
|
|
|
/**
|
* 处理司机保险
|
*/
|
@Override
|
public void deductionInsurance() {
|
SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
|
if(null == systemConfig){
|
return;
|
}
|
JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
|
Double num1 = jsonObject.getDouble("num1");
|
List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("status", 1));
|
for (Driver driver : drivers) {
|
Double balance1 = revenueService.queryCompanyBalance();
|
Double backgroundBalance = driver.getBackgroundBalance();
|
Double balance = driver.getBalance();
|
double all = backgroundBalance + balance;
|
if(num1.compareTo(all) > 0){
|
continue;
|
}
|
|
double d = num1.doubleValue();
|
if(backgroundBalance > 0 && backgroundBalance < d){
|
d -= backgroundBalance;
|
driver.setBackgroundBalance(0D);
|
}else if(backgroundBalance >= d){
|
AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
|
accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
|
accountChangeDetail.setUserType(2);
|
accountChangeDetail.setUserId(driver.getId());
|
accountChangeDetail.setType(1);
|
accountChangeDetail.setChangeType(8);
|
accountChangeDetail.setOldData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
driver.setBackgroundBalance(driver.getBackgroundBalance() - d);
|
accountChangeDetail.setNewData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
accountChangeDetail.setExplain("收取保险费");
|
accountChangeDetail.setCreateTime(new Date());
|
this.insert(accountChangeDetail);
|
d = 0;
|
}
|
if(d > 0){
|
if(balance > 0 && balance >= d){
|
AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
|
accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5));
|
accountChangeDetail.setUserType(2);
|
accountChangeDetail.setUserId(driver.getId());
|
accountChangeDetail.setType(1);
|
accountChangeDetail.setChangeType(8);
|
accountChangeDetail.setOldData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
driver.setBalance(new BigDecimal(driver.getBalance()).subtract(new BigDecimal(d)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
accountChangeDetail.setNewData(new BigDecimal(driver.getBalance()).add(new BigDecimal(driver.getBackgroundBalance())).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
accountChangeDetail.setExplain("收取保险费");
|
accountChangeDetail.setCreateTime(new Date());
|
this.insert(accountChangeDetail);
|
|
Revenue revenue = new Revenue();
|
revenue.setType(3);
|
revenue.setUserType(4);
|
revenue.setAmount(d);
|
revenue.setCreateTime(new Date());
|
revenueService.insert(revenue);
|
|
List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
|
for (RechargeRecord rechargeRecord : rechargeRecords) {
|
Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
|
if(surplusDividedAmount.compareTo(d) >= 0){
|
ResultUtil fengzhang = orderService.fengzhang(3, null, "553021440975", null, rechargeRecord.getId(), rechargeRecord.getOrderNumber(), d, 1);
|
if(fengzhang.getCode() == 10000){
|
rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(d)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
|
rechargeRecordService.updateById(rechargeRecord);
|
}
|
break;
|
}else{
|
ResultUtil fengzhang = orderService.fengzhang(3, null, "553021440975", null, rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 1);
|
if(fengzhang.getCode() == 10000){
|
rechargeRecord.setSurplusDividedAmount(0d);
|
rechargeRecordService.updateById(rechargeRecord);
|
d = new BigDecimal(d).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
|
}else{
|
break;
|
}
|
}
|
}
|
|
}
|
}
|
driverService.updateById(driver);
|
|
CompanyFundFlow companyFundFlow = new CompanyFundFlow();
|
companyFundFlow.setType(4);
|
companyFundFlow.setObjectType(1);
|
companyFundFlow.setDriverId(driver.getId());
|
companyFundFlow.setBalance(new BigDecimal(balance1));
|
companyFundFlow.setMoney(new BigDecimal(num1));
|
companyFundFlow.setCreateTime(new Date());
|
companyFundFlowService.insert(companyFundFlow);
|
}
|
}
|
}
|