上线版本4.0(新版修改)

This commit is contained in:
zjh 2026-02-11 10:33:51 +08:00
parent f120d45198
commit 27c5a0317f
26 changed files with 447 additions and 165 deletions

View File

@ -3,10 +3,12 @@ package com.xdap.self_development;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableCaching
@SpringBootApplication(
exclude = {EmbeddedMongoAutoConfiguration.class}
)

View File

@ -30,8 +30,10 @@ public class AnalysisCommonController {
* @return 可用参数列表
*/
@GetMapping("/getAvailableParameters")
public Response getAvailableParameters() {
List<String> lists = analysisCommonParametersService.getAvailableParameters();
public Response getAvailableParameters(
@RequestParam(required = false) String userId
) {
List<String> lists = analysisCommonParametersService.getAvailableParameters(userId);
return Response.ok().data(lists);
}

View File

@ -40,8 +40,12 @@ public class EngineParamDetailController {
* @return 参数列表
*/
@GetMapping("/selectParamList")
public Response selectParamList(@RequestParam(value = "modelID", required = false) String modelID,@RequestParam(value = "tcData", required = false) String tcData) {
Map<String, List<String>> list = engineParamDetailService.selectParamList(modelID,tcData);
public Response selectParamList(
@RequestParam(value = "modelID", required = false) String modelID,
@RequestParam(value = "tcData", required = false) String tcData,
@RequestParam(required = false) String userId
) {
Map<String, Set<String>> list = engineParamDetailService.selectParamList(modelID, tcData, userId);
return Response.ok().data(list);
}
/**

View File

@ -1,13 +1,11 @@
package com.xdap.self_development.controller;
import com.definesys.mpaas.common.http.Response;
import com.xdap.self_development.common.YcTaskResult;
import com.xdap.self_development.controller.request.YcGetTodoTaskRequest;
import com.xdap.self_development.service.YcTaskResultService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -79,4 +77,25 @@ public class YcTaskResultController {
return result;
}
}
@GetMapping("/getTodoById")
public Response getTodoById(
@RequestParam String flowId
) {
return Response.ok().data(ycTaskResultService.getTodoById(flowId));
}
@GetMapping("/getInitiatorById")
public Response getInitiatorById(
@RequestParam String flowId
) {
return Response.ok().data(ycTaskResultService.getInitiatorById(flowId));
}
@GetMapping("/getCompletedById")
public Response getCompletedById(
@RequestParam String flowId
) {
return Response.ok().data(ycTaskResultService.getCompletedById(flowId));
}
}

View File

@ -31,7 +31,7 @@ public class EngineParamDetailRequest {
/**
* 版本
*/
private Integer versionNumber;
private Integer parameterVersion;
/**
* 发动机型号+产品编号
*/

View File

@ -39,6 +39,11 @@ public class DataEntryEngineModelDto extends MpaasBasePojo {
*/
private String modelName;
/**
* yc或oth
*/
private String ycOrOth;
/**
* 产品编号
*/

View File

@ -33,5 +33,5 @@ public class YcTodoTaskCommonResultDTO {
private String urlMobileOA;
private String urlWx;
private String mobileSuit;
private String systemName;
}

View File

@ -17,7 +17,7 @@ import java.util.Date;
*/
@SQLQuery(value = {
@SQL(view = "selectLastedComment"
, sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY param_detail_id ORDER BY creation_date DESC) AS rn FROM data_change_comment WHERE param_detail_id IN (#paramIds) ) ranked WHERE rn = 1 ORDER BY param_detail_id")
, sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY subsystem_name, parameter_name ORDER BY creation_date DESC) AS rn FROM data_change_comment WHERE param_detail_id IN (#paramIds) ) ranked WHERE rn = 1 ORDER BY subsystem_name, parameter_name")
})
@Data
@EqualsAndHashCode(callSuper = false)

View File

@ -86,6 +86,11 @@ public class EngineReviewListPojo implements Serializable {
*/
private String createdBy;
/**
* 版本
*/
private Integer objectVersionNumber;
/**
* 创建时间
*/

View File

@ -36,7 +36,8 @@ public class PersonReadListener implements ReadListener<ResponsiblePersonPojo> {
return;
}
XdapUserView user = responsiblePersonService
.getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getUserAccount(), responsiblePerson.getUsername());
.getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getUserAccount(),
responsiblePerson.getUsername());
if (user.getUserId() == null) {
problems.setFlag(true);
problems.getErrors().add("责任人导入失败:用户" + responsiblePerson.getUsername() + "无法找到或有多个重名用户");

View File

@ -103,6 +103,9 @@ public class SheetDataListener implements ReadListener<ParameterPojo> {
public void doAfterAllAnalysed(AnalysisContext context) {
if (!cachedDataList.isEmpty()) {
processBatch();
} else {
problems.getErrors().add("模板导入失败:模板'" + currentSheetName + "'没有数据");
problems.setFlag(true);
}
}

View File

@ -13,5 +13,5 @@ public interface AnalysisCommonParametersService {
List<DataEntryEngineModelPojo> selectModelByLike(ReportRequest request);
List<String> getAvailableParameters();
List<String> getAvailableParameters(String userId);
}

View File

@ -8,7 +8,6 @@ import com.xdap.self_development.domain.pojo.ParameterPojo;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -24,7 +23,7 @@ import java.util.Set;
public interface EngineParamDetailService {
HashMap<String, List<String>> selectParamList(String modelID,String tcData);
Map<String, Set<String>> selectParamList(String modelID, String tcData, String userId);
void excelImport(MultipartFile file,String modelId, String userId);
@ -55,4 +54,8 @@ public interface EngineParamDetailService {
List<XdapUsers> selectPersonoByType(String subSystem, String dept, Integer type);
Map<String, Map<String, Set<String>>> selectParamListAndModel(String modelID, Integer parameterVersion, String userId);
List<ParameterPojo> selectParamByIsUserId(List<ParameterPojo> list, String userId);
List<EngineParamDetailPojo> selectModelParamByIsUserId(List<EngineParamDetailPojo> list, String userId);
}

View File

@ -4,12 +4,16 @@ package com.xdap.self_development.service;
import com.xdap.self_development.controller.request.ModelRolesRequest;
import com.xdap.self_development.controller.request.RolePerJoinRequest;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.domain.pojo.EngineParamDetailPojo;
import com.xdap.self_development.domain.pojo.ModelRolesPojo;
import com.xdap.self_development.domain.pojo.ParameterPojo;
import com.xdap.self_development.domain.view.MenuParamView;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface ModelRoleService {
@ -30,4 +34,26 @@ public interface ModelRoleService {
void userRoleBinding(UserRoleBindingRequest userRoleBindingRequest);
HashMap<String, List<String>> selectUserOrDeptByRole(@NotBlank String roleID);
boolean matchesAnyPermission(
EngineParamDetailPojo pojo,
Map<String, Map<String, Set<String>>> permissionIndex,
String cat
);
boolean matchesAnyPermission(
EngineParamDetailPojo pojo,
Map<String, Map<String, Set<String>>> permissionIndex,
List<String> cats
);
boolean matchesAnyPermission(
ParameterPojo pojo,
Map<String, Map<String, Set<String>>> permissionIndex,
List<String> cats
);
Map<String, Map<String, Set<String>>> buildPermissionIndex(
Set<String> permissions
);
}

View File

@ -2,6 +2,9 @@ package com.xdap.self_development.service;
import com.xdap.self_development.common.YcTaskResult;
import com.xdap.self_development.controller.request.YcGetTodoTaskRequest;
import com.xdap.self_development.domain.pojo.CompletedTaskPojo;
import com.xdap.self_development.domain.pojo.InitiatedTaskPojo;
import com.xdap.self_development.domain.pojo.TodoTaskPojo;
public interface YcTaskResultService {
YcTaskResult returnTodoTask(YcGetTodoTaskRequest ycGetTodoTaskRequest);
@ -9,4 +12,10 @@ public interface YcTaskResultService {
YcTaskResult returnCompleted(YcGetTodoTaskRequest ycGetTodoTaskRequest);
YcTaskResult returnInitiator(YcGetTodoTaskRequest ycGetTodoTaskRequest);
TodoTaskPojo getTodoById(String flowId);
InitiatedTaskPojo getInitiatorById(String flowId);
CompletedTaskPojo getCompletedById(String flowId);
}

View File

@ -230,6 +230,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
engineReviewListPojo.setReviewComment(approvalNodeRequest.getComment());
engineReviewListPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
engineReviewListPojo.setCreatedBy(userId);
engineReviewListPojo.setObjectVersionNumber(model.getVersionNumber());
engineReviewListPojo.setReturnNum(0);
engineReviewListPojo.setPreNode(-1);
@ -542,7 +543,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.update("operation", "")// 清空操作状态
// .update("minor_version", "")// 小版本清空
.update("last_update_date", new Date())
.eq("last_updated_by", userId)
.eq("last_updated_by", flow.getCreatedBy()) // 流程创建人
.eq("engine_model_id", flow.getModelId())
.eq("major_version", model.getVersionNumber())
.doUpdate(EngineParamDetailPojo.class);
@ -1401,7 +1402,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
List<EngineParamDetailPojo> detailPojos = bd.getBusinessDatabase()
.eq("approval_id", approvalId)
.doQuery(EngineParamDetailPojo.class);
List<String> ids = detailPojos.stream().map(EngineParamDetailPojo::getId).collect(Collectors.toList());
Set<String> ids = detailPojos.stream().map(EngineParamDetailPojo::getId).collect(Collectors.toSet());
if (ObjectUtils.isEmpty(ids)) {
throw new CommonException("该审批流没有绑定的参数,请维护好参数后重新发起审批");
}

View File

@ -10,6 +10,7 @@ import com.xdap.self_development.domain.view.AnalysisModelParamterView;
import com.xdap.self_development.domain.view.AnalysisModelParamterViewAndParam;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.AnalysisCommonParametersService;
import com.xdap.self_development.service.EngineParamDetailService;
import com.xdap.self_development.service.TcDataQueryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -39,6 +40,9 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame
@Resource
TcDataQueryService tcDataQueryService;
@Resource
private EngineParamDetailService engineParamDetailService;
private static final Pattern ALL_NUMBER_PATTERN = Pattern.compile("^[-+]?\\d+(\\.\\d+)?([Ee][-+]?\\d+)?$");
@ -94,12 +98,18 @@ public class AnalysisCommonParametersServiceImpl implements AnalysisCommonParame
* @return 可用参数名称列表
*/
@Override
public List<String> getAvailableParameters() {
public List<String> getAvailableParameters(
String userId
) {
List<ParameterPojo> modelParams = businessDatabase.getBusinessDatabase()
.viewQueryMode(true)
.view("selectAllParameters")
.doQuery(ParameterPojo.class);
return modelParams.stream().filter(x -> x.getUnit() != null && !x.getUnit().equals("/")).map(ParameterPojo::getParameterName).distinct().collect(Collectors.toList());
// 按权限过滤
List<ParameterPojo> parameters = engineParamDetailService.selectParamByIsUserId(modelParams, userId);
return parameters.stream()
.filter(x -> x.getUnit() != null && !x.getUnit().equals("/"))
.map(ParameterPojo::getParameterName).distinct().collect(Collectors.toList());
}
/**

View File

@ -83,13 +83,14 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
* @return 参数列表映射
*/
@Override
public HashMap<String, List<String>> selectParamList(String modelID, String tcData) {
List<ParameterPojo> parameters;
public Map<String, Set<String>> selectParamList(String modelID, String tcData, String userId) {
List<ParameterPojo> allParameters;
if (ObjectUtils.isNotEmpty(tcData) && "tc".equals(tcData)) {
parameters = selectAllAndTcByNewVersion();
allParameters = selectAllAndTcByNewVersion();
} else {
parameters = selectAllByNewVersion();
allParameters = selectAllByNewVersion();
}
List<ParameterPojo> parameters = selectParamByIsUserId(allParameters, userId);
List<TemplatePojo> templates = bd.getBusinessDatabase()
.eq("status", "COMPLETE")
@ -97,28 +98,32 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
if (ObjectUtils.isEmpty(templates)) {
throw new CommonException("未找到未找到已发布的参数模板");
}
//查找每个模板最新版本
// 每组内按版本号降序取第一个最新版本
Map<String, TemplatePojo> latestTemplateMap = templates.stream()
// 按模板ID分组
.collect(Collectors.toMap(TemplatePojo::getTemplateName, Function.identity(), BinaryOperator.maxBy(Comparator.comparingInt(TemplatePojo::getVersion))));
ArrayList<TemplatePojo> templatesMax = new ArrayList<>(latestTemplateMap.values());
Map<String, Long> systemOrderMap = templatesMax.stream()
AtomicInteger seq = new AtomicInteger(1);
LinkedHashMap<String, Integer> subsystemOrderMap = parameters.stream()
.sorted(Comparator
.comparing(ParameterPojo::getSubsystemName, Collator.getInstance(Locale.CHINA))
.thenComparing(ParameterPojo::getParameterName, Collator.getInstance(Locale.CHINA))
)
.map(ParameterPojo::getSubsystemName)
.distinct()
.collect(Collectors.toMap(
TemplatePojo::getTemplateName, // key: 子系统编码
TemplatePojo::getOrderNum, // value: 排序号
(oldValue, newValue) -> oldValue
s -> s,
s -> seq.getAndIncrement(), // 每次获取当前值再自增从1开始
(o, n) -> o,
LinkedHashMap::new
));
Map<String, List<String>> collect = parameters.stream()
Map<String, Set<String>> collect = parameters.stream()
.collect(Collectors.groupingBy(
ParameterPojo::getSubsystemName,
Collectors.mapping(
ParameterPojo::getPartsName, // 提取 零部件名称字段
Collectors.toList()
Collectors.toSet()
)
));
if (ObjectUtils.isNotEmpty(modelID)) {
systemOrderMap.put("整车参数", (long) 0);
subsystemOrderMap.put("整车参数", 0);
DataEntryEngineModelPojo dataEntryEngineModelPojo = dataEntryEngineModelService.selectBymodelId(modelID);
//状态代号
String productNumber = dataEntryEngineModelPojo.getProductNumber();
@ -143,7 +148,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
Date productionDate = dataEntryEngineModelPojo.getProductionDate();
String manufacturerName = dataEntryEngineModelPojo.getManufacturerName();
String manufacturerAbbreviation = dataEntryEngineModelPojo.getManufacturerAbbreviation();
ArrayList<String> strings = new ArrayList<>();
Set<String> strings = new HashSet<>();
if (dataEntryEngineModelPojo.getYcOrOth().equals("玉柴")) {
strings.add("状态代号:" + productNumber);
} else {
@ -169,7 +174,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
// 保持顺序
return collect.entrySet().stream()
.sorted(Comparator.comparing(entry ->
systemOrderMap.getOrDefault(entry.getKey(), Long.MAX_VALUE)
subsystemOrderMap.getOrDefault(entry.getKey(), Integer.MAX_VALUE)
))
.collect(Collectors.toMap(
Map.Entry::getKey,
@ -291,8 +296,11 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
// TODO:根据权限过滤
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
// 管理员返回全部
if (menuParamViews.size() == 1 && menuParamViews.get(0).getIsAdmin() == 1) {
return pojoList;
for (MenuParamView menuParamView : menuParamViews) {
if (menuParamView.getIsAdmin() != null &&
menuParamView.getIsAdmin() == 1) {
return pojoList;
}
}
// 过滤返回
@ -305,53 +313,15 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.map(MenuParamView::getPermissionPath)
.collect(Collectors.toSet());
return pojoList.stream()
.filter(pojo -> matchesAnyPermission(pojo, result, model.getYcOrOth()))
.filter(pojo ->
modelRoleService.matchesAnyPermission(
pojo,
modelRoleService.buildPermissionIndex(result),
model.getYcOrOth() + "发动机数据"
))
.collect(Collectors.toList());
}
private boolean matchesAnyPermission(EngineParamDetailPojo pojo, Set<String> permissions, String ycOrOth) {
String cat = ycOrOth + "发动机数据";
String sys = pojo.getSubsystemName();
String comp = pojo.getPartsName(); // 可能为 null "/"
if (comp == null) comp = "/";
for (String perm : permissions) {
String[] parts = perm.split("/", -1); // -1 保留尾部空字符串
if (parts.length == 1) {
// "玉柴发动机数据"
if (perm.equals(cat)) {
return true;
}
} else if (parts.length == 2) {
// "玉柴发动机数据/点火子系统"
if (parts[0].equals(cat) && parts[1].equals(sys)) {
return true;
}
} else if (parts.length == 3) {
String permComp = parts[2];
// "玉柴发动机数据/点火子系统/气环"
if (parts[0].equals(cat) && parts[1].equals(sys) && permComp.equals(comp)) {
return true;
}
} else if (parts.length == 4) {
String permComp = parts[3];
if (parts[0].equals(cat)
&& parts[1].equals(sys)
&& "".equals(permComp)
) {
// 权限路径是 "玉柴发动机数据/点火子系统//"
if (comp.equals("/")) {
return true;
}
}
}
// 忽略长度 != 1,2,3 的非法路径可选加日志
}
return false;
}
/**
* 查询参数列表和模型
* 根据模型ID获取参数列表和模型信息
@ -568,8 +538,8 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
.doQuery(EngineParamDetailPojo.class));
} else {
Integer version = model.getVersionNumber();
if (request.getVersionNumber() != null) {
version = request.getVersionNumber();
if (request.getParameterVersion() != null) {
version = request.getParameterVersion();
}
paramDetails.addAll(bd.getBusinessDatabase()
.eq("engine_model_id", model.getId())
@ -801,7 +771,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
initiatedTaskPojo.setDocumentNo(UUID.randomUUID().toString());
initiatedTaskPojo.setProcessTitle(modelPojo.getModelName() + "-" + "分发参数填写人任务");
initiatedTaskPojo.setCurrentNode(disStatus);
initiatedTaskPojo.setCurrentProcessor(JSON.toJSONString(filledBys));
initiatedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys));
initiatedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/);
initiatedTaskPojo.setModelName(ObjectUtils.isNotEmpty(modelPojo) ? modelPojo.getModelName() : "");
initiatedTaskPojo.setModelId(modelPojo.getId());
@ -815,6 +785,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
bd.getBusinessDatabase()
.eq("id", initiatedTask.getId())
.update("current_node", disStatus)
.update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys))
.doUpdate(InitiatedTaskPojo.class);
}
@ -832,7 +803,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
completedTaskPojo.setDocumentNo(UUID.randomUUID().toString());
completedTaskPojo.setProcessTitle(modelPojo.getModelName() + "-" + "分发参数填写人任务");
completedTaskPojo.setCurrentNode(distStatus);
completedTaskPojo.setCurrentProcessor(JSON.toJSONString(filledBys));
completedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys));
completedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/);
completedTaskPojo.setModelName(ObjectUtils.isNotEmpty(modelPojo) ? modelPojo.getModelName() : "");
completedTaskPojo.setModelId(modelPojo.getId());
@ -847,6 +818,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
bd.getBusinessDatabase()
.eq("id", completedTask.getId())
.update("current_node", distStatus)
.update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(filledBys))
.doUpdate(CompletedTaskPojo.class);
}
}
@ -1058,4 +1030,62 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
}
@Override
public List<ParameterPojo> selectParamByIsUserId(List<ParameterPojo> list, String userId) {
// 没有人则返回全部
if (userId == null || userId.isEmpty()) {
return list;
}
// TODO:根据权限过滤
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
// 管理员返回全部
for (MenuParamView menuParamView : menuParamViews) {
if (menuParamView.getIsAdmin() != null && menuParamView.getIsAdmin() == 1) {
return list;
}
}
Set<String> result = menuParamViews.stream()
.map(MenuParamView::getPermissionPath)
.collect(Collectors.toSet());
return list.stream()
.filter(pojo ->
modelRoleService.matchesAnyPermission(
pojo,
modelRoleService.buildPermissionIndex(result),
Arrays.asList("玉柴发动机数据", "竞品发动机数据")
))
.collect(Collectors.toList());
}
@Override
public List<EngineParamDetailPojo> selectModelParamByIsUserId(List<EngineParamDetailPojo> list, String userId) {
// 没有人则返回全部
if (userId == null || userId.isEmpty()) {
return list;
}
// TODO:根据权限过滤
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
// 管理员返回全部
for (MenuParamView menuParamView : menuParamViews) {
if (menuParamView.getIsAdmin() != null && menuParamView.getIsAdmin() == 1) {
return list;
}
}
Set<String> result = menuParamViews.stream()
.map(MenuParamView::getPermissionPath)
.collect(Collectors.toSet());
return list.stream()
.filter(pojo ->
modelRoleService.matchesAnyPermission(
pojo,
modelRoleService.buildPermissionIndex(result),
Arrays.asList("玉柴发动机数据", "竞品发动机数据")
))
.collect(Collectors.toList());
}
}

View File

@ -8,10 +8,7 @@ import com.xdap.self_development.controller.request.ModelRolesRequest;
import com.xdap.self_development.controller.request.RolePerJoinRequest;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.domain.enums.ParamPermissionEnum;
import com.xdap.self_development.domain.pojo.ModelDepUserRolePojo;
import com.xdap.self_development.domain.pojo.ModelMenuParameterPojo;
import com.xdap.self_development.domain.pojo.ModelRolePermissionPojo;
import com.xdap.self_development.domain.pojo.ModelRolesPojo;
import com.xdap.self_development.domain.pojo.*;
import com.xdap.self_development.domain.view.MenuParamView;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.ModelRoleService;
@ -359,4 +356,132 @@ public class ModelRoleServiceImpl implements ModelRoleService {
return new HashMap<>();
}
@Override
public boolean matchesAnyPermission(
EngineParamDetailPojo pojo,
Map<String, Map<String, Set<String>>> permissionIndex,
String cat
) {
String sys = pojo.getSubsystemName();
String comp = Optional.ofNullable(pojo.getPartsName()).orElse("/");
Map<String, Set<String>> sysMap = permissionIndex.get(cat);
if (sysMap == null) return false;
// 1. 检查是否有 cat/*/* parts.length == 1
if (sysMap.containsKey("*")) {
return true;
}
// 2. 检查是否有 cat/sys/* parts.length == 2
Set<String> compSet = sysMap.get(sys);
if (compSet != null) {
if (compSet.contains("*")) {
return true;
}
return compSet.contains(comp);
}
return false;
}
@Override
public boolean matchesAnyPermission(EngineParamDetailPojo pojo, Map<String, Map<String, Set<String>>> permissionIndex, List<String> cats) {
String sys = pojo.getSubsystemName();
String comp = Optional.ofNullable(pojo.getPartsName()).orElse("/");
for (String cat : cats) {
Map<String, Set<String>> sysMap = permissionIndex.get(cat);
if (sysMap == null) {
continue;
}
if (sysMap.containsKey("*")) {
return true;
}
Set<String> compSet = sysMap.get(sys);
if (compSet != null) {
if (compSet.contains("*")) {
return true;
}
if (compSet.contains(comp)) {
return true;
}
}
}
return false;
}
@Override
public boolean matchesAnyPermission(
ParameterPojo pojo,
Map<String, Map<String, Set<String>>> permissionIndex,
List<String> cats
) {
String sys = pojo.getSubsystemName();
String comp = Optional.ofNullable(pojo.getPartsName()).orElse("/");
for (String cat : cats) {
Map<String, Set<String>> sysMap = permissionIndex.get(cat);
if (sysMap == null) {
continue;
}
if (sysMap.containsKey("*")) {
return true;
}
Set<String> compSet = sysMap.get(sys);
if (compSet != null) {
if (compSet.contains("*")) {
return true;
}
if (compSet.contains(comp)) {
return true;
}
}
}
return false;
}
@Override
public Map<String, Map<String, Set<String>>> buildPermissionIndex(
Set<String> permissions
) {
Map<String, Map<String, Set<String>>> index = new HashMap<>();
for (String perm : permissions) {
String[] parts = perm.split("/", -1);
String cat, sys, comp;
if (parts.length == 1) {
cat = parts[0];
sys = "*"; // 表示通配
comp = "*";
} else if (parts.length == 2) {
cat = parts[0];
sys = parts[1];
comp = "*";
} else if (parts.length == 3) {
cat = parts[0];
sys = parts[1];
comp = parts[2];
} else if (parts.length == 4 && parts[3].isEmpty()) {
// "cat/sys//" comp 应视为 "/"
cat = parts[0];
sys = parts[1];
comp = "/";
} else {
// 非法格式跳过或记录日志
continue;
}
index.computeIfAbsent(cat, k -> new HashMap<>())
.computeIfAbsent(sys, k -> new HashSet<>())
.add(comp);
}
return index;
}
}

View File

@ -13,6 +13,7 @@ import com.xdap.self_development.domain.pojo.TemplateAndParameterPojo;
import com.xdap.self_development.domain.pojo.TemplatePojo;
import com.xdap.self_development.domain.view.TemplateInfoView;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.ModelRoleService;
import com.xdap.self_development.service.ParameterService;
import com.xdap.self_development.utils.FormulaValidatorUtils;
import lombok.AllArgsConstructor;
@ -40,6 +41,8 @@ public class ParameterServiceImpl implements ParameterService {
private BusinessDatabase bd;
@Resource
private ParameterService myself;
@Resource
private ModelRoleService modelRoleService;
/**
* 根据条件获取参数
@ -84,6 +87,14 @@ public class ParameterServiceImpl implements ParameterService {
public TemplateInfoView maintenanceParameters(UpdateParameterForm form) {
// 公式格式检查
for (ParameterForm parameter : form.getParameterForms()) {
if ("数据平台手工录入".equals(parameter.getParameterSource()) && parameter.getDepartment() == null) {
throw new CommonException(String.format("参数'%s'部门不能为空", parameter.getParameterName()));
}
if (parameter.getPartsName() == null || parameter.getPartsName().isEmpty()) {
parameter.setPartsName("/");
}
if (Objects.equals(parameter.getParameterSource(), "公式计算")) {
Map<String, Object> validationResult = FormulaValidatorUtils.validateFormulaDetailed(
parameter.getNumberOrFormula());
@ -569,7 +580,9 @@ public class ParameterServiceImpl implements ParameterService {
result.getNewParameters().stream()
.map(parameter -> createTemplateAndParameter(newTemplate.getId(), parameter.getId()))
.collect(Collectors.toList());
bd.getBusinessDatabase().doBatchInsert(templateAndParameters);
if (!templateAndParameters.isEmpty()) {
bd.getBusinessDatabase().doBatchInsert(templateAndParameters);
}
}
// 如果不是原模板
else {
@ -578,7 +591,9 @@ public class ParameterServiceImpl implements ParameterService {
.filter(parameter -> !parameterIds.contains(parameter.getId()))
.map(parameter -> createTemplateAndParameter(newTemplate.getId(), parameter.getId()))
.collect(Collectors.toList());
bd.getBusinessDatabase().doBatchInsert(templateAndParameters);
if (!templateAndParameters.isEmpty()) {
bd.getBusinessDatabase().doBatchInsert(templateAndParameters);
}
}
// 保存修订记录
if (!result.getRevisionRecords().isEmpty()) {

View File

@ -65,7 +65,7 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
throw new CommonException("没有找到研发总院");
}
XdapDepartments xdapDepartment = bd.getSystemDatabase()
.eq("id", form.getDepartmentId())
.eq("name", form.getDepartment())
.eq("parent_id", currentDept.getId())
.doQueryFirst(XdapDepartments.class);
if (xdapDepartment == null) {

View File

@ -361,7 +361,6 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
List<String> subsystemParts = request.getSubsystemParts();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
// 1. 前置空指针检查提前拦截异常并给出明确信息
if (models == null || models.isEmpty()) {
log.error("导出失败机型列表为null或空");
throw new CommonException("导出失败:机型列表不能为空");
@ -380,21 +379,21 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
}
try {
// 设置响应头
setupExcelResponse(response, "机型参数对比表" + formatter.format(LocalDateTime.now()) + ".xlsx");
// 获取机型名称映射
Map<String, String> modelNames = getModelNameMapping(models);
// 从Redis加载并处理数据
Map<String, Map<String, String>> parameterValues = new HashMap<>();
Map<String, String[]> parameterSubsystemParts = new HashMap<>();
loadAndProcessRedisData(request, models, userID, subsystemParts, parameterValues, parameterSubsystemParts);
Map<String, Map<String, String>> parameterValues = new TreeMap<>();
;
// 构建EasyExcel的表头和数据
List<List<String>> excelData = buildExcelData(models, parameterValues, parameterSubsystemParts);
loadAndProcessRedisData(request, models, userID, subsystemParts, parameterValues);
// 使用EasyExcel写入
// 构建表头和数据
List<List<String>> excelData = buildExcelData(models, parameterValues);
// 写入
try (OutputStream outputStream = response.getOutputStream()) {
EasyExcel.write(outputStream)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
@ -420,7 +419,6 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
* @return 引擎参数详情映射
*/
public Map<String, List<EngineParamDetailPojo>> tcDataSelectByVersion(AnalysisVerRequest analysisRequest) {
List<ParameterPojo> parameters = engineParamDetailService.selectAllAndTcByNewVersion();
DataEntryEngineModelPojo dataEntryEngineModelPojo = engineModelService.selectBymodelId(analysisRequest.getEngineModelID());
if (dataEntryEngineModelPojo == null) {
throw new CommonException("查询失败:机型不存在");
@ -439,6 +437,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
.collect(Collectors.toList());
//批量查询所有系统数据
List<EngineParamDetailPojo> tcPojos = new ArrayList<>();
List<EngineParamDetailPojo> systemDataList = new ArrayList<>();
for (Map.Entry<String, String> subsystemPartsPair : subsystemPartsPairs) {
List<EngineParamDetailPojo> pojoList = bd.getBusinessDatabase()
@ -448,14 +447,22 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
.eq("parts_name", subsystemPartsPair.getValue())
.ne("parameter_source", "TC分类表")
.doQuery(EngineParamDetailPojo.class);
tcPojos.addAll(
bd.getBusinessDatabase()
.eq("engine_model_id", analysisRequest.getEngineModelID())
.eq("major_version", analysisRequest.getParameterVersion())
.eq("subsystem_name", subsystemPartsPair.getKey())
.eq("parts_name", subsystemPartsPair.getValue())
.eq("parameter_source", "TC分类表")
.doQuery(EngineParamDetailPojo.class)
);
if (ObjectUtils.isNotEmpty(pojoList)) {
systemDataList.addAll(pojoList);
}
}
//批量查询所有TC数据
Map<String, List<ParameterPojo>> parameterMapTc = parameters.stream()
.filter(x-> Objects.equals(x.getParameterSource(), "TC分类表"))
Map<String, List<EngineParamDetailPojo>> parameterMapTc = tcPojos.stream()
.collect(Collectors.groupingBy(p -> p.getPartsName() + "&&" + p.getParameterName()));
List<Map.Entry<String, String>> subsystemPartsPairsTc = analysisRequest.getSubsystemParts().stream()
.map(subsystemType -> {
@ -520,24 +527,22 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
List<EngineParamDetailPojo> tcDataPojos = allAttributes.stream()
.filter(attr -> parameterMapTc.containsKey(partsName + "&&" + attr.getIdattrtbutehame()))
.map(attr -> {
ParameterPojo param = parameterMapTc.get(partsName + "&&" + attr.getIdattrtbutehame()).get(0);
EngineParamDetailPojo pojo = new EngineParamDetailPojo();
pojo.setEngineModelId(dataEntryEngineModelPojo.getId());
pojo.setPartsName(param.getPartsName());
pojo.setSubsystemName(param.getSubsystemName());
pojo.setParameterName(param.getParameterName());
pojo.setParameterValue(attr.getFieldvalue());
pojo.setParameterId(param.getId());
return pojo;
EngineParamDetailPojo param = parameterMapTc.get(partsName + "&&" + attr.getIdattrtbutehame()).get(0);
param.setParameterValue(attr.getFieldvalue());
return param;
})
.collect(Collectors.toList());
systemDataList.addAll(tcDataPojos);
}
// 按权限过滤返回数据
List<EngineParamDetailPojo> filerData = engineParamDetailService.selectModelParamByIsUserId(systemDataList, analysisRequest.getUserID());
//将allPojos存到Redis,KEY为userID+engineModelID+预操作过期时间24小时
try {
String redisKey = analysisRequest.getUserID() + ":" + analysisRequest.getEngineModelID() + ":" + analysisRequest.getParameterVersion() + ":" + "ComparisonExport";
String jsonValue = objectMapper.writeValueAsString(systemDataList);
String jsonValue = objectMapper.writeValueAsString(filerData);
redisTemplate.opsForValue().set(redisKey, jsonValue, 24, java.util.concurrent.TimeUnit.HOURS);
log.info("成功将数据存储到RedisKEY: {}", redisKey);
} catch (Exception e) {
@ -545,7 +550,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
}
return systemDataList.stream().collect(Collectors.groupingBy(EngineParamDetailPojo::getSubsystemName));
return filerData.stream().collect(Collectors.groupingBy(EngineParamDetailPojo::getSubsystemName));
}
@Override
@ -740,8 +745,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
}
private void loadAndProcessRedisData(ModelComparisonExportRequest request, List<ModelItem> models, String userID,
List<String> subsystemParts, Map<String, Map<String, String>> parameterValues,
Map<String, String[]> parameterSubsystemParts) {
List<String> subsystemParts, Map<String, Map<String, String>> parameterValues) {
for (ModelItem model : models) {
try {
if (model == null) {
@ -772,7 +776,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
List<EngineParamDetailPojo> filteredPojos = filterEngineParams(allPojos, subsystemParts, request);
// 处理筛选后的数据
processFilteredParams(filteredPojos, modelId, parameterValues, parameterSubsystemParts);
processFilteredParams(filteredPojos, modelId, parameterValues);
}
} catch (Exception e) {
String errorMsg = model != null ?
@ -792,7 +796,7 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
}
return allPojos.stream()
.filter(Objects::nonNull) // 增加null过滤
// .filter(Objects::nonNull) // 增加null过滤
.filter(pojo -> subsystemParts.stream().anyMatch(part -> {
String[] parts = part.split("-");
if (parts.length != 2) return false;
@ -808,58 +812,51 @@ public class TcDataQueryServiceImpl implements TcDataQueryService {
if ("/".equals(partsName)) {
return Objects.equals(subsystem, pojo.getSubsystemName());
} else {
return Objects.equals(subsystem, pojo.getSubsystemName()) &&
Objects.equals(partsName, pojo.getPartsName());
return Objects.equals(subsystem, pojo.getSubsystemName()) && Objects.equals(partsName, pojo.getPartsName());
}
}))
.collect(Collectors.toList());
}
private void processFilteredParams(List<EngineParamDetailPojo> filteredPojos, String modelId,
Map<String, Map<String, String>> parameterValues,
Map<String, String[]> parameterSubsystemParts) {
Map<String, Map<String, String>> parameterValues) {
for (EngineParamDetailPojo pojo : filteredPojos) {
if (pojo == null || StringUtils.isEmpty(pojo.getParameterName())) {
log.warn("无效的参数项pojo为null或参数名为空");
if (pojo == null || StringUtils.isEmpty(pojo.getParameterName()) ||
StringUtils.isEmpty(pojo.getSubsystemName())) {
log.warn("跳过无效参数项: {}", pojo);
continue;
}
String subsystem = pojo.getSubsystemName();
String parts = pojo.getPartsName();
String paramName = pojo.getParameterName();
String paramValue = pojo.getParameterValue() == null ? "" : pojo.getParameterValue();
String paramValue = pojo.getParameterValue();
parameterValues.computeIfAbsent(paramName, k -> new HashMap<>()).put(modelId + "-" + pojo.getMajorVersion(), paramValue);
String key = subsystem + "-" + parts + "-" + paramName;
// 只在首次添加时存储子系统和零部件信息
parameterSubsystemParts.computeIfAbsent(paramName, k -> new String[]{
pojo.getSubsystemName() != null ? pojo.getSubsystemName() : "",
pojo.getPartsName() != null ? pojo.getPartsName() : ""
});
parameterValues.computeIfAbsent(key, k -> new HashMap<>())
.put(modelId + "-" + pojo.getMajorVersion(), paramValue);
}
}
private List<List<String>> buildExcelData(List<ModelItem> models,
Map<String, Map<String, String>> parameterValues,
Map<String, String[]> parameterSubsystemParts) {
Map<String, Map<String, String>> parameterValues) {
List<List<String>> excelData = new ArrayList<>();
// 构建数据行
for (Map.Entry<String, Map<String, String>> entry : parameterValues.entrySet()) {
List<String> row = new ArrayList<>();
String paramName = entry.getKey();
// 添加子系统和零部件信息
String[] subsystemParts = parameterSubsystemParts.get(paramName);
row.add(subsystemParts != null && subsystemParts.length >= 1 ? subsystemParts[0] : "");
row.add(subsystemParts != null && subsystemParts.length >= 2 ? subsystemParts[1] : "");
// 添加参数名
row.add(paramName);
// 添加各机型参数值
String key = entry.getKey();
Map<String, String> values = entry.getValue();
List<String> row = new ArrayList<>();
row.add(key.split("-")[0]); // 子系统
row.add(key.split("-")[1]); // 零部件
row.add(key.split("-")[2]); // 参数名
// 各机型值
for (ModelItem model : models) {
String modelId = model != null ? model.getModelId() : "";
String paramVersion = model != null ? model.getParameterVersion() : "";
row.add(values.getOrDefault(modelId + "-" + paramVersion, ""));
String modelKey = model != null ?
model.getModelId() + "-" + model.getParameterVersion() : "";
row.add(values.getOrDefault(modelKey, ""));
}
excelData.add(row);

View File

@ -301,6 +301,11 @@ public class TemplateServiceImpl implements TemplateService {
// 验证公式
for (ParameterPojo data : dataList) {
data.setCreatedBy(createBy);
if (data.getParameterName() == null) {
problems.setFlag(true);
problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的参数名称字段为空");
continue;
}
if (data.getSubsystemName() == null) {
problems.setFlag(true);
problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的子系统字段为空");
@ -311,11 +316,6 @@ public class TemplateServiceImpl implements TemplateService {
problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的参数类型字段为空");
continue;
}
if (data.getParameterName() == null) {
problems.setFlag(true);
problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的参数名称字段为空");
continue;
}
if (data.getPartsName() == null || data.getPartsName().isEmpty()) {
data.setPartsName("/");

View File

@ -293,7 +293,7 @@ public class TodoTaskServiceImpl implements TodoTaskService {
initiatedTaskPojo.setDocumentNo(UUID.randomUUID().toString());
initiatedTaskPojo.setProcessTitle(model.getModelName() + "-" + "分发参数责任人任务");
initiatedTaskPojo.setCurrentNode(disStatus);
initiatedTaskPojo.setCurrentProcessor(JSON.toJSONString(resIds));
initiatedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds));
initiatedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/);
initiatedTaskPojo.setModelName(ObjectUtils.isNotEmpty(model) ? model.getModelName() : "");
initiatedTaskPojo.setModelId(modelId);
@ -307,6 +307,7 @@ public class TodoTaskServiceImpl implements TodoTaskService {
bd.getBusinessDatabase()
.eq("id", initiatedTask.getId())
.update("current_node", disStatus)
.update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds))
.doUpdate(InitiatedTaskPojo.class);
}
@ -324,7 +325,7 @@ public class TodoTaskServiceImpl implements TodoTaskService {
completedTaskPojo.setDocumentNo(UUID.randomUUID().toString());
completedTaskPojo.setProcessTitle(model.getModelName() + "-" + "分发参数责任人任务");
completedTaskPojo.setCurrentNode(distStatus);
completedTaskPojo.setCurrentProcessor(JSON.toJSONString(resIds));
completedTaskPojo.setCurrentProcessor(ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds));
completedTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/);
completedTaskPojo.setModelName(ObjectUtils.isNotEmpty(model) ? model.getModelName() : "");
completedTaskPojo.setModelId(modelId);
@ -339,6 +340,7 @@ public class TodoTaskServiceImpl implements TodoTaskService {
bd.getBusinessDatabase()
.eq("id", completedTask.getId())
.update("current_node", distStatus)
.update("current_processor", ObjectUtils.isEmpty(toBeDistributedParams) ? null : JSON.toJSONString(resIds))
.doUpdate(CompletedTaskPojo.class);
}
}

View File

@ -113,7 +113,7 @@ public class YcTaskResultServiceImpl implements YcTaskResultService {
dto.setSystemName("研发数据管理平台");
dto.setUpdateDate(time2Str(todoTaskPojo.getCreationDate()));
dto.setActivityLabel(todoTaskPojo.getCurrentNode());
dto.setUrl(getTodoUrl());
dto.setUrl(getTodoUrl() + "&flowId=" + todoTaskPojo.getId());
dtos.add(dto);
}
ycTaskResult.setCode("ok");
@ -171,7 +171,8 @@ public class YcTaskResultServiceImpl implements YcTaskResultService {
dto.setTitle(completedTaskPojo.getProcessTitle());
dto.setCreateDate(time2Str(completedTaskPojo.getCreationDate()));
dto.setActivityName(completedTaskPojo.getCurrentNode());
dto.setUrl(getCompletedUrl());
dto.setSystemName("研发数据管理平台");
dto.setUrl(getCompletedUrl() + "&flowId=" + completedTaskPojo.getId());
list.add(dto);
});
ycTaskResult.setCode("ok");
@ -234,7 +235,8 @@ public class YcTaskResultServiceImpl implements YcTaskResultService {
dto.setTitle(initiatedTaskPojo.getProcessTitle());
dto.setCreateDate(time2Str(initiatedTaskPojo.getCreationDate()));
dto.setActivityName(initiatedTaskPojo.getCurrentNode());
dto.setUrl(getInitiatorUrl());
dto.setUrl(getInitiatorUrl() + "&flowId=" + initiatedTaskPojo.getId());
dto.setSystemName("研发数据管理平台");
list.add(dto);
});
ycTaskResult.setCode("ok");
@ -243,6 +245,27 @@ public class YcTaskResultServiceImpl implements YcTaskResultService {
return ycTaskResult;
}
@Override
public TodoTaskPojo getTodoById(String flowId) {
return bd.getBusinessDatabase()
.eq("id", flowId)
.doQueryFirst(TodoTaskPojo.class);
}
@Override
public InitiatedTaskPojo getInitiatorById(String flowId) {
return bd.getBusinessDatabase()
.eq("id", flowId)
.doQueryFirst(InitiatedTaskPojo.class);
}
@Override
public CompletedTaskPojo getCompletedById(String flowId) {
return bd.getBusinessDatabase()
.eq("id", flowId)
.doQueryFirst(CompletedTaskPojo.class);
}
private Date safeParseDateParam(String dateStr, Date defaultValue) {
if (dateStr == null || dateStr.trim().isEmpty()) {
return defaultValue;

View File

@ -60,7 +60,7 @@ deploy.powerjob.address=127.0.0.1:7700
# ====================== ??????MPAAS? ======================
mpaas.datasource[0].name=xdap_app_223770822127386625
mpaas.datasource[0].type=mysql
mpaas.datasource[0].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
mpaas.datasource[0].url=jdbc:mysql://127.0.0.1:3306/xdap_app_223770822127386625?serverTimezone=GMT%2B8&characterEncoding=utf-8
mpaas.datasource[0].driver-class-name=com.mysql.cj.jdbc.Driver
mpaas.datasource[0].username=root
mpaas.datasource[0].password=qwer12
@ -68,7 +68,7 @@ mpaas.datasource[0].minPoolSize=50
mpaas.datasource[0].maxPoolSize=1000
mpaas.datasource[1].name=yc_lrs_test_relsult
mpaas.datasource[1].type=mysql
mpaas.datasource[1].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
mpaas.datasource[1].url=jdbc:mysql://127.0.0.1:3306/yc_lrs_test_relsult?serverTimezone=GMT%2B8&characterEncoding=utf-8
mpaas.datasource[1].driver-class-name=com.mysql.cj.jdbc.Driver
mpaas.datasource[1].username=root
mpaas.datasource[1].password=qwer12
@ -76,7 +76,7 @@ mpaas.datasource[1].minPoolSize=50
mpaas.datasource[1].maxPoolSize=1000
mpaas.datasource[2].name=qygs
mpaas.datasource[2].type=mysql
mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8
mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/qygs?serverTimezone=GMT%2B8&characterEncoding=utf-8
mpaas.datasource[2].driver-class-name=com.mysql.cj.jdbc.Driver
mpaas.datasource[2].username=root
mpaas.datasource[2].password=qwer12