XinxizhongxinServiceImpl.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.fdkankan.external.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.date.DateTime;
  4. import cn.hutool.core.io.FileUtil;
  5. import cn.hutool.core.lang.UUID;
  6. import cn.hutool.core.util.StrUtil;
  7. import com.alibaba.excel.EasyExcel;
  8. import com.fdkankan.common.constant.CommonOperStatus;
  9. import com.fdkankan.common.constant.CommonStatus;
  10. import com.fdkankan.common.constant.CommonSuccessStatus;
  11. import com.fdkankan.common.constant.ErrorCode;
  12. import com.fdkankan.common.exception.BusinessException;
  13. import com.fdkankan.common.util.DateExtUtil;
  14. import com.fdkankan.external.bean.ScenePushBean;
  15. import com.fdkankan.external.entity.Department;
  16. import com.fdkankan.external.entity.Scene;
  17. import com.fdkankan.external.entity.ZgxxzxPushLog;
  18. import com.fdkankan.external.httpclient.XxzxClient;
  19. import com.fdkankan.external.request.TaskPageRequest;
  20. import com.fdkankan.external.response.PageInfo;
  21. import com.fdkankan.external.service.*;
  22. import com.fdkankan.web.response.ResultData;
  23. import com.mybatisflex.core.paginate.Page;
  24. import com.mybatisflex.core.query.QueryWrapper;
  25. import lombok.extern.slf4j.Slf4j;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Service;
  28. import org.springframework.web.multipart.MultipartFile;
  29. import javax.annotation.Resource;
  30. import java.io.File;
  31. import java.io.IOException;
  32. import java.util.*;
  33. import java.util.stream.Collectors;
  34. @Slf4j
  35. @Service
  36. public class XinxizhongxinServiceImpl implements XinxizhongxinService {
  37. @Autowired
  38. private IScenePlusService scenePlusService;
  39. @Autowired
  40. private ISceneService sceneService;
  41. @Autowired
  42. private IZgxxzxPushLogService zgxxzxPushLogService;
  43. @Autowired
  44. private ISceneOfflinePackagePushService sceneOfflinePackagePushService;
  45. @Autowired
  46. private IDepartmentService departmentService;
  47. @Resource
  48. private XxzxClient xxzxClient;
  49. @Override
  50. public void importExcel(MultipartFile file) throws IOException {
  51. String uuid = UUID.randomUUID().toString();
  52. String s = FileUtil.extName(file.getOriginalFilename());
  53. File tempFile = FileUtil.createTempFile(uuid, "." + s, new File("/home/backend/4dkankan_v4/external/tmp"), true);
  54. FileUtil.mkParentDirs(tempFile);
  55. file.transferTo(tempFile);
  56. // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish
  57. List<ZgxxzxPushLog> list = null;
  58. try {
  59. list = EasyExcel.read(tempFile).head(ZgxxzxPushLog.class).sheet().doReadSync();
  60. list = list.stream().filter(v->StrUtil.isNotEmpty(v.getNum())).collect(Collectors.toList());
  61. if (CollUtil.isEmpty(list)) {
  62. throw new BusinessException(ErrorCode.SYSTEM_ERROR.code(), "表格模板或填写错误");
  63. }
  64. }catch (Exception e){
  65. throw new BusinessException(ErrorCode.SYSTEM_ERROR.code(), "表格模板或填写错误");
  66. }
  67. List<String> numList = list.stream().map(v -> v.getNum()).collect(Collectors.toList());
  68. List<Scene> sceneList = sceneService.list(QueryWrapper.create().in(Scene::getSceneCode, numList).eq(Scene::getStatus, 2).eq(Scene::getDeleted, 0));
  69. Map<String, Scene> dbNumMap = sceneList.stream().collect(Collectors.toMap(v -> v.getSceneCode(), v -> v));
  70. Set<String> errorNumList = numList.stream().filter(num -> !dbNumMap.keySet().contains(num)).collect(Collectors.toSet());
  71. if (CollUtil.isNotEmpty(errorNumList)) {
  72. StringBuffer sb = new StringBuffer("以下场景不存在或错误:");
  73. errorNumList.stream().forEach(v -> sb.append(v).append("、"));
  74. throw new BusinessException(ErrorCode.SYSTEM_ERROR.code(), sb.toString());
  75. }
  76. list.stream().forEach(v -> {
  77. Scene scene = dbNumMap.get(v.getNum());
  78. v.setTitle(scene.getTitle());
  79. v.setStatus(CommonOperStatus.WAITING.code());
  80. v.setTaskId(UUID.fastUUID().toString());
  81. });
  82. zgxxzxPushLogService.saveBatch(list);
  83. }
  84. public static void main(String[] args) {
  85. List<ZgxxzxPushLog> list = EasyExcel.read("D:\\Downloads\\数据推送.xls").head(ZgxxzxPushLog.class).sheet().doReadSync();
  86. System.out.println(123);
  87. }
  88. @Override
  89. public PageInfo<ZgxxzxPushLog> taskList(TaskPageRequest request) {
  90. QueryWrapper queryWrapper = QueryWrapper.create().orderBy(ZgxxzxPushLog::getId, false);
  91. if (StrUtil.isNotEmpty(request.getNum())) {
  92. queryWrapper.like(ZgxxzxPushLog::getNum, request.getNum());
  93. }
  94. if (StrUtil.isNotEmpty(request.getTitle())) {
  95. queryWrapper.like(ZgxxzxPushLog::getTitle, request.getTitle());
  96. }
  97. if (request.getStatus() == 0) {
  98. queryWrapper.in(ZgxxzxPushLog::getStatus, 0, 2);
  99. }
  100. if (request.getStatus() == 1) {
  101. queryWrapper.in(ZgxxzxPushLog::getStatus, -1, 1);
  102. }
  103. Page<ZgxxzxPushLog> page = zgxxzxPushLogService.page(new Page<>(request.getPageNum(), request.getPageSize()), queryWrapper);
  104. return PageInfo.PageInfo(page);
  105. }
  106. @Override
  107. public void pushScene() {
  108. List<ZgxxzxPushLog> list = zgxxzxPushLogService.list(
  109. QueryWrapper.create().eq(ZgxxzxPushLog::getStatus, CommonOperStatus.WAITING.code())
  110. .orderBy(ZgxxzxPushLog::getId, true));
  111. if (CollUtil.isEmpty(list)) {
  112. return;
  113. }
  114. Department zgwwxxzx = departmentService.getByCode("zgwwxxzx");
  115. if (zgwwxxzx == null) {
  116. return;
  117. }
  118. for (ZgxxzxPushLog zgxxzxPushLog : list) {
  119. ScenePushBean pushBean = ScenePushBean.builder()
  120. .taskId(zgxxzxPushLog.getTaskId())
  121. .num(zgxxzxPushLog.getNum()).zipType("laser")
  122. .version(Calendar.getInstance().getTimeInMillis())
  123. .destUrl(zgwwxxzx.getDestUrl()).build();
  124. zgxxzxPushLog.setStatus(2);
  125. try {
  126. zgxxzxPushLogService.updateById(zgxxzxPushLog);
  127. sceneOfflinePackagePushService.scenePushHandler(pushBean);
  128. } catch (Exception e) {
  129. log.error("场景推送失败,num:{}", zgxxzxPushLog.getNum(), e);
  130. zgxxzxPushLog.setStatus(CommonOperStatus.FAILD.code());
  131. zgxxzxPushLogService.updateById(zgxxzxPushLog);
  132. }
  133. }
  134. }
  135. @Override
  136. public void syncPushResult() {
  137. List<ZgxxzxPushLog> list = zgxxzxPushLogService.list(
  138. QueryWrapper.create().eq(ZgxxzxPushLog::getStatus, 2)
  139. .orderBy(ZgxxzxPushLog::getId, true));
  140. if (CollUtil.isEmpty(list)) {
  141. return;
  142. }
  143. Department zgwwxxzx = departmentService.getByCode("zgwwxxzx");
  144. for (ZgxxzxPushLog zgxxzxPushLog : list) {
  145. ResultData<Integer> resultData = xxzxClient.getDeployStatus(zgwwxxzx.getDestUrl() + "/historyrical/scene/getDeployStatus?taskId=" + zgxxzxPushLog.getTaskId());
  146. Integer status = resultData.getData();
  147. if(status == CommonSuccessStatus.WAITING.code()){
  148. DateTime dateTime = DateExtUtil.offsetDay(new Date(), -7);
  149. if(zgxxzxPushLog.getCreateTime().before(dateTime)){//7天都还没部署成功的,值为失败
  150. zgxxzxPushLog.setStatus(CommonSuccessStatus.FAIL.code());
  151. }else{
  152. continue;
  153. }
  154. }else{
  155. zgxxzxPushLog.setStatus(status);
  156. }
  157. zgxxzxPushLog.setUpdateTime(null);
  158. }
  159. zgxxzxPushLogService.updateBatch(list);
  160. }
  161. @Override
  162. public void cancelTask(Integer id) {
  163. ZgxxzxPushLog zgxxzxPushLog = zgxxzxPushLogService.getById(id);
  164. if(zgxxzxPushLog == null || zgxxzxPushLog.getStatus() != CommonSuccessStatus.WAITING.code()){
  165. throw new BusinessException(ErrorCode.FILE_NOT_EXIST.code(), "任务不存在或者非等待状态,无法取消");
  166. }
  167. zgxxzxPushLog.setStatus(3);
  168. zgxxzxPushLogService.updateById(zgxxzxPushLog);
  169. }
  170. }