上线版本6.0

This commit is contained in:
zjh 2026-02-24 08:40:35 +08:00
parent 27c5a0317f
commit 20d92d7153
20 changed files with 305 additions and 135 deletions

View File

@ -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

View File

@ -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("更新部门成功");
}
/** /**
* 参数列表查询 * 参数列表查询

View File

@ -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("导入成功");

View File

@ -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;
}

View File

@ -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;
}

View File

@ -25,6 +25,10 @@ public class AnalysisModelParamterView {
* 模型名称 * 模型名称
*/ */
private String modelName; private String modelName;
/**
* 状态代号
*/
private String productNumber;
/** /**
* 平台 * 平台
*/ */

View File

@ -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
)
));
} }
} }

View File

@ -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());

View File

@ -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()));

View File

@ -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);
} }

View File

@ -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(","))

View File

@ -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("对标报告审核");

View File

@ -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);
// 更新新版本机型的参数 // 更新新版本机型的参数

View File

@ -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);
}
}
} }

View File

@ -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;

View File

@ -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);

View File

@ -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("模板审核");

View File

@ -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())

View File

@ -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);

View File

@ -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