|
@@ -37,7 +37,7 @@ public class OrderPickTimeConfigLogic {
|
|
|
.in(StringUtils.isBlank(adminUser.getCompanyWechatId())
|
|
.in(StringUtils.isBlank(adminUser.getCompanyWechatId())
|
|
|
&& CollectionUtil.isNotEmpty(adminUser.getCompanyWechatIds()), OrderPickTimeConfig::getCompanyWechatId, adminUser.getCompanyWechatIds())
|
|
&& CollectionUtil.isNotEmpty(adminUser.getCompanyWechatIds()), OrderPickTimeConfig::getCompanyWechatId, adminUser.getCompanyWechatIds())
|
|
|
.eq(OrderPickTimeConfig::getStorageId, storageId)
|
|
.eq(OrderPickTimeConfig::getStorageId, storageId)
|
|
|
- .orderByDesc(OrderPickTimeConfig::getId)
|
|
|
|
|
|
|
+ .orderByAsc(OrderPickTimeConfig::getId)
|
|
|
.list();
|
|
.list();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -96,18 +96,17 @@ public class OrderPickTimeConfigLogic {
|
|
|
throw new RemoteServiceException("提货时间配置列表不能为空");
|
|
throw new RemoteServiceException("提货时间配置列表不能为空");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 2. 按照startTime进行倒序排序
|
|
|
|
|
|
|
+ // 2. 按照startTime进行正序排序
|
|
|
configList.sort((o1, o2) -> {
|
|
configList.sort((o1, o2) -> {
|
|
|
try {
|
|
try {
|
|
|
- // 转换为分钟数进行比较,取反实现倒序
|
|
|
|
|
- return Integer.compare(convertTimeToMinutes(o2.getStartTime()), convertTimeToMinutes(o1.getStartTime()));
|
|
|
|
|
|
|
+ // 转换为分钟数进行比较
|
|
|
|
|
+ return Integer.compare(convertTimeToMinutes(o1.getStartTime()), convertTimeToMinutes(o2.getStartTime()));
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
throw new RemoteServiceException(e.getMessage());
|
|
throw new RemoteServiceException(e.getMessage());
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 3. 检查时间范围是否有重叠和格式验证
|
|
// 3. 检查时间范围是否有重叠和格式验证
|
|
|
- String lastEndTime = null;
|
|
|
|
|
for (int i = 0; i < configList.size(); i++) {
|
|
for (int i = 0; i < configList.size(); i++) {
|
|
|
OrderPickTimeConfig config = configList.get(i);
|
|
OrderPickTimeConfig config = configList.get(i);
|
|
|
|
|
|
|
@@ -115,7 +114,6 @@ public class OrderPickTimeConfigLogic {
|
|
|
validateTimeFormat(config.getStartTime(), "开始时间", config);
|
|
validateTimeFormat(config.getStartTime(), "开始时间", config);
|
|
|
validateTimeFormat(config.getEndTime(), "结束时间", config);
|
|
validateTimeFormat(config.getEndTime(), "结束时间", config);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 验证开始时间必须小于结束时间
|
|
// 验证开始时间必须小于结束时间
|
|
|
int startTimeMinutes = convertTimeToMinutes(config.getStartTime());
|
|
int startTimeMinutes = convertTimeToMinutes(config.getStartTime());
|
|
|
int endTimeMinutes = convertTimeToMinutes(config.getEndTime());
|
|
int endTimeMinutes = convertTimeToMinutes(config.getEndTime());
|
|
@@ -124,17 +122,27 @@ public class OrderPickTimeConfigLogic {
|
|
|
throw new RemoteServiceException(config.getStartTime() + " 至 " + config.getEndTime() + "提货时间配置的开始时间必须小于结束时间");
|
|
throw new RemoteServiceException(config.getStartTime() + " 至 " + config.getEndTime() + "提货时间配置的开始时间必须小于结束时间");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 验证当前配置的开始时间必须大于等于上一个配置的结束时间+1分钟
|
|
|
|
|
- if (i > 0 && lastEndTime != null) {
|
|
|
|
|
- // 确保当前配置的开始时间至少比上一个配置的结束时间晚1分钟
|
|
|
|
|
- int lastEndMinutes = convertTimeToMinutes(lastEndTime);
|
|
|
|
|
- if (startTimeMinutes <= lastEndMinutes) {
|
|
|
|
|
- throw new RemoteServiceException(config.getStartTime() + " 至 " + config.getEndTime() + "的提货时间配置的开始时间必须在上一个配置结束时间之后至少1分钟");
|
|
|
|
|
|
|
+ // 检查当前配置与其他所有配置是否有时间重叠
|
|
|
|
|
+ // 支持不连续的时间配置,但确保没有时间范围重叠
|
|
|
|
|
+ for (int j = i + 1; j < configList.size(); j++) {
|
|
|
|
|
+ OrderPickTimeConfig otherConfig = configList.get(j);
|
|
|
|
|
+ int otherStartTimeMinutes = convertTimeToMinutes(otherConfig.getStartTime());
|
|
|
|
|
+ int otherEndTimeMinutes = convertTimeToMinutes(otherConfig.getEndTime());
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是否有重叠
|
|
|
|
|
+ // 1. 当前配置的结束时间大于其他配置的开始时间
|
|
|
|
|
+ // 2. 当前配置的开始时间小于其他配置的结束时间
|
|
|
|
|
+ if (endTimeMinutes > otherStartTimeMinutes && startTimeMinutes < otherEndTimeMinutes) {
|
|
|
|
|
+ throw new RemoteServiceException(config.getStartTime() + " 至 " + config.getEndTime() + "与" +
|
|
|
|
|
+ otherConfig.getStartTime() + " 至 " + otherConfig.getEndTime() + "的提货时间配置存在重叠");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检查相邻时间区间之间是否至少有1分钟间隔
|
|
|
|
|
+ if (endTimeMinutes + 1 > otherStartTimeMinutes) {
|
|
|
|
|
+ throw new RemoteServiceException(config.getStartTime() + " 至 " + config.getEndTime() + "与" +
|
|
|
|
|
+ otherConfig.getStartTime() + " 至 " + otherConfig.getEndTime() + "的提货时间配置之间必须至少间隔1分钟");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 保存当前配置的结束时间,用于下一个配置的比较
|
|
|
|
|
- lastEndTime = config.getEndTime();
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 4. 获取当前登录用户信息
|
|
// 4. 获取当前登录用户信息
|