From 1c40baaf9ca0183945b9881d11ceed5aeebc8290 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 23 十月 2025 11:35:44 +0800
Subject: [PATCH] 修改bug
---
ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java | 352 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 351 insertions(+), 1 deletions(-)
diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
index ac47b6e..be6012d 100644
--- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
+++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java
@@ -1,11 +1,15 @@
package com.stylefeng.guns.modular.system.service.impl;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.beetl.ShiroExtUtil;
import com.stylefeng.guns.core.util.ExcelUtil;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.IncomeMapper;
-import com.stylefeng.guns.modular.system.model.Income;
+import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +18,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
import java.util.*;
@@ -45,6 +50,12 @@
private ITDriverService driverService;
@Autowired
private ShiroExtUtil shiroExtUtil;
+
+ @Autowired
+ private ITCompanyService companyService;
+
+ @Autowired
+ private ITLineService lineService;
/**
@@ -664,4 +675,343 @@
public void updateState(String s) {
this.baseMapper.updateState(s);
}
+
+ @Override
+ public Map<String, Object> saveIncome(Integer orderId, Integer orderType, Double payMoney) throws Exception {
+ TCompany company = null;
+ Integer orderNumber = 0;
+ Integer driverId = null;
+ JSONObject jsonObject = null;
+ JSONArray rules = null;
+ JSONArray time_rules = null;
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
+ String startTime = sdf1.format(new Date()) + " 00:00:00";
+ String endTime = sdf1.format(new Date()) + " 23:59:59";
+ Map<String, Object> map = new HashMap<>();
+ switch (orderType){
+ case 1:
+ TOrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId);
+ driverId = orderPrivateCar.getDriverId();
+ company = companyService.selectById(orderPrivateCar.getCompanyId());
+ jsonObject = JSON.parseObject(company.getSpe());
+ rules = jsonObject.getJSONArray("rules");
+ time_rules = jsonObject.getJSONArray("time_rules");
+ //按天查询当天的订单量
+ //按时间段
+ if(time_rules.size() > 0){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if( ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ startTime = split[0] + " 00:00:00";
+ endTime = split[1] + " 23:59:59";
+ break;
+ }
+ }
+ }
+ }
+ orderNumber = orderPrivateCarService.selectCount(new EntityWrapper<TOrderPrivateCar>()
+ .eq("driverId", orderPrivateCar.getDriverId())
+ .eq("isDelete", 1)
+ .in("state", Arrays.asList(7, 8, 9))
+ .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'")
+ );
+ map.put("orderNumber", orderNumber);
+ map.put("disposition", company.getSpe());
+ break;
+ case 2:
+ TOrderTaxi orderTaxi = orderTaxiService.selectById(orderId);
+ driverId = orderTaxi.getDriverId();
+ company = companyService.selectById(orderTaxi.getCompanyId());
+ jsonObject = JSON.parseObject(company.getTaxi());
+ rules = jsonObject.getJSONArray("rules");
+ time_rules = jsonObject.getJSONArray("time_rules");
+ //按天查询当天的订单量
+ //按时间段
+ if(time_rules.size() > 0){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if(ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ startTime = split[0] + " 00:00:00";
+ endTime = split[1] + " 23:59:59";
+ break;
+ }
+ }
+ }
+ }
+ orderNumber = orderTaxiService.selectCount(new EntityWrapper<TOrderTaxi>()
+ .eq("driverId", orderTaxi.getDriverId())
+ .eq("isDelete", 1)
+ .in("state", Arrays.asList(7, 8, 9))
+ .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'")
+ );
+ map.put("orderNumber", orderNumber);
+ map.put("disposition", company.getTaxi());
+ break;
+ case 3:
+ TOrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId);
+ TLine line = lineService.selectById(orderCrossCity.getLineId());
+ driverId = orderCrossCity.getDriverId();
+ jsonObject = JSON.parseObject(line.getOutSetting());
+ rules = jsonObject.getJSONArray("rules");
+ time_rules = jsonObject.getJSONArray("time_rules");
+ //按天查询当天的订单量
+ //按时间段
+ if(time_rules.size() > 0){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if(ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ startTime = split[0] + " 00:00:00";
+ endTime = split[1] + " 23:59:59";
+ break;
+ }
+ }
+ }
+ }
+ orderNumber = orderCrossCityService.selectCount(new EntityWrapper<TOrderCrossCity>()
+ .eq("driverId", orderCrossCity.getDriverId())
+ .eq("isDelete", 1)
+ .in("state", Arrays.asList(8, 9))
+ .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'")
+ );
+ map.put("orderNumber", orderNumber);
+ map.put("disposition", line.getOutSetting());
+ break;
+ case 4:
+ TOrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
+ driverId = orderLogistics.getDriverId();
+ company = companyService.selectById(orderLogistics.getCompanyId());
+ jsonObject = JSON.parseObject(company.getSameLogistics());
+ rules = jsonObject.getJSONArray("rules");
+ time_rules = jsonObject.getJSONArray("time_rules");
+ //按天查询当天的订单量
+ //按时间段
+ if(time_rules.size() > 0){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if(ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ startTime = split[0] + " 00:00:00";
+ endTime = split[1] + " 23:59:59";
+ break;
+ }
+ }
+ }
+ }
+ orderNumber = orderLogisticsService.selectCount(new EntityWrapper<TOrderLogistics>()
+ .eq("driverId", orderLogistics.getDriverId())
+ .eq("type", 4)
+ .eq("isDelete", 1)
+ .in("state", Arrays.asList(6, 9))
+ .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'")
+ );
+ map.put("orderNumber", orderNumber);
+ map.put("disposition", company.getSameLogistics());
+ break;
+ case 5:
+ TOrderLogistics orderLogistics1 = orderLogisticsService.selectById(orderId);
+ driverId = orderLogistics1.getDriverId();
+ company = companyService.selectById(orderLogistics1.getCompanyId());
+ jsonObject = JSON.parseObject(company.getCrossLogistics());
+ rules = jsonObject.getJSONArray("rules");
+ time_rules = jsonObject.getJSONArray("time_rules");
+ //按天查询当天的订单量
+ //按时间段
+ if(time_rules.size() > 0){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if(ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ startTime = split[0] + " 00:00:00";
+ endTime = split[1] + " 23:59:59";
+ break;
+ }
+ }
+ }
+ }
+ orderNumber = orderLogisticsService.selectCount(new EntityWrapper<TOrderLogistics>()
+ .eq("driverId", orderLogistics1.getDriverId())
+ .eq("type", 5)
+ .eq("isDelete", 1)
+ .in("state", Arrays.asList(6, 9))
+ .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'")
+ );
+ map.put("orderNumber", orderNumber);
+ map.put("disposition", company.getCrossLogistics());
+ break;
+ case 7:
+ TOrderCall orderCall = orderCallService.selectById(orderId);
+ driverId = orderCall.getDriverId();
+ company = companyService.selectById(orderCall.getCompanyId());
+ jsonObject = JSON.parseObject(company.getOnCall());
+ rules = jsonObject.getJSONArray("rules");
+ time_rules = jsonObject.getJSONArray("time_rules");
+ //按天查询当天的订单量
+ //按时间段
+ if(time_rules.size() > 0){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if(ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ startTime = split[0] + " 00:00:00";
+ endTime = split[1] + " 23:59:59";
+ break;
+ }
+ }
+ }
+ }
+
+ orderNumber = orderCallService.selectCount(new EntityWrapper<TOrderCall>()
+ .eq("driverId", orderCall.getDriverId())
+ .eq("isDelete", 1)
+ .in("state", Arrays.asList(7, 8, 9))
+ .last(" and DATE_FORMAT(insertTime, '%Y-%m-%d %H:%i%m') between '" + startTime + "' and '" + endTime + "'")
+ );
+ map.put("orderNumber", orderNumber);
+ map.put("disposition", company.getOnCall());
+ break;
+ }
+
+ BigDecimal money = BigDecimal.ZERO;
+ //{"rules":[],"time_rules":[[{"order":"1,3","percent":"20","MemberCoins":"1.1,2"},{"order":"3,10","percent":"40","MemberCoins":"2,5"}]]}
+ //按天
+ if(rules.size() > 0){
+ for (int i = 0; i < rules.size(); i++) {
+ JSONObject jsonObject1 = rules.getJSONObject(i);
+ money = getDriverMoney(orderNumber, payMoney, driverId, orderId, orderType, jsonObject1);
+ if(money.compareTo(BigDecimal.ZERO) >= 0){
+ break;
+ }
+ }
+ }
+ //按时间段
+ if(time_rules.size() > 0){
+ boolean b = false;
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ for (int i = 0; i < time_rules.size(); i++) {
+ JSONArray jsonArray = time_rules.getJSONArray(i);
+ JSONObject jsonObject2 = jsonArray.getJSONObject(0);
+ String time = jsonObject2.getString("time");
+ if(!b && ToolUtil.isNotEmpty(time)){
+ String[] split = time.split(" - ");
+ Date start = sdf.parse(split[0] + " 00:00:00");
+ Date end = sdf.parse(split[1] + " 23:59:59");
+ if(System.currentTimeMillis() >= start.getTime() && System.currentTimeMillis() < end.getTime()){
+ for (int j = 0; j < jsonArray.size(); j++) {
+ JSONObject jsonObject1 = jsonArray.getJSONObject(j);
+ money = getDriverMoney(orderNumber, payMoney, driverId, orderId, orderType, jsonObject1);
+ if(money.compareTo(BigDecimal.ZERO) < 0){
+ continue;
+ }
+ b = true;
+ break;
+ }
+ }
+ }
+ if(b){
+ break;
+ }
+ }
+
+ if(!b){
+ JSONArray jsonArray = time_rules.getJSONArray(0);
+ for (int j = 0; j < jsonArray.size(); j++) {
+ JSONObject jsonObject1 = jsonArray.getJSONObject(j);
+ money = getDriverMoney(orderNumber, payMoney, driverId, orderId, orderType, jsonObject1);
+ if(money.compareTo(BigDecimal.ZERO) < 0){
+ continue;
+ }
+ break;
+ }
+ }
+ }
+ if(money.compareTo(BigDecimal.ZERO) > 0){
+ TDriver driver = driverService.selectById(driverId);
+ driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ driver.setBalance((null != driver.getBalance() ? driver.getBalance() : BigDecimal.ZERO).add(money).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+ driverService.updateById(driver);
+ }
+ return map;
+ }
+
+ public BigDecimal getDriverMoney(Integer orderNumber, Double payMoney, Integer driverId, Integer orderId, Integer orderType, JSONObject jsonObject1) throws Exception{
+ String order = jsonObject1.getString("order");
+ Double percent = jsonObject1.getDouble("percent");
+ String MemberCoins = jsonObject1.getString("MemberCoins");
+ String[] split = order.split(",");
+ if(Integer.valueOf(split[0]).compareTo(orderNumber) <= 0 && Integer.valueOf(split[1]).compareTo(orderNumber) > 0){
+ String[] split1 = MemberCoins.split(",");
+ Double d = Double.valueOf(split1[0]);
+ Double g = Double.valueOf(split1[1]);
+
+ //平台抽成金额
+ BigDecimal multiply1 = new BigDecimal(payMoney).multiply(new BigDecimal(percent / 100));
+ //抽成金额小于最低金额,司机收入为0
+ if(multiply1.compareTo(new BigDecimal(d)) < 0){
+ saveData(1, 1, 2, orderId, orderType, d);
+ //司机收入
+ BigDecimal subtract = new BigDecimal(payMoney).subtract(new BigDecimal(d));
+ if(subtract.compareTo(BigDecimal.ZERO) > 0){
+ saveData(2, driverId, 2, orderId, orderType, subtract.doubleValue());
+ return subtract;
+ }
+ return new BigDecimal(0);
+ }
+ if(multiply1.compareTo(new BigDecimal(d)) >= 0 && multiply1.compareTo(new BigDecimal(g)) < 0){
+ //司机收入
+ BigDecimal subtract = new BigDecimal(payMoney).subtract(multiply1);
+ saveData(2, driverId, 2, orderId, orderType, subtract.doubleValue());
+ saveData(1, 1, 2, orderId, orderType, multiply1.doubleValue());
+ return subtract;
+ }
+ if(multiply1.compareTo(new BigDecimal(g)) >= 0){
+ //司机收入
+ BigDecimal subtract = new BigDecimal(payMoney).subtract(new BigDecimal(g));
+ saveData(2, driverId, 2, orderId, orderType, subtract.doubleValue());
+ saveData(1, 1, 2, orderId, orderType, g);
+ return subtract;
+ }
+ }
+ return new BigDecimal(-1);
+ }
+
}
--
Gitblit v1.7.1