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 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 numList = list.stream().map(v -> v.getNum()).collect(Collectors.toList()); List sceneList = sceneService.list(QueryWrapper.create().in(Scene::getSceneCode, numList).eq(Scene::getStatus, 2).eq(Scene::getDeleted, 0)); Map dbNumMap = sceneList.stream().collect(Collectors.toMap(v -> v.getSceneCode(), v -> v)); Set 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 list = EasyExcel.read("D:\\Downloads\\数据推送.xls").head(ZgxxzxPushLog.class).sheet().doReadSync(); System.out.println(123); } @Override public PageInfo 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 page = zgxxzxPushLogService.page(new Page<>(request.getPageNum(), request.getPageSize()), queryWrapper); return PageInfo.PageInfo(page); } @Override public void pushScene() { List 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 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 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); } }