| | |
| | | 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; |
| | | |
| | | /** |
| | | * 账户变动 |
| | |
| | | */ |
| | | @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; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |