|
@@ -0,0 +1,317 @@
|
|
|
+package com.persagy.dmp.rwd.edit.service;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
|
|
|
+import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
+import com.persagy.common.criteria.JacksonCriteria;
|
|
|
+import com.persagy.common.web.MapResponse;
|
|
|
+import com.persagy.dmp.common.excel.ExcelUtils;
|
|
|
+import com.persagy.dmp.common.excel.SheetReadInfo;
|
|
|
+import com.persagy.dmp.rwd.edit.config.web.UserUtils;
|
|
|
+import com.persagy.dmp.rwd.edit.entity.ClassDefChangeRecord;
|
|
|
+import com.persagy.dmp.rwd.edit.entity.FuncidDefChangeRecord;
|
|
|
+import com.persagy.dmp.rwd.edit.enumeration.EnumOperationType;
|
|
|
+import com.persagy.dmp.rwd.edit.enumeration.EnumVersionState;
|
|
|
+import com.persagy.dmp.rwd.enums.FuncidCategory;
|
|
|
+import com.persagy.dmp.rwd.enums.FuncidDataType;
|
|
|
+import com.persagy.dmp.rwd.enums.ObjType;
|
|
|
+import com.persagy.dmp.rwd.model.ClassDefModel;
|
|
|
+import com.persagy.dmp.rwd.model.FuncidDefModel;
|
|
|
+import org.apache.commons.collections.MapUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class UploadService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ClassDefChangeRecordService classDefChangeRecordService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FuncidDefChangeRecordService funcidDefChangeRecordService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ClassDefService classDefService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FuncidDefService funcidDefService;
|
|
|
+
|
|
|
+ public MapResponse upload(String type, MultipartFile file) throws Exception {
|
|
|
+ MapResponse response = new MapResponse();
|
|
|
+ if ("changeDataSave".equals(type)) {
|
|
|
+ return uploadCalendarReportSave(file);
|
|
|
+ }
|
|
|
+ response.setFail("type不存在");
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ private MapResponse uploadCalendarReportSave(MultipartFile file) throws Exception {
|
|
|
+ List<FuncidDefChangeRecord> funcidDefChangeRecordList = compareDataExcelReadFuncid(file);
|
|
|
+ List<ClassDefChangeRecord> classDefChangeRecordList = compareDataExcelReadClass(file);
|
|
|
+
|
|
|
+ for (ClassDefChangeRecord classDefChangeRecord : classDefChangeRecordList) {
|
|
|
+ classDefChangeRecordService.create(classDefChangeRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (FuncidDefChangeRecord funcidDefChangeRecord : funcidDefChangeRecordList) {
|
|
|
+ funcidDefChangeRecordService.create(funcidDefChangeRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new MapResponse();
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ClassDefChangeRecord> compareDataExcelReadClass(MultipartFile file) throws Exception {
|
|
|
+ JacksonCriteria criteria = JacksonCriteria.newInstance();
|
|
|
+ criteria.add("type", "common");
|
|
|
+ List<ClassDefModel> data = classDefService.queryClass(criteria).getData();
|
|
|
+ Map<String, ClassDefModel> classCodeMap = data.stream().collect(Collectors.toMap(ClassDefModel::getCode, Function.identity()));
|
|
|
+
|
|
|
+ SheetReadInfo info = new SheetReadInfo();
|
|
|
+ info.setStartRow(1);
|
|
|
+ info.add(0, "majorCode", "string");
|
|
|
+ info.add(2, "majorName", "string");
|
|
|
+ info.add(3, "systemCode", "string");
|
|
|
+ info.add(4, "systemAliasCode", "string");
|
|
|
+ info.add(6, "systemName", "string");
|
|
|
+ info.add(7, "equipmentCode", "string");
|
|
|
+ info.add(8, "equipmentAliasCode", "string");
|
|
|
+ info.add(10, "equipmentName", "string");
|
|
|
+ info.add(11, "componentCode", "string");
|
|
|
+ info.add(12, "componentAliasCode", "string");
|
|
|
+ info.add(14, "componentName", "string");
|
|
|
+
|
|
|
+ InputStream inputStream = file.getInputStream();
|
|
|
+ List<Map<String, Object>> result = ExcelUtils.read(inputStream, info);
|
|
|
+ List<ClassDefChangeRecord> classDefChangeRecordList = new ArrayList<>();
|
|
|
+ for (Map<String, Object> map : result) {
|
|
|
+ String majorCode = MapUtils.getString(map, "majorCode");
|
|
|
+ String systemCode = MapUtils.getString(map, "systemCode");
|
|
|
+ String systemAliasCode = MapUtils.getString(map, "systemAliasCode");
|
|
|
+ String systemName = MapUtils.getString(map, "systemName");
|
|
|
+ String equipmentCode = MapUtils.getString(map, "equipmentCode");
|
|
|
+ String equipmentAliasCode = MapUtils.getString(map, "equipmentAliasCode");
|
|
|
+ String equipmentName = MapUtils.getString(map, "equipmentName");
|
|
|
+ String componentCode = MapUtils.getString(map, "componentCode");
|
|
|
+ String componentAliasCode = MapUtils.getString(map, "componentAliasCode");
|
|
|
+ String componentName = MapUtils.getString(map, "componentName");
|
|
|
+ if (majorCode == null) {
|
|
|
+ throw new Exception("专业编码不可为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ ClassDefChangeRecord changeRecord = new ClassDefChangeRecord();
|
|
|
+ if (componentCode != null) {
|
|
|
+ getClassDefChangeRecord(classCodeMap, componentCode, componentName, componentAliasCode, componentName, ObjType.component, majorCode, systemCode, equipmentCode);
|
|
|
+ } else if (equipmentCode != null) {
|
|
|
+ getClassDefChangeRecord(classCodeMap, equipmentCode, equipmentName, equipmentAliasCode, equipmentName, ObjType.equipment, majorCode, systemCode, null);
|
|
|
+
|
|
|
+ } else if (systemCode != null) {
|
|
|
+ getClassDefChangeRecord(classCodeMap, systemCode, systemName, systemAliasCode, systemName, ObjType.system, majorCode, null, null);
|
|
|
+ }
|
|
|
+ classDefChangeRecordList.add(changeRecord);
|
|
|
+ }
|
|
|
+ return classDefChangeRecordList;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ClassDefChangeRecord getClassDefChangeRecord(Map<String, ClassDefModel> classCodeMap,
|
|
|
+ String code, String name, String aliasCode, String aliasName,
|
|
|
+ ObjType objType, String majorCode, String systemCode, String equipmentCode) {
|
|
|
+ ClassDefChangeRecord changeRecord = new ClassDefChangeRecord();
|
|
|
+ if (classCodeMap.containsKey(code)) {
|
|
|
+ ClassDefModel classDefModel = classCodeMap.get(code);
|
|
|
+ changeRecord.setCode(classDefModel.getCode());
|
|
|
+ changeRecord.setObjType(classDefModel.getObjType());
|
|
|
+ changeRecord.setName(classDefModel.getName());
|
|
|
+ changeRecord.setMajorCode(classDefModel.getMajorCode());
|
|
|
+ changeRecord.setSystemCode(classDefModel.getSystemCode());
|
|
|
+ changeRecord.setParentCode(classDefModel.getParentCode());
|
|
|
+ changeRecord.setType(classDefModel.getType());
|
|
|
+ changeRecord.setGroupCode(classDefModel.getGroupCode());
|
|
|
+ changeRecord.setProjectId(classDefModel.getProjectId());
|
|
|
+ changeRecord.setOperationUser(UserUtils.currentUserId() + "");
|
|
|
+ changeRecord.setOperationTime(new Date());
|
|
|
+ changeRecord.setValid(true);
|
|
|
+ changeRecord.setState(EnumVersionState.INIT);
|
|
|
+ changeRecord.setOperationType(EnumOperationType.update);
|
|
|
+ } else {
|
|
|
+ changeRecord.setCode(code);
|
|
|
+ changeRecord.setObjType(objType);
|
|
|
+ changeRecord.setName(name);
|
|
|
+ changeRecord.setMajorCode(majorCode);
|
|
|
+ changeRecord.setSystemCode(systemCode);
|
|
|
+ changeRecord.setEquipmentCode(equipmentCode);
|
|
|
+ changeRecord.setParentCode(objType.toString());
|
|
|
+ changeRecord.setType("common");
|
|
|
+ changeRecord.setGroupCode("0");
|
|
|
+ changeRecord.setProjectId("0");
|
|
|
+ changeRecord.setOperationUser(UserUtils.currentUserId() + "");
|
|
|
+ changeRecord.setOperationTime(new Date());
|
|
|
+ changeRecord.setValid(true);
|
|
|
+ changeRecord.setState(EnumVersionState.INIT);
|
|
|
+ changeRecord.setOperationType(EnumOperationType.create);
|
|
|
+ }
|
|
|
+ changeRecord.setAliasCode(aliasCode);
|
|
|
+ changeRecord.setAliasName(name);
|
|
|
+ return changeRecord;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<FuncidDefChangeRecord> compareDataExcelReadFuncid(MultipartFile file) throws Exception {
|
|
|
+ Map<String, FuncidDefModel> funcidDefMap = new HashMap<>();
|
|
|
+ SheetReadInfo info = new SheetReadInfo();
|
|
|
+ info.setStartRow(1);
|
|
|
+ info.add(0, "classCode", "string");
|
|
|
+ info.add(2, "firstTag", "string");
|
|
|
+ info.add(3, "secondTag", "string");
|
|
|
+ info.add(4, "code", "string");
|
|
|
+ info.add(5, "aliasCode", "string");
|
|
|
+ info.add(6, "name", "string");
|
|
|
+ info.add(7, "category", "string");
|
|
|
+ info.add(8, "priority", "string");
|
|
|
+ info.add(9, "unit", "string");
|
|
|
+ info.add(10, "dataType", "string");
|
|
|
+ info.add(11, "isMultiple", "integer");
|
|
|
+ info.add(12, "isRegion", "integer");
|
|
|
+ info.add(13, "dataSource", "string");
|
|
|
+ info.add(14, "formater", "string");
|
|
|
+ info.add(15, "note", "string");
|
|
|
+
|
|
|
+ InputStream inputStream = file.getInputStream();
|
|
|
+ List<Map<String, Object>> result = ExcelUtils.read(inputStream, info);
|
|
|
+ List<FuncidDefChangeRecord> funcidDefChangeRecordList = new ArrayList<>();
|
|
|
+ for (Map<String, Object> map : result) {
|
|
|
+ String classCode = MapUtils.getString(map, "classCode");
|
|
|
+ String firstTag = MapUtils.getString(map, "firstTag");
|
|
|
+ String secondTag = MapUtils.getString(map, "secondTag");
|
|
|
+ String code = MapUtils.getString(map, "code");
|
|
|
+ String aliasCode = MapUtils.getString(map, "aliasCode");
|
|
|
+ String name = MapUtils.getString(map, "name");
|
|
|
+ String category = MapUtils.getString(map, "category");
|
|
|
+ String priority = MapUtils.getString(map, "priority");
|
|
|
+ String unit = MapUtils.getString(map, "unit");
|
|
|
+ String dataType = MapUtils.getString(map, "dataType");
|
|
|
+ Boolean isMultiple = MapUtils.getBoolean(map, "isMultiple");
|
|
|
+ Boolean isRegion = MapUtils.getBoolean(map, "isRegion");
|
|
|
+ String dataSource = MapUtils.getString(map, "dataSource");
|
|
|
+ String formater = MapUtils.getString(map, "formater");
|
|
|
+ String note = MapUtils.getString(map, "note");
|
|
|
+
|
|
|
+ if (classCode == null) {
|
|
|
+ throw new Exception("类型编码不可为空");
|
|
|
+ }
|
|
|
+ if (code == null) {
|
|
|
+ throw new Exception("信息点编码不可为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!funcidDefMap.containsKey(code)) {
|
|
|
+ JacksonCriteria criteria = JacksonCriteria.newInstance();
|
|
|
+ criteria.add("type", "common");
|
|
|
+ criteria.add("code", code);
|
|
|
+ criteria.add("classCode", classCode);
|
|
|
+ List<FuncidDefModel> data = funcidDefService.queryFuncid(criteria).getData();
|
|
|
+ Map<String, FuncidDefModel> dataMap = data.stream().collect(Collectors.toMap(FuncidDefModel::getCode, Function.identity()));
|
|
|
+ funcidDefMap.putAll(dataMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ FuncidDefChangeRecord changeRecord = new FuncidDefChangeRecord();
|
|
|
+ if (funcidDefMap.containsKey(code)) {
|
|
|
+ FuncidDefModel funcidDefModel = funcidDefMap.get(code);
|
|
|
+ changeRecord.setCode(funcidDefModel.getCode());
|
|
|
+ changeRecord.setName(funcidDefModel.getName());
|
|
|
+ changeRecord.setClassCode(funcidDefModel.getClassCode());
|
|
|
+ changeRecord.setCategory(funcidDefModel.getCategory());
|
|
|
+ changeRecord.setPriority(funcidDefModel.getPriority());
|
|
|
+ changeRecord.setUnit(funcidDefModel.getUnit());
|
|
|
+ changeRecord.setDataType(funcidDefModel.getDataType());
|
|
|
+ changeRecord.setIsMultiple(funcidDefModel.getIsMultiple());
|
|
|
+ changeRecord.setIsRegion(funcidDefModel.getIsRegion());
|
|
|
+ changeRecord.setFormater(funcidDefModel.getFormater());
|
|
|
+ changeRecord.setType(funcidDefModel.getType());
|
|
|
+ changeRecord.setGroupCode(funcidDefModel.getGroupCode());
|
|
|
+ changeRecord.setProjectId(funcidDefModel.getProjectId());
|
|
|
+ changeRecord.setOperationUser(UserUtils.currentUserId() + "");
|
|
|
+ changeRecord.setOperationTime(new Date());
|
|
|
+ changeRecord.setValid(true);
|
|
|
+ changeRecord.setState(EnumVersionState.INIT);
|
|
|
+ changeRecord.setOperationType(EnumOperationType.update);
|
|
|
+ } else {
|
|
|
+ changeRecord.setCode(code);
|
|
|
+ changeRecord.setName(name);
|
|
|
+ changeRecord.setClassCode(classCode);
|
|
|
+ changeRecord.setCategory(FuncidCategory.valueOf(category));
|
|
|
+ changeRecord.setPriority(priority);
|
|
|
+ changeRecord.setUnit(unit);
|
|
|
+ changeRecord.setDataType(FuncidDataType.valueOf(dataType));
|
|
|
+ changeRecord.setIsMultiple(isMultiple);
|
|
|
+ changeRecord.setIsRegion(isRegion);
|
|
|
+ changeRecord.setFormater(formater);
|
|
|
+ changeRecord.setType("common");
|
|
|
+ changeRecord.setGroupCode("0");
|
|
|
+ changeRecord.setProjectId("0");
|
|
|
+ changeRecord.setOperationUser(UserUtils.currentUserId() + "");
|
|
|
+ changeRecord.setOperationTime(new Date());
|
|
|
+ changeRecord.setValid(true);
|
|
|
+ changeRecord.setState(EnumVersionState.INIT);
|
|
|
+ changeRecord.setOperationType(EnumOperationType.create);
|
|
|
+
|
|
|
+ //处理数据源
|
|
|
+ if (dataSource != null) {
|
|
|
+ dataSource = dataSource.replace(". ", ".");
|
|
|
+ dataSource = dataSource.replace(",", ",");
|
|
|
+ String[] split = dataSource.split(" ");
|
|
|
+ if (split.length != 0) {
|
|
|
+ ArrayNode array = JsonNodeFactory.instance.arrayNode();
|
|
|
+ if (dataType.equals(FuncidDataType.ENUM.toString())) {
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ String temp = split[i];
|
|
|
+ int idx = temp.indexOf(".");
|
|
|
+ if (idx == -1) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String key = temp.substring(0, idx);
|
|
|
+ String value = temp.substring(idx + 1);
|
|
|
+ ObjectNode item = array.addObject();
|
|
|
+ item.put("code", key);
|
|
|
+ item.put("name", value);
|
|
|
+ changeRecord.setDataSource(array);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ String temp = split[i];
|
|
|
+ int idx = temp.indexOf(",");
|
|
|
+ String key = temp.substring(0, idx);
|
|
|
+ String value = temp.substring(idx + 1);
|
|
|
+ ObjectNode item = array.addObject();
|
|
|
+ if (key.startsWith("(")) {
|
|
|
+ key = key.replace("(", "");
|
|
|
+ item.put("$gt", key);
|
|
|
+ } else if (key.startsWith("[")) {
|
|
|
+ key = key.replace("[", "");
|
|
|
+ item.put("$gte", key);
|
|
|
+ } else if (value.endsWith(")")) {
|
|
|
+ value = value.replace(")", "");
|
|
|
+ item.put("$lt", value);
|
|
|
+ } else if (value.endsWith("]")) {
|
|
|
+ value = value.replace("]", "");
|
|
|
+ item.put("$lte", value);
|
|
|
+ }
|
|
|
+ changeRecord.setDataSource(array);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ changeRecord.setAliasCode(aliasCode);
|
|
|
+ changeRecord.setAliasName(name);
|
|
|
+ changeRecord.setNote(note);
|
|
|
+ changeRecord.setFirstTag(firstTag);
|
|
|
+ changeRecord.setSecondTag(secondTag);
|
|
|
+ funcidDefChangeRecordList.add(changeRecord);
|
|
|
+ }
|
|
|
+ return funcidDefChangeRecordList;
|
|
|
+ }
|
|
|
+}
|