diff --git a/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java b/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java index cb373eacf..f657e71c2 100644 --- a/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java +++ b/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java @@ -304,4 +304,23 @@ public class AsyncConfig { executor.initialize(); return executor; } + + @Bean("bimExecutor") + public ThreadPoolTaskExecutor bimExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + /** 核心线程数(默认线程数) */ + executor.setCorePoolSize(corePoolSize); + /** 最大线程数 */ + executor.setMaxPoolSize(maxPoolSize); + executor.setQueueCapacity(2000); + /** 允许线程空闲时间(单位:默认为秒) */ + executor.setKeepAliveSeconds(60); + /** 线程池名前缀 */ + executor.setThreadNamePrefix("bimExecutor-"); + // 线程池对拒绝任务的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 初始化 + executor.initialize(); + return executor; + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/BIMProgressTaskRqBody.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/BIMProgressTaskRqBody.java new file mode 100644 index 000000000..5453a1fca --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/BIMProgressTaskRqBody.java @@ -0,0 +1,45 @@ +package com.zhgd.xmgl.modules.project.entity; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.util.Date; + +/** + * BIM协同管理平台进度信息的保存接口发送body + */ +@Data +public class BIMProgressTaskRqBody { + /** + * floor 是 String 楼层-->例如:"floor": "B1" + */ + private String floor; + /** + * major 是 String 专业-->例如:"major": "结构" + */ + private String major; + /** + * planStartTime 是 Date 计划开始时间-->例如:"planStartTime": "2023-02-27 06:42:46" + */ + private String planStartTime; + /** + * planFinishTime 是 Date 计划完成时间-->例如:"planFinishTime": "2023-02-27 06:42:46" + */ + private String planFinishTime; + /** + * actualStartTime 否 Date 实际开始时间-->例如:"actualStartTime": "2023-02-27 06:42:46" + */ + private String actualStartTime; + /** + * actualFinishTime 否 Date 实际完成时间-->例如:"actualFinishTime": "2023-02-27 06:42:46" + */ + private String actualFinishTime; + /** + * status 是 Integer 当前状态-->例如:"status": 2(0-未开始,1-已开始,2-已结束,3-已滞后) + */ + private Integer status; + /** + * sign 是 String 校验码-->例如:"sign": "842e133f81eb3506f60877652000a9fa" + */ + private String sign; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/AsyBim.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/AsyBim.java new file mode 100644 index 000000000..e7e4779b5 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/AsyBim.java @@ -0,0 +1,80 @@ +package com.zhgd.xmgl.modules.project.service.impl; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.zhgd.xmgl.modules.project.entity.BIMProgressTaskRqBody; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +/** + * 异步调用bim + */ +@Component +@Slf4j +public class AsyBim { + + @Async("bimExecutor") + public void asynAddProgressTask(BIMProgressTaskRqBody bimProgressTaskRqBody) { + String url = "http://47.105.67.193:8086/Other/SaveProgress"; + String body = JSON.toJSONString(bimProgressTaskRqBody); + log.info("http调用bim保存进度:url:{},body:{}", url, body); + String rs = HttpUtil.post(url, body); + log.info("http调用bim保存进度结果:{}", rs); + /* + 结果: + { +     "code": 200, +     "message": "操作成功", +   "data": { +         "id": null, +         "floor": "B1", +  "major": "结构", +         "planStartTime": "2023-02-27 06:42:46", +         "planFinishTime": "2023-02-27 06:42:46", +         "actualStartTime": "2023-02-27 06:42:46", +         "actualFinishTime": "2023-02-27 06:42:46", +  "status": 2, + +         "sign": "1c9a43792523e78e5f0c015f6f67c164" +     } + } + + + + { +     "code": 500, +     "message": "校验码不正确", +   "data": { +         null +     } + } + */ + } + + @Async("bimExecutor") + public void asynDeleteProgressTask(String floor, String major) { + String url = "http://47.105.67.193:8086/Other/DeleteProgress?floor=" + floor + "&major=" + major; + log.info("http调用bim删除进度:url:{}", url); + String rs = HttpUtil.post(url, new HashMap<>()); + log.info("http调用bim删除进度结果:{}", rs); + /* + 结果: + { +     "code": 200, +     "message": "操作成功", +    "data": 1  + } + + { +     "code": 500, +     "message": "操作失败", +    "data": 1 + } + */ + } + + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProgressTaskServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProgressTaskServiceImpl.java index 80c78abbd..de842f514 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProgressTaskServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProgressTaskServiceImpl.java @@ -5,14 +5,17 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gexin.fastjson.JSON; import com.zhgd.jeecg.common.execption.ExistException; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.mapper.SystemUserMapper; import com.zhgd.xmgl.modules.basicdata.service.UploadFileService; import com.zhgd.xmgl.modules.project.constants.ProgressTaskConstant; +import com.zhgd.xmgl.modules.project.entity.BIMProgressTaskRqBody; import com.zhgd.xmgl.modules.project.entity.ProgressTask; import com.zhgd.xmgl.modules.project.entity.dto.ProgressTaskPredecessorDTO; import com.zhgd.xmgl.modules.project.entity.vo.ActualProgressVO; @@ -33,6 +36,8 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -57,20 +62,106 @@ public class ProgressTaskServiceImpl extends ServiceImpl progressTasks = progressTaskMapper.selectList(Wrappers.lambdaQuery(ProgressTask.class).eq(ProgressTask::getProjectSn, projectSn)); + log.info("原progressTasks:{}", JSON.toJSONString(progressTasks)); progressTaskMapper.delete(Wrappers.lambdaQuery(ProgressTask.class).eq(ProgressTask::getProjectSn, projectSn)); + //调用BIM同步删除数据 + List deleteList = getProgressTaskRqBodyData(progressTasks); + if (CollUtil.isNotEmpty(deleteList)) { + for (BIMProgressTaskRqBody body : deleteList) { + asyBim.asynDeleteProgressTask(body.getFloor(), body.getMajor()); + } + } Collection progressTaskList = analysisMpp(mppFile, projectSn, createUserId); log.info("importData的新增数据:{}", progressTaskList); if (CollUtil.isNotEmpty(progressTaskList)) { progressTaskMapper.insertBatch(progressTaskList); + + //调用BIM同步添加数据 + List bimProgressTaskRqBodies = getProgressTaskRqBodyData(progressTasks); + if (CollUtil.isNotEmpty(bimProgressTaskRqBodies)) { + for (BIMProgressTaskRqBody bimProgressTaskRqBody : bimProgressTaskRqBodies) { + asyBim.asynAddProgressTask(bimProgressTaskRqBody); + } + } } } + /** + * 计算BIM同步添加数据 + * + * @param progressTasks + * @return + */ + private List getProgressTaskRqBodyData(List progressTasks) { + ArrayList bimProgressTaskRqBodies = new ArrayList<>(); + Map topIdMap = progressTasks.stream().filter(progressTask -> progressTask.getParentId().equals(0L)) + .collect(Collectors.toMap(ProgressTask::getId, progressTask -> progressTask)); + if (CollUtil.isNotEmpty(topIdMap)) { + for (ProgressTask progressTask : progressTasks) { + ProgressTask pt = topIdMap.get(progressTask.getParentId()); + Matcher matcher = floorPattern.matcher(progressTask.getTaskName()); + if (matcher.find()) { + BIMProgressTaskRqBody body = new BIMProgressTaskRqBody(); + body.setFloor(matcher.group()); + body.setMajor(pt.getTaskName()); + body.setPlanStartTime(getDateFormatForBimAddProgressTask(progressTask.getStartDate())); + body.setPlanFinishTime(getDateFormatForBimAddProgressTask(progressTask.getFinishDate())); + body.setActualStartTime(getDateFormatForBimAddProgressTask(progressTask.getActualStartDate())); + body.setActualFinishTime(getDateFormatForBimAddProgressTask(progressTask.getActualFinishDate())); + body.setStatus(progressTask.getStatus()); + String sign = getBimProgressTaskRqBodyMd5Sign(body); + body.setSign(sign); + bimProgressTaskRqBodies.add(body); + } + } + } + return bimProgressTaskRqBodies; + } + + /** + * 获取bim的添加进度管理的md5签名 + * + * @param body + * @return + */ + private String getBimProgressTaskRqBodyMd5Sign(BIMProgressTaskRqBody body) { + String str = "floor=" + body.getFloor() + + "&major=" + body.getMajor() + + "&planStartTime=" + body.getPlanStartTime() + + "&planFinishTime=" + body.getPlanFinishTime() + + "&actualStartTime=" + body.getActualStartTime() + + "&actualFinishTime=" + body.getActualFinishTime() + + "&status=" + body.getStatus() + + "&salt=%%jh9jh&*jh45&&^%^^hjjh5686ghhgghHGHGHJ9889@##$--==-uiiuhj"; + System.out.println(str); + String md5 = SecureUtil.md5(str); + return md5; + } + + /** + * 获取bim的添加进度管理的格式的日期 + * + * @param date + * @return + */ + private String getDateFormatForBimAddProgressTask(Date date) { + return DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"); + } /** * 解析mpp文件 @@ -254,6 +345,40 @@ public class ProgressTaskServiceImpl extends ServiceImpl