package com.fdkankan.fusion.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fdkankan.fusion.entity.SceneFileBuild;
import com.fdkankan.fusion.mapper.ISceneFileBuildMapper;
import com.fdkankan.fusion.service.ISceneFileBuildService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
*
* 场景文件建模表 服务实现类
*
*
* @author
* @since 2025-03-05
*/
@Service
@Slf4j
public class SceneFileBuildServiceImpl extends ServiceImpl implements ISceneFileBuildService {
@Override
public String getBuildTimeByScene(String num, Integer isObj) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SceneFileBuild::getSceneNum,num);
wrapper.eq(SceneFileBuild::getBuildType,isObj == 0?"buildScene":"buildObj");
wrapper.orderByDesc(SceneFileBuild::getId);
List list = this.list(wrapper);
if(list!=null && !list.isEmpty()){
return list.get(0).getEndBuildTime();
}
return null;
}
@Override
public HashMap getBuildTimeByScene(List numList) {
HashMap map = new HashMap<>(numList.size());
if(numList.isEmpty()){
return map;
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.in(SceneFileBuild::getSceneNum,numList);
//wrapper.eq(SceneFileBuild::getBuildType,isObj == 0?"buildScene":"buildObj");
List list = this.list(wrapper);
for (SceneFileBuild sceneFileBuild : list) {
String buildType = sceneFileBuild.getBuildType();
if(map.get(sceneFileBuild.getSceneNum() + buildType) == null){
map.put(sceneFileBuild.getSceneNum() + buildType,sceneFileBuild);
}else {
SceneFileBuild o1 = map.get(sceneFileBuild.getSceneNum() + buildType);
if(o1.getId() >sceneFileBuild.getId()){
continue;
}
map.put(sceneFileBuild.getSceneNum() + buildType,sceneFileBuild);
}
}
return map;
}
@Override
public void updateTimeAndStatus(String sceneCode, int status, Date startTime, Date endTime, String buildType,String path) {
LambdaQueryWrapper qr = Wrappers.lambdaQuery();
qr.eq(SceneFileBuild::getSceneNum, sceneCode);
qr.eq(SceneFileBuild::getBuildType, buildType);
List list = this.list(qr);
if(list.isEmpty()){
SceneFileBuild sceneFileBuild = new SceneFileBuild();
sceneFileBuild.setSceneNum(sceneCode);
sceneFileBuild.setBuildType(buildType);
sceneFileBuild.setBuildStatus(status);
sceneFileBuild.setFileId(sceneCode);
sceneFileBuild.setStartBuildTime(new Date());
sceneFileBuild.setResultPath(path);
this.save(sceneFileBuild);
return;
}
LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate();
wrapper.eq(SceneFileBuild::getSceneNum, sceneCode);
wrapper.eq(SceneFileBuild::getBuildType, buildType);
wrapper.set(SceneFileBuild::getBuildStatus, status);
if (startTime != null) {
wrapper.set(SceneFileBuild::getStartBuildTime, startTime);
}
if (endTime != null) {
wrapper.set(SceneFileBuild::getEndBuildTime, endTime);
}
wrapper.isNull(SceneFileBuild::getDeleteFlag);
if (StringUtils.isNotBlank(sceneCode)){
boolean rows = update(wrapper); // 检查返回的影响行数
log.info("更新记录数: {}, sceneCode: {}, buildType: {}", rows, sceneCode, buildType);
}
}
}