From 6771fff413935485b5dce61769f133a44533d15c Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期六, 30 五月 2026 14:35:14 +0800
Subject: [PATCH] fix
---
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 175 insertions(+), 3 deletions(-)
diff --git a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
index daafcbf..655af48 100644
--- a/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
+++ b/ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
@@ -71,11 +71,20 @@
@Autowired
private ITDriverServiceService tDriverServiceService;
- @Autowired
- private ITCarService tCarService;
+ @Autowired
+ private ITCarService tCarService;
+
+ @Autowired
+ private ITCarServiceService tCarServiceService;
@Autowired
- private ITCarServiceService tCarServiceService;
+ private ITOrderPrivateCarService orderPrivateCarService;
+
+ @Autowired
+ private ITOrderTaxiService orderTaxiService;
+
+ @Autowired
+ private ITOrderCrossCityService orderCrossCityService;
@Value("${pushMinistryOfTransport}")
private boolean pushMinistryOfTransport;
@@ -363,6 +372,10 @@
if(ToolUtil.isEmpty(tCompany.getIdentifier())){
return "统一社会信用代码不能为空";
}
+ String commissionError = validateBusinessCommission(tCompany);
+ if (commissionError != null) {
+ return commissionError;
+ }
tCompany.setType(2); //2:分公司
tCompany.setState(0); //0:正常
tCompany.setFlag("1");
@@ -455,6 +468,10 @@
name = name.replaceAll("& #40;", "(");
name = name.replaceAll("& #41;", ")");
tCompany.setName(name);
+ String commissionError = validateBusinessCommission(tCompany);
+ if (commissionError != null) {
+ return commissionError;
+ }
User user = userService.selectById(userId);
if(null != user && ToolUtil.isNotEmpty(password)){
user.setPassword(ShiroKit.md5(password, user.getSalt()));
@@ -464,6 +481,10 @@
// ========== 级联更新逻辑 ==========
TCompany oldCompany = tCompanyService.selectById(tCompany.getId());
if (oldCompany != null && oldCompany.getType() == 2) {
+ String unfinishedOrderError = validateCancelledServiceUnfinishedOrders(oldCompany, tCompany, true);
+ if (unfinishedOrderError != null) {
+ return unfinishedOrderError;
+ }
// 1. 检测并级联更新经营业务
cascadeUpdateBusinessScope(oldCompany, tCompany);
@@ -507,6 +528,15 @@
name = name.replaceAll("& #40;", "(");
name = name.replaceAll("& #41;", ")");
tCompany.setName(name);
+ String commissionError = validateBusinessCommission(tCompany);
+ if (commissionError != null) {
+ return commissionError;
+ }
+ TCompany oldCompany = tCompanyService.selectById(tCompany.getId());
+ String unfinishedOrderError = validateCancelledServiceUnfinishedOrders(oldCompany, tCompany, false);
+ if (unfinishedOrderError != null) {
+ return unfinishedOrderError;
+ }
tCompany.setUpdateTime(new Date());
// tCompany.setVersion(tCompany.getVersion() + 1);
tCompanyService.updateById(tCompany);
@@ -538,6 +568,10 @@
if(ToolUtil.isEmpty(tCompany.getIdentifier())){
return "统一社会信用代码不能为空";
}
+ String commissionError = validateBusinessCommission(tCompany);
+ if (commissionError != null) {
+ return commissionError;
+ }
tCompany.setType(3); //2:分公司
if (ShiroKit.getUser().getRoleType() == 2) {
tCompany.setSuperiorId(ShiroKit.getUser().getObjectId());
@@ -692,6 +726,144 @@
}
}
+ private String validateBusinessCommission(TCompany company) {
+ if (Integer.valueOf(1).equals(company.getIsSpe()) && !hasCommissionSetting(company.getSpe())) {
+ return "请先设置快车司机抽成";
+ }
+ if (Integer.valueOf(1).equals(company.getIsTaxi()) && !hasCommissionSetting(company.getTaxi())) {
+ return "请先设置出租车司机抽成";
+ }
+ if (Integer.valueOf(1).equals(company.getIsCross()) && !hasCommissionSetting(company.getCross())) {
+ return "请先设置跨城出行司机抽成";
+ }
+ return null;
+ }
+
+ private boolean hasCommissionSetting(String configText) {
+ if (SinataUtil.isEmpty(configText)) {
+ return false;
+ }
+ try {
+ JSONObject config = JSON.parseObject(configText);
+ JSONArray rules = config.getJSONArray("rules");
+ if (hasCommissionRule(rules)) {
+ return true;
+ }
+ JSONArray timeRules = config.getJSONArray("time_rules");
+ if (timeRules != null) {
+ for (int i = 0; i < timeRules.size(); i++) {
+ if (hasCommissionRule(timeRules.getJSONArray(i))) {
+ return true;
+ }
+ }
+ }
+ } catch (Exception e) {
+ return false;
+ }
+ return false;
+ }
+
+ private boolean hasCommissionRule(JSONArray rules) {
+ if (rules == null || rules.size() <= 0) {
+ return false;
+ }
+ for (int i = 0; i < rules.size(); i++) {
+ JSONObject rule = rules.getJSONObject(i);
+ if (rule != null && rule.containsKey("percent") && SinataUtil.isNotEmpty(rule.getString("percent"))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String validateCancelledServiceUnfinishedOrders(TCompany oldCompany, TCompany newCompany, boolean includeFranchisee) {
+ if (oldCompany == null || newCompany == null) {
+ return null;
+ }
+ List<Integer> cancelledTypes = getCancelledCoreServiceTypes(oldCompany, newCompany);
+ if (cancelledTypes.isEmpty()) {
+ return null;
+ }
+ List<Integer> driverIds = getCompanyDriverIds(oldCompany.getId(), includeFranchisee);
+ if (driverIds.isEmpty()) {
+ return null;
+ }
+ if (cancelledTypes.contains(1) && hasUnfinishedPrivateCarOrder(driverIds)) {
+ return "当前公司内司机存在快车未完成订单,无法变动";
+ }
+ if (cancelledTypes.contains(2) && hasUnfinishedTaxiOrder(driverIds)) {
+ return "当前公司内司机存在出租车未完成订单,无法变动";
+ }
+ if (cancelledTypes.contains(3) && hasUnfinishedCrossCityOrder(driverIds)) {
+ return "当前公司内司机存在跨城出行未完成订单,无法变动";
+ }
+ return null;
+ }
+
+ private List<Integer> getCancelledCoreServiceTypes(TCompany oldCompany, TCompany newCompany) {
+ List<Integer> cancelledTypes = new ArrayList<>();
+ if (isServiceCancelled(oldCompany.getIsSpe(), newCompany.getIsSpe())) {
+ cancelledTypes.add(1);
+ }
+ if (isServiceCancelled(oldCompany.getIsTaxi(), newCompany.getIsTaxi())) {
+ cancelledTypes.add(2);
+ }
+ if (isServiceCancelled(oldCompany.getIsCross(), newCompany.getIsCross())) {
+ cancelledTypes.add(3);
+ }
+ return cancelledTypes;
+ }
+
+ private List<Integer> getCompanyDriverIds(Integer companyId, boolean includeFranchisee) {
+ List<Integer> driverIds = new ArrayList<>();
+ List<TDriver> companyDrivers = tDriverService.selectList(new EntityWrapper<TDriver>().ne("flag", "3").eq("companyId", companyId));
+ addDriverIds(driverIds, companyDrivers);
+ if (!includeFranchisee) {
+ List<TDriver> franchiseeDrivers = tDriverService.selectList(new EntityWrapper<TDriver>().ne("flag", "3").eq("franchiseeId", companyId));
+ addDriverIds(driverIds, franchiseeDrivers);
+ }
+ if (includeFranchisee) {
+ List<TCompany> franchiseeList = tCompanyService.selectList(new EntityWrapper<TCompany>().eq("superiorId", companyId).eq("type", 3).ne("flag", "3"));
+ for (TCompany franchisee : franchiseeList) {
+ List<TDriver> franchiseeDrivers = tDriverService.selectList(new EntityWrapper<TDriver>().ne("flag", "3").eq("franchiseeId", franchisee.getId()));
+ addDriverIds(driverIds, franchiseeDrivers);
+ }
+ }
+ return driverIds;
+ }
+
+ private void addDriverIds(List<Integer> driverIds, List<TDriver> drivers) {
+ if (drivers == null) {
+ return;
+ }
+ for (TDriver driver : drivers) {
+ if (driver != null && driver.getId() != null && !driverIds.contains(driver.getId())) {
+ driverIds.add(driver.getId());
+ }
+ }
+ }
+
+ private boolean hasUnfinishedPrivateCarOrder(List<Integer> driverIds) {
+ return orderPrivateCarService.selectCount(new EntityWrapper<TOrderPrivateCar>()
+ .eq("isDelete", 1)
+ .in("driverId", driverIds)
+ .notIn("state", 8, 9, 10, 12)) > 0;
+ }
+
+ private boolean hasUnfinishedTaxiOrder(List<Integer> driverIds) {
+ return orderTaxiService.selectCount(new EntityWrapper<TOrderTaxi>()
+ .eq("isDelete", 1)
+ .in("driverId", driverIds)
+ .notIn("state", 8, 9, 10, 12)) > 0;
+ }
+
+ private boolean hasUnfinishedCrossCityOrder(List<Integer> driverIds) {
+ return orderCrossCityService.selectCount(new EntityWrapper<TOrderCrossCity>()
+ .eq("isDelete", 1)
+ .in("driverId", driverIds)
+ .notIn("state", 8, 9, 10, 12)) > 0;
+ }
+
/**
* 删除司机的经营业务记录
* @param companyId 分公司ID(查询直属司机时使用)
--
Gitblit v1.7.1