上线版本6.0
This commit is contained in:
parent
27c5a0317f
commit
20d92d7153
@ -1,5 +1,6 @@
|
|||||||
package com.xdap.self_development;
|
package com.xdap.self_development;
|
||||||
|
|
||||||
|
import com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobAutoConfiguration;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
|
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
|
||||||
@ -10,7 +11,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
|||||||
|
|
||||||
@EnableCaching
|
@EnableCaching
|
||||||
@SpringBootApplication(
|
@SpringBootApplication(
|
||||||
exclude = {EmbeddedMongoAutoConfiguration.class}
|
exclude = {EmbeddedMongoAutoConfiguration.class, PowerJobAutoConfiguration.class}
|
||||||
)
|
)
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
|
|||||||
@ -4,14 +4,18 @@ package com.xdap.self_development.controller;
|
|||||||
import com.definesys.mpaas.common.http.Response;
|
import com.definesys.mpaas.common.http.Response;
|
||||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||||
import com.xdap.self_development.controller.request.EngineParamDetailRequest;
|
import com.xdap.self_development.controller.request.EngineParamDetailRequest;
|
||||||
|
import com.xdap.self_development.domain.dto.EngineDeptUpdateDTO;
|
||||||
import com.xdap.self_development.domain.dto.EngineParamDetailDTO;
|
import com.xdap.self_development.domain.dto.EngineParamDetailDTO;
|
||||||
import com.xdap.self_development.domain.pojo.EngineParamDetailPojo;
|
import com.xdap.self_development.domain.pojo.EngineParamDetailPojo;
|
||||||
|
import com.xdap.self_development.exception.CommonException;
|
||||||
import com.xdap.self_development.service.EngineParamDetailService;
|
import com.xdap.self_development.service.EngineParamDetailService;
|
||||||
|
import org.springframework.validation.BindingResult;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotEmpty;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -31,6 +35,24 @@ public class EngineParamDetailController {
|
|||||||
@Resource
|
@Resource
|
||||||
private EngineParamDetailService engineParamDetailService;
|
private EngineParamDetailService engineParamDetailService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新部门
|
||||||
|
*
|
||||||
|
* @return 操作结果响应
|
||||||
|
*/
|
||||||
|
@PostMapping("/updateDept")
|
||||||
|
public Response updateDept(
|
||||||
|
@Valid @RequestBody EngineDeptUpdateDTO engineDeptUpdateDTO,
|
||||||
|
BindingResult bindingResult
|
||||||
|
) {
|
||||||
|
if (bindingResult.hasErrors()) {
|
||||||
|
bindingResult.getFieldErrors().forEach(error -> {
|
||||||
|
throw new CommonException(error.getDefaultMessage());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
engineParamDetailService.updateDept(engineDeptUpdateDTO);
|
||||||
|
return Response.ok().data("更新部门成功");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 参数列表查询
|
* 参数列表查询
|
||||||
|
|||||||
@ -140,7 +140,7 @@ public class TemplateController {
|
|||||||
@RequestPart("userId") String userId
|
@RequestPart("userId") String userId
|
||||||
) {
|
) {
|
||||||
MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId, userId);
|
MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId, userId);
|
||||||
if (templateImportProblemView.isFlag()) {
|
if (!templateImportProblemView.getErrors().isEmpty()) {
|
||||||
return Response.error("导入异常").data(templateImportProblemView);
|
return Response.error("导入异常").data(templateImportProblemView);
|
||||||
} else {
|
} else {
|
||||||
return Response.ok().setMessage("导入成功");
|
return Response.ok().setMessage("导入成功");
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.xdap.self_development.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotEmpty;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class EngineDeptUpdateDTO {
|
||||||
|
@NotBlank(message = "机型ID不能为空")
|
||||||
|
private String modelId;
|
||||||
|
@NotBlank(message = "用户ID不能为空")
|
||||||
|
private String userId;
|
||||||
|
@NotEmpty(message = "列表不能为空")
|
||||||
|
private List<EngineDeptUpdateItem> list;
|
||||||
|
}
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
package com.xdap.self_development.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class EngineDeptUpdateItem {
|
||||||
|
@NotBlank(message = "参数ID不能为空")
|
||||||
|
private String paramId;
|
||||||
|
@NotBlank(message = "部门不能为空")
|
||||||
|
private String department;
|
||||||
|
}
|
||||||
@ -25,6 +25,10 @@ public class AnalysisModelParamterView {
|
|||||||
* 模型名称
|
* 模型名称
|
||||||
*/
|
*/
|
||||||
private String modelName;
|
private String modelName;
|
||||||
|
/**
|
||||||
|
* 状态代号
|
||||||
|
*/
|
||||||
|
private String productNumber;
|
||||||
/**
|
/**
|
||||||
* 平台
|
* 平台
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import com.xdap.self_development.domain.pojo.ClassificationAttributePojo;
|
|||||||
import com.xdap.self_development.domain.pojo.EnginePartsCollectionPojo;
|
import com.xdap.self_development.domain.pojo.EnginePartsCollectionPojo;
|
||||||
import com.xdap.self_development.domain.view.CalculationParameterView;
|
import com.xdap.self_development.domain.view.CalculationParameterView;
|
||||||
import com.xdap.self_development.exception.CommonException;
|
import com.xdap.self_development.exception.CommonException;
|
||||||
import com.xdap.self_development.utils.FormulaValidatorUtils;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -15,7 +14,8 @@ import javax.annotation.PostConstruct;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.script.ScriptEngine;
|
import javax.script.ScriptEngine;
|
||||||
import javax.script.ScriptEngineManager;
|
import javax.script.ScriptEngineManager;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -35,20 +35,45 @@ public class ParameterValueCalculationTimer {
|
|||||||
scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
|
scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Map<String, Map<String, String>> convertMap(
|
||||||
|
List<CalculationParameterView> list
|
||||||
|
) {
|
||||||
|
if (list == null) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return list.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.filter(param -> param.getParameterValue() != null)
|
||||||
|
.filter(param -> !"公式计算".equals(param.getParameterSource()))
|
||||||
|
.filter(item -> item.getParameterName() != null && item.getModelId() != null)
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
CalculationParameterView::getParameterName,
|
||||||
|
Collectors.toMap(
|
||||||
|
CalculationParameterView::getModelId,
|
||||||
|
item -> item.getParameterValue() != null ? item.getParameterValue() : item.getParameterName(),
|
||||||
|
(existing, replacement) -> replacement
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
// 每天凌晨执行一次
|
// 每天凌晨执行一次
|
||||||
@Scheduled(cron = "0 0 0 * * ?")
|
@Scheduled(cron = "0 0 0 * * ?")
|
||||||
@Transactional
|
@Transactional
|
||||||
public void dailyCalculate() {
|
public void dailyCalculate() {
|
||||||
|
|
||||||
LocalDate today = LocalDate.now();
|
log.info("开始执行{}参数计算任务", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||||
log.info("开始执行{}参数计算任务", today);
|
|
||||||
|
|
||||||
// 统计信息
|
// 统计信息
|
||||||
int totalParameters;
|
int totalParameters;
|
||||||
int tcParameters = 0;
|
int tcParameters = 0;
|
||||||
int calculatedParameters = 0;
|
int calculatedParameters;
|
||||||
int updatedFromTC = 0;
|
int updatedFromTC = 0;
|
||||||
int failedToUpdateFromTC = 0;
|
int failedToUpdateFromTC = 0;
|
||||||
|
int successCount = 0;
|
||||||
|
int failureCount = 0;
|
||||||
|
int updatedCount = 0;
|
||||||
|
int dbUpdateFailures = 0;
|
||||||
|
|
||||||
List<CalculationParameterView> toUpdate = new ArrayList<>();
|
List<CalculationParameterView> toUpdate = new ArrayList<>();
|
||||||
|
|
||||||
@ -102,93 +127,138 @@ public class ParameterValueCalculationTimer {
|
|||||||
|
|
||||||
log.info("从中台更新参数完成,共处理{}个TC参数,成功{}个,失败{}个", tcParameters, updatedFromTC, failedToUpdateFromTC);
|
log.info("从中台更新参数完成,共处理{}个TC参数,成功{}个,失败{}个", tcParameters, updatedFromTC, failedToUpdateFromTC);
|
||||||
|
|
||||||
// 3.维护所有参数的原始值
|
// 3.构建初始值映射 —— 仅包含非公式参数
|
||||||
Map<String, Map<String, String>> originalValueMap = convertMap(parameterValues);
|
Map<String, Map<String, String>> currentValues = convertMap(parameterValues);
|
||||||
|
|
||||||
// 4.构建参数名列表,按长度降序排列
|
// 4. 分离出所有“公式计算”类型的参数
|
||||||
List<String> parameterNames = originalValueMap.keySet().stream()
|
List<CalculationParameterView> formulaParamsList = parameterValues.stream()
|
||||||
.sorted((a, b) -> Integer.compare(b.length(), a.length()))
|
.filter(p -> "公式计算".equals(p.getParameterSource()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
calculatedParameters = formulaParamsList.size();
|
||||||
|
|
||||||
|
// 5. 多轮迭代计算
|
||||||
|
int round = 0;
|
||||||
|
final int MAX_ROUNDS = 5;
|
||||||
|
boolean changed;
|
||||||
|
Set<String> computedKeys = new HashSet<>();
|
||||||
|
Map<String, String> errors = new HashMap<>();
|
||||||
|
|
||||||
|
do {
|
||||||
|
changed = false;
|
||||||
|
round++;
|
||||||
|
|
||||||
|
for (CalculationParameterView param : formulaParamsList) {
|
||||||
|
String modelId = param.getModelId();
|
||||||
|
String paramName = param.getParameterName();
|
||||||
|
String paramId = param.getParameterId();
|
||||||
|
String key = modelId + "|" + paramId + "|" + paramName;
|
||||||
|
|
||||||
|
// 跳过已成功计算的
|
||||||
|
if (computedKeys.contains(key)) continue;
|
||||||
|
|
||||||
// 5.遍历参数,计算需运算的参数值
|
|
||||||
int successCount = 0;
|
|
||||||
int failureCount = 0;
|
|
||||||
for (CalculationParameterView parameterValue : parameterValues) {
|
|
||||||
if (Objects.equals(parameterValue.getParameterSource(), "公式计算")) {
|
|
||||||
calculatedParameters++;
|
|
||||||
String formula = parameterValue.getNumberOrFormula();
|
|
||||||
String modelId = parameterValue.getModelId();
|
|
||||||
try {
|
try {
|
||||||
String replacedFormula = replaceParametersInFormula(formula, parameterNames, originalValueMap, modelId, parameterValue.getParameterName());
|
String replacedFormula = replaceParametersInFormula(
|
||||||
log.debug("机型【{}】的参数【{}】替换公式:{} -> {}",parameterValue.getProductNumber(), parameterValue.getParameterName(), formula, replacedFormula);
|
param.getNumberOrFormula(),
|
||||||
|
currentValues, // 只包含原始输入 + 已算出的公式值
|
||||||
|
modelId,
|
||||||
|
paramName
|
||||||
|
);
|
||||||
|
|
||||||
Double result = calculateExpression(replacedFormula);
|
Double result = calculateExpression(replacedFormula);
|
||||||
|
if (result == null) {
|
||||||
|
errors.put(key, "替换公式:'" + replacedFormula + "'无法计算" + ",原公式为:'" + param.getNumberOrFormula() + "'");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
String formattedResult = String.format("%.2f", result);
|
String formattedResult = String.format("%.2f", result);
|
||||||
parameterValue.setParameterValue(formattedResult);
|
|
||||||
toUpdate.add(parameterValue);
|
// 更新内存中的值
|
||||||
log.info("机型【{}】的参数【{}】计算结果:{}",parameterValue.getProductNumber(), parameterValue.getParameterName(), formattedResult);
|
currentValues.computeIfAbsent(paramName, k -> new HashMap<>()).put(modelId, formattedResult);
|
||||||
successCount++;
|
param.setParameterValue(formattedResult);
|
||||||
|
|
||||||
|
computedKeys.add(key);
|
||||||
|
changed = true;
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("机型【{}】的参数【{}】计算失败:{},公式:{},模型ID:{}",parameterValue.getProductNumber(),
|
// 暂不报错,留到最后一轮统一处理
|
||||||
parameterValue.getParameterName(), e.getMessage(), formula, modelId, e);
|
|
||||||
parameterValue.setParameterValue(null);
|
|
||||||
toUpdate.add(parameterValue); // 仍然添加到更新列表,用于更新null值
|
|
||||||
failureCount++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} while (changed && round < MAX_ROUNDS);
|
||||||
|
|
||||||
|
// 6. 标记最终失败的参数
|
||||||
|
for (CalculationParameterView param : formulaParamsList) {
|
||||||
|
String key = param.getModelId() + "|" + param.getParameterId() + "|" + param.getParameterName();
|
||||||
|
if (computedKeys.contains(key)) {
|
||||||
|
successCount++;
|
||||||
|
toUpdate.add(param);
|
||||||
|
} else {
|
||||||
|
String err = errors.get(key);
|
||||||
|
if (err != null) {
|
||||||
|
log.error("机型【{}】的参数【{}】最终计算失败,{}",
|
||||||
|
param.getProductNumber(), param.getParameterName(), err);
|
||||||
|
} else {
|
||||||
|
log.error("机型【{}】的参数【{}】最终计算失败,无具体错误信息",
|
||||||
|
param.getProductNumber(), param.getParameterName());
|
||||||
|
}
|
||||||
|
param.setParameterValue(null);
|
||||||
|
toUpdate.add(param);
|
||||||
|
failureCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("公式计算参数完成,共处理{}个计算参数,成功{}个,失败{}个", calculatedParameters, successCount, failureCount);
|
log.info("公式计算参数完成,共处理{}个计算参数,成功{}个,失败{}个", calculatedParameters, successCount, failureCount);
|
||||||
|
|
||||||
// 批量插入或更新计算结果
|
// 7. 批量更新数据库
|
||||||
int updatedCount = 0;
|
|
||||||
int dbUpdateFailures = 0;
|
|
||||||
if (!toUpdate.isEmpty()) {
|
if (!toUpdate.isEmpty()) {
|
||||||
for (CalculationParameterView parameterValue : toUpdate) {
|
for (CalculationParameterView param : toUpdate) {
|
||||||
try {
|
try {
|
||||||
if (parameterValue.getParameterValue() != null) {
|
if (param.getParameterValue() != null) {
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
.table("engine_param_detail")
|
.table("engine_param_detail")
|
||||||
.eq("id", parameterValue.getId())
|
.eq("id", param.getId())
|
||||||
.update("parameter_value", parameterValue.getParameterValue())
|
.update("parameter_value", param.getParameterValue())
|
||||||
.doUpdate();
|
|
||||||
} else {
|
|
||||||
// 对于计算失败的参数,也更新为null值
|
|
||||||
bd.getBusinessDatabase()
|
|
||||||
.table("engine_param_detail")
|
|
||||||
.eq("id", parameterValue.getId())
|
|
||||||
.update("parameter_value", null)
|
|
||||||
.doUpdate();
|
.doUpdate();
|
||||||
}
|
}
|
||||||
updatedCount++;
|
updatedCount++;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("参数【{}】更新数据库失败:{}", parameterValue.getParameterName(), e.getMessage(), e);
|
log.error("参数【{}】更新数据库失败:{}", param.getParameterName(), e.getMessage(), e);
|
||||||
dbUpdateFailures++;
|
dbUpdateFailures++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("{}参数计算完成,成功处理{}个参数,失败{}个参数,更新{}个参数,数据库更新失败{}个",
|
log.info("{}参数计算完成,成功处理{}个参数,失败{}个参数,更新{}个参数,数据库更新失败{}个",
|
||||||
today, successCount, failureCount, updatedCount, dbUpdateFailures);
|
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), successCount, failureCount, updatedCount, dbUpdateFailures);
|
||||||
} else {
|
} else {
|
||||||
log.info("{}参数计算完成,无需更新任何参数", today);
|
log.info("{}参数计算完成,无需更新任何参数", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加汇总信息
|
|
||||||
log.info("{}参数计算任务结束,总参数数{},TC参数{}(成功{},失败{}),计算参数{}(成功{},失败{}),数据库更新{}(失败{})",
|
log.info("{}参数计算任务结束,总参数数{},TC参数{}(成功{},失败{}),计算参数{}(成功{},失败{}),数据库更新{}(失败{})",
|
||||||
today, totalParameters, tcParameters, updatedFromTC, failedToUpdateFromTC,
|
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), totalParameters, tcParameters, updatedFromTC, failedToUpdateFromTC,
|
||||||
calculatedParameters, successCount, failureCount, updatedCount, dbUpdateFailures);
|
calculatedParameters, successCount, failureCount, updatedCount, dbUpdateFailures);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String replaceParametersInFormula(String formula, List<String> parameterNames,
|
private String replaceParametersInFormula(String formula,
|
||||||
Map<String, Map<String, String>> valueMap, String modelId, String currentParameterName) {
|
Map<String, Map<String, String>> currentValueMap,
|
||||||
List<String> formulaParams = FormulaValidatorUtils.extractParameters(formula);
|
String modelId,
|
||||||
String result = formula;
|
String currentParamName) {
|
||||||
result = result.replace("π", "PI").replace("PI", "Math.PI");
|
String result = formula.replace("π", "Math.PI");
|
||||||
result = result.replace("e", "Math.E");
|
|
||||||
for (String paramName : formulaParams) {
|
// 获取所有已知参数名,按长度降序
|
||||||
if (!parameterNames.contains(paramName) || Objects.equals(paramName, currentParameterName)) continue;
|
List<String> knownParams = currentValueMap.keySet().stream()
|
||||||
String pattern = "\\b" + Pattern.quote(paramName) + "\\b";
|
.filter(name -> !Objects.equals(name, currentParamName))
|
||||||
String value = getParameterValue(valueMap, paramName, modelId);
|
.sorted((a, b) -> Integer.compare(b.length(), a.length()))
|
||||||
result = result.replaceAll(pattern, value);
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (String paramName : knownParams) {
|
||||||
|
String value = getParameterValue(currentValueMap, paramName, modelId);
|
||||||
|
// 仅当 value 是有效数字时才替换
|
||||||
|
if (value != null && !value.equals(paramName) && isNumeric(value)) {
|
||||||
|
String escaped = Pattern.quote(paramName);
|
||||||
|
// 使用否定前后瞻,支持中文和中文括号
|
||||||
|
String pattern = "(?<![\u4e00-\u9fa5a-zA-Z0-9()])" + escaped + "(?![\u4e00-\u9fa5a-zA-Z0-9()])";
|
||||||
|
result = result.replaceAll(pattern, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,30 +270,16 @@ public class ParameterValueCalculationTimer {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return paramName;
|
return paramName; // 找不到返回原名(会导致非数字)
|
||||||
}
|
}
|
||||||
|
|
||||||
private Double calculateExpression(String expression) throws CommonException {
|
private boolean isNumeric(String str) {
|
||||||
Double result = calculateWithScriptEngine(expression);
|
if (str == null || str.isEmpty()) return false;
|
||||||
if (result != null) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
throw new CommonException("无法计算表达式: " + expression);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Double calculateWithScriptEngine(String expression) {
|
|
||||||
try {
|
try {
|
||||||
if (!isSafeExpression(expression)) {
|
Double.parseDouble(str);
|
||||||
throw new SecurityException("表达式包含不安全内容");
|
return true;
|
||||||
}
|
} catch (NumberFormatException e) {
|
||||||
Object result = scriptEngine.eval(expression);
|
return false;
|
||||||
if (result instanceof Number) {
|
|
||||||
return ((Number) result).doubleValue();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn("ScriptEngine计算失败: {}, 错误: {}", expression, e.getMessage(), e);
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,24 +299,19 @@ public class ParameterValueCalculationTimer {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<String, Map<String, String>> convertMap(
|
private Double calculateExpression(String expression) throws CommonException {
|
||||||
List<CalculationParameterView> list
|
try {
|
||||||
) {
|
if (!isSafeExpression(expression)) {
|
||||||
if (list == null) {
|
return null;
|
||||||
return new HashMap<>();
|
}
|
||||||
|
Object result = scriptEngine.eval(expression);
|
||||||
|
if (result instanceof Number) {
|
||||||
|
return ((Number) result).doubleValue();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("{}导致计算失败: {}", e.getMessage(), expression, e);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return list.stream()
|
|
||||||
.filter(Objects::nonNull)
|
|
||||||
.filter(item -> item.getParameterName() != null)
|
|
||||||
.filter(item -> item.getModelId() != null)
|
|
||||||
.collect(Collectors.groupingBy(
|
|
||||||
CalculationParameterView::getParameterName,
|
|
||||||
Collectors.toMap(
|
|
||||||
CalculationParameterView::getModelId,
|
|
||||||
item -> item.getParameterValue() != null ? item.getParameterValue() : item.getParameterName(),
|
|
||||||
(existing, replacement) -> replacement
|
|
||||||
)
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -43,7 +43,7 @@ public class PersonReadListener implements ReadListener<ResponsiblePersonPojo> {
|
|||||||
problems.getErrors().add("责任人导入失败:用户" + responsiblePerson.getUsername() + "无法找到或有多个重名用户");
|
problems.getErrors().add("责任人导入失败:用户" + responsiblePerson.getUsername() + "无法找到或有多个重名用户");
|
||||||
} else if (user.getDepartmentId() == null) {
|
} else if (user.getDepartmentId() == null) {
|
||||||
problems.setFlag(true);
|
problems.setFlag(true);
|
||||||
problems.getErrors().add("责任人导入失败:部门" + responsiblePerson.getUsername() + "无法找到");
|
problems.getErrors().add("责任人导入失败:部门" + responsiblePerson.getDepartment() + "无法找到");
|
||||||
} else {
|
} else {
|
||||||
responsiblePerson.setUserId(user.getUserId());
|
responsiblePerson.setUserId(user.getUserId());
|
||||||
responsiblePerson.setDepartmentId(user.getDepartmentId());
|
responsiblePerson.setDepartmentId(user.getDepartmentId());
|
||||||
|
|||||||
@ -40,6 +40,8 @@ public class SheetDataListener implements ReadListener<ParameterPojo> {
|
|||||||
@Override
|
@Override
|
||||||
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
|
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
|
||||||
currentSheetName = context.readSheetHolder().getSheetName();
|
currentSheetName = context.readSheetHolder().getSheetName();
|
||||||
|
// 每个模板一开始认定没有问题
|
||||||
|
problems.setFlag(false);
|
||||||
log.info("开始解析Sheet: {}", currentSheetName);
|
log.info("开始解析Sheet: {}", currentSheetName);
|
||||||
log.info("开始解析表头行: {}", context.readRowHolder().getRowIndex());
|
log.info("开始解析表头行: {}", context.readRowHolder().getRowIndex());
|
||||||
log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
|
log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
|
||||||
@ -84,7 +86,7 @@ public class SheetDataListener implements ReadListener<ParameterPojo> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!subDepartments.contains(data.getDepartment())) {
|
if (data.getDepartment() != null && !subDepartments.contains(data.getDepartment())) {
|
||||||
problems.setFlag(true);
|
problems.setFlag(true);
|
||||||
problems.getErrors().add(String.format("模板导入失败:" + "模板'%s'的参数'%s'部门不存在",
|
problems.getErrors().add(String.format("模板导入失败:" + "模板'%s'的参数'%s'部门不存在",
|
||||||
currentSheetName, data.getParameterName()));
|
currentSheetName, data.getParameterName()));
|
||||||
|
|||||||
@ -2,12 +2,14 @@ package com.xdap.self_development.service;
|
|||||||
|
|
||||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||||
import com.xdap.self_development.controller.request.EngineParamDetailRequest;
|
import com.xdap.self_development.controller.request.EngineParamDetailRequest;
|
||||||
|
import com.xdap.self_development.domain.dto.EngineDeptUpdateDTO;
|
||||||
import com.xdap.self_development.domain.dto.EngineParamDetailDTO;
|
import com.xdap.self_development.domain.dto.EngineParamDetailDTO;
|
||||||
import com.xdap.self_development.domain.pojo.EngineParamDetailPojo;
|
import com.xdap.self_development.domain.pojo.EngineParamDetailPojo;
|
||||||
import com.xdap.self_development.domain.pojo.ParameterPojo;
|
import com.xdap.self_development.domain.pojo.ParameterPojo;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -58,4 +60,6 @@ public interface EngineParamDetailService {
|
|||||||
List<ParameterPojo> selectParamByIsUserId(List<ParameterPojo> list, String userId);
|
List<ParameterPojo> selectParamByIsUserId(List<ParameterPojo> list, String userId);
|
||||||
|
|
||||||
List<EngineParamDetailPojo> selectModelParamByIsUserId(List<EngineParamDetailPojo> list, String userId);
|
List<EngineParamDetailPojo> selectModelParamByIsUserId(List<EngineParamDetailPojo> list, String userId);
|
||||||
|
|
||||||
|
void updateDept(@Valid EngineDeptUpdateDTO engineDeptUpdateDTO);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -169,7 +169,6 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
if (ObjectUtils.isEmpty(model)) {
|
if (ObjectUtils.isEmpty(model)) {
|
||||||
throw new CommonException("机型不存在,请检查");
|
throw new CommonException("机型不存在,请检查");
|
||||||
}
|
}
|
||||||
// TODO:机型发起审批
|
|
||||||
// 检查当前参数是否全部填写完成
|
// 检查当前参数是否全部填写完成
|
||||||
TodoTaskPojo filledTodo = bd.getBusinessDatabase()
|
TodoTaskPojo filledTodo = bd.getBusinessDatabase()
|
||||||
.eq("model_id", model.getId())
|
.eq("model_id", model.getId())
|
||||||
@ -339,6 +338,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
//新增这个人的填写的已办和经办
|
//新增这个人的填写的已办和经办
|
||||||
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
||||||
BeanUtils.copyProperties(todoTaskPojo, completedTaskPojo);
|
BeanUtils.copyProperties(todoTaskPojo, completedTaskPojo);
|
||||||
|
completedTaskPojo.setCurrentProcessor(null);
|
||||||
completedTaskPojo.setId(UUID.randomUUID().toString().replace("-", ""));
|
completedTaskPojo.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
completedTaskPojo.setDocumentNo(todoTaskPojo.getDocumentNo());
|
completedTaskPojo.setDocumentNo(todoTaskPojo.getDocumentNo());
|
||||||
completedTaskPojo.setCreationDate(engineReviewListPojo.getCreationDate());
|
completedTaskPojo.setCreationDate(engineReviewListPojo.getCreationDate());
|
||||||
@ -348,6 +348,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
|
|
||||||
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
||||||
BeanUtils.copyProperties(todoTaskPojo, initiatedTask);
|
BeanUtils.copyProperties(todoTaskPojo, initiatedTask);
|
||||||
|
initiatedTask.setCurrentProcessor(null);
|
||||||
initiatedTask.setId(UUID.randomUUID().toString().replace("-", ""));
|
initiatedTask.setId(UUID.randomUUID().toString().replace("-", ""));
|
||||||
initiatedTask.setDocumentNo(todoTaskPojo.getDocumentNo());
|
initiatedTask.setDocumentNo(todoTaskPojo.getDocumentNo());
|
||||||
initiatedTask.setCreationDate(engineReviewListPojo.getCreationDate());
|
initiatedTask.setCreationDate(engineReviewListPojo.getCreationDate());
|
||||||
@ -635,7 +636,6 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
||||||
.eq("id", flow.getModelId())
|
.eq("id", flow.getModelId())
|
||||||
.doQueryFirst(DataEntryEngineModelPojo.class);
|
.doQueryFirst(DataEntryEngineModelPojo.class);
|
||||||
// TODO:机型审批通过
|
|
||||||
// 检查当前参数是否为一版本,是则更新参数,否则新建版本。
|
// 检查当前参数是否为一版本,是则更新参数,否则新建版本。
|
||||||
// 这个机型下所有参数都全部写入一版且版本加一 没有参与审批的参数时原来的值,参与审批的参数值要取小版本值作为大版本
|
// 这个机型下所有参数都全部写入一版且版本加一 没有参与审批的参数时原来的值,参与审批的参数值要取小版本值作为大版本
|
||||||
// 现版本需要填写的全部参数
|
// 现版本需要填写的全部参数
|
||||||
@ -718,6 +718,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
.update("approver_persons", "")
|
.update("approver_persons", "")
|
||||||
.update("last_update_date", new Date())
|
.update("last_update_date", new Date())
|
||||||
.update("pre_node", -1)
|
.update("pre_node", -1)
|
||||||
|
.update("node_name", null)
|
||||||
.eq("id", flow.getId())
|
.eq("id", flow.getId())
|
||||||
.doUpdate(EngineReviewListPojo.class);
|
.doUpdate(EngineReviewListPojo.class);
|
||||||
|
|
||||||
@ -866,7 +867,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
reviewListPojo.setStatusCode(ParamValueVersionEnum.UNDER.getCode());
|
reviewListPojo.setStatusCode(ParamValueVersionEnum.UNDER.getCode());
|
||||||
reviewListPojo.setNodeName(firstNode.getNodeName());
|
reviewListPojo.setNodeName(firstNode.getNodeName());
|
||||||
|
|
||||||
// 这一批数据改成审核中,
|
// 这一批数据改成审核中
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
.update("version_status", ParamValueVersionEnum.UNDER.getCode())
|
.update("version_status", ParamValueVersionEnum.UNDER.getCode())
|
||||||
.update("last_update_date", new Date())
|
.update("last_update_date", new Date())
|
||||||
@ -1160,7 +1161,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
1
|
1
|
||||||
);
|
);
|
||||||
|
|
||||||
// 这一批数据改成审核中,
|
// 这一批数据改成审核中
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
.update("version_status", ParamValueVersionEnum.UNDER.getCode())
|
.update("version_status", ParamValueVersionEnum.UNDER.getCode())
|
||||||
.update("last_update_date", new Date())
|
.update("last_update_date", new Date())
|
||||||
@ -1502,7 +1503,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询基础数据
|
// 查询基础数据
|
||||||
activitiDataAndRecordDTO.setCurrentNode(flow.getNodeName());
|
activitiDataAndRecordDTO.setCurrentNode(flow.getNodeName() == null ? "无" : flow.getNodeName());
|
||||||
activitiDataAndRecordDTO.setCreateBy(
|
activitiDataAndRecordDTO.setCreateBy(
|
||||||
getUserNames(
|
getUserNames(
|
||||||
Arrays.asList(flow.getApplicant().split(","))
|
Arrays.asList(flow.getApplicant().split(","))
|
||||||
|
|||||||
@ -301,8 +301,8 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
// 新增我创建的
|
// 新增我创建的
|
||||||
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
||||||
initiatedTask.setDocumentNo(approvalFlow.getId());
|
initiatedTask.setDocumentNo(approvalFlow.getId());
|
||||||
initiatedTask.setCreatedById(form.getUserId());
|
initiatedTask.setCreatedById(approvalFlow.getCreateBy());
|
||||||
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(form.getUserId()).getUsername());
|
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(approvalFlow.getCreateBy()).getUsername());
|
||||||
initiatedTask.setCurrentNode(firstNode.getNodeName());
|
initiatedTask.setCurrentNode(firstNode.getNodeName());
|
||||||
initiatedTask.setCurrentProcessor(firstNode.getAssignees());
|
initiatedTask.setCurrentProcessor(firstNode.getAssignees());
|
||||||
initiatedTask.setDataType("对标报告审核");
|
initiatedTask.setDataType("对标报告审核");
|
||||||
@ -525,8 +525,8 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
// 新增我创建的
|
// 新增我创建的
|
||||||
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
||||||
initiatedTask.setDocumentNo(flow.getId());
|
initiatedTask.setDocumentNo(flow.getId());
|
||||||
initiatedTask.setCreatedById(newForm.getUserId());
|
initiatedTask.setCreatedById(flow.getCreateBy());
|
||||||
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(newForm.getUserId()).getUsername());
|
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(flow.getCreateBy()).getUsername());
|
||||||
initiatedTask.setCurrentNode(firstNode.getNodeName());
|
initiatedTask.setCurrentNode(firstNode.getNodeName());
|
||||||
initiatedTask.setCurrentProcessor(firstNode.getAssignees());
|
initiatedTask.setCurrentProcessor(firstNode.getAssignees());
|
||||||
initiatedTask.setDataType("对标报告审核");
|
initiatedTask.setDataType("对标报告审核");
|
||||||
@ -1020,8 +1020,8 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
// 更新当前用户的已办
|
// 更新当前用户的已办
|
||||||
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
||||||
completedTaskPojo.setDocumentNo(flow.getId());
|
completedTaskPojo.setDocumentNo(flow.getId());
|
||||||
completedTaskPojo.setCreatedById(request.getUserId());
|
completedTaskPojo.setCreatedById(flow.getCreateBy());
|
||||||
completedTaskPojo.setCreatedBy(xdapDeptUsersService.selectUserByID(request.getUserId()).getUsername());
|
completedTaskPojo.setCreatedBy(xdapDeptUsersService.selectUserByID(flow.getCreateBy()).getUsername());
|
||||||
completedTaskPojo.setCurrentNode(currentNode.getNodeName());
|
completedTaskPojo.setCurrentNode(currentNode.getNodeName());
|
||||||
completedTaskPojo.setCurrentProcessor(currentNode.getAssignees());
|
completedTaskPojo.setCurrentProcessor(currentNode.getAssignees());
|
||||||
completedTaskPojo.setDataType("对标报告审核");
|
completedTaskPojo.setDataType("对标报告审核");
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
|
|||||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||||
import com.alibaba.excel.write.metadata.style.WriteFont;
|
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||||
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||||
import com.definesys.mpaas.query.MpaasQueryFactory;
|
import com.definesys.mpaas.query.MpaasQueryFactory;
|
||||||
import com.definesys.mpaas.query.db.PageQueryResult;
|
import com.definesys.mpaas.query.db.PageQueryResult;
|
||||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||||
@ -339,6 +340,7 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
|
|||||||
new HorizontalCellStyleStrategy(headWriteCellStyle, new WriteCellStyle());
|
new HorizontalCellStyleStrategy(headWriteCellStyle, new WriteCellStyle());
|
||||||
|
|
||||||
WriteSheet sheet = EasyExcel.writerSheet()
|
WriteSheet sheet = EasyExcel.writerSheet()
|
||||||
|
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||||
.registerWriteHandler(horizontalCellStyleStrategy)
|
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||||
.head(DataEntryEngineModelExcel.class) // 所有Sheet使用相同的表头
|
.head(DataEntryEngineModelExcel.class) // 所有Sheet使用相同的表头
|
||||||
.build();
|
.build();
|
||||||
@ -435,7 +437,6 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public Integer synchronizeParams(String modelId, String userId) {
|
public Integer synchronizeParams(String modelId, String userId) {
|
||||||
// TODO: 同步模板最新参数到机型
|
|
||||||
// 检查机型
|
// 检查机型
|
||||||
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
||||||
.eq("id", modelId)
|
.eq("id", modelId)
|
||||||
@ -537,7 +538,6 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
|
|||||||
.eq("id", model.getId())
|
.eq("id", model.getId())
|
||||||
.update("version_number", model.getVersionNumber())
|
.update("version_number", model.getVersionNumber())
|
||||||
.update("parameter_num", parameters.size())
|
.update("parameter_num", parameters.size())
|
||||||
.update("distribute_status", DistributeStatusEnum.COMPLETE.getCode())
|
|
||||||
.doUpdate(DataEntryEngineModelPojo.class);
|
.doUpdate(DataEntryEngineModelPojo.class);
|
||||||
|
|
||||||
// 更新新版本机型的参数
|
// 更新新版本机型的参数
|
||||||
|
|||||||
@ -7,14 +7,18 @@ import com.alibaba.excel.write.metadata.WriteSheet;
|
|||||||
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||||
import com.alibaba.excel.write.metadata.style.WriteFont;
|
import com.alibaba.excel.write.metadata.style.WriteFont;
|
||||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||||
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.definesys.mpaas.query.MpaasQueryFactory;
|
import com.definesys.mpaas.query.MpaasQueryFactory;
|
||||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||||
import com.xdap.self_development.common.BusinessDatabase;
|
import com.xdap.self_development.common.BusinessDatabase;
|
||||||
import com.xdap.self_development.controller.request.EngineParamDetailExcel;
|
import com.xdap.self_development.controller.request.EngineParamDetailExcel;
|
||||||
import com.xdap.self_development.controller.request.EngineParamDetailRequest;
|
import com.xdap.self_development.controller.request.EngineParamDetailRequest;
|
||||||
|
import com.xdap.self_development.domain.dto.EngineDeptUpdateDTO;
|
||||||
|
import com.xdap.self_development.domain.dto.EngineDeptUpdateItem;
|
||||||
import com.xdap.self_development.domain.dto.EngineParamDetailDTO;
|
import com.xdap.self_development.domain.dto.EngineParamDetailDTO;
|
||||||
import com.xdap.self_development.domain.enums.CurrentNodeEnum;
|
import com.xdap.self_development.domain.enums.CurrentNodeEnum;
|
||||||
|
import com.xdap.self_development.domain.enums.DistributeStatusEnum;
|
||||||
import com.xdap.self_development.domain.enums.ParamOperationEnum;
|
import com.xdap.self_development.domain.enums.ParamOperationEnum;
|
||||||
import com.xdap.self_development.domain.enums.ParamValueVersionEnum;
|
import com.xdap.self_development.domain.enums.ParamValueVersionEnum;
|
||||||
import com.xdap.self_development.domain.pojo.*;
|
import com.xdap.self_development.domain.pojo.*;
|
||||||
@ -28,6 +32,7 @@ import org.apache.commons.lang3.ObjectUtils;
|
|||||||
import org.apache.poi.ss.usermodel.IndexedColors;
|
import org.apache.poi.ss.usermodel.IndexedColors;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -293,7 +298,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
if (userId == null || userId.isEmpty()) {
|
if (userId == null || userId.isEmpty()) {
|
||||||
return pojoList;
|
return pojoList;
|
||||||
}
|
}
|
||||||
// TODO:根据权限过滤
|
|
||||||
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
||||||
// 管理员返回全部
|
// 管理员返回全部
|
||||||
for (MenuParamView menuParamView : menuParamViews) {
|
for (MenuParamView menuParamView : menuParamViews) {
|
||||||
@ -436,6 +440,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
engineParamDetailExcels.add(engineParamDetailExcel);
|
engineParamDetailExcels.add(engineParamDetailExcel);
|
||||||
}
|
}
|
||||||
WriteSheet sheet = EasyExcel.writerSheet(i, sheetNames.get(i))
|
WriteSheet sheet = EasyExcel.writerSheet(i, sheetNames.get(i))
|
||||||
|
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
||||||
.registerWriteHandler(horizontalCellStyleStrategy)
|
.registerWriteHandler(horizontalCellStyleStrategy)
|
||||||
.head(EngineParamDetailExcel.class) // 所有Sheet使用相同的表头
|
.head(EngineParamDetailExcel.class) // 所有Sheet使用相同的表头
|
||||||
.build();
|
.build();
|
||||||
@ -615,7 +620,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void updateParamValue(List<EngineParamDetailPojo> engineParamDetailPojos, String currentUserId) {
|
public void updateParamValue(List<EngineParamDetailPojo> engineParamDetailPojos, String currentUserId) {
|
||||||
// TODO:修改参数值
|
|
||||||
// 获取欲更新参数列表
|
// 获取欲更新参数列表
|
||||||
List<String> detailIds = engineParamDetailPojos.stream()
|
List<String> detailIds = engineParamDetailPojos.stream()
|
||||||
.map(EngineParamDetailPojo::getId)
|
.map(EngineParamDetailPojo::getId)
|
||||||
@ -1037,7 +1041,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
if (userId == null || userId.isEmpty()) {
|
if (userId == null || userId.isEmpty()) {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
// TODO:根据权限过滤
|
|
||||||
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
||||||
// 管理员返回全部
|
// 管理员返回全部
|
||||||
for (MenuParamView menuParamView : menuParamViews) {
|
for (MenuParamView menuParamView : menuParamViews) {
|
||||||
@ -1066,7 +1069,6 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
if (userId == null || userId.isEmpty()) {
|
if (userId == null || userId.isEmpty()) {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
// TODO:根据权限过滤
|
|
||||||
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
||||||
// 管理员返回全部
|
// 管理员返回全部
|
||||||
for (MenuParamView menuParamView : menuParamViews) {
|
for (MenuParamView menuParamView : menuParamViews) {
|
||||||
@ -1088,4 +1090,50 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
|||||||
))
|
))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void updateDept(EngineDeptUpdateDTO engineDeptUpdateDTO) {
|
||||||
|
if (engineDeptUpdateDTO.getList().isEmpty()) throw new CommonException("部门信息不能为空");
|
||||||
|
|
||||||
|
// 检查机型
|
||||||
|
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
||||||
|
.eq("id", engineDeptUpdateDTO.getModelId())
|
||||||
|
.in("distribute_status",
|
||||||
|
DistributeStatusEnum.UNDISTRIBUTED.getCode(),
|
||||||
|
DistributeStatusEnum.COMPLETE.getCode()
|
||||||
|
)
|
||||||
|
.doQueryFirst(DataEntryEngineModelPojo.class);
|
||||||
|
if (model == null) {
|
||||||
|
throw new CommonException("机型不存在或已分发");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查当前版本机型是否有参数正在审批中
|
||||||
|
List<EngineParamDetailPojo> paramsInApproval = bd.getBusinessDatabase()
|
||||||
|
.eq("engine_model_id", model.getId())
|
||||||
|
.eq("major_version", model.getVersionNumber())
|
||||||
|
.eq("version_status", ParamValueVersionEnum.UNDER.getCode())
|
||||||
|
.doQuery(EngineParamDetailPojo.class);
|
||||||
|
if (!paramsInApproval.isEmpty()) {
|
||||||
|
throw new CommonException("当前版本机型有参数正在审批中,请等待审批完成");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 整理部门和参数
|
||||||
|
Map<String, List<String>> deptMap = engineDeptUpdateDTO.getList().stream()
|
||||||
|
.filter(item -> item.getDepartment() != null && !item.getDepartment().isEmpty())
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
EngineDeptUpdateItem::getDepartment,
|
||||||
|
Collectors.mapping(EngineDeptUpdateItem::getParamId, Collectors.toList())
|
||||||
|
));
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<String>> entry : deptMap.entrySet()) {
|
||||||
|
String department = entry.getKey();
|
||||||
|
List<String> paramIds = entry.getValue();
|
||||||
|
// 更新部门信息
|
||||||
|
bd.getBusinessDatabase()
|
||||||
|
.update("department", department)
|
||||||
|
.in("id", paramIds)
|
||||||
|
.doUpdate(EngineParamDetailPojo.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -355,7 +355,7 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
|
|||||||
throw new CommonException("只支持 .xls 或 .xlsx 格式的文件");
|
throw new CommonException("只支持 .xls 或 .xlsx 格式的文件");
|
||||||
}
|
}
|
||||||
MyResponse problems =
|
MyResponse problems =
|
||||||
new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无"));
|
new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入"));
|
||||||
|
|
||||||
try (InputStream inputStream = file.getInputStream()) {
|
try (InputStream inputStream = file.getInputStream()) {
|
||||||
EasyExcel.read(
|
EasyExcel.read(
|
||||||
@ -455,7 +455,7 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
|
|||||||
list.add(item);
|
list.add(item);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty() && !problems.isFlag()) {
|
||||||
problems.setFlag(true);
|
problems.setFlag(true);
|
||||||
problems.getErrors().add("没有合适的责任人导入");
|
problems.getErrors().add("没有合适的责任人导入");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletResponse;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
|
import java.text.Collator;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -385,8 +386,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
|
|||||||
Map<String, String> modelNames = getModelNameMapping(models);
|
Map<String, String> modelNames = getModelNameMapping(models);
|
||||||
|
|
||||||
// 从Redis加载并处理数据
|
// 从Redis加载并处理数据
|
||||||
Map<String, Map<String, String>> parameterValues = new TreeMap<>();
|
Map<String, Map<String, String>> parameterValues = new TreeMap<>(Collator.getInstance(Locale.CHINA));
|
||||||
;
|
|
||||||
|
|
||||||
loadAndProcessRedisData(request, models, userID, subsystemParts, parameterValues);
|
loadAndProcessRedisData(request, models, userID, subsystemParts, parameterValues);
|
||||||
|
|
||||||
|
|||||||
@ -170,8 +170,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
// 新增我创建的
|
// 新增我创建的
|
||||||
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
|
||||||
initiatedTask.setDocumentNo(flow.getId());
|
initiatedTask.setDocumentNo(flow.getId());
|
||||||
initiatedTask.setCreatedById(request.getUserId());
|
initiatedTask.setCreatedById(flow.getCreateBy());
|
||||||
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(request.getUserId()).getUsername());
|
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(flow.getCreateBy()).getUsername());
|
||||||
initiatedTask.setCurrentNode(firstNode.getNodeName());
|
initiatedTask.setCurrentNode(firstNode.getNodeName());
|
||||||
initiatedTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees()));
|
initiatedTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees()));
|
||||||
initiatedTask.setDataType("模板审核");
|
initiatedTask.setDataType("模板审核");
|
||||||
@ -547,8 +547,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
// 新增当前处理人的已办
|
// 新增当前处理人的已办
|
||||||
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
||||||
completedTaskPojo.setDocumentNo(flow.getId());
|
completedTaskPojo.setDocumentNo(flow.getId());
|
||||||
completedTaskPojo.setCreatedById(request.getUserId());
|
completedTaskPojo.setCreatedById(flow.getCreateBy());
|
||||||
completedTaskPojo.setCreatedBy(xdapDeptUsersService.selectUserByID(request.getUserId()).getUsername());
|
completedTaskPojo.setCreatedBy(xdapDeptUsersService.selectUserByID(flow.getCreateBy()).getUsername());
|
||||||
completedTaskPojo.setCurrentNode(currentNode.getNodeName());
|
completedTaskPojo.setCurrentNode(currentNode.getNodeName());
|
||||||
completedTaskPojo.setCurrentProcessor(currentNode.getAssignees());
|
completedTaskPojo.setCurrentProcessor(currentNode.getAssignees());
|
||||||
completedTaskPojo.setDataType("模板审核");
|
completedTaskPojo.setDataType("模板审核");
|
||||||
|
|||||||
@ -118,6 +118,14 @@ public class TemplateServiceImpl implements TemplateService {
|
|||||||
throw new CommonException("没有找到模板");
|
throw new CommonException("没有找到模板");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<TemplatePojo> templates = bd.getBusinessDatabase()
|
||||||
|
.eq("template_name", templateName.getTemplateName())
|
||||||
|
.doQuery(TemplatePojo.class);
|
||||||
|
|
||||||
|
if (!templates.isEmpty()) {
|
||||||
|
throw new CommonException("已有同名模板,不允许修改模板名称");
|
||||||
|
}
|
||||||
|
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
.eq("template_name", templateName)
|
.eq("template_name", templateName)
|
||||||
.update("template_name", form.getTemplateName())
|
.update("template_name", form.getTemplateName())
|
||||||
|
|||||||
@ -456,7 +456,6 @@ public class TodoTaskServiceImpl implements TodoTaskService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void skipApproval(RejectTodoRequest request) {
|
public void skipApproval(RejectTodoRequest request) {
|
||||||
// TODO:跳过审批
|
|
||||||
TodoTaskPojo todoTaskPojo = bd.getBusinessDatabase()
|
TodoTaskPojo todoTaskPojo = bd.getBusinessDatabase()
|
||||||
.eq("id", request.getTodoId())
|
.eq("id", request.getTodoId())
|
||||||
.doQueryFirst(TodoTaskPojo.class);
|
.doQueryFirst(TodoTaskPojo.class);
|
||||||
|
|||||||
@ -60,7 +60,7 @@ deploy.powerjob.address=127.0.0.1:7700
|
|||||||
# ====================== ??????MPAAS? ======================
|
# ====================== ??????MPAAS? ======================
|
||||||
mpaas.datasource[0].name=xdap_app_223770822127386625
|
mpaas.datasource[0].name=xdap_app_223770822127386625
|
||||||
mpaas.datasource[0].type=mysql
|
mpaas.datasource[0].type=mysql
|
||||||
mpaas.datasource[0].url=jdbc:mysql://127.0.0.1:3306/xdap_app_223770822127386625?serverTimezone=GMT%2B8&characterEncoding=utf-8
|
mpaas.datasource[0].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
|
||||||
mpaas.datasource[0].driver-class-name=com.mysql.cj.jdbc.Driver
|
mpaas.datasource[0].driver-class-name=com.mysql.cj.jdbc.Driver
|
||||||
mpaas.datasource[0].username=root
|
mpaas.datasource[0].username=root
|
||||||
mpaas.datasource[0].password=qwer12
|
mpaas.datasource[0].password=qwer12
|
||||||
@ -76,7 +76,7 @@ mpaas.datasource[1].minPoolSize=50
|
|||||||
mpaas.datasource[1].maxPoolSize=1000
|
mpaas.datasource[1].maxPoolSize=1000
|
||||||
mpaas.datasource[2].name=qygs
|
mpaas.datasource[2].name=qygs
|
||||||
mpaas.datasource[2].type=mysql
|
mpaas.datasource[2].type=mysql
|
||||||
mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/qygs?serverTimezone=GMT%2B8&characterEncoding=utf-8
|
mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
|
||||||
mpaas.datasource[2].driver-class-name=com.mysql.cj.jdbc.Driver
|
mpaas.datasource[2].driver-class-name=com.mysql.cj.jdbc.Driver
|
||||||
mpaas.datasource[2].username=root
|
mpaas.datasource[2].username=root
|
||||||
mpaas.datasource[2].password=qwer12
|
mpaas.datasource[2].password=qwer12
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user