|
|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.sztzjy.linkCommerce.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.sztzjy.linkCommerce.config.security.JwtUser;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.SchoolClass;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.SchoolClassExample;
|
|
|
|
|
@ -9,6 +10,7 @@ import com.sztzjy.linkCommerce.entity.TaskAllocationExample;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.TeachingClassStudent;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.TrainingTask;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.TrainingTaskClassConfig;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.TrainingTaskStep;
|
|
|
|
|
import com.sztzjy.linkCommerce.entity.importDto.TrainingTaskImportDTO;
|
|
|
|
|
import com.sztzjy.linkCommerce.mapper.SchoolClassMapper;
|
|
|
|
|
import com.sztzjy.linkCommerce.mapper.TaskAllocationMapper;
|
|
|
|
|
@ -95,7 +97,7 @@ public class TrainingTaskServiceImpl implements TrainingTaskService {
|
|
|
|
|
normalizeTask(task);
|
|
|
|
|
TrainingTask builtInTask = requireBuiltInTask(task.getTaskKey());
|
|
|
|
|
task.setProjectName(builtInTask.getProjectName());
|
|
|
|
|
task.setSteps(normalizeFixedSteps(task.getSteps(), builtInTask));
|
|
|
|
|
task.setSteps(normalizeSteps(task.getSteps(), builtInTask));
|
|
|
|
|
task.setId(UUID.randomUUID().toString());
|
|
|
|
|
task.setCreatedBy(operatorId);
|
|
|
|
|
task.setCreateTime(new Date());
|
|
|
|
|
@ -118,7 +120,7 @@ public class TrainingTaskServiceImpl implements TrainingTaskService {
|
|
|
|
|
task.setProjectName(existing.getProjectName());
|
|
|
|
|
task.setSort(existing.getSort());
|
|
|
|
|
task.setEnabled(existing.getEnabled());
|
|
|
|
|
task.setSteps(normalizeFixedSteps(task.getSteps(), builtInTask));
|
|
|
|
|
task.setSteps(normalizeSteps(task.getSteps(), builtInTask));
|
|
|
|
|
task.setUpdateTime(new Date());
|
|
|
|
|
trainingTaskMapper.updateByPrimaryKeySelective(task);
|
|
|
|
|
return trainingTaskMapper.selectByPrimaryKey(id);
|
|
|
|
|
@ -243,7 +245,7 @@ public class TrainingTaskServiceImpl implements TrainingTaskService {
|
|
|
|
|
task.setProjectName(baseTask.getProjectName());
|
|
|
|
|
task.setSort(baseTask.getSort());
|
|
|
|
|
task.setEnabled(task.getEnabled() == null ? Boolean.TRUE : task.getEnabled());
|
|
|
|
|
task.setSteps(normalizeFixedSteps(task.getSteps(), builtInTask));
|
|
|
|
|
task.setSteps(normalizeSteps(task.getSteps(), builtInTask));
|
|
|
|
|
|
|
|
|
|
TrainingTaskClassConfig existing = trainingTaskClassConfigMapper.selectByTeachingClassAndTaskKey(teachingClassId, normalizedTaskKey);
|
|
|
|
|
TrainingTaskClassConfig config = toConfig(teachingClassId, task, operatorId);
|
|
|
|
|
@ -647,7 +649,7 @@ public class TrainingTaskServiceImpl implements TrainingTaskService {
|
|
|
|
|
task.setBackground(StringUtils.trimToEmpty(row.getBackground()));
|
|
|
|
|
task.setObjectives(toJsonArray(splitList(row.getObjectives())));
|
|
|
|
|
task.setRequirements(StringUtils.trimToEmpty(row.getRequirements()));
|
|
|
|
|
task.setSteps(normalizeFixedSteps(row.getSteps(), builtInTask));
|
|
|
|
|
task.setSteps(normalizeSteps(row.getSteps(), builtInTask));
|
|
|
|
|
task.setMaterialName(StringUtils.trimToEmpty(row.getMaterialName()));
|
|
|
|
|
task.setMaterialUrl(StringUtils.trimToEmpty(row.getMaterialUrl()));
|
|
|
|
|
task.setSort(row.getSort());
|
|
|
|
|
@ -711,23 +713,60 @@ public class TrainingTaskServiceImpl implements TrainingTaskService {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String normalizeFixedSteps(String value, TrainingTask builtInTask) {
|
|
|
|
|
int expectedCount = getFixedStepCount(builtInTask);
|
|
|
|
|
List<String> steps = parseJsonOrDelimitedList(value);
|
|
|
|
|
List<String> normalized = steps.stream()
|
|
|
|
|
.map(StringUtils::trimToEmpty)
|
|
|
|
|
.filter(StringUtils::isNotBlank)
|
|
|
|
|
.limit(expectedCount)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
while (normalized.size() < expectedCount) {
|
|
|
|
|
normalized.add("Step " + (normalized.size() + 1));
|
|
|
|
|
private String normalizeSteps(String value, TrainingTask builtInTask) {
|
|
|
|
|
List<TrainingTaskStep> steps = parseSteps(value, builtInTask);
|
|
|
|
|
if (steps.isEmpty()) {
|
|
|
|
|
throw new IllegalArgumentException("至少保留一个步骤");
|
|
|
|
|
}
|
|
|
|
|
return toJsonArray(normalized);
|
|
|
|
|
return JSON.toJSONString(steps);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int getFixedStepCount(TrainingTask builtInTask) {
|
|
|
|
|
List<String> steps = parseJsonOrDelimitedList(builtInTask == null ? null : builtInTask.getSteps());
|
|
|
|
|
return steps.isEmpty() ? 4 : steps.size();
|
|
|
|
|
private List<TrainingTaskStep> parseSteps(String value, TrainingTask builtInTask) {
|
|
|
|
|
List<TrainingTaskStep> result = new ArrayList<>();
|
|
|
|
|
String source = StringUtils.isBlank(value) && builtInTask != null ? builtInTask.getSteps() : value;
|
|
|
|
|
if (StringUtils.isBlank(source)) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
String trimmed = StringUtils.trimToEmpty(source);
|
|
|
|
|
if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
|
|
|
|
|
try {
|
|
|
|
|
List<?> values = JSON.parseArray(trimmed, Object.class);
|
|
|
|
|
if (values != null) {
|
|
|
|
|
for (Object valueItem : values) {
|
|
|
|
|
if (valueItem instanceof JSONObject) {
|
|
|
|
|
JSONObject item = (JSONObject) valueItem;
|
|
|
|
|
addStep(result, item.getString("id"), item.getString("name"), item.getString("kind"), builtInTask);
|
|
|
|
|
} else {
|
|
|
|
|
addStep(result, null, String.valueOf(valueItem), null, builtInTask);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception ignored) {
|
|
|
|
|
// Fall through to legacy delimiter parsing.
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (String name : parseJsonOrDelimitedList(source)) {
|
|
|
|
|
addStep(result, null, name, null, builtInTask);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void addStep(List<TrainingTaskStep> steps, String id, String name, String kind, TrainingTask builtInTask) {
|
|
|
|
|
String normalizedName = StringUtils.trimToEmpty(name);
|
|
|
|
|
if (StringUtils.isBlank(normalizedName)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
int position = steps.size() + 1;
|
|
|
|
|
int builtInCount = parseJsonOrDelimitedList(builtInTask == null ? null : builtInTask.getSteps()).size();
|
|
|
|
|
boolean builtIn = "builtin".equalsIgnoreCase(StringUtils.trimToEmpty(kind))
|
|
|
|
|
|| (StringUtils.isBlank(kind) && position <= builtInCount);
|
|
|
|
|
String normalizedKind = builtIn ? "builtin" : "custom";
|
|
|
|
|
String normalizedId = StringUtils.trimToEmpty(id);
|
|
|
|
|
if (StringUtils.isBlank(normalizedId)) {
|
|
|
|
|
normalizedId = (builtIn ? "builtin-" : "custom-") + position;
|
|
|
|
|
}
|
|
|
|
|
steps.add(new TrainingTaskStep(normalizedId, normalizedName, normalizedKind));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> parseJsonOrDelimitedList(String value) {
|
|
|
|
|
|