| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- package com.fdkankan.external.service.impl;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.date.DateTime;
- import cn.hutool.core.io.FileUtil;
- import cn.hutool.core.lang.UUID;
- import cn.hutool.core.util.StrUtil;
- import com.alibaba.excel.EasyExcel;
- import com.fdkankan.common.constant.CommonOperStatus;
- import com.fdkankan.common.constant.CommonStatus;
- import com.fdkankan.common.constant.CommonSuccessStatus;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.common.util.DateExtUtil;
- import com.fdkankan.external.bean.ScenePushBean;
- import com.fdkankan.external.entity.Department;
- import com.fdkankan.external.entity.Scene;
- import com.fdkankan.external.entity.ZgxxzxPushLog;
- import com.fdkankan.external.httpclient.XxzxClient;
- import com.fdkankan.external.request.TaskPageRequest;
- import com.fdkankan.external.response.PageInfo;
- import com.fdkankan.external.service.*;
- import com.fdkankan.web.response.ResultData;
- import com.mybatisflex.core.paginate.Page;
- import com.mybatisflex.core.query.QueryWrapper;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- import javax.annotation.Resource;
- import java.io.File;
- import java.io.IOException;
- import java.util.*;
- import java.util.stream.Collectors;
- @Slf4j
- @Service
- public class XinxizhongxinServiceImpl implements XinxizhongxinService {
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private ISceneService sceneService;
- @Autowired
- private IZgxxzxPushLogService zgxxzxPushLogService;
- @Autowired
- private ISceneOfflinePackagePushService sceneOfflinePackagePushService;
- @Autowired
- private IDepartmentService departmentService;
- @Resource
- private XxzxClient xxzxClient;
- @Override
- public void importExcel(MultipartFile file) throws IOException {
- String uuid = UUID.randomUUID().toString();
- String s = FileUtil.extName(file.getOriginalFilename());
- File tempFile = FileUtil.createTempFile(uuid, "." + s, new File("/home/backend/4dkankan_v4/external/tmp"), true);
- FileUtil.mkParentDirs(tempFile);
- file.transferTo(tempFile);
- // 这里 需要指定读用哪个class去读,然后读取第一个sheet 同步读取会自动finish
- List<ZgxxzxPushLog> list = null;
- try {
- list = EasyExcel.read(tempFile).head(ZgxxzxPushLog.class).sheet().doReadSync();
- list = list.stream().filter(v->StrUtil.isNotEmpty(v.getNum())).collect(Collectors.toList());
- if (CollUtil.isEmpty(list)) {
- throw new BusinessException(ErrorCode.SYSTEM_ERROR.code(), "表格模板或填写错误");
- }
- }catch (Exception e){
- throw new BusinessException(ErrorCode.SYSTEM_ERROR.code(), "表格模板或填写错误");
- }
- List<String> numList = list.stream().map(v -> v.getNum()).collect(Collectors.toList());
- List<Scene> sceneList = sceneService.list(QueryWrapper.create().in(Scene::getSceneCode, numList).eq(Scene::getStatus, 2).eq(Scene::getDeleted, 0));
- Map<String, Scene> dbNumMap = sceneList.stream().collect(Collectors.toMap(v -> v.getSceneCode(), v -> v));
- Set<String> errorNumList = numList.stream().filter(num -> !dbNumMap.keySet().contains(num)).collect(Collectors.toSet());
- if (CollUtil.isNotEmpty(errorNumList)) {
- StringBuffer sb = new StringBuffer("以下场景不存在或错误:");
- errorNumList.stream().forEach(v -> sb.append(v).append("、"));
- throw new BusinessException(ErrorCode.SYSTEM_ERROR.code(), sb.toString());
- }
- list.stream().forEach(v -> {
- Scene scene = dbNumMap.get(v.getNum());
- v.setTitle(scene.getTitle());
- v.setStatus(CommonOperStatus.WAITING.code());
- v.setTaskId(UUID.fastUUID().toString());
- });
- zgxxzxPushLogService.saveBatch(list);
- }
- public static void main(String[] args) {
- List<ZgxxzxPushLog> list = EasyExcel.read("D:\\Downloads\\数据推送.xls").head(ZgxxzxPushLog.class).sheet().doReadSync();
- System.out.println(123);
- }
- @Override
- public PageInfo<ZgxxzxPushLog> taskList(TaskPageRequest request) {
- QueryWrapper queryWrapper = QueryWrapper.create().orderBy(ZgxxzxPushLog::getId, false);
- if (StrUtil.isNotEmpty(request.getNum())) {
- queryWrapper.like(ZgxxzxPushLog::getNum, request.getNum());
- }
- if (StrUtil.isNotEmpty(request.getTitle())) {
- queryWrapper.like(ZgxxzxPushLog::getTitle, request.getTitle());
- }
- if (request.getStatus() == 0) {
- queryWrapper.in(ZgxxzxPushLog::getStatus, 0, 2);
- }
- if (request.getStatus() == 1) {
- queryWrapper.in(ZgxxzxPushLog::getStatus, -1, 1);
- }
- Page<ZgxxzxPushLog> page = zgxxzxPushLogService.page(new Page<>(request.getPageNum(), request.getPageSize()), queryWrapper);
- return PageInfo.PageInfo(page);
- }
- @Override
- public void pushScene() {
- List<ZgxxzxPushLog> list = zgxxzxPushLogService.list(
- QueryWrapper.create().eq(ZgxxzxPushLog::getStatus, CommonOperStatus.WAITING.code())
- .orderBy(ZgxxzxPushLog::getId, true));
- if (CollUtil.isEmpty(list)) {
- return;
- }
- Department zgwwxxzx = departmentService.getByCode("zgwwxxzx");
- if (zgwwxxzx == null) {
- return;
- }
- for (ZgxxzxPushLog zgxxzxPushLog : list) {
- ScenePushBean pushBean = ScenePushBean.builder()
- .taskId(zgxxzxPushLog.getTaskId())
- .num(zgxxzxPushLog.getNum()).zipType("laser")
- .version(Calendar.getInstance().getTimeInMillis())
- .destUrl(zgwwxxzx.getDestUrl()).build();
- zgxxzxPushLog.setStatus(2);
- try {
- zgxxzxPushLogService.updateById(zgxxzxPushLog);
- sceneOfflinePackagePushService.scenePushHandler(pushBean);
- } catch (Exception e) {
- log.error("场景推送失败,num:{}", zgxxzxPushLog.getNum(), e);
- zgxxzxPushLog.setStatus(CommonOperStatus.FAILD.code());
- zgxxzxPushLogService.updateById(zgxxzxPushLog);
- }
- }
- }
- @Override
- public void syncPushResult() {
- List<ZgxxzxPushLog> list = zgxxzxPushLogService.list(
- QueryWrapper.create().eq(ZgxxzxPushLog::getStatus, 2)
- .orderBy(ZgxxzxPushLog::getId, true));
- if (CollUtil.isEmpty(list)) {
- return;
- }
- Department zgwwxxzx = departmentService.getByCode("zgwwxxzx");
- for (ZgxxzxPushLog zgxxzxPushLog : list) {
- ResultData<Integer> resultData = xxzxClient.getDeployStatus(zgwwxxzx.getDestUrl() + "/historyrical/scene/getDeployStatus?taskId=" + zgxxzxPushLog.getTaskId());
- Integer status = resultData.getData();
- if(status == CommonSuccessStatus.WAITING.code()){
- DateTime dateTime = DateExtUtil.offsetDay(new Date(), -7);
- if(zgxxzxPushLog.getCreateTime().before(dateTime)){//7天都还没部署成功的,值为失败
- zgxxzxPushLog.setStatus(CommonSuccessStatus.FAIL.code());
- }else{
- continue;
- }
- }else{
- zgxxzxPushLog.setStatus(status);
- }
- zgxxzxPushLog.setUpdateTime(null);
- }
- zgxxzxPushLogService.updateBatch(list);
- }
- @Override
- public void cancelTask(Integer id) {
- ZgxxzxPushLog zgxxzxPushLog = zgxxzxPushLogService.getById(id);
- if(zgxxzxPushLog == null || zgxxzxPushLog.getStatus() != CommonSuccessStatus.WAITING.code()){
- throw new BusinessException(ErrorCode.FILE_NOT_EXIST.code(), "任务不存在或者非等待状态,无法取消");
- }
- zgxxzxPushLog.setStatus(3);
- zgxxzxPushLogService.updateById(zgxxzxPushLog);
- }
- }
|