liujie
2023-08-16 db7fa6a91b9534ac90e219b6f554c54c43c83a5a
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/AccountChangeDetailServiceImpl.java
@@ -1,12 +1,25 @@
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.AccountChangeDetail;
import com.supersavedriving.driver.modular.system.service.IAccountChangeDetailService;
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;
/**
 * 账户变动
@@ -15,6 +28,27 @@
 */
@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;
    /**
@@ -27,4 +61,157 @@
        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.setBalance(new BigDecimal(balance1));
            companyFundFlow.setMoney(new BigDecimal(num1));
            companyFundFlow.setCreateTime(new Date());
            companyFundFlowService.insert(companyFundFlow);
        }
    }
}