From b219589d73f46bd98995bceb4caf16dadb56b869 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期五, 12 九月 2025 20:30:13 +0800 Subject: [PATCH] 修改bug --- ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/IncomeServiceImpl.java | 354 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 352 insertions(+), 2 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 5ab2901..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.*; @@ -43,8 +48,14 @@ @Autowired private ITDriverService driverService; - @Resource + @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