feat:数据字典和表单导出导入

This commit is contained in:
2025-12-25 20:00:05 +08:00
parent 9e85144f1e
commit acc7a1c1d9
12 changed files with 347 additions and 3 deletions

View File

@@ -345,7 +345,7 @@ public class SimulationParameterLibraryServiceImpl extends ServiceImpl<Simulatio
}
Map<Long, String> longStringMap = userNameCacheService.batchGetUserNames(userIdsSet);
for (Map<String, Object> map : parameterJsonValueFromJsonNode) {
map.put("creator", longStringMap.get((Long) map.get("creatorId")));
map.put("createName", longStringMap.get((Long) map.get("creatorId")));
simulationParameterLibraryCategoryObjectResp.setCreateTime(simulationParameterLibraryCategoryObject.getCreateTime());
}
}

View File

@@ -1696,7 +1696,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
log.error("同步CID项目{}时,创建文件夹失败,原因为:{}",req.getProjectId() + " " + req.getProjectName(),response.getMessage());
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
resp.setCode(String.valueOf(ResultCode.FAILED.getCode()));
resp.setMessage(ResultCode.FAILED.getMessage());
resp.setMessage(response.getMessage());
return resp;
}
}catch (Exception ex) {

View File

@@ -1440,7 +1440,7 @@ public class TaskServiceImpl implements ITaskService {
log.error("同步CID项目{}时,创建文件夹失败,原因为:{}", req.getProjectId() + " " + req.getProjectName(), response.getMessage());
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
resp.setCode(String.valueOf(ResultCode.FAILED.getCode()));
resp.setMessage(ResultCode.FAILED.getMessage());
resp.setMessage(response.getMessage());
return resp;
}
// 更新文件权限

View File

@@ -1,26 +1,53 @@
package com.sdm.system.controller;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.feign.inter.system.ISysConfigFeignClient;
import com.sdm.common.entity.bo.DataDictionary;
import com.sdm.common.log.utils.JavaTimeModule;
import com.sdm.system.model.bo.DictionaryClass;
import com.sdm.system.model.bo.FormConfigure;
import com.sdm.system.model.entity.SysDataDictionary;
import com.sdm.system.model.entity.SysDictionaryClass;
import com.sdm.system.model.entity.SysFormConfigure;
import com.sdm.system.model.req.system.FormConfigureReq;
import com.sdm.system.model.resp.SimuDictionaryResp;
import com.sdm.system.service.IDataDictionaryService;
import com.sdm.system.service.IDictionaryClassService;
import com.sdm.system.service.IFormConfigureService;
import com.sdm.system.service.ISimulationSystemConfigService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/systemData")
@Slf4j
public class SimulationSystemConfigController implements ISysConfigFeignClient {
@Autowired
private ISimulationSystemConfigService service;
@Autowired
private IFormConfigureService formConfigureService;
@Autowired
private IDictionaryClassService dictionaryClassService;
@Autowired
private IDataDictionaryService dataDictionaryService;
@PostMapping(value = "/addDictionaryData")
@ResponseBody
SdmResponse addDictionaryData(@RequestBody DataDictionary dict)
@@ -154,5 +181,133 @@ public class SimulationSystemConfigController implements ISysConfigFeignClient {
return service.listFormConfigure(req);
}
@GetMapping("/exportSysFormConfigure")
public void exportSysFormConfigure(HttpServletResponse response) throws IOException {
// 导出为JSON文件
List<SysFormConfigure> sysFormConfigureList = formConfigureService.lambdaQuery().eq(SysFormConfigure::getTenantId, ThreadLocalContext.getTenantId()).list();
// List<SysFormConfigure> sysFormConfigureList = formConfigureService.list();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=form_configure_" + System.currentTimeMillis() + ".json");
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.writerWithDefaultPrettyPrinter().writeValue(response.getWriter(), sysFormConfigureList);
}
/**
* 通过JSON文件导入表单数据
*/
@PostMapping("/uploadSysFormConfigure")
public SdmResponse uploadSysFormConfigure(@RequestParam("file") MultipartFile file) {
try {
String jsonContent = new String(file.getBytes(), StandardCharsets.UTF_8);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// 解析JSON
List<SysFormConfigure> sysFormConfigureList = mapper.readValue(jsonContent, new TypeReference<List<SysFormConfigure>>() {});
if (sysFormConfigureList == null || sysFormConfigureList.isEmpty()) {
return SdmResponse.failed("JSON数据为空");
}
log.info("开始导入sysFormConfigureList数据共 {} 条", sysFormConfigureList.size());
// 清空原有数据
formConfigureService.lambdaUpdate().eq(SysFormConfigure::getTenantId, ThreadLocalContext.getTenantId()).remove();
// formConfigureService.remove(Wrappers.emptyWrapper());
// 批量插入
formConfigureService.saveBatch(sysFormConfigureList);
return SdmResponse.success();
} catch (Exception e) {
return SdmResponse.failed("导入失败: " + e.getMessage());
}
}
@GetMapping("/exportSysDictionaryClass")
public void exportSysDictionaryClass(HttpServletResponse response) throws IOException {
// 导出为JSON文件
List<SysDictionaryClass> sysDictionaryClassList = dictionaryClassService.lambdaQuery().eq(SysDictionaryClass::getTenantId, String.valueOf(ThreadLocalContext.getTenantId())).list();
// List<SysDictionaryClass> sysDictionaryClassList = dictionaryClassService.list();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=dictionary_class_" + System.currentTimeMillis() + ".json");
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.writerWithDefaultPrettyPrinter().writeValue(response.getWriter(), sysDictionaryClassList);
}
/**
* 通过JSON文件导入表单数据
*/
@PostMapping("/uploadSysDictionaryClass")
public SdmResponse uploadSysDictionaryClass(@RequestParam("file") MultipartFile file) {
try {
String jsonContent = new String(file.getBytes(), StandardCharsets.UTF_8);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// 解析JSON
List<SysDictionaryClass> sysDictionaryClassList = mapper.readValue(jsonContent, new TypeReference<List<SysDictionaryClass>>() {});
if (sysDictionaryClassList == null || sysDictionaryClassList.isEmpty()) {
return SdmResponse.failed("JSON数据为空");
}
log.info("开始导入sysDictionaryClassList数据共 {} 条", sysDictionaryClassList.size());
// 清空原有数据
dictionaryClassService.lambdaUpdate().eq(SysDictionaryClass::getTenantId, String.valueOf(ThreadLocalContext.getTenantId())).remove();
// dictionaryClassService.remove(Wrappers.emptyWrapper());
// 批量插入
dictionaryClassService.saveBatch(sysDictionaryClassList);
return SdmResponse.success();
} catch (Exception e) {
return SdmResponse.failed("导入失败: " + e.getMessage());
}
}
@GetMapping("/exportSysDataDictionary")
public void exportSysDataDictionary(HttpServletResponse response) throws IOException {
// 导出为JSON文件
List<SysDataDictionary> sysDataDictionaryList = dataDictionaryService.lambdaQuery().eq(SysDataDictionary::getTenantId, ThreadLocalContext.getTenantId()).list();
// List<SysDataDictionary> sysDataDictionaryList = dataDictionaryService.list();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=data_dictionary_" + System.currentTimeMillis() + ".json");
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.writerWithDefaultPrettyPrinter().writeValue(response.getWriter(), sysDataDictionaryList);
}
/**
* 通过JSON文件导入表单数据
*/
@PostMapping("/uploadSysDataDictionary")
public SdmResponse uploadSysDataDictionary(@RequestParam("file") MultipartFile file) {
try {
String jsonContent = new String(file.getBytes(), StandardCharsets.UTF_8);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// 解析JSON
List<SysDataDictionary> sysDataDictionaryList = mapper.readValue(jsonContent, new TypeReference<List<SysDataDictionary>>() {});
if (sysDataDictionaryList == null || sysDataDictionaryList.isEmpty()) {
return SdmResponse.failed("JSON数据为空");
}
log.info("开始导入sysDataDictionaryList数据共 {} 条", sysDataDictionaryList.size());
// 清空原有数据
dataDictionaryService.lambdaUpdate().eq(SysDataDictionary::getTenantId, ThreadLocalContext.getTenantId()).remove();
// dataDictionaryService.remove(Wrappers.emptyWrapper());
// 批量插入
dataDictionaryService.saveBatch(sysDataDictionaryList);
return SdmResponse.success();
} catch (Exception e) {
return SdmResponse.failed("导入失败: " + e.getMessage());
}
}
}

View File

@@ -0,0 +1,8 @@
package com.sdm.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.system.model.entity.SysDataDictionary;
public interface DataDictionaryMapper extends BaseMapper<SysDataDictionary> {
}

View File

@@ -0,0 +1,8 @@
package com.sdm.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.system.model.entity.SysDictionaryClass;
public interface DictionaryClassMapper extends BaseMapper<SysDictionaryClass> {
}

View File

@@ -0,0 +1,74 @@
package com.sdm.system.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_data_dictionary")
@ApiModel(value="SysDataDictionary对象", description="")
public class SysDataDictionary implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "表单ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@Schema(description = "字典ID")
private String uuid;
@Schema(description = "字典名称")
@TableField("dictName")
private String dictName;
@Schema(description = "字典值")
@TableField("dictValue")
private String dictValue;
@Schema(description = "字典值类型")
@TableField("valueType")
private String valueType;
@Schema(description = "字典别名")
@TableField("aliasName")
private String aliasName;
@Schema(description = "排序序号")
@TableField("dictOrder")
private Integer dictOrder;
@Schema(description = "字典分类名称")
@TableField("dictClass")
private String dictClass;
@Schema(description = "字典分类类型")
@TableField("classType")
private String classType;
@Schema(description = "描述信息")
@TableField("comment")
private String comment;
@Schema(description = "所属租户ID")
@TableField("tenantId")
private Long tenantId;
@Schema(description = "创建人")
@TableField("creator")
private Long creator;
}

View File

@@ -0,0 +1,59 @@
package com.sdm.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_dictionary_class")
@ApiModel(value="SysDictionaryClass对象", description="")
public class SysDictionaryClass implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "字典ID")
@TableId(value = "uuid")
private String uuid;
@Schema(description = "分类名称")
@TableField("className")
private String className;
@Schema(description = "分类类别")
@TableField("classType")
private String classType;
@Schema(description = "分类标题")
@TableField("titleName")
private String titleName;
@Schema(description = "所属租户ID")
@TableField("tenantId")
private String tenantId;
@Schema(description = "描述信息")
@TableField("comment")
private String comment;
@Schema(description = "创建人")
@TableField("creator")
private Long creator;
@Schema(description = "创建时间")
@TableField("createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,8 @@
package com.sdm.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.system.model.entity.SysDataDictionary;
public interface IDataDictionaryService extends IService<SysDataDictionary> {
}

View File

@@ -0,0 +1,8 @@
package com.sdm.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.system.model.entity.SysDictionaryClass;
public interface IDictionaryClassService extends IService<SysDictionaryClass> {
}

View File

@@ -0,0 +1,12 @@
package com.sdm.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.system.dao.DataDictionaryMapper;
import com.sdm.system.model.entity.SysDataDictionary;
import com.sdm.system.service.IDataDictionaryService;
import org.springframework.stereotype.Service;
@Service
public class IDataDictionaryServiceImpl extends ServiceImpl<DataDictionaryMapper, SysDataDictionary> implements IDataDictionaryService {
}

View File

@@ -0,0 +1,12 @@
package com.sdm.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.system.dao.DictionaryClassMapper;
import com.sdm.system.model.entity.SysDictionaryClass;
import com.sdm.system.service.IDictionaryClassService;
import org.springframework.stereotype.Service;
@Service
public class IDictionaryClassServiceImpl extends ServiceImpl<DictionaryClassMapper, SysDictionaryClass> implements IDictionaryClassService {
}