Merge remote-tracking branch 'origin/master'

This commit is contained in:
ys.git 2025-12-11 09:27:09 +08:00
commit ddc38c7648
16 changed files with 143 additions and 78 deletions

View File

@ -22,9 +22,14 @@ public class UserPermissionGetter {
@Resource @Resource
private RuntimeAppContextService runtimeAppContextService; private RuntimeAppContextService runtimeAppContextService;
public String getCurrentUserId() {
// return runtimeAppContextService.getCurrentUserId();
return "zjh";
}
// 获取子系统下的参数权限 // 获取子系统下的参数权限
public List<String> getParamPermissions(String subsystem) { public List<String> getParamPermissions(String subsystem) {
String currentUserId = runtimeAppContextService.getCurrentUserId(); String currentUserId = getCurrentUserId();
Set<String> result = new HashSet<>(); Set<String> result = new HashSet<>();
try { try {
// 获取用户权限 // 获取用户权限

View File

@ -34,10 +34,12 @@ public class DeleteController {
@GetMapping("/getTables") @GetMapping("/getTables")
public Response getTables() { public Response getTables() {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
List<Map<String, Object>> list = queryFactory.buildFromDatasource("yc_lrs_test_relsult") List<Map<String, Object>> list = queryFactory
.buildFromDatasource("yc_lrs_test_relsult")
.table("ads_prd_f_yfsjglpt_fdjlbjcjb") .table("ads_prd_f_yfsjglpt_fdjlbjcjb")
.doQuery(); .doQuery();
List<Map<String, Object>> list1 = queryFactory.buildFromDatasource("yc_lrs_test_relsult") List<Map<String, Object>> list1 = queryFactory
.buildFromDatasource("yc_lrs_test_relsult")
.table("ads_prd_f_tc_flsxb") .table("ads_prd_f_tc_flsxb")
.doQuery(); .doQuery();
map.put("ads_prd_f_yfsjglpt_fdjlbjcjb", list); map.put("ads_prd_f_yfsjglpt_fdjlbjcjb", list);

View File

@ -72,10 +72,9 @@ public class TemplateController {
@PostMapping("/import") @PostMapping("/import")
public Response importTemplate( public Response importTemplate(
@RequestPart("file") MultipartFile file, @RequestPart("file") MultipartFile file,
@RequestPart(value = "templateRowId", required = false) String templateRowId, @RequestPart(value = "templateRowId", required = false) String templateRowId
@RequestPart("createBy") String createBy
) { ) {
MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId, createBy); MyResponse templateImportProblemView = templateService.importTemplate(file, templateRowId);
if (templateImportProblemView.getFlag()) { if (templateImportProblemView.getFlag()) {
return Response.error("导入异常").data(templateImportProblemView); return Response.error("导入异常").data(templateImportProblemView);
} else { } else {

View File

@ -6,9 +6,6 @@ import javax.validation.constraints.NotBlank;
@Data @Data
public class ApprovalListForm { public class ApprovalListForm {
@NotBlank(message = "用户不能为空")
private String userId;
private String templateName; private String templateName;
private String username; private String username;
private String createDate; private String createDate;

View File

@ -8,7 +8,4 @@ import javax.validation.constraints.NotBlank;
public class InsertTemplateForm { public class InsertTemplateForm {
@NotBlank(message = "模板名不能为空") @NotBlank(message = "模板名不能为空")
private String templateName; private String templateName;
@NotBlank(message = "创建者不能为空")
private String createBy;
} }

View File

@ -19,7 +19,5 @@ public class StartApprovalRequest {
@NotEmpty(message = "批准人员不能为空") @NotEmpty(message = "批准人员不能为空")
private List<String> approveUsers; private List<String> approveUsers;
@NotBlank(message = "发起人不能为空")
private String createBy;
private String explanation; private String explanation;
} }

View File

@ -11,8 +11,6 @@ import java.util.List;
public class UpdateParameterForm { public class UpdateParameterForm {
@NotBlank(message = "模板不能为空") @NotBlank(message = "模板不能为空")
private String templateRowId; private String templateRowId;
@NotBlank(message = "创建者不能为空")
private String createBy;
@Valid @NotEmpty(message = "请至少修改一项参数") @Valid @NotEmpty(message = "请至少修改一项参数")
private List<ParameterForm> parameterForms; private List<ParameterForm> parameterForms;
} }

View File

@ -9,9 +9,6 @@ public class UpdateTemplateForm {
@NotBlank(message = "模板名不能为空") @NotBlank(message = "模板名不能为空")
private String templateName; private String templateName;
@NotBlank(message = "创建者不能为空")
private String createBy;
@NotBlank(message = "请选择模板") @NotBlank(message = "请选择模板")
private String templateRowId; private String templateRowId;
} }

View File

@ -23,6 +23,7 @@ public class SheetDataListener implements ReadListener<Parameter> {
private List<Parameter> cachedDataList; private List<Parameter> cachedDataList;
private String currentSheetName; private String currentSheetName;
MyResponse problems; MyResponse problems;
Integer maxOrder;
// 用于存储表头 // 用于存储表头
private Set<String> actualHeaders = new HashSet<>(); private Set<String> actualHeaders = new HashSet<>();
@ -34,13 +35,14 @@ public class SheetDataListener implements ReadListener<Parameter> {
private boolean validSheet = false; private boolean validSheet = false;
public SheetDataListener(TemplateService templateService, public SheetDataListener(TemplateService templateService,
String templateRowId, String createBy, MyResponse problems) { String templateRowId, String createBy, MyResponse problems, Integer maxOrder) {
this.templateService = templateService; this.templateService = templateService;
this.templateRowId = templateRowId; this.templateRowId = templateRowId;
this.createBy = createBy; this.createBy = createBy;
this.cachedDataList = new ArrayList<>(BATCH_SIZE); this.cachedDataList = new ArrayList<>(BATCH_SIZE);
this.problems = problems; this.problems = problems;
this.requiredHeaders = getIncludeColumnFieldNames(); this.requiredHeaders = getIncludeColumnFieldNames();
this.maxOrder = maxOrder;
} }
@Override @Override
@ -92,7 +94,8 @@ public class SheetDataListener implements ReadListener<Parameter> {
currentSheetName, currentSheetName,
templateRowId, templateRowId,
createBy, createBy,
problems problems,
maxOrder
); );
cachedDataList.clear(); cachedDataList.clear();
} }
@ -134,6 +137,7 @@ public class SheetDataListener implements ReadListener<Parameter> {
headerChecked = false; headerChecked = false;
validSheet = false; validSheet = false;
actualHeaders.clear(); actualHeaders.clear();
maxOrder += 1;
} }
private static Set<String> getIncludeColumnFieldNames() { private static Set<String> getIncludeColumnFieldNames() {

View File

@ -9,12 +9,16 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@SQLQuery(value = { @SQLQuery(value = {
@SQL(view = "selectParametersByTIdAndCreateBy",
sql = "select p.* from yfsjglpt_model_parameter p left join yfsjglpt_model_parameter_and_template tap on p.id = tap.parameter_id where tap.template_id = #templateId and p.created_by = #createdBy"),
@SQL(view = "selectParametersByTId",
sql = "select p.* from yfsjglpt_model_parameter p left join yfsjglpt_model_parameter_and_template tap on p.id = tap.parameter_id where tap.template_id = #templateId"),
@SQL(view = "getAllSubsystemAndPara", @SQL(view = "getAllSubsystemAndPara",
sql = "SELECT DISTINCT mp.subsystem_name, mp.parameter_name, mp.id, mp.parameter_type FROM yfsjglpt_model_parameter mp INNER JOIN yfsjglpt_model_parameter_and_template mpat ON mp.id = mpat.parameter_id INNER JOIN yfsjglpt_model_template mt ON mpat.template_id = mt.id INNER JOIN ( SELECT template_name, MAX(version) AS max_version FROM yfsjglpt_model_template WHERE status = 'COMPLETE' GROUP BY template_name ) latest ON mt.template_name = latest.template_name AND mt.version = latest.max_version WHERE mt.status = 'COMPLETE' ORDER BY mp.subsystem_name, mp.parameter_name, mp.id, mp.parameter_type"), sql = "SELECT DISTINCT mp.subsystem_name, mp.parameter_name, mp.id, mp.parameter_type, mt.order_num FROM yfsjglpt_model_parameter mp INNER JOIN yfsjglpt_model_parameter_and_template mpat ON mp.id = mpat.parameter_id INNER JOIN yfsjglpt_model_template mt ON mpat.template_id = mt.id INNER JOIN ( SELECT template_name, MAX(version) AS max_version FROM yfsjglpt_model_template WHERE status = 'COMPLETE' GROUP BY template_name ) latest ON mt.template_name = latest.template_name AND mt.version = latest.max_version WHERE mt.status = 'COMPLETE' ORDER BY mt.order_num"),
@SQL(view = "getAllSubsystem", @SQL(view = "getAllSubsystem",
sql = "SELECT DISTINCT mp.subsystem_name FROM yfsjglpt_model_parameter mp INNER JOIN yfsjglpt_model_parameter_and_template mpat ON mp.id = mpat.parameter_id INNER JOIN yfsjglpt_model_template mt ON mpat.template_id = mt.id INNER JOIN ( SELECT template_name, MAX(version) AS max_version FROM yfsjglpt_model_template WHERE status = 'COMPLETE' GROUP BY template_name ) latest ON mt.template_name = latest.template_name AND mt.version = latest.max_version WHERE mt.status = 'COMPLETE' ORDER BY mp.subsystem_name"), sql = "SELECT DISTINCT mp.subsystem_name FROM yfsjglpt_model_parameter mp INNER JOIN yfsjglpt_model_parameter_and_template mpat ON mp.id = mpat.parameter_id INNER JOIN yfsjglpt_model_template mt ON mpat.template_id = mt.id INNER JOIN ( SELECT template_name, MAX(version) AS max_version FROM yfsjglpt_model_template WHERE status = 'COMPLETE' GROUP BY template_name ) latest ON mt.template_name = latest.template_name AND mt.version = latest.max_version WHERE mt.status = 'COMPLETE' ORDER BY mp.subsystem_name"),
@SQL(view = "selectParametersByTemplateId", @SQL(view = "selectParametersByTemplateId",
sql = "select p.* from yfsjglpt_model_parameter p left join yfsjglpt_model_parameter_and_template tap on p.id = tap.parameter_id where p.id in (#permissionIds) and tap.template_id = #templateId"), sql = "select p.* from yfsjglpt_model_parameter p left join yfsjglpt_model_parameter_and_template tap on p.id = tap.parameter_id where p.id in (#parameterIds) and tap.template_id = #templateId"),
@SQL(view = "selectMaxNumber", @SQL(view = "selectMaxNumber",
sql = "SELECT max(parameter_number) AS max_number FROM yfsjglpt_model_parameter p LEFT JOIN yfsjglpt_model_parameter_and_template tap ON p.id = tap.parameter_id WHERE tap.template_id = #templateId") sql = "SELECT max(parameter_number) AS max_number FROM yfsjglpt_model_parameter p LEFT JOIN yfsjglpt_model_parameter_and_template tap ON p.id = tap.parameter_id WHERE tap.template_id = #templateId")
}) })
@ -46,6 +50,13 @@ public class Parameter extends MpaasBasePojo {
@ExcelProperty("备注") @ExcelProperty("备注")
private String remarks; private String remarks;
@ExcelIgnore
private String createdBy;
@ExcelIgnore
@Column(type=ColumnType.CALCULATE)
private Integer orderNum;
@ExcelIgnore @ExcelIgnore
@Column(value = "max_number",type=ColumnType.CALCULATE) @Column(value = "max_number",type=ColumnType.CALCULATE)
private Integer maxNumber; private Integer maxNumber;

View File

@ -10,9 +10,11 @@ import lombok.NoArgsConstructor;
import java.sql.Timestamp; import java.sql.Timestamp;
@SQLQuery(value = { @SQLQuery(value = {
@SQL(view = "getMaxOrder",
sql = "select *, MAX(order_num) AS maxOrder from yfsjglpt_model_template GROUP BY template_name"),
// 查找每个模板的最新版本并且优先级按照已发布审核中草稿状态转变只有这三种状态 // 查找每个模板的最新版本并且优先级按照已发布审核中草稿状态转变只有这三种状态
@SQL(view = "getLatestTemplate", @SQL(view = "getLatestTemplate",
sql = "SELECT ranked.id, ranked.template_name, ranked.version, ranked.status, ranked.created_time , ranked.published_time, xu.username AS createBy FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY template_name ORDER BY CASE WHEN status = 'COMPLETE' THEN 1 WHEN status = 'APPROVING' THEN 2 ELSE 3 END, version DESC) AS rn FROM yfsjglpt_model_template t WHERE status IN ('COMPLETE', 'DRAFT', 'APPROVING') ) ranked LEFT JOIN xdap_users xu ON xu.id = ranked.create_by WHERE rn = 1 ORDER BY CASE status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'RETURNED' THEN 4 WHEN 'REJECTED' THEN 5 ELSE 6 END ASC" sql = "SELECT ranked.id, ranked.template_name, ranked.version, ranked.status, ranked.created_time , ranked.published_time, xu.username AS 'createBy' FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY template_name ORDER BY CASE WHEN status = 'COMPLETE' THEN 1 WHEN status = 'APPROVING' THEN 2 ELSE 3 END, version DESC) AS rn FROM yfsjglpt_model_template t WHERE status IN ('COMPLETE', 'DRAFT', 'APPROVING') ) ranked LEFT JOIN xdap_users xu ON xu.id = ranked.create_by WHERE rn = 1 ORDER BY CASE status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'RETURNED' THEN 4 WHEN 'REJECTED' THEN 5 ELSE 6 END ASC"
), ),
// 获取所有模板的最新版本号包括所有状态 // 获取所有模板的最新版本号包括所有状态
@SQL(view = "getNewTemplate", @SQL(view = "getNewTemplate",
@ -35,13 +37,18 @@ public class Template extends MpaasBasePojo {
private Timestamp publishedTime; private Timestamp publishedTime;
private Integer orderNum; private Integer orderNum;
private String createBy; private String createBy;
private Integer orderNum;
public Template(String templateName, Integer version, String status, Timestamp createdTime, Timestamp publishedTime, String createBy) { @Column(type = ColumnType.CALCULATE)
private Integer maxOrder;
public Template(String templateName, Integer version, String status, Timestamp createdTime, Timestamp publishedTime, String createBy, Integer orderNum) {
this.templateName = templateName; this.templateName = templateName;
this.version = version; this.version = version;
this.status = status; this.status = status;
this.createdTime = createdTime; this.createdTime = createdTime;
this.publishedTime = publishedTime; this.publishedTime = publishedTime;
this.createBy = createBy; this.createBy = createBy;
this.orderNum = orderNum;
} }
} }

View File

@ -13,10 +13,10 @@ import java.util.List;
public interface TemplateService { public interface TemplateService {
PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form); PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form);
MyResponse importTemplate(MultipartFile file, String templateRowId, String createBy); MyResponse importTemplate(MultipartFile file, String templateRowId);
void processSheetData(List<Parameter> dataList, String sheetName, void processSheetData(List<Parameter> dataList, String sheetName,
String templateRowId, String createBy, MyResponse problems); String templateRowId, String createBy, MyResponse problems,Integer maxOrder);
void insertTemplate(InsertTemplateForm form); void insertTemplate(InsertTemplateForm form);

View File

@ -14,10 +14,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -154,20 +151,27 @@ public class CommonParameterServiceImpl implements CommonParameterService {
if (parameterList == null || parameterList.isEmpty()) { if (parameterList == null || parameterList.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
Map<String, List<Parameter>> groupedBySubsystem = parameterList.stream()
.collect(Collectors.groupingBy(Parameter::getSubsystemName)); // 先按orderNum排序然后按子系统分组保持插入顺序
List<ModelCommonItem> result = new ArrayList<>(); LinkedHashMap<String, List<Parameter>> groupedBySubsystem = parameterList.stream()
for (Map.Entry<String, List<Parameter>> entry : groupedBySubsystem.entrySet()) { .sorted(Comparator.comparingInt(Parameter::getOrderNum))
ModelCommonItem item = new ModelCommonItem(); .collect(Collectors.groupingBy(
item.setSubsystem(entry.getKey()); Parameter::getSubsystemName,
List<ParametersView> parameters = entry.getValue().stream() LinkedHashMap::new, // 保持插入顺序
.map(param -> new Collectors.toList()
ParametersView(param.getId(), param.getParameterName(), param.getParameterType())) ));
.collect(Collectors.toList());
item.setParameters(parameters); return groupedBySubsystem.entrySet().stream()
result.add(item); .map(entry -> {
} ModelCommonItem item = new ModelCommonItem();
return result; item.setSubsystem(entry.getKey());
List<ParametersView> parameters = entry.getValue().stream()
.map(param -> new ParametersView(param.getId(), param.getParameterName(), param.getParameterType()))
.collect(Collectors.toList());
item.setParameters(parameters);
return item;
})
.collect(Collectors.toList());
} }
/** /**

View File

@ -51,12 +51,21 @@ public class ParameterServiceImpl implements ParameterService {
} }
//todo 假定子系统名和模板名一致 //todo 假定子系统名和模板名一致
List<String> permissionIds = permissionGetter.getParamPermissions(template.getTemplateName()); Set<String> objects = new HashSet<>();
objects.addAll(permissionGetter.getParamPermissions(template.getTemplateName()));
objects.addAll(bd.getBusinessDatabase()
.viewQueryMode(true)
.view("selectParametersByTIdAndCreateBy")
.setVar("templateId", template.getId())
.setVar("createdBy", permissionGetter.getCurrentUserId())
.doQuery(Parameter.class).stream().map(Parameter::getId).collect(Collectors.toList()));
List<String> parameterIds = new ArrayList<>(objects);
return bd.getBusinessDatabase() return bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
.view("selectParametersByTemplateId") .view("selectParametersByTemplateId")
.setVar("templateId", template.getId()) .setVar("templateId", template.getId())
.setVar("permissionIds", permissionIds) .setVar("parameterIds", parameterIds)
.like("parameter_name", form.getParameterName()) .like("parameter_name", form.getParameterName())
.like("parts_name", form.getPartsName()) .like("parts_name", form.getPartsName())
.like("parameter_type", form.getParameterType()) .like("parameter_type", form.getParameterType())
@ -102,7 +111,7 @@ public class ParameterServiceImpl implements ParameterService {
default: default:
newVersionTemplate = new Template( newVersionTemplate = new Template(
benchmark.getLastTemplate().getTemplateName(), calculateNextVersion(benchmark.getLastTemplate().getVersion()), benchmark.getLastTemplate().getTemplateName(), calculateNextVersion(benchmark.getLastTemplate().getVersion()),
"DRAFT", Timestamp.valueOf(LocalDateTime.now()), null, form.getCreateBy() "DRAFT", Timestamp.valueOf(LocalDateTime.now()), null, permissionGetter.getCurrentUserId(),getMaxOrder()
); );
// 保存新模板 // 保存新模板
bd.getBusinessDatabase().doInsert(newVersionTemplate); bd.getBusinessDatabase().doInsert(newVersionTemplate);
@ -126,6 +135,18 @@ public class ParameterServiceImpl implements ParameterService {
return result; return result;
} }
private Integer getMaxOrder() {
Template template = bd.getBusinessDatabase()
.viewQueryMode(true)
.view("getMaxOrder")
.doQueryFirst(Template.class);
if (template != null) {
return template.getMaxOrder() + 1;
} else {
return 1;
}
}
@Override @Override
public List<ParametersView> getAllParameters(String subsystem) { public List<ParametersView> getAllParameters(String subsystem) {
return bd.getBusinessDatabase() return bd.getBusinessDatabase()
@ -158,7 +179,7 @@ public class ParameterServiceImpl implements ParameterService {
// 基准模板的参数 // 基准模板的参数
List<Parameter> parameters = bd.getBusinessDatabase() List<Parameter> parameters = bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
.view("selectParametersByTemplateId") .view("selectParametersByTId")
.setVar("templateId", baseTemplate.getId()) .setVar("templateId", baseTemplate.getId())
.doQuery(Parameter.class); .doQuery(Parameter.class);
@ -194,11 +215,12 @@ public class ParameterServiceImpl implements ParameterService {
} }
} }
private ParameterProcessingResult processParameters( @Transactional(rollbackFor = CommonException.class)
List<ParameterForm> parameterForms, public ParameterProcessingResult processParameters(
List<Parameter> existingParameters, List<ParameterForm> parameterForms,
Template baseTemplate, List<Parameter> existingParameters,
Template newTemplate) Template baseTemplate,
Template newTemplate)
{ {
Map<Integer, Parameter> parameterMap = createParameterMap(existingParameters); Map<Integer, Parameter> parameterMap = createParameterMap(existingParameters);
@ -252,13 +274,15 @@ public class ParameterServiceImpl implements ParameterService {
/** /**
* 处理新增参数 * 处理新增参数
*/ */
private void handleInsertOperation( @Transactional(rollbackFor = CommonException.class)
ParameterForm form, Template newTemplate, public void handleInsertOperation(
List<Parameter> newParameters, List<RevisionRecord> revisionRecords, ParameterForm form, Template newTemplate,
Template baseTemplate List<Parameter> newParameters, List<RevisionRecord> revisionRecords,
) { Template baseTemplate
) {
Parameter newParameter = new Parameter(); Parameter newParameter = new Parameter();
BeanUtils.copyProperties(form, newParameter); BeanUtils.copyProperties(form, newParameter);
newParameter.setCreatedBy(permissionGetter.getCurrentUserId());
Parameter parameter = bd.getBusinessDatabase() Parameter parameter = bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
@ -295,11 +319,12 @@ public class ParameterServiceImpl implements ParameterService {
/** /**
* 处理更新参数 * 处理更新参数
*/ */
private void handleUpdateOperation( @Transactional(rollbackFor = CommonException.class)
ParameterForm form, Map<Integer, Parameter> parameterMap, public void handleUpdateOperation(
Template newTemplate, List<Parameter> newParameters, ParameterForm form, Map<Integer, Parameter> parameterMap,
List<RevisionRecord> revisionRecords, Template baseTemplate Template newTemplate, List<Parameter> newParameters,
) { List<RevisionRecord> revisionRecords, Template baseTemplate
) {
Parameter originalParameter = parameterMap.get(form.getParameterNumber()); Parameter originalParameter = parameterMap.get(form.getParameterNumber());
if (originalParameter == null) { if (originalParameter == null) {
@ -308,6 +333,7 @@ public class ParameterServiceImpl implements ParameterService {
Parameter updatedParameter = new Parameter(); Parameter updatedParameter = new Parameter();
BeanUtils.copyProperties(form, updatedParameter); BeanUtils.copyProperties(form, updatedParameter);
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
String detail = getParameterChange(originalParameter, updatedParameter); String detail = getParameterChange(originalParameter, updatedParameter);
bd.getBusinessDatabase().doInsert(updatedParameter); bd.getBusinessDatabase().doInsert(updatedParameter);

View File

@ -3,6 +3,7 @@ package com.xdap.self_development.service.impl;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.definesys.mpaas.query.db.PageQueryResult; import com.definesys.mpaas.query.db.PageQueryResult;
import com.xdap.runtime.service.RuntimeDatasourceService; import com.xdap.runtime.service.RuntimeDatasourceService;
import com.xdap.self_development.common.UserPermissionGetter;
import com.xdap.self_development.config.BusinessDatabase; import com.xdap.self_development.config.BusinessDatabase;
import com.xdap.self_development.controller.form.*; import com.xdap.self_development.controller.form.*;
import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.exception.CommonException;
@ -41,6 +42,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
private RedisLockUtil redisLockUtil; private RedisLockUtil redisLockUtil;
@Resource @Resource
private DataEntryEngineModelService dataEntryEngineModelService; private DataEntryEngineModelService dataEntryEngineModelService;
@Resource
private UserPermissionGetter permissionGetter;
// 待办标志: userId -> flowId集合 // 待办标志: userId -> flowId集合
private static final String TODO_PREFIX = "approval:todo:"; private static final String TODO_PREFIX = "approval:todo:";
@ -91,7 +94,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
flow.setReviewUsers(JSON.toJSONString(request.getReviewUsers())); flow.setReviewUsers(JSON.toJSONString(request.getReviewUsers()));
flow.setCountersignUsers(JSON.toJSONString(request.getCountersignUsers())); flow.setCountersignUsers(JSON.toJSONString(request.getCountersignUsers()));
flow.setApproveUsers(JSON.toJSONString(request.getApproveUsers())); flow.setApproveUsers(JSON.toJSONString(request.getApproveUsers()));
flow.setCreateBy(request.getCreateBy()); flow.setCreateBy(permissionGetter.getCurrentUserId());
flow.setCreatedTime(Timestamp.valueOf(LocalDateTime.now())); flow.setCreatedTime(Timestamp.valueOf(LocalDateTime.now()));
flow.setFlowType(1); // 设置为模板审批流程 flow.setFlowType(1); // 设置为模板审批流程
flow.setExplanation(request.getExplanation()); flow.setExplanation(request.getExplanation());
@ -116,13 +119,13 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
@Transactional @Transactional
public List<TodoAndTemplateView> getApprovalList(ApprovalListForm form) { public List<TodoAndTemplateView> getApprovalList(ApprovalListForm form) {
List<TodoAndTemplateView> approvalList = new ArrayList<>(); List<TodoAndTemplateView> approvalList = new ArrayList<>();
Set<String> flowIds = new HashSet<>(Objects.requireNonNull(redisTemplate.opsForSet().members(TODO_PREFIX + form.getUserId()))); Set<String> flowIds = new HashSet<>(Objects.requireNonNull(redisTemplate.opsForSet().members(TODO_PREFIX + permissionGetter.getCurrentUserId())));
List<String> ids = new ArrayList<>(flowIds); List<String> ids = new ArrayList<>(flowIds);
List<TodoAndTemplateView> todoList =bd.getBusinessDatabase() List<TodoAndTemplateView> todoList =bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
.view("getTodoAndTemplate") .view("getTodoAndTemplate")
.setVar("ids", ids) .setVar("ids", ids)
.setVar("createBy", form.getUserId()) .setVar("createBy", permissionGetter.getCurrentUserId())
.setVar("templateName", form.getTemplateName()) .setVar("templateName", form.getTemplateName())
.setVar("status", form.getStatus()) .setVar("status", form.getStatus())
.setVar("createdTime", form.getCreateDate() == null ? "" : form.getCreateDate()) .setVar("createdTime", form.getCreateDate() == null ? "" : form.getCreateDate())
@ -192,7 +195,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
} }
private void processApprovalLogic(ApprovalFlow flow, HandleApprovalRequest request, String currentNode) { @Transactional(rollbackFor = CommonException.class)
public void processApprovalLogic(ApprovalFlow flow, HandleApprovalRequest request, String currentNode) {
// 记录审批结果 // 记录审批结果
ApprovalRecord record = new ApprovalRecord(); ApprovalRecord record = new ApprovalRecord();
record.setFlowId(flow.getId()); record.setFlowId(flow.getId());
@ -316,6 +320,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
// 处理下一节点流转 // 处理下一节点流转
@Transactional(rollbackFor = CommonException.class)
public void processNextNode(ApprovalFlow flow, String currentNode) { public void processNextNode(ApprovalFlow flow, String currentNode) {
// 检查当前节点是否满足流转条件 // 检查当前节点是否满足流转条件
if (!checkNodeComplete(flow, currentNode)) { if (!checkNodeComplete(flow, currentNode)) {
@ -388,7 +393,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
} }
private void cancelProcess(ApprovalFlow flow, String status) { @Transactional(rollbackFor = CommonException.class)
public void cancelProcess(ApprovalFlow flow, String status) {
// 更新流程状态 // 更新流程状态
flow.setFlowStatus(status); flow.setFlowStatus(status);
bd.getBusinessDatabase() bd.getBusinessDatabase()

View File

@ -41,10 +41,8 @@ public class TemplateServiceImpl implements TemplateService {
@Override @Override
public PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form) { public PageQueryResult<Template> getTemplateByCondition(TemplatePageForm form) {
// List<String> subsystemPermissions = permissionGetter.getSubsystemPermissions();
return bd.getBusinessDatabase() return bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
// .setVar("names", "")
.view("getLatestTemplate") .view("getLatestTemplate")
.like("template_name", form.getTemplateName()) .like("template_name", form.getTemplateName())
.doPageQuery(form.getPageNumber(), form.getPageSize(), Template.class); .doPageQuery(form.getPageNumber(), form.getPageSize(), Template.class);
@ -66,7 +64,7 @@ public class TemplateServiceImpl implements TemplateService {
// 创建新模板 // 创建新模板
Template newTemplate = new Template( Template newTemplate = new Template(
form.getTemplateName(), 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()), form.getTemplateName(), 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()),
null, form.getCreateBy() null, permissionGetter.getCurrentUserId(), 1
); );
bd.getBusinessDatabase().doInsert(newTemplate); bd.getBusinessDatabase().doInsert(newTemplate);
@ -86,7 +84,7 @@ public class TemplateServiceImpl implements TemplateService {
Template newTemplate = new Template( Template newTemplate = new Template(
form.getTemplateName(), 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()), form.getTemplateName(), 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()),
null, form.getCreateBy() null, permissionGetter.getCurrentUserId(), 1
); );
bd.getBusinessDatabase() bd.getBusinessDatabase()
@ -96,7 +94,8 @@ public class TemplateServiceImpl implements TemplateService {
@Override @Override
@Transactional(rollbackFor = CommonException.class) @Transactional(rollbackFor = CommonException.class)
public MyResponse importTemplate(MultipartFile file, String templateRowId, String createBy) { public MyResponse importTemplate(MultipartFile file, String templateRowId) {
String createBy = permissionGetter.getCurrentUserId();
// 验证文件是否为工作表 // 验证文件是否为工作表
if (file == null || file.isEmpty()) { if (file == null || file.isEmpty()) {
throw new CommonException("文件不能为空"); throw new CommonException("文件不能为空");
@ -110,11 +109,13 @@ public class TemplateServiceImpl implements TemplateService {
} }
MyResponse problems = MyResponse problems =
new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无")); new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无"));
Integer maxOrder = getMaxOrder();
try (InputStream inputStream = file.getInputStream()){ try (InputStream inputStream = file.getInputStream()){
EasyExcel.read( EasyExcel.read(
inputStream, inputStream,
Parameter.class, Parameter.class,
new SheetDataListener(this, templateRowId, createBy, problems) new SheetDataListener(this, templateRowId, createBy, problems, maxOrder)
).doReadAll(); ).doReadAll();
} catch (IOException e) { } catch (IOException e) {
@ -184,7 +185,7 @@ public class TemplateServiceImpl implements TemplateService {
@Override @Override
public void processSheetData(List<Parameter> dataList, String sheetName, public void processSheetData(List<Parameter> dataList, String sheetName,
String templateRowId, String createBy, MyResponse problems) { String templateRowId, String createBy, MyResponse problems, Integer maxOrder) {
if (dataList.isEmpty()) { if (dataList.isEmpty()) {
log.warn("Sheet {} 没有数据", sheetName); log.warn("Sheet {} 没有数据", sheetName);
return; return;
@ -192,6 +193,7 @@ public class TemplateServiceImpl implements TemplateService {
// 验证公式 // 验证公式
for (Parameter data : dataList) { for (Parameter data : dataList) {
data.setCreatedBy(permissionGetter.getCurrentUserId());
if (Objects.equals(data.getParameterSource(), "公式计算")) { if (Objects.equals(data.getParameterSource(), "公式计算")) {
Map<String, Object> validationResult = FormulaValidator.validateFormulaDetailed( Map<String, Object> validationResult = FormulaValidator.validateFormulaDetailed(
data.getNumberOrFormula()); data.getNumberOrFormula());
@ -253,7 +255,7 @@ public class TemplateServiceImpl implements TemplateService {
default: default:
lastTemplate = new Template( lastTemplate = new Template(
templateName, lastTemplate.getVersion()+1, "DRAFT", templateName, lastTemplate.getVersion()+1, "DRAFT",
Timestamp.valueOf(LocalDateTime.now()), null, createBy Timestamp.valueOf(LocalDateTime.now()), null, createBy, maxOrder
); );
bd.getBusinessDatabase() bd.getBusinessDatabase()
.doInsert(lastTemplate); .doInsert(lastTemplate);
@ -261,7 +263,7 @@ public class TemplateServiceImpl implements TemplateService {
} else { } else {
lastTemplate = new Template( lastTemplate = new Template(
templateName, 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()), templateName, 1, "DRAFT", Timestamp.valueOf(LocalDateTime.now()),
null, createBy null, createBy, maxOrder
); );
bd.getBusinessDatabase() bd.getBusinessDatabase()
.doInsert(lastTemplate); .doInsert(lastTemplate);
@ -326,4 +328,16 @@ public class TemplateServiceImpl implements TemplateService {
includeColumnFieldNames.add("remarks"); includeColumnFieldNames.add("remarks");
return includeColumnFieldNames; return includeColumnFieldNames;
} }
private Integer getMaxOrder() {
Template template = bd.getBusinessDatabase()
.viewQueryMode(true)
.view("getMaxOrder")
.doQueryFirst(Template.class);
if (template != null && template.getMaxOrder() != null) {
return template.getMaxOrder() + 1;
} else {
return 1;
}
}
} }