|
@@ -1,7 +1,6 @@
|
|
|
package com.ruoyi.sim.service.impl;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
import com.ruoyi.common.utils.DateUtils;
|
|
@@ -9,6 +8,7 @@ import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.sim.domain.Fault;
|
|
|
import com.ruoyi.sim.domain.TaskFault;
|
|
|
import com.ruoyi.sim.domain.vo.FaultTreeVo;
|
|
|
+import com.ruoyi.sim.domain.vo.TaskCUVo;
|
|
|
import com.ruoyi.sim.domain.vo.TaskVo;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
@@ -60,10 +60,10 @@ public class TaskService {
|
|
|
String simType = t.getSimType();
|
|
|
BeanUtils.copyProperties(t, vo);
|
|
|
// 查询获得数据结构。
|
|
|
- List<FaultTreeVo> listToQ = (List<FaultTreeVo>) faultService.listAllARTreeStyleBySimType(simType).get(AjaxResult.DATA_TAG);
|
|
|
+ List<FaultTreeVo> listStyleT = faultService.listAllListTreeStyleBySimType(simType);
|
|
|
// 变成扁平list
|
|
|
- List<FaultTreeVo> listToF = FaultService.flatten(listToQ);
|
|
|
- for (FaultTreeVo o : listToF) {
|
|
|
+ List<FaultTreeVo> listStyleF = FaultService.flatten(listStyleT);
|
|
|
+ for (FaultTreeVo o : listStyleF) {
|
|
|
if (o == null) {
|
|
|
continue;
|
|
|
}
|
|
@@ -77,7 +77,11 @@ public class TaskService {
|
|
|
}
|
|
|
}
|
|
|
// 变成树list
|
|
|
- vo.setSelectedData(FaultService.toTree(listToF, Fault.ROOT_FAULT_ID));
|
|
|
+ vo.setSelectedData(FaultService.toTree(listStyleF, Fault.ROOT_FAULT_ID));
|
|
|
+ // 故障现象
|
|
|
+ vo.setCountGZXX(getCountGZXX(taskId));
|
|
|
+ // 故障部位
|
|
|
+ vo.setCountGZBW(getCountGZBW(taskId));
|
|
|
//
|
|
|
return AjaxResult.success(vo);
|
|
|
}
|
|
@@ -88,28 +92,122 @@ public class TaskService {
|
|
|
* @param q 任务
|
|
|
* @return 任务
|
|
|
*/
|
|
|
- public List<TaskVo> list(TaskVo q) {
|
|
|
- Task qT = new Task();
|
|
|
- BeanUtils.copyProperties(q, qT);
|
|
|
- List<Task> listT = taskMapper.selectTaskList(qT);
|
|
|
- List<TaskVo> listTVo = new ArrayList<>(listT.size());
|
|
|
- Long taskId = q.getTaskId();
|
|
|
- listT.stream().forEach(t -> {
|
|
|
+ public List<TaskVo> list(Task q) {
|
|
|
+ if (q == null) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<Task> listT = taskMapper.selectTaskList(q);
|
|
|
+ List<TaskVo> listVo = new ArrayList<>(listT.size());
|
|
|
+ listT.forEach(t -> {
|
|
|
TaskVo vo = new TaskVo();
|
|
|
BeanUtils.copyProperties(t, vo);
|
|
|
- {
|
|
|
- int countGZXX = 0;
|
|
|
- int countGZBW = 0;
|
|
|
- //
|
|
|
- countGZBW = taskFaultService.countTypeGZBW(taskId);
|
|
|
- // todo:故障现象
|
|
|
- // countGZXX = faultService.listType1ByType3
|
|
|
- vo.setCountGZXX(countGZXX);
|
|
|
- vo.setCountGZBW(countGZBW);
|
|
|
- }
|
|
|
- listTVo.add(vo);
|
|
|
+ // 故障现象
|
|
|
+ vo.setCountGZXX(getCountGZXX(t.getTaskId()));
|
|
|
+ // 故障部位
|
|
|
+ vo.setCountGZBW(getCountGZBW(t.getTaskId()));
|
|
|
+ listVo.add(vo);
|
|
|
});
|
|
|
- return listTVo;
|
|
|
+ return listVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getCountGZXX(long taskId) {
|
|
|
+ return faultService.countType1ByType3(
|
|
|
+ taskFaultService.toFaultList(
|
|
|
+ taskFaultService.listYesByFaultType(taskId, Fault.Type.TYPE_GZBW)
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getCountGZBW(long taskId) {
|
|
|
+ return taskFaultService.countYesByFaultType(taskId, Fault.Type.TYPE_GZBW);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional()
|
|
|
+ public AjaxResult insertOrUpdateTaskByTeacher(TaskCUVo v) {
|
|
|
+ String simType = v.getSimType();
|
|
|
+ String[] faultIds = v.getFaultIds();
|
|
|
+ l.info("simType = {}", simType);
|
|
|
+ // check
|
|
|
+ AjaxResult arE1 = check(simType, faultIds);
|
|
|
+ if (arE1.isError()) {
|
|
|
+ return arE1;
|
|
|
+ }
|
|
|
+ Set<String> hashSet = new HashSet<>(Arrays.asList(faultIds));
|
|
|
+ l.info("hashSet = {}", hashSet);
|
|
|
+ TaskVo tv = buildBlankTaskVo(simType);
|
|
|
+ // 查询获得数据结构。
|
|
|
+ List<FaultTreeVo> listStyleT = tv.getSelectedData();
|
|
|
+ // 变成扁平list
|
|
|
+ List<FaultTreeVo> listStyleF = FaultService.flatten(listStyleT);
|
|
|
+ listStyleF
|
|
|
+ .stream()
|
|
|
+ .filter(vo -> hashSet.contains(vo.getFaultId()))
|
|
|
+ .forEach(vo -> vo.getTaskFault().setFlag(TaskFault.YES));
|
|
|
+ if (v.getTaskId() == null || v.getTaskId() == 0) {
|
|
|
+ tv.setTaskId(null);
|
|
|
+ } else {
|
|
|
+ tv.setTaskId(v.getTaskId());
|
|
|
+ }
|
|
|
+ tv.setName(v.getName());
|
|
|
+ tv.setSimType(v.getSimType());
|
|
|
+ l.info("listStyleF.size = {}", listStyleF.size());
|
|
|
+ // 变回tree
|
|
|
+ tv.setSelectedData(FaultService.toTree(listStyleF, Fault.ROOT_FAULT_ID));
|
|
|
+ AjaxResult arE2 = null;
|
|
|
+ if (v.getTaskId() == null || v.getTaskId() == 0) {
|
|
|
+ arE2 = insertTaskByTeacher(tv);
|
|
|
+ } else {
|
|
|
+ arE2 = updateTaskByTeacher(tv);
|
|
|
+ }
|
|
|
+ if (arE2 == null || arE2.isError()) {
|
|
|
+ return arE2;
|
|
|
+ }
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ public AjaxResult check(String simType, String[] faultIds) {
|
|
|
+ for (String faultId : faultIds) {
|
|
|
+ if (!faultService.isType3(faultId)) {
|
|
|
+ return AjaxResult.error("faultId not TYPE_GZBW!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!faultService.isExist(simType, faultIds)) {
|
|
|
+ return AjaxResult.error("faultId not exist!");
|
|
|
+ }
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增任务
|
|
|
+ *
|
|
|
+ * @param tv 任务
|
|
|
+ * @return 结果
|
|
|
+ * todo:事务有问题。
|
|
|
+ */
|
|
|
+ @Transactional()
|
|
|
+ public AjaxResult insertTaskByTeacher(TaskVo tv) {
|
|
|
+ l.info("insertTaskByTeacher {}", tv);
|
|
|
+ // check
|
|
|
+ AjaxResult arE1 = checkAddOrEdit(tv);
|
|
|
+ if (arE1.isError()) {
|
|
|
+ return arE1;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ tv.setCreateByUserId(SecurityUtils.getUserId());
|
|
|
+ tv.setCreateBy(SecurityUtils.getUsername());
|
|
|
+ tv.setCreateTime(DateUtils.getNowDate());
|
|
|
+ tv.setUpdateBy(SecurityUtils.getUsername());
|
|
|
+ tv.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ // do.
|
|
|
+ // id新增一定要null。
|
|
|
+ tv.setTaskId(null);
|
|
|
+ taskMapper.insertTask(tv);
|
|
|
+ // do ref.
|
|
|
+ AjaxResult arRef = dealRef(tv);
|
|
|
+ if (arRef.isError()) {
|
|
|
+ return arRef;
|
|
|
+ }
|
|
|
+ return AjaxResult.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -121,11 +219,35 @@ public class TaskService {
|
|
|
public AjaxResult updateTaskByTeacher(TaskVo tv) {
|
|
|
l.info("updateTaskByTeacher " + tv);
|
|
|
// check
|
|
|
+ AjaxResult arE1 = checkAddOrEdit(tv);
|
|
|
+ if (arE1.isError()) {
|
|
|
+ return arE1;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ tv.setCreateByUserId(SecurityUtils.getUserId());
|
|
|
+ tv.setCreateBy(SecurityUtils.getUsername());
|
|
|
+ tv.setCreateTime(DateUtils.getNowDate());
|
|
|
+ tv.setUpdateBy(SecurityUtils.getUsername());
|
|
|
+ tv.setUpdateTime(DateUtils.getNowDate());
|
|
|
+ // do.
|
|
|
+ if (tv.getTaskId() == null || tv.getTaskId() == 0) {
|
|
|
+ return AjaxResult.error("taskId not exist!");
|
|
|
+ }
|
|
|
+ taskMapper.updateTask(tv);
|
|
|
+ // do ref.
|
|
|
+ AjaxResult arE2 = dealRef(tv);
|
|
|
+ if (arE2.isError()) {
|
|
|
+ return arE2;
|
|
|
+ }
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ public AjaxResult checkAddOrEdit(TaskVo tv) {
|
|
|
if (tv == null) {
|
|
|
return AjaxResult.error("TaskVo empty!");
|
|
|
}
|
|
|
if (!simService.checkSimTypeOk(tv.getSimType())) {
|
|
|
- return AjaxResult.error("getSimType error!");
|
|
|
+ return AjaxResult.error("simType value error!");
|
|
|
}
|
|
|
if (!Task.Type.TEACHER_ADD.equals(tv.getTaskType())) {
|
|
|
return AjaxResult.error("taskType value error!");
|
|
@@ -133,46 +255,60 @@ public class TaskService {
|
|
|
if (StringUtils.isEmpty(tv.getName())) {
|
|
|
return AjaxResult.error("name isEmpty!");
|
|
|
}
|
|
|
- //
|
|
|
- tv.setCreateByUserId(SecurityUtils.getUserId());
|
|
|
- tv.setCreateBy(SecurityUtils.getUsername());
|
|
|
- tv.setCreateTime(DateUtils.getNowDate());
|
|
|
- tv.setUpdateBy(SecurityUtils.getUsername());
|
|
|
- tv.setUpdateTime(DateUtils.getNowDate());
|
|
|
- tv.setRemark("");
|
|
|
- tv.setUpdateTime(DateUtils.getNowDate());
|
|
|
- taskMapper.updateTask(tv);
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理关联数据。
|
|
|
+ *
|
|
|
+ * @param tv
|
|
|
+ */
|
|
|
+ public AjaxResult dealRef(TaskVo tv) {
|
|
|
List<FaultTreeVo> selectedData = tv.getSelectedData();
|
|
|
- if (selectedData != null) {
|
|
|
- List<FaultTreeVo> list = FaultService.flatten(selectedData);
|
|
|
- for (FaultTreeVo ftv : list) {
|
|
|
- if (ftv == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (!Fault.Type.TYPE_GZBW.equals(ftv.getFaultType())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- TaskFault tf = ftv.getTaskFault();
|
|
|
- // check
|
|
|
- if (tf == null) {
|
|
|
- return AjaxResult.error("TaskFault empty!");
|
|
|
- }
|
|
|
- String flag = tf.getFlag();
|
|
|
- if (StringUtils.isEmpty(flag)) {
|
|
|
- return AjaxResult.error("flag empty!");
|
|
|
- }
|
|
|
- if (TaskFault.UNKNOWN.equals(flag)) {
|
|
|
- return AjaxResult.error("flag UNKNOWN!");
|
|
|
- }
|
|
|
- if (!TaskFault.YES.equals(flag) && !TaskFault.NO.equals(flag)) {
|
|
|
- return AjaxResult.error("flag must YES or NO!");
|
|
|
- }
|
|
|
- // todo:选中数量限制
|
|
|
+ if (selectedData == null) {
|
|
|
+ return AjaxResult.error("selectedData null!");
|
|
|
+ }
|
|
|
+ List<FaultTreeVo> list = FaultService.flatten(selectedData);
|
|
|
+ dealRef(tv.getTaskId(), list);
|
|
|
+ return AjaxResult.success();
|
|
|
+ }
|
|
|
|
|
|
- // todo:故障部位冲突
|
|
|
- tf.setTaskId(tv.getTaskId());
|
|
|
- taskFaultService.insertOrUpdateTaskFault(tf);
|
|
|
+ /**
|
|
|
+ * @param flatten 扁平list
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public AjaxResult dealRef(Long taskId, List<FaultTreeVo> flatten) {
|
|
|
+ for (FaultTreeVo ftv : flatten) {
|
|
|
+ if (ftv == null) {
|
|
|
+ continue;
|
|
|
}
|
|
|
+ // 仅仅处理故障部位。
|
|
|
+ if (!Fault.Type.TYPE_GZBW.equals(ftv.getFaultType())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ TaskFault tf = ftv.getTaskFault();
|
|
|
+ // check
|
|
|
+ if (tf == null) {
|
|
|
+ return AjaxResult.error("TaskFault empty!");
|
|
|
+ }
|
|
|
+ String flag = tf.getFlag();
|
|
|
+ if (StringUtils.isEmpty(flag)) {
|
|
|
+ return AjaxResult.error("flag empty!");
|
|
|
+ }
|
|
|
+ if (!TaskFault.YES.equals(flag) &&
|
|
|
+ !TaskFault.NO.equals(flag) &&
|
|
|
+ !TaskFault.UNKNOWN.equals(flag)) {
|
|
|
+ return AjaxResult.error("flag must YES or NO,UNKNOWN!");
|
|
|
+ }
|
|
|
+ // todo:选中数量限制
|
|
|
+
|
|
|
+ // 故障部位冲突 暂时没有故障部位冲突。
|
|
|
+ // UNKNOWN 作为 NO 插入或修改数据。
|
|
|
+ if (TaskFault.UNKNOWN.equals(flag)) {
|
|
|
+ tf.setFlag(TaskFault.NO);
|
|
|
+ }
|
|
|
+ tf.setTaskId(taskId);
|
|
|
+ taskFaultService.insertOrUpdateTaskFault(tf);
|
|
|
}
|
|
|
return AjaxResult.success();
|
|
|
}
|
|
@@ -207,70 +343,6 @@ public class TaskService {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 新增任务
|
|
|
- *
|
|
|
- * @param tv 任务
|
|
|
- * @return 结果
|
|
|
- * todo:事务有问题。
|
|
|
- */
|
|
|
- @Transactional
|
|
|
- public AjaxResult insertTaskByTeacher(TaskVo tv) {
|
|
|
- // check
|
|
|
- if (tv == null) {
|
|
|
- return AjaxResult.error("TaskVo empty!");
|
|
|
- }
|
|
|
- if (!simService.checkSimTypeOk(tv.getSimType())) {
|
|
|
- return AjaxResult.error("getSimType error!");
|
|
|
- }
|
|
|
- if (!Task.Type.TEACHER_ADD.equals(tv.getTaskType())) {
|
|
|
- return AjaxResult.error("getTaskType value error!");
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(tv.getName())) {
|
|
|
- return AjaxResult.error("getName isEmpty!");
|
|
|
- }
|
|
|
- //
|
|
|
- tv.setCreateByUserId(SecurityUtils.getUserId());
|
|
|
- tv.setCreateBy(SecurityUtils.getUsername());
|
|
|
- tv.setCreateTime(DateUtils.getNowDate());
|
|
|
- tv.setUpdateBy(SecurityUtils.getUsername());
|
|
|
- tv.setUpdateTime(DateUtils.getNowDate());
|
|
|
- taskMapper.insertTask(tv);
|
|
|
- List<FaultTreeVo> selectedData = tv.getSelectedData();
|
|
|
- if (selectedData != null) {
|
|
|
- List<FaultTreeVo> list = FaultService.flatten(selectedData);
|
|
|
- for (FaultTreeVo ftv : list) {
|
|
|
- if (ftv == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (!Fault.Type.TYPE_GZBW.equals(ftv.getFaultType())) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- TaskFault tf = ftv.getTaskFault();
|
|
|
- // check
|
|
|
- if (tf == null) {
|
|
|
- return AjaxResult.error("TaskFault empty!");
|
|
|
- }
|
|
|
- String flag = tf.getFlag();
|
|
|
- if (StringUtils.isEmpty(flag)) {
|
|
|
- return AjaxResult.error("flag empty!");
|
|
|
- }
|
|
|
- if (TaskFault.UNKNOWN.equals(flag)) {
|
|
|
- return AjaxResult.error("flag UNKNOWN!");
|
|
|
- }
|
|
|
- if (!TaskFault.YES.equals(flag) && !TaskFault.NO.equals(flag)) {
|
|
|
- return AjaxResult.error("flag must YES or NO!");
|
|
|
- }
|
|
|
- // todo:选中数量限制
|
|
|
-
|
|
|
- // 故障部位冲突 暂时没有故障部位冲突。
|
|
|
- tf.setTaskId(tv.getTaskId());
|
|
|
- taskFaultService.insertOrUpdateTaskFault(tf);
|
|
|
- }
|
|
|
- }
|
|
|
- return AjaxResult.success();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 为了新建Task,返回一个带tree结构的任务详细信息。
|
|
|
*
|
|
|
* @return 任务
|
|
@@ -283,13 +355,21 @@ public class TaskService {
|
|
|
if (!simService.checkSimTypeOk(simType)) {
|
|
|
return AjaxResult.error("simType value error!");
|
|
|
}
|
|
|
- // query obj.
|
|
|
+ return AjaxResult.success(buildBlankTaskVo(simType));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param simType
|
|
|
+ * @return tree style
|
|
|
+ */
|
|
|
+ public TaskVo buildBlankTaskVo(final String simType) {
|
|
|
List<FaultTreeVo> ftList = faultService.listAllListTreeStyleBySimType(simType);
|
|
|
TaskVo t = new TaskVo();
|
|
|
- t.setTaskId(Task.EMPTY_TASK_ID);
|
|
|
+ t.setTaskId(null);
|
|
|
t.setSimType(simType);
|
|
|
+ t.setTaskType(Task.Type.TEACHER_ADD);
|
|
|
t.setSelectedData(ftList);
|
|
|
- return AjaxResult.success(t);
|
|
|
+ return t;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -299,7 +379,7 @@ public class TaskService {
|
|
|
* @return 结果
|
|
|
*/
|
|
|
@Transactional
|
|
|
- public int insertTaskWithFault(Task task) {
|
|
|
+ public long insertTaskWithFault(Task task) {
|
|
|
Long taskId = task.getTaskId();
|
|
|
if (selectTaskByTaskId(taskId) != null) {
|
|
|
// 已经存在
|