同步BIM协同管理平台进度信息接口
This commit is contained in:
parent
567a611f44
commit
e382e9bd88
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -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<ProgressTaskMapper, Pro
|
||||
@Value("${basePath}")
|
||||
private String basePath;
|
||||
|
||||
@Autowired
|
||||
private AsyBim asyBim;
|
||||
/**
|
||||
* 匹配楼层正则
|
||||
*/
|
||||
public Pattern floorPattern = Pattern.compile("[-]?\\d+F");
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void importData(MultipartFile mppFile, String projectSn, Long createUserId) {
|
||||
log.info("用户id:{},执行上传mpp文件操作", createUserId);
|
||||
// 删除之前的数据 需要前端确认是否删除 否则安全性较差
|
||||
List<ProgressTask> 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<BIMProgressTaskRqBody> deleteList = getProgressTaskRqBodyData(progressTasks);
|
||||
if (CollUtil.isNotEmpty(deleteList)) {
|
||||
for (BIMProgressTaskRqBody body : deleteList) {
|
||||
asyBim.asynDeleteProgressTask(body.getFloor(), body.getMajor());
|
||||
}
|
||||
}
|
||||
|
||||
Collection<ProgressTask> progressTaskList = analysisMpp(mppFile, projectSn, createUserId);
|
||||
log.info("importData的新增数据:{}", progressTaskList);
|
||||
if (CollUtil.isNotEmpty(progressTaskList)) {
|
||||
progressTaskMapper.insertBatch(progressTaskList);
|
||||
|
||||
//调用BIM同步添加数据
|
||||
List<BIMProgressTaskRqBody> bimProgressTaskRqBodies = getProgressTaskRqBodyData(progressTasks);
|
||||
if (CollUtil.isNotEmpty(bimProgressTaskRqBodies)) {
|
||||
for (BIMProgressTaskRqBody bimProgressTaskRqBody : bimProgressTaskRqBodies) {
|
||||
asyBim.asynAddProgressTask(bimProgressTaskRqBody);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算BIM同步添加数据
|
||||
*
|
||||
* @param progressTasks
|
||||
* @return
|
||||
*/
|
||||
private List<BIMProgressTaskRqBody> getProgressTaskRqBodyData(List<ProgressTask> progressTasks) {
|
||||
ArrayList<BIMProgressTaskRqBody> bimProgressTaskRqBodies = new ArrayList<>();
|
||||
Map<Long, ProgressTask> 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<ProgressTaskMapper, Pro
|
||||
return progressTaskMapper.getDetailsById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProgressTask(ProgressTask progressTask) {
|
||||
ProgressTask old = progressTaskMapper.selectById(progressTask.getId());
|
||||
log.info("old的ProgressTask:{}", JSON.toJSONString(old));
|
||||
// 前置任务循环引用校验,赋值对应的负责人名称
|
||||
checkSaveParam(progressTask);
|
||||
predecessorIdsVerification(progressTask);
|
||||
setDutyUserName(progressTask);
|
||||
progressTaskMapper.updateById(progressTask);
|
||||
|
||||
//同步数据到bim,先删除再更新bim
|
||||
if (progressTask.getParentId() != 0) {
|
||||
ProgressTask top = progressTaskMapper.selectById(progressTask.getParentId());
|
||||
String floorName = getFloorName(old);
|
||||
if (floorName != null) {
|
||||
asyBim.asynDeleteProgressTask(floorName, top.getTaskName());
|
||||
}
|
||||
String newFloorName = getFloorName(progressTask);
|
||||
if (newFloorName != null) {
|
||||
BIMProgressTaskRqBody body = new BIMProgressTaskRqBody();
|
||||
body.setFloor(newFloorName);
|
||||
body.setMajor(top.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);
|
||||
asyBim.asynAddProgressTask(body);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addProgressTask(ProgressTask progressTask) {
|
||||
checkSaveParam(progressTask);
|
||||
@ -261,13 +386,12 @@ public class ProgressTaskServiceImpl extends ServiceImpl<ProgressTaskMapper, Pro
|
||||
progressTaskMapper.insert(progressTask);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProgressTask(ProgressTask progressTask) {
|
||||
// 前置任务循环引用校验,赋值对应的负责人名称
|
||||
checkSaveParam(progressTask);
|
||||
predecessorIdsVerification(progressTask);
|
||||
setDutyUserName(progressTask);
|
||||
progressTaskMapper.updateById(progressTask);
|
||||
private String getFloorName(ProgressTask progressTask) {
|
||||
Matcher matcher = floorPattern.matcher(progressTask.getTaskName());
|
||||
if (matcher.find()) {
|
||||
return matcher.group();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user