TaskService.java 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. package com.ruoyi.sim.service.impl;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.ruoyi.common.core.domain.AjaxResult;
  5. import com.ruoyi.common.utils.DateUtils;
  6. import com.ruoyi.common.utils.SecurityUtils;
  7. import com.ruoyi.sim.domain.Fault;
  8. import com.ruoyi.sim.domain.TaskFault;
  9. import com.ruoyi.sim.domain.vo.FaultTreeVo;
  10. import com.ruoyi.sim.domain.vo.TaskVo;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.beans.BeanUtils;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import com.ruoyi.sim.mapper.TaskMapper;
  18. import com.ruoyi.sim.domain.Task;
  19. import org.springframework.transaction.annotation.Transactional;
  20. /**
  21. * 任务Service业务层处理
  22. *
  23. * @author tom
  24. * @date 2024-12-13
  25. */
  26. @Service
  27. public class TaskService {
  28. private static final Logger l = LoggerFactory.getLogger(TaskService.class);
  29. @Autowired
  30. private TaskMapper taskMapper;
  31. @Autowired
  32. private FaultService faultService;
  33. @Autowired
  34. private TaskFaultService taskFaultService;
  35. @Autowired
  36. private SimService simService;
  37. /**
  38. * 查询任务
  39. *
  40. * @param taskId 任务主键
  41. * @return 任务
  42. */
  43. public AjaxResult selectTaskByTaskId(Long taskId) {
  44. // check
  45. if (taskId == null) {
  46. return AjaxResult.error("taskId is null");
  47. }
  48. Task t = taskMapper.selectTaskByTaskId(taskId);
  49. if (t == null) {
  50. return AjaxResult.error("task is null");
  51. }
  52. //
  53. TaskVo vo = new TaskVo();
  54. String simType = t.getSimType();
  55. BeanUtils.copyProperties(t, vo);
  56. // 查询获得数据结构。
  57. List<FaultTreeVo> listToQ = (List<FaultTreeVo>) faultService.selectAllTreeViaSimType(simType).get(AjaxResult.DATA_TAG);
  58. // 变成扁平list
  59. List<FaultTreeVo> listToF = FaultService.flatten(listToQ);
  60. for (FaultTreeVo o : listToF) {
  61. if (o == null) {
  62. continue;
  63. }
  64. if (Fault.FAULT_TYPE_3.equals(o.getFaultType())) {
  65. TaskFault tf = o.getTaskFault();
  66. TaskFault tfQ = taskFaultService.selectUniqueTaskFault(taskId, tf.getFaultId());
  67. // 存在就设置上数据库中TaskFault值。
  68. if (tfQ != null) {
  69. o.setTaskFault(tfQ);
  70. }
  71. }
  72. }
  73. // 变成树list
  74. vo.setSelectedData(FaultService.toTree(listToF, Fault.ROOT_FAULT_ID));
  75. //
  76. return AjaxResult.success(vo);
  77. }
  78. /**
  79. * 查询任务列表
  80. *
  81. * @param task 任务
  82. * @return 任务
  83. */
  84. public List<Task> selectTaskList(Task task) {
  85. return taskMapper.selectTaskList(task);
  86. }
  87. /**
  88. * 修改任务
  89. *
  90. * @param tv 任务
  91. * @return 结果
  92. */
  93. public AjaxResult updateTaskByTeacher(TaskVo tv) {
  94. l.info("updateTaskByTeacher " + tv);
  95. // check
  96. if (tv == null) {
  97. return AjaxResult.error("TaskVo empty!");
  98. }
  99. if (!simService.checkSimTypeOk(tv.getSimType())) {
  100. return AjaxResult.error("simType error!");
  101. }
  102. if (!Task.TASK_TYPE_TEACHER_ADD.equals(tv.getTaskType())) {
  103. return AjaxResult.error("taskType value error!");
  104. }
  105. if (StringUtils.isEmpty(tv.getName())) {
  106. return AjaxResult.error("name isEmpty!");
  107. }
  108. //
  109. tv.setCreateByUserId(SecurityUtils.getUserId());
  110. tv.setCreateBy(SecurityUtils.getUsername());
  111. tv.setCreateTime(DateUtils.getNowDate());
  112. tv.setUpdateBy(SecurityUtils.getUsername());
  113. tv.setUpdateTime(DateUtils.getNowDate());
  114. tv.setRemark("");
  115. tv.setUpdateTime(DateUtils.getNowDate());
  116. taskMapper.updateTask(tv);
  117. List<FaultTreeVo> selectedData = tv.getSelectedData();
  118. if (selectedData != null) {
  119. List<FaultTreeVo> list = FaultService.flatten(selectedData);
  120. for (FaultTreeVo ftv : list) {
  121. if (ftv == null) {
  122. continue;
  123. }
  124. if (!Fault.FAULT_TYPE_3.equals(ftv.getFaultType())) {
  125. continue;
  126. }
  127. TaskFault tf = ftv.getTaskFault();
  128. // check
  129. if (tf == null) {
  130. return AjaxResult.error("TaskFault empty!");
  131. }
  132. String flag = tf.getFlag();
  133. if (StringUtils.isEmpty(flag)) {
  134. return AjaxResult.error("flag empty!");
  135. }
  136. if (TaskFault.UNKNOWN.equals(flag)) {
  137. return AjaxResult.error("flag UNKNOWN!");
  138. }
  139. if (!TaskFault.YES.equals(flag) && !TaskFault.NO.equals(flag)) {
  140. return AjaxResult.error("flag must YES or NO!");
  141. }
  142. // todo:选中数量限制
  143. // todo:故障部位冲突
  144. tf.setTaskId(tv.getTaskId());
  145. taskFaultService.insertOrUpdateTaskFault(tf);
  146. }
  147. }
  148. return AjaxResult.success();
  149. }
  150. /**
  151. * 批量删除任务
  152. *
  153. * @param taskIds 需要删除的任务主键
  154. * @return 结果
  155. */
  156. @Transactional
  157. public AjaxResult deleteTaskByTaskIds(Long[] taskIds) {
  158. if (taskIds == null || taskIds.length == 0) {
  159. return AjaxResult.error("taskIds null!");
  160. }
  161. for (Long tId : taskIds) {
  162. taskMapper.deleteTaskByTaskId(tId);
  163. taskFaultService.deleteTaskFaultByTaskId(tId);
  164. }
  165. return AjaxResult.success();
  166. }
  167. /**
  168. * 删除任务信息
  169. *
  170. * @param taskId 任务主键
  171. * @return 结果
  172. */
  173. public int deleteTaskByTaskId(Long taskId) {
  174. return taskMapper.deleteTaskByTaskId(taskId);
  175. }
  176. /**
  177. * 新增任务
  178. *
  179. * @param tv 任务
  180. * @return 结果
  181. * todo:事务有问题。
  182. */
  183. @Transactional
  184. public AjaxResult insertTaskByTeacher(TaskVo tv) {
  185. l.info("insertTaskByTeacher " + tv);
  186. // check
  187. if (tv == null) {
  188. return AjaxResult.error("TaskVo empty!");
  189. }
  190. if (!simService.checkSimTypeOk(tv.getSimType())) {
  191. return AjaxResult.error("simType error!");
  192. }
  193. if (!Task.TASK_TYPE_TEACHER_ADD.equals(tv.getTaskType())) {
  194. return AjaxResult.error("taskType value error!");
  195. }
  196. if (StringUtils.isEmpty(tv.getName())) {
  197. return AjaxResult.error("name isEmpty!");
  198. }
  199. //
  200. tv.setCreateByUserId(SecurityUtils.getUserId());
  201. tv.setCreateBy(SecurityUtils.getUsername());
  202. tv.setCreateTime(DateUtils.getNowDate());
  203. tv.setUpdateBy(SecurityUtils.getUsername());
  204. tv.setUpdateTime(DateUtils.getNowDate());
  205. tv.setRemark("");
  206. taskMapper.insertTask(tv);
  207. List<FaultTreeVo> selectedData = tv.getSelectedData();
  208. if (selectedData != null) {
  209. List<FaultTreeVo> list = FaultService.flatten(selectedData);
  210. for (FaultTreeVo ftv : list) {
  211. if (ftv == null) {
  212. continue;
  213. }
  214. if (!Fault.FAULT_TYPE_3.equals(ftv.getFaultType())) {
  215. continue;
  216. }
  217. TaskFault tf = ftv.getTaskFault();
  218. // check
  219. if (tf == null) {
  220. return AjaxResult.error("TaskFault empty!");
  221. }
  222. String flag = tf.getFlag();
  223. if (StringUtils.isEmpty(flag)) {
  224. return AjaxResult.error("flag empty!");
  225. }
  226. if (TaskFault.UNKNOWN.equals(flag)) {
  227. return AjaxResult.error("flag UNKNOWN!");
  228. }
  229. if (!TaskFault.YES.equals(flag) && !TaskFault.NO.equals(flag)) {
  230. return AjaxResult.error("flag must YES or NO!");
  231. }
  232. // todo:选中数量限制
  233. // todo:故障部位冲突
  234. tf.setTaskId(tv.getTaskId());
  235. taskFaultService.insertOrUpdateTaskFault(tf);
  236. }
  237. }
  238. return AjaxResult.success();
  239. }
  240. /**
  241. * 为了新建,返回一个带tree结构的数据对象。
  242. *
  243. * @return 任务
  244. */
  245. public AjaxResult getInfoForAdd(String simType) {
  246. // check
  247. if (StringUtils.isEmpty(simType)) {
  248. return AjaxResult.error("simType empty!");
  249. }
  250. if (!simService.checkSimTypeOk(simType)) {
  251. return AjaxResult.error("simType value error!");
  252. }
  253. // query obj.
  254. Fault q = new Fault();
  255. q.setSimType(simType);
  256. List<FaultTreeVo> ftList = (List<FaultTreeVo>) faultService.selectAllTreeViaSimType(simType).get(AjaxResult.DATA_TAG);
  257. TaskVo t = new TaskVo();
  258. t.setTaskId(Task.EMPTY_TASK_ID);
  259. t.setSelectedData(ftList);
  260. return AjaxResult.success(t);
  261. }
  262. /**
  263. * 新增任务附带选择故障
  264. *
  265. * @param task 任务
  266. * @return 结果
  267. */
  268. @Transactional
  269. public int insertTaskWithFault(Task task) {
  270. Long taskId = task.getTaskId();
  271. if (selectTaskByTaskId(taskId) != null) {
  272. // 已经存在
  273. }
  274. task.setCreateTime(DateUtils.getNowDate());
  275. task.setUpdateTime(DateUtils.getNowDate());
  276. return taskMapper.insertTask(task);
  277. }
  278. }