上线版本4.0(新版修改)
This commit is contained in:
parent
f120d45198
commit
27c5a0317f
@ -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}
|
||||
)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
/**
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ public class EngineParamDetailRequest {
|
||||
/**
|
||||
* 版本
|
||||
*/
|
||||
private Integer versionNumber;
|
||||
private Integer parameterVersion;
|
||||
/**
|
||||
* 发动机型号+产品编号
|
||||
*/
|
||||
|
||||
@ -39,6 +39,11 @@ public class DataEntryEngineModelDto extends MpaasBasePojo {
|
||||
*/
|
||||
private String modelName;
|
||||
|
||||
/**
|
||||
* yc或oth
|
||||
*/
|
||||
private String ycOrOth;
|
||||
|
||||
/**
|
||||
* 产品编号
|
||||
*/
|
||||
|
||||
@ -33,5 +33,5 @@ public class YcTodoTaskCommonResultDTO {
|
||||
private String urlMobileOA;
|
||||
private String urlWx;
|
||||
private String mobileSuit;
|
||||
|
||||
private String systemName;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -86,6 +86,11 @@ public class EngineReviewListPojo implements Serializable {
|
||||
*/
|
||||
private String createdBy;
|
||||
|
||||
/**
|
||||
* 版本
|
||||
*/
|
||||
private Integer objectVersionNumber;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@ -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() + "无法找到或有多个重名用户");
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -13,5 +13,5 @@ public interface AnalysisCommonParametersService {
|
||||
|
||||
List<DataEntryEngineModelPojo> selectModelByLike(ReportRequest request);
|
||||
|
||||
List<String> getAvailableParameters();
|
||||
List<String> getAvailableParameters(String userId);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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("该审批流没有绑定的参数,请维护好参数后重新发起审批");
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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,9 +296,12 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
|
||||
// TODO:根据权限过滤
|
||||
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
|
||||
// 管理员返回全部
|
||||
if (menuParamViews.size() == 1 && menuParamViews.get(0).getIsAdmin() == 1) {
|
||||
for (MenuParamView menuParamView : menuParamViews) {
|
||||
if (menuParamView.getIsAdmin() != null &&
|
||||
menuParamView.getIsAdmin() == 1) {
|
||||
return pojoList;
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤返回
|
||||
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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,8 +580,10 @@ public class ParameterServiceImpl implements ParameterService {
|
||||
result.getNewParameters().stream()
|
||||
.map(parameter -> createTemplateAndParameter(newTemplate.getId(), parameter.getId()))
|
||||
.collect(Collectors.toList());
|
||||
if (!templateAndParameters.isEmpty()) {
|
||||
bd.getBusinessDatabase().doBatchInsert(templateAndParameters);
|
||||
}
|
||||
}
|
||||
// 如果不是原模板
|
||||
else {
|
||||
List<TemplateAndParameterPojo> templateAndParameters =
|
||||
@ -578,8 +591,10 @@ public class ParameterServiceImpl implements ParameterService {
|
||||
.filter(parameter -> !parameterIds.contains(parameter.getId()))
|
||||
.map(parameter -> createTemplateAndParameter(newTemplate.getId(), parameter.getId()))
|
||||
.collect(Collectors.toList());
|
||||
if (!templateAndParameters.isEmpty()) {
|
||||
bd.getBusinessDatabase().doBatchInsert(templateAndParameters);
|
||||
}
|
||||
}
|
||||
// 保存修订记录
|
||||
if (!result.getRevisionRecords().isEmpty()) {
|
||||
bd.getBusinessDatabase().doBatchInsert(result.getRevisionRecords());
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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("成功将数据存储到Redis,KEY: {}", 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);
|
||||
|
||||
@ -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("/");
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user