driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/CompanyFundFlowMapper.java
New file @@ -0,0 +1,11 @@ package com.supersavedriving.driver.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.supersavedriving.driver.modular.system.model.CompanyFundFlow; /** * @author zhibing.pu * @Date 2023/7/30 3:05 */ public interface CompanyFundFlowMapper extends BaseMapper<CompanyFundFlow> { } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/DriverOnlineTimeMapper.java
New file @@ -0,0 +1,11 @@ package com.supersavedriving.driver.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.supersavedriving.driver.modular.system.model.DriverOnlineTime; /** * @author zhibing.pu * @Date 2023/7/30 2:23 */ public interface DriverOnlineTimeMapper extends BaseMapper<DriverOnlineTime> { } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/RevenueMapper.java
@@ -28,4 +28,19 @@ */ List<PerformanceRankingWarpper> queryDriverRank(@Param("type") Integer type, @Param("time") String time, @Param("dayType") Integer dayType); /** * 获取代理商账户余额 * @param companyId * @return */ Double queryAgentBalance(@Param("companyId") Integer companyId); /** * 获取平台账户余额 * @return */ Double queryCompanyBalance(); } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/CompanyFundFlowMapper.xml
New file @@ -0,0 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.supersavedriving.driver.modular.system.dao.CompanyFundFlowMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.supersavedriving.driver.modular.system.model.CompanyFundFlow"> <id column="id" property="id"/> <result column="type" property="type"/> <result column="objectType" property="objectType"/> <result column="objectId" property="objectId"/> <result column="balance" property="balance"/> <result column="money" property="money"/> <result column="createTime" property="createTime"/> </resultMap> </mapper> driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/DriverOnlineTimeMapper.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.supersavedriving.driver.modular.system.dao.DriverOnlineTimeMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.supersavedriving.driver.modular.system.model.DriverOnlineTime"> <id column="id" property="id"/> <result column="driverId" property="driverId"/> <result column="day" property="day"/> <result column="onlineTime" property="onlineTime"/> </resultMap> </mapper> driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/RevenueMapper.xml
@@ -57,4 +57,29 @@ group by a.userId,b.`name` ) as aa,( SELECT @ROW := 0 ) AS itable order by aa.number desc </select> <select id="queryAgentBalance" resultType="double"> select sum(aa.income) - sum(aa.disburse) as balance from ( select sum(amount) as income, 0 as disburse from t_revenue where userType = 3 and userId = #{companyId} union all select 0 as ncome, sum(amount) as disburse from t_settlement_record where type = 2 and objectId = #{companyId} ) as aa </select> <select id="queryCompanyBalance" resultType="double"> select sum(aa.income) - sum(aa.disburse) + sum(aa.recharge) as balance from ( select sum(amount) as income, 0 as disburse, 0 as recharge from t_revenue where userType = 4 union all select 0 as ncome, sum(amount) as disburse, 0 as recharge from t_settlement_record where type = 1 union all select 0 as ncome, 0 as disburse, sum(surplusDividedAmount) as recharge from t_recharge_record where type = 4 and payStatus = 2 ) as aa </select> </mapper> driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/CompanyFundFlow.java
New file @@ -0,0 +1,54 @@ package com.supersavedriving.driver.modular.system.model; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * @author zhibing.pu * @Date 2023/7/30 3:02 */ @Data @TableName("t_company_fund_flow") public class CompanyFundFlow { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 变动类型(1=充值,2=提现,3=佣金收入,4=保险收入) */ @TableField("type") private Integer type; /** * 对象类型(1=平台,2=代理商) */ @TableField("objectType") private Integer objectType; /** * 代理商id */ @TableField("objectId") private Integer objectId; /** * 历史账户余额 */ @TableField("balance") private BigDecimal balance; /** * 变动金额 */ @TableField("money") private BigDecimal money; /** * 变动时间 */ @TableField("createTime") private Date createTime; } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.enums.IdType; import lombok.Data; import java.math.BigInteger; import java.util.Date; /** @@ -128,6 +129,11 @@ @TableField("backgroundBalance") private Double backgroundBalance; /** * 司机在线时长 */ @TableField("onlineTime") private BigInteger onlineTime; /** * 优惠券余额(订单优惠券支付的金额) */ @TableField("couponBalance") driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/DriverOnlineTime.java
New file @@ -0,0 +1,39 @@ package com.supersavedriving.driver.modular.system.model; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import lombok.Data; import java.math.BigInteger; import java.util.Date; /** * @author zhibing.pu * @Date 2023/7/30 1:31 */ @Data @TableName("t_driver_online_time") public class DriverOnlineTime { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 司机id */ @TableField("driverId") private Integer driverId; /** * 统计日期 */ @TableField("day") private Date day; /** * 在线时长(秒) */ @TableField("onlineTime") private BigInteger onlineTime; } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/ICompanyFundFlowService.java
New file @@ -0,0 +1,11 @@ package com.supersavedriving.driver.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.supersavedriving.driver.modular.system.model.CompanyFundFlow; /** * @author zhibing.pu * @Date 2023/7/30 3:09 */ public interface ICompanyFundFlowService extends IService<CompanyFundFlow> { } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IDriverOnlineTimeService.java
New file @@ -0,0 +1,11 @@ package com.supersavedriving.driver.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.supersavedriving.driver.modular.system.model.DriverOnlineTime; /** * @author zhibing.pu * @Date 2023/7/30 2:24 */ public interface IDriverOnlineTimeService extends IService<DriverOnlineTime> { } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IRevenueService.java
@@ -39,4 +39,20 @@ * @return */ List<PerformanceRankingWarpper> queryDriverRank(Integer type, String time, Integer dayType); /** * 获取代理商账户余额 * @param companyId * @return */ Double queryAgentBalance(Integer companyId); /** * 获取平台账户余额 * @return */ Double queryCompanyBalance(); } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/AccountChangeDetailServiceImpl.java
@@ -5,10 +5,7 @@ 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.model.Driver; import com.supersavedriving.driver.modular.system.model.RechargeRecord; import com.supersavedriving.driver.modular.system.model.SystemConfig; 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; @@ -43,6 +40,12 @@ @Autowired private IOrderService orderService; @Autowired private IRevenueService revenueService; @Autowired private ICompanyFundFlowService companyFundFlowService; @@ -127,6 +130,7 @@ 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; @@ -168,6 +172,13 @@ 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(); @@ -192,8 +203,15 @@ } } 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); } } } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/CompanyFundFlowServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.supersavedriving.driver.modular.system.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.supersavedriving.driver.modular.system.dao.CompanyFundFlowMapper; import com.supersavedriving.driver.modular.system.model.CompanyFundFlow; import com.supersavedriving.driver.modular.system.service.ICompanyFundFlowService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @Date 2023/7/30 3:10 */ @Service public class CompanyFundFlowServiceImpl extends ServiceImpl<CompanyFundFlowMapper, CompanyFundFlow> implements ICompanyFundFlowService { } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverOnlineTimeServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.supersavedriving.driver.modular.system.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.supersavedriving.driver.modular.system.dao.DriverOnlineTimeMapper; import com.supersavedriving.driver.modular.system.model.DriverOnlineTime; import com.supersavedriving.driver.modular.system.service.IDriverOnlineTimeService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @Date 2023/7/30 2:25 */ @Service public class DriverOnlineTimeServiceImpl extends ServiceImpl<DriverOnlineTimeMapper, DriverOnlineTime> implements IDriverOnlineTimeService { } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
@@ -42,6 +42,7 @@ import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; import java.net.InetAddress; import java.text.SimpleDateFormat; @@ -108,6 +109,9 @@ @Autowired private WeChatUtil weChatUtil; @Autowired private IDriverOnlineTimeService driverOnlineTimeService; @Value("${callbackPath}") private String callbackPath; @@ -555,20 +559,6 @@ */ public void addDurationCredits(Integer driverId) throws Exception { SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); String value = redisUtil.getValue("ONLINE" + driverId); if(ToolUtil.isEmpty(value)){ redisUtil.setStrValue("ONLINE" + driverId, "0_" + sdf1.format(new Date()) + "_0", 25 * 60 * 60); return; } String today = sdf1.format(new Date()); String[] s = value.split("_"); if(!today.equals(s[1])){ redisUtil.setStrValue("ONLINE" + driverId, "0_" + sdf1.format(new Date()) + "_0", 25 * 60 * 60); return; } Integer second = Integer.valueOf(s[0]) + 5; Integer time = Integer.valueOf(s[2]); SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4)); if(null == systemConfig){ return; @@ -582,9 +572,37 @@ long end = sdf.parse(sdf1.format(new Date()) + " " + num2 + ":00").getTime(); long l = System.currentTimeMillis(); if(start <= l && end > l){ Driver driver = this.selectById(driverId); String value = redisUtil.getValue("ONLINE" + driverId); if(ToolUtil.isEmpty(value)){ redisUtil.setStrValue("ONLINE" + driverId, "0_" + sdf1.format(new Date()) + "_0", 25 * 60 * 60); return; } String today = sdf1.format(new Date()); String[] s = value.split("_"); if(!today.equals(s[1])){ //修改在线时长记录 DriverOnlineTime driverOnlineTime = driverOnlineTimeService.selectOne(new EntityWrapper<DriverOnlineTime>().eq("driverId", driverId).eq("DATE_FORMAT(`day`, '%Y-%m-%d')", s[1])); if(null != driverOnlineTime){ driverOnlineTime.setOnlineTime(new BigInteger(s[0])); driverOnlineTimeService.updateById(driverOnlineTime); }else{ driverOnlineTime = new DriverOnlineTime(); driverOnlineTime.setDriverId(driverId); driverOnlineTime.setDay(sdf1.parse(s[1])); driverOnlineTime.setOnlineTime(new BigInteger(s[0])); driverOnlineTimeService.insert(driverOnlineTime); } driver.setOnlineTime(new BigInteger(s[0])); this.updateById(driver); redisUtil.setStrValue("ONLINE" + driverId, "0_" + sdf1.format(new Date()) + "_0", 25 * 60 * 60); return; } Integer second = Integer.valueOf(s[0]) + 5; Integer time = Integer.valueOf(s[2]); int h = Double.valueOf(second / 3600).intValue(); if(h > 0 && h > time){ Driver driver = this.selectById(driverId); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); accountChangeDetail.setUserType(2); @@ -595,11 +613,26 @@ accountChangeDetail.setNewData(driver.getIntegral().doubleValue()); accountChangeDetail.setExplain("在线时长奖励"); accountChangeDetailService.saveData(accountChangeDetail); driver.setOnlineTime(new BigInteger(s[0])); this.updateById(driver); time++; //修改在线时长记录 DriverOnlineTime driverOnlineTime = driverOnlineTimeService.selectOne(new EntityWrapper<DriverOnlineTime>().eq("driverId", driverId).eq("DATE_FORMAT(`day`, '%Y-%m-%d')", s[1])); if(null != driverOnlineTime){ driverOnlineTime.setOnlineTime(new BigInteger(s[0])); driverOnlineTimeService.updateById(driverOnlineTime); }else{ driverOnlineTime = new DriverOnlineTime(); driverOnlineTime.setDriverId(driverId); driverOnlineTime.setDay(sdf1.parse(s[1])); driverOnlineTime.setOnlineTime(new BigInteger(s[0])); driverOnlineTimeService.insert(driverOnlineTime); } } redisUtil.setStrValue("ONLINE" + driverId, second + "_" + s[1] + "_" + time); } redisUtil.setStrValue("ONLINE" + driverId, second + "_" + s[1] + "_" + time); } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -114,6 +114,9 @@ @Autowired private IOrderPositionService orderPositionService; @Autowired private ICompanyFundFlowService companyFundFlowService; @Value("${callbackPath}") private String callbackPath;//支付回调网关地址 @@ -1424,6 +1427,8 @@ accountChangeDetailService.insert(accountChangeDetail); //补贴中分账 Double balance = revenueService.queryCompanyBalance();//平台账户余额 Double discountedPrice = order.getDiscountedPrice(); List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); for (RechargeRecord rechargeRecord : rechargeRecords) { @@ -1448,6 +1453,14 @@ } } } CompanyFundFlow companyFundFlow = new CompanyFundFlow(); companyFundFlow.setType(5); companyFundFlow.setObjectType(1); companyFundFlow.setBalance(new BigDecimal(balance)); companyFundFlow.setMoney(new BigDecimal(order.getDiscountedPrice())); companyFundFlow.setCreateTime(new Date()); companyFundFlowService.insert(companyFundFlow); } } this.updateById(order); @@ -1966,6 +1979,7 @@ } //处理代理商抽佣 if(num3 > 0){ Double balance = revenueService.queryAgentBalance(driver.getAgentId()); Revenue revenue = new Revenue(); revenue.setType(1); revenue.setUserType(3); @@ -1997,6 +2011,15 @@ } } } CompanyFundFlow companyFundFlow = new CompanyFundFlow(); companyFundFlow.setType(3); companyFundFlow.setObjectType(2); companyFundFlow.setObjectId(driver.getAgentId()); companyFundFlow.setBalance(new BigDecimal(balance)); companyFundFlow.setMoney(new BigDecimal(num3)); companyFundFlow.setCreateTime(new Date()); companyFundFlowService.insert(companyFundFlow); } } } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/RevenueServiceImpl.java
@@ -94,4 +94,25 @@ public List<PerformanceRankingWarpper> queryDriverRank(Integer type, String time, Integer dayType) { return this.baseMapper.queryDriverRank(type, time, dayType); } /** * 获取代理商账户余额 * @param companyId * @return */ @Override public Double queryAgentBalance(Integer companyId) { return this.baseMapper.queryAgentBalance(companyId); } /** * 获取平台账户余额 * @return */ @Override public Double queryCompanyBalance() { return this.baseMapper.queryCompanyBalance(); } }