存档版本

This commit is contained in:
zjh 2026-01-25 08:43:01 +08:00
parent 9d189ba232
commit dec6fdb710
19 changed files with 286 additions and 55 deletions

View File

@ -7,9 +7,9 @@ import com.xdap.api.moudle.user.pojo.XdapUsers;
import com.xdap.runtime.service.RuntimeDatasourceService; import com.xdap.runtime.service.RuntimeDatasourceService;
import com.xdap.self_development.common.MyResponse; import com.xdap.self_development.common.MyResponse;
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.domain.pojo.ResponsiblePersonPojo; import com.xdap.self_development.domain.pojo.ResponsiblePersonPojo;
import com.xdap.self_development.domain.view.DepartmentUserView; import com.xdap.self_development.domain.view.DepartmentUserView;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.ResponsiblePersonService; import com.xdap.self_development.service.ResponsiblePersonService;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -38,6 +38,15 @@ public class ResponsiblePersonController {
@Resource @Resource
private ResponsiblePersonService responsiblePersonService; private ResponsiblePersonService responsiblePersonService;
/*
* 获取责任部门
*
* */
@GetMapping("/getResponsibleDepartment")
public Response getResponsibleDepartment() {
return Response.ok().data(responsiblePersonService.getResponsibleDepartment());
}
/** /**
* 导入责任人 * 导入责任人
* *

View File

@ -21,7 +21,7 @@ public class ParameterForm {
/** /**
* 参数序号 * 参数序号
*/ */
private Integer parameterNumber; private String parameterNumber;
/** /**
* 子系统名称 * 子系统名称

View File

@ -26,6 +26,7 @@ public class UpdateBenchmarkingReportForm {
private String subsystem; private String subsystem;
private String partsName; private String partsName;
private String fileUrl; private String fileUrl;
private String fileName;
@NotBlank(message = "发起人不能为空") @NotBlank(message = "发起人不能为空")
private String userId; private String userId;

View File

@ -7,6 +7,7 @@
package com.xdap.self_development.domain.dto; package com.xdap.self_development.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.xdap.self_development.domain.pojo.DataEntryEngineModelPojo;
import com.xdap.self_development.domain.view.FlowNode; import com.xdap.self_development.domain.view.FlowNode;
import lombok.Data; import lombok.Data;
@ -54,4 +55,9 @@ public class ActivitiDataAndRecordDTO {
*/ */
private List<FlowNode> flowNodes; private List<FlowNode> flowNodes;
/**
* 机型数据
*/
private DataEntryEngineModelPojo model;
} }

View File

@ -1,8 +1,6 @@
package com.xdap.self_development.domain.pojo; package com.xdap.self_development.domain.pojo;
import com.definesys.mpaas.query.annotation.RowID; import com.definesys.mpaas.query.annotation.*;
import com.definesys.mpaas.query.annotation.RowIDType;
import com.definesys.mpaas.query.annotation.Table;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -17,6 +15,10 @@ import java.util.Date;
* @author Lys111 * @author Lys111
* @since 2025-11-26 * @since 2025-11-26
*/ */
@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")
})
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@Table("data_change_comment") @Table("data_change_comment")

View File

@ -8,6 +8,7 @@ package com.xdap.self_development.domain.pojo;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.definesys.mpaas.query.annotation.*; import com.definesys.mpaas.query.annotation.*;
import com.definesys.mpaas.query.model.MpaasBasePojo; import com.definesys.mpaas.query.model.MpaasBasePojo;
import lombok.Data; import lombok.Data;
@ -46,51 +47,61 @@ public class ParameterPojo extends MpaasBasePojo {
* 参数序号 * 参数序号
*/ */
@ExcelProperty("序号") @ExcelProperty("序号")
private Integer parameterNumber; @ColumnWidth(15)
private String parameterNumber;
/** /**
* 子系统名称 * 子系统名称
*/ */
@ExcelProperty("子系统") @ExcelProperty("子系统")
@ColumnWidth(20)
private String subsystemName; private String subsystemName;
/** /**
* 参数类型 * 参数类型
*/ */
@ExcelProperty("类型") @ExcelProperty("类型")
@ColumnWidth(20)
private String parameterType; private String parameterType;
/** /**
* 零部件名称 * 零部件名称
*/ */
@ExcelProperty("零部件名称") @ExcelProperty("零部件名称")
@ColumnWidth(20)
private String partsName; private String partsName;
/** /**
* 参数名称 * 参数名称
*/ */
@ExcelProperty("参数名称") @ExcelProperty("参数名称")
@ColumnWidth(20)
private String parameterName; private String parameterName;
/** /**
* 参数单位 * 参数单位
*/ */
@ExcelProperty("单位") @ExcelProperty("单位")
@ColumnWidth(15)
private String unit; private String unit;
/** /**
* 参数来源 * 参数来源
*/ */
@ExcelProperty("参数计划来源") @ExcelProperty("参数计划来源")
@ColumnWidth(20)
private String parameterSource; private String parameterSource;
/** /**
* 分类属性表编号或公式 * 分类属性表编号或公式
*/ */
@ExcelProperty("当前可适用的分类属性表编号(需要修订)或公式") @ExcelProperty("当前可适用的分类属性表编号(需要修订)或公式")
@ColumnWidth(30)
private String numberOrFormula; private String numberOrFormula;
/** /**
* 填写部门 * 填写部门
*/ */
@ExcelProperty("填写部门") @ExcelProperty("填写部门")
@ColumnWidth(20)
private String department; private String department;
/** /**
* 备注信息 * 备注信息
*/ */
@ExcelProperty("备注") @ExcelProperty("备注")
@ColumnWidth(30)
private String remarks; private String remarks;
/** /**
* 创建者 * 创建者
@ -110,7 +121,7 @@ public class ParameterPojo extends MpaasBasePojo {
@Column(value = "max_number",type=ColumnType.CALCULATE) @Column(value = "max_number",type=ColumnType.CALCULATE)
private Integer maxNumber; private Integer maxNumber;
public ParameterPojo(Integer parameterNumber, String subsystemName, String parameterType, public ParameterPojo(String parameterNumber, String subsystemName, String parameterType,
String partsName, String parameterName, String unit, String parameterSource, String partsName, String parameterName, String unit, String parameterSource,
String numberOrFormula, String department, String remarks) { String numberOrFormula, String department, String remarks) {
this.parameterNumber = parameterNumber; this.parameterNumber = parameterNumber;
@ -124,4 +135,18 @@ public class ParameterPojo extends MpaasBasePojo {
this.department = department; this.department = department;
this.remarks = remarks; this.remarks = remarks;
} }
public static String[] getFieldDescriptions() {
return new String[]{
"非必填",
"必填",
"必填",
"非必填",
"必填",
"非必填",
"必填并且为下列之一数据平台手工录入、TC分类表、公式计算",
"非必填,如果参数来源为'公式计算'则必填;公式示例:Π*(直径(内径)/2)*(直径(内径)/2)",
"非必填,如果参数来源为'数据平台手工录入'则必填;部门必须为研发总院的子部门,如‘研发部’",
"非必填"};
}
} }

View File

@ -1,6 +1,7 @@
package com.xdap.self_development.domain.pojo; package com.xdap.self_development.domain.pojo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.definesys.mpaas.query.annotation.*; import com.definesys.mpaas.query.annotation.*;
import com.definesys.mpaas.query.model.MpaasBasePojo; import com.definesys.mpaas.query.model.MpaasBasePojo;
import lombok.Data; import lombok.Data;
@ -21,18 +22,30 @@ public class ResponsiblePersonPojo extends MpaasBasePojo {
private String departmentId; private String departmentId;
private String userId; private String userId;
@ExcelProperty("责任部门") @ExcelProperty("责任部门")
@ColumnWidth(20)
private String department; private String department;
@ExcelProperty("子系统") @ExcelProperty("子系统")
@ColumnWidth(20)
private String subsystem; private String subsystem;
private Integer personLevel; private Integer personLevel;
private Timestamp creationDate; private Timestamp creationDate;
@ExcelProperty("责任人") @ExcelProperty("责任人")
@ColumnWidth(20)
@Column(type = ColumnType.CALCULATE) @Column(type = ColumnType.CALCULATE)
private String username; private String username;
@ExcelProperty("工号")
@Column(type = ColumnType.JAVA) @Column(type = ColumnType.JAVA)
@ExcelProperty("工号")
@ColumnWidth(20)
private String userAccount; private String userAccount;
public static String[] getFieldDescriptions() {
return new String[]{
"必填,并且必须为研发总院的子部门,如‘研发部’",
"必填",
"必填,填写名字即可",
"非必填,如果名字有重复,则加上工号"};
}
} }

View File

@ -20,7 +20,7 @@ public class RevisionRecordPojo extends MpaasBasePojo {
private String id; private String id;
private String templateName; private String templateName;
private Integer version; private Integer version;
private Integer parameterNumber; private String parameterNumber;
private String modifyDetails; private String modifyDetails;
private String templateId; private String templateId;
private String preTemplateId; private String preTemplateId;
@ -31,7 +31,7 @@ public class RevisionRecordPojo extends MpaasBasePojo {
private Integer returnNum; private Integer returnNum;
public RevisionRecordPojo(String templateName, Integer version, public RevisionRecordPojo(String templateName, Integer version,
Integer parameterNumber, String modifyDetails, String parameterNumber, String modifyDetails,
String templateId, String preTemplateId, String templateId, String preTemplateId,
Timestamp createTime, String parameterId, Timestamp createTime, String parameterId,
Integer returnNum) { Integer returnNum) {

View File

@ -25,10 +25,10 @@ public class PersonReadListener implements ReadListener<ResponsiblePersonPojo> {
@Override @Override
public void invoke(ResponsiblePersonPojo responsiblePerson, AnalysisContext analysisContext) { public void invoke(ResponsiblePersonPojo responsiblePerson, AnalysisContext analysisContext) {
if (analysisContext.readRowHolder().getRowIndex() == 1) return;
if ( if (
responsiblePerson.getDepartment() == null || responsiblePerson.getDepartment() == null ||
responsiblePerson.getUsername() == null || responsiblePerson.getUsername() == null ||
responsiblePerson.getUserAccount() == null ||
responsiblePerson.getSubsystem() == null responsiblePerson.getSubsystem() == null
) { ) {
problems.setFlag(true); problems.setFlag(true);
@ -37,9 +37,9 @@ public class PersonReadListener implements ReadListener<ResponsiblePersonPojo> {
} }
XdapUserView user = responsiblePersonService XdapUserView user = responsiblePersonService
.getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getUserAccount(), responsiblePerson.getUsername()); .getUserByDeptAndName(responsiblePerson.getDepartment(), responsiblePerson.getUserAccount(), responsiblePerson.getUsername());
if (user == null || user.getUserId() == null) { if (user.getUserId() == null) {
problems.setFlag(true); problems.setFlag(true);
problems.getErrors().add("责任人导入失败:用户" + responsiblePerson.getUsername() + "无法找到"); problems.getErrors().add("责任人导入失败:用户" + responsiblePerson.getUsername() + "无法找到或有多个重名用户");
} else if (user.getDepartmentId() == null) { } else if (user.getDepartmentId() == null) {
problems.setFlag(true); problems.setFlag(true);
problems.getErrors().add("责任人导入失败:部门" + responsiblePerson.getUsername() + "无法找到"); problems.getErrors().add("责任人导入失败:部门" + responsiblePerson.getUsername() + "无法找到");

View File

@ -3,6 +3,7 @@ package com.xdap.self_development.listener;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.metadata.data.ReadCellData; import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.fastjson2.JSON;
import com.xdap.self_development.common.MyResponse; import com.xdap.self_development.common.MyResponse;
import com.xdap.self_development.domain.pojo.ParameterPojo; import com.xdap.self_development.domain.pojo.ParameterPojo;
import com.xdap.self_development.service.TemplateService; import com.xdap.self_development.service.TemplateService;
@ -20,31 +21,79 @@ public class SheetDataListener implements ReadListener<ParameterPojo> {
private final String templateRowId; private final String templateRowId;
private final String createBy; private final String createBy;
private final List<ParameterPojo> cachedDataList; private final List<ParameterPojo> cachedDataList;
private final List<String> subDepartments;
private String currentSheetName; private String currentSheetName;
MyResponse problems; MyResponse problems;
public SheetDataListener(TemplateService templateService, public SheetDataListener(TemplateService templateService,
String templateRowId, String createBy, MyResponse problems) { String templateRowId, String createBy,
MyResponse problems, List<String> subDepartments) {
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.subDepartments = subDepartments;
} }
@Override @Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) { public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
currentSheetName = context.readSheetHolder().getSheetName(); currentSheetName = context.readSheetHolder().getSheetName();
log.info("开始解析Sheet: {}", currentSheetName); log.info("开始解析Sheet: {}", currentSheetName);
log.info("开始解析表头行: {}", context.readRowHolder().getRowIndex());
log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
} }
@Override @Override
public void invoke(ParameterPojo data, AnalysisContext context) { public void invoke(ParameterPojo data, AnalysisContext context) {
log.info("开始解析数据行: {}", context.readRowHolder().getRowIndex());
log.info("解析到一条数据: {}", data);
if (context.readRowHolder().getRowIndex() == 1) return;
// 参数校验
if (data == null) {
return;
}
if (currentSheetName == null) { if (currentSheetName == null) {
currentSheetName = context.readSheetHolder().getSheetName(); currentSheetName = context.readSheetHolder().getSheetName();
} }
if (!"数据平台手工录入".equals(data.getParameterSource())
&& !"TC分类表".equals(data.getParameterSource())
&& !"公式计算".equals(data.getParameterSource())
) {
problems.setFlag(true);
problems.getErrors().add(String.format("模板导入失败:" + "模板'%s'的参数'%s'来源错误, %s",
currentSheetName, data.getParameterName(),
data.getParameterSource()));
return;
}
if ("公式计算".equals(data.getParameterSource()) && data.getNumberOrFormula() == null) {
problems.setFlag(true);
problems.getErrors().add(String.format("模板导入失败:" + "模板'%s'的参数'%s'公式不能为空",
currentSheetName, data.getParameterName()));
return;
}
if ("数据平台手工录入".equals(data.getParameterSource())) {
if (data.getDepartment() == null) {
problems.setFlag(true);
problems.getErrors().add(String.format("模板导入失败:" + "模板'%s'的参数'%s'部门不能为空",
currentSheetName, data.getParameterName()));
return;
}
// if (!subDepartments.isEmpty() && !subDepartments.contains(data.getDepartment())) {
// String errorMsg = String.format("模板导入失败:"+"模板'%s'的参数'%s'部门找不到, %s",
// currentSheetName, data.getParameterName(),
// data.getDepartment());
// problems.setFlag(true);
// problems.getErrors().add(errorMsg);
// return;
// }
}
cachedDataList.add(data); cachedDataList.add(data);
// 达到批处理大小时提前处理 // 达到批处理大小时提前处理

View File

@ -1,6 +1,7 @@
package com.xdap.self_development.service; package com.xdap.self_development.service;
import com.definesys.mpaas.query.db.PageQueryResult; import com.definesys.mpaas.query.db.PageQueryResult;
import com.xdap.api.moudle.department.pojo.entity.XdapDepartments;
import com.xdap.api.moudle.user.pojo.XdapUsers; import com.xdap.api.moudle.user.pojo.XdapUsers;
import com.xdap.self_development.common.MyResponse; import com.xdap.self_development.common.MyResponse;
import com.xdap.self_development.controller.form.*; import com.xdap.self_development.controller.form.*;
@ -41,8 +42,9 @@ public interface ResponsiblePersonService {
MyResponse importPerson(MultipartFile file, String userId); MyResponse importPerson(MultipartFile file, String userId);
void importAllPerson(List<ResponsiblePersonPojo> cachedDataList, MyResponse problems); void importAllPerson(List<ResponsiblePersonPojo> cachedDataList, MyResponse problems);
XdapUserView getUserByDeptAndName(String department, String userAccount, String username); XdapUserView getUserByDeptAndName(String department, String userAccount, String username);
List<XdapDepartments> getResponsibleDepartment();
} }

View File

@ -516,7 +516,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
bd.getBusinessDatabase().doInsert(todoTask); bd.getBusinessDatabase().doInsert(todoTask);
} }
// 更新发起和已办 // 更新发起和已办
myself.updateTasks(flow, status.getDesc(), 0, node); myself.updateTasks(flow, "编制", 0, node);
} }
@Override @Override
@ -751,7 +751,8 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.update("status_code", ParamValueVersionEnum.UNDER.getCode()) .update("status_code", ParamValueVersionEnum.UNDER.getCode())
.update("status_description", ParamValueVersionEnum.UNDER.getDesc()) .update("status_description", ParamValueVersionEnum.UNDER.getDesc())
.update("last_update_date", new Date()) .update("last_update_date", new Date())
.eq("id", reviewListPojo.getId()).doUpdate(EngineReviewListPojo.class); .eq("id", reviewListPojo.getId())
.doUpdate(EngineReviewListPojo.class);
} }
// 添加新待办 // 添加新待办
@ -762,17 +763,19 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
1 1
); );
ApprovalRecordPojo lastedRecord = bd.getBusinessDatabase() ParamApprovalRecordPojo lastedRecord = bd.getBusinessDatabase()
.eq("flow_id", reviewListPojo.getId()) .eq("approval_id", reviewListPojo.getId())
.orderBy("approval_time", "desc") .orderBy("operate_time", "desc")
.doQueryFirst(ApprovalRecordPojo.class); .doQueryFirst(ParamApprovalRecordPojo.class);
bd.getBusinessDatabase().doInsert( bd.getBusinessDatabase().doInsert(
new ApprovalRecordPojo( new ParamApprovalRecordPojo(
reviewListPojo.getId(), reviewListPojo.getId(),
"重新发起", "重新发起",
xdapDeptUsersService.selectUserByID(userId).getUsername(), xdapDeptUsersService.selectUserByID(userId).getUsername(),
"重新发起", "重新发起",
Timestamp.valueOf(LocalDateTime.now()),
"MSG", "MSG",
firstNode.getNodeOrder(),
Timestamp.valueOf(LocalDateTime.now()), Timestamp.valueOf(LocalDateTime.now()),
lastedRecord.getApprovalLevel() + 1 lastedRecord.getApprovalLevel() + 1
) )
@ -892,7 +895,6 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
* *
* @param flowId 流程ID * @param flowId 流程ID
* @param userId 用户ID * @param userId 用户ID
* @return void
*/ */
@Override @Override
public void directSendingApproval(String flowId, String userId) { public void directSendingApproval(String flowId, String userId) {
@ -1166,11 +1168,19 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
*/ */
@Override @Override
public ActivitiDataAndRecordDTO showActivitiData(ShowActivitiDTO showActivitiDTO) { public ActivitiDataAndRecordDTO showActivitiData(ShowActivitiDTO showActivitiDTO) {
String approvalId = showActivitiDTO.getApprovalId(); EngineReviewListPojo engineFlow = bd.getBusinessDatabase()
if (approvalId == null) { .eq("id", showActivitiDTO.getApprovalId() == null ? "" : showActivitiDTO.getApprovalId())
.doQueryFirst(EngineReviewListPojo.class);
if (engineFlow == null || showActivitiDTO.getApprovalId() == null) {
throw new CommonException("无效的审批记录"); throw new CommonException("无效的审批记录");
} }
String approvalId = engineFlow.getId();
ActivitiDataAndRecordDTO activitiDataAndRecordDTO = new ActivitiDataAndRecordDTO(); ActivitiDataAndRecordDTO activitiDataAndRecordDTO = new ActivitiDataAndRecordDTO();
// 获取机型
DataEntryEngineModelPojo model = bd.getBusinessDatabase()
.eq("id", engineFlow.getModelId())
.doQueryFirst(DataEntryEngineModelPojo.class);
activitiDataAndRecordDTO.setModel(model);
//查找审批数据 //查找审批数据
ArrayList<ActivitiDataDTO> activitiDataDTOS = new ArrayList<>(); ArrayList<ActivitiDataDTO> activitiDataDTOS = new ArrayList<>();
@ -1184,7 +1194,9 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
} }
// 查询数据变更评论 // 查询数据变更评论
List<DataChangeCommentPojo> dataChangeCommentPojos = bd.getBusinessDatabase() List<DataChangeCommentPojo> dataChangeCommentPojos = bd.getBusinessDatabase()
.in("param_detail_id", ids) .viewQueryMode(true)
.view("selectLastedComment")
.setVar("paramIds", ids)
.doQuery(DataChangeCommentPojo.class); .doQuery(DataChangeCommentPojo.class);
for (DataChangeCommentPojo dataChangeCommentPojo : dataChangeCommentPojos) { for (DataChangeCommentPojo dataChangeCommentPojo : dataChangeCommentPojos) {
ActivitiDataDTO activitiDataDTO = new ActivitiDataDTO(); ActivitiDataDTO activitiDataDTO = new ActivitiDataDTO();

View File

@ -1170,7 +1170,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
todoTask.setCurrentProcessor(JSON.toJSONString(Collections.singletonList(flow.getCreateBy()))); todoTask.setCurrentProcessor(JSON.toJSONString(Collections.singletonList(flow.getCreateBy())));
bd.getBusinessDatabase().doInsert(todoTask); bd.getBusinessDatabase().doInsert(todoTask);
} }
myself.updateTasks(flow, Objects.equals(report.getStatus(), "RETURNED") ? "已撤回" : "已拒绝", 0, node); myself.updateTasks(flow, "编制", 0, node);
} }
@Override @Override

View File

@ -606,7 +606,8 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
List<EngineParamDetailPojo> detailPojos = selectByResId(userID); List<EngineParamDetailPojo> detailPojos = selectByResId(userID);
List<EngineParamDetailPojo> paramDetailPojos = detailPojos.stream() List<EngineParamDetailPojo> paramDetailPojos = detailPojos.stream()
.filter(x -> x.getEngineModelId().equals(engineModelId) .filter(x -> x.getEngineModelId().equals(engineModelId)
&& ObjectUtils.isEmpty(x.getFilledBy()) && Objects.equals(x.getParameterSource(), "数据平台手工录入")) && ObjectUtils.isEmpty(x.getFilledBy())
&& Objects.equals(x.getParameterSource(), "数据平台手工录入"))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (ObjectUtils.isEmpty(paramDetailPojos)) { if (ObjectUtils.isEmpty(paramDetailPojos)) {
//软删除这个代办人的任务 //软删除这个代办人的任务

View File

@ -336,7 +336,8 @@ public class ParameterServiceImpl implements ParameterService {
BeanUtils.copyProperties(form, newParameter); BeanUtils.copyProperties(form, newParameter);
newParameter.setCreatedBy(userId); newParameter.setCreatedBy(userId);
newParameter.setId(null); newParameter.setId(null);
newParameter.setParameterNumber(String.valueOf(new Random().nextInt(100000)));
/*
ParameterPojo parameter = bd.getBusinessDatabase() ParameterPojo parameter = bd.getBusinessDatabase()
.viewQueryMode(true) .viewQueryMode(true)
.view("selectMaxNumber") .view("selectMaxNumber")
@ -357,6 +358,7 @@ public class ParameterServiceImpl implements ParameterService {
int i = Math.max(maxNum + 1, parameter.getMaxNumber() + 1); int i = Math.max(maxNum + 1, parameter.getMaxNumber() + 1);
newParameter.setParameterNumber(i); newParameter.setParameterNumber(i);
} }
*/
newParameter.setId(null); newParameter.setId(null);
bd.getBusinessDatabase().doInsert(newParameter); bd.getBusinessDatabase().doInsert(newParameter);
newParameters.add(newParameter); newParameters.add(newParameter);

View File

@ -1,7 +1,6 @@
package com.xdap.self_development.service.impl; package com.xdap.self_development.service.impl;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.definesys.mpaas.query.db.PageQueryResult; import com.definesys.mpaas.query.db.PageQueryResult;
import com.xdap.api.moudle.department.pojo.entity.XdapDepartments; import com.xdap.api.moudle.department.pojo.entity.XdapDepartments;
import com.xdap.api.moudle.user.pojo.XdapUsers; import com.xdap.api.moudle.user.pojo.XdapUsers;
@ -15,6 +14,7 @@ import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.listener.PersonReadListener; import com.xdap.self_development.listener.PersonReadListener;
import com.xdap.self_development.service.ResponsiblePersonService; import com.xdap.self_development.service.ResponsiblePersonService;
import com.xdap.self_development.service.XdapDeptUsersService; import com.xdap.self_development.service.XdapDeptUsersService;
import com.xdap.self_development.utils.DescriptionWriteUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -28,9 +28,7 @@ import java.net.URLEncoder;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -258,7 +256,7 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
.doQuery(ResponsiblePersonPojo.class); .doQuery(ResponsiblePersonPojo.class);
EasyExcel.write(response.getOutputStream(), ResponsiblePersonPojo.class) EasyExcel.write(response.getOutputStream(), ResponsiblePersonPojo.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new DescriptionWriteUtils(ResponsiblePersonPojo.getFieldDescriptions()))
.includeColumnFieldNames(getIncludeColumnFieldNames()) .includeColumnFieldNames(getIncludeColumnFieldNames())
.sheet("责任人") .sheet("责任人")
.doWrite(list); .doWrite(list);
@ -289,7 +287,7 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
list.add(new ResponsiblePersonPojo()); list.add(new ResponsiblePersonPojo());
EasyExcel.write(response.getOutputStream(), ResponsiblePersonPojo.class) EasyExcel.write(response.getOutputStream(), ResponsiblePersonPojo.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new DescriptionWriteUtils(ResponsiblePersonPojo.getFieldDescriptions()))
.includeColumnFieldNames(getIncludeColumnFieldNames()) .includeColumnFieldNames(getIncludeColumnFieldNames())
.sheet("责任人") .sheet("责任人")
.doWrite(list); .doWrite(list);
@ -346,20 +344,52 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
*/ */
public XdapUserView getUserByDeptAndName(String department, String userAccount, String username) { public XdapUserView getUserByDeptAndName(String department, String userAccount, String username) {
XdapUserView xdapUserView = new XdapUserView(); XdapUserView xdapUserView = new XdapUserView();
xdapUserView.setDepartmentId( XdapDepartments xdapDepartments = bd.getBusinessDatabase()
bd.getBusinessDatabase() .eq("name", "研发总院")
.eq("structure_name", department) .doQueryFirst(XdapDepartments.class);
.doQueryFirst(XdapDepartments.class).getId() XdapDepartments currentDept = bd.getBusinessDatabase()
); .eq("name", department)
xdapUserView.setUserId( .eq("parent_id", xdapDepartments.getId())
bd.getBusinessDatabase() .doQueryFirst(XdapDepartments.class);
if (currentDept != null)
xdapUserView.setDepartmentId(currentDept.getId());
if (userAccount != null) {
XdapUsers currentUser = bd.getBusinessDatabase()
.eq("user_number", userAccount) .eq("user_number", userAccount)
.eq("username", username) .eq("username", username)
.doQueryFirst(XdapUsers.class).getId() .eq("exit_status", "ENABLE")
); .doQueryFirst(XdapUsers.class);
if (currentUser != null)
xdapUserView.setUserId(currentUser.getId());
} else {
List<XdapUsers> xdapUsers = bd.getBusinessDatabase()
.eq("username", username)
.eq("exit_status", "ENABLE")
.doQuery(XdapUsers.class);
if (xdapUsers.size() == 1) {
xdapUserView.setUserId(xdapUsers.get(0).getId());
}
}
return xdapUserView; return xdapUserView;
} }
/**
* 获取所有责任部门
*
* @return 责任部门列表
*/
@Override
public List<XdapDepartments> getResponsibleDepartment() {
XdapDepartments currentDept = bd.getBusinessDatabase()
.eq("name", "研发总院")
.doQueryFirst(XdapDepartments.class);
if (currentDept == null) return Collections.emptyList();
return bd.getBusinessDatabase()
.eq("parent_id", currentDept.getId())
.doQuery(XdapDepartments.class);
}
@Override @Override
@Transactional @Transactional
/** /**
@ -369,20 +399,29 @@ public class ResponsiblePersonServiceImpl implements ResponsiblePersonService {
* @param problems 问题收集对象 * @param problems 问题收集对象
*/ */
public void importAllPerson(List<ResponsiblePersonPojo> cachedDataList, MyResponse problems) { public void importAllPerson(List<ResponsiblePersonPojo> cachedDataList, MyResponse problems) {
List<ResponsiblePersonPojo> list = new ArrayList<>();
Map<String, List<ResponsiblePersonPojo>> departmentMap = new HashMap<>();
cachedDataList.forEach(item -> { cachedDataList.forEach(item -> {
List<ResponsiblePersonPojo> responsiblePeople = bd.getBusinessDatabase() List<ResponsiblePersonPojo> responsiblePeople = bd.getBusinessDatabase()
.eq("department_id", item.getDepartmentId()) .eq("department_id", item.getDepartmentId())
.eq("subsystem", item.getSubsystem()) .eq("subsystem", item.getSubsystem())
.eq("personLevel", 1) .eq("person_level", 1)
.doQuery(ResponsiblePersonPojo.class); .doQuery(ResponsiblePersonPojo.class);
if (!responsiblePeople.isEmpty()) { if (!responsiblePeople.isEmpty() || departmentMap.containsKey(item.getDepartment() + "-" + item.getSubsystem())) {
problems.setFlag(true); problems.setFlag(true);
problems.getErrors().add("部门:" + item.getDepartment() + "子系统:" + item.getSubsystem() + "已存在责任人"); problems.getErrors().add("部门:" + item.getDepartment() + "子系统:" + item.getSubsystem() + "已存在责任人");
} else { } else {
bd.getBusinessDatabase().doInsert(item); departmentMap.put(item.getDepartment() + "-" + item.getSubsystem(), responsiblePeople);
list.add(item);
} }
}); });
if (list.isEmpty()) {
problems.setFlag(true);
problems.getErrors().add("没有合适的责任人导入");
return;
}
bd.getBusinessDatabase().doBatchInsert(list);
} }

View File

@ -268,7 +268,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
todoTask.setStatusCode(flow.getFlowStatus()); todoTask.setStatusCode(flow.getFlowStatus());
todoTask.setVersionNumber(template.getVersion()); todoTask.setVersionNumber(template.getVersion());
todoTask.setOwnerId(person); todoTask.setOwnerId(person);
todoTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees())); todoTask.setCurrentProcessor(firstNode.getAssignees());
list.add(todoTask); list.add(todoTask);
} }
bd.getBusinessDatabase().doBatchInsert(list); bd.getBusinessDatabase().doBatchInsert(list);
@ -609,7 +609,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
bd.getBusinessDatabase().doInsert(todoTask); bd.getBusinessDatabase().doInsert(todoTask);
} }
// 更新发起和已办 // 更新发起和已办
myself.updateTasks(flow, Objects.equals(status, "REJECTED") ? "已拒绝" : "已撤回", 0, node); myself.updateTasks(flow, "编制", 0, node);
} }
// 处理下一节点流转 // 处理下一节点流转

View File

@ -15,6 +15,7 @@ import com.xdap.self_development.domain.pojo.TemplatePojo;
import com.xdap.self_development.exception.CommonException; import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.listener.SheetDataListener; import com.xdap.self_development.listener.SheetDataListener;
import com.xdap.self_development.service.TemplateService; import com.xdap.self_development.service.TemplateService;
import com.xdap.self_development.utils.DescriptionWriteUtils;
import com.xdap.self_development.utils.FormulaValidatorUtils; import com.xdap.self_development.utils.FormulaValidatorUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -178,12 +179,25 @@ public class TemplateServiceImpl implements TemplateService {
MyResponse problems = MyResponse problems =
new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无")); new MyResponse(false, new ArrayList<>(), new StringBuilder("已完成导入:无"));
// String targetDepartmentIds = bd.getBusinessDatabase()
// .eq("name", "研发总院")
// .doQueryFirst(XdapDepartments.class).getId();
//
// List<String> subDepartments = bd.getBusinessDatabase()
// .in("parent_id", targetDepartmentIds)
// .doQuery(XdapDepartments.class).stream().map(XdapDepartments::getName)
// .collect(Collectors.toList());
List<String> subDepartments = new ArrayList<>();
try (InputStream inputStream = file.getInputStream()){ try (InputStream inputStream = file.getInputStream()){
EasyExcel.read( EasyExcel.read(
inputStream, inputStream,
ParameterPojo.class, ParameterPojo.class,
new SheetDataListener(this, templateRowId, userId, problems) new SheetDataListener(this, templateRowId, userId, problems, subDepartments)
).doReadAll(); )
.ignoreEmptyRow(true)
.autoTrim(true)
.doReadAll();
} catch (IOException e) { } catch (IOException e) {
throw new CommonException("读取文件失败"); throw new CommonException("读取文件失败");
@ -231,6 +245,7 @@ public class TemplateServiceImpl implements TemplateService {
} }
EasyExcel.write(response.getOutputStream(), ParameterPojo.class) EasyExcel.write(response.getOutputStream(), ParameterPojo.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerWriteHandler(new DescriptionWriteUtils(ParameterPojo.getFieldDescriptions()))
.includeColumnFieldNames(getIncludeColumnFieldNames()) .includeColumnFieldNames(getIncludeColumnFieldNames())
.sheet(templateDB.getTemplateName()) .sheet(templateDB.getTemplateName())
.doWrite(list); .doWrite(list);
@ -315,7 +330,17 @@ public class TemplateServiceImpl implements TemplateService {
if (data.getSubsystemName() == null) { if (data.getSubsystemName() == null) {
problems.setFlag(true); problems.setFlag(true);
problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的子系统字段为空"); problems.getErrors().add("模板导入失败:" + sheetName + "模板的参数" + data.getParameterName() + "的子系统字段为空");
return; continue;
}
if (data.getParameterType() == null) {
problems.setFlag(true);
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()) { if (data.getPartsName() == null || data.getPartsName().isEmpty()) {
@ -347,7 +372,6 @@ public class TemplateServiceImpl implements TemplateService {
if (!Objects.equals(templateName, sheetName)) { if (!Objects.equals(templateName, sheetName)) {
problems.setFlag(true); problems.setFlag(true);
problems.getErrors().add("模板导入失败:+Excel页名与模板名不一致"); problems.getErrors().add("模板导入失败:+Excel页名与模板名不一致");
return;
} }
} }
@ -360,6 +384,7 @@ public class TemplateServiceImpl implements TemplateService {
problems.getErrors().add("模板导入失败:模板'" + templateName + "'正在审批中"); problems.getErrors().add("模板导入失败:模板'" + templateName + "'正在审批中");
} }
// 检查不通过直接返回
if (problems.isFlag()) { if (problems.isFlag()) {
return; return;
} }
@ -590,6 +615,7 @@ public class TemplateServiceImpl implements TemplateService {
EasyExcel.write(response.getOutputStream(), ParameterPojo.class) EasyExcel.write(response.getOutputStream(), ParameterPojo.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerWriteHandler(new DescriptionWriteUtils(ParameterPojo.getFieldDescriptions()))
.includeColumnFieldNames(getIncludeColumnFieldNames()) .includeColumnFieldNames(getIncludeColumnFieldNames())
.sheet("xxx") .sheet("xxx")
.doWrite(list); .doWrite(list);
@ -599,6 +625,7 @@ public class TemplateServiceImpl implements TemplateService {
} else { } else {
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), ParameterPojo.class) try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), ParameterPojo.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerWriteHandler(new DescriptionWriteUtils(ParameterPojo.getFieldDescriptions()))
.includeColumnFieldNames(getIncludeColumnFieldNames()) .includeColumnFieldNames(getIncludeColumnFieldNames())
.build()) { .build()) {

View File

@ -0,0 +1,43 @@
package com.xdap.self_development.utils;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import jdk.nashorn.internal.runtime.logging.Logger;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
@Slf4j
@Logger
public class DescriptionWriteUtils implements SheetWriteHandler {
// 字段说明数组
private final String[] descriptions;
public DescriptionWriteUtils(String[] descriptions) {
this.descriptions = descriptions;
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Sheet sheet = writeSheetHolder.getSheet();
Workbook workbook = writeWorkbookHolder.getWorkbook();
// 创建单元格样式
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setColor(IndexedColors.GREY_50_PERCENT.getIndex()); // 灰色字体
style.setFont(font);
style.setWrapText(true);
log.info("Creating description row for sheet: {}", writeSheetHolder.getSheetName());
// 获取表头行的下一行
Row descRow = sheet.createRow(1);
// 填充每个字段的说明
for (int i = 0; i < descriptions.length; i++) {
Cell cell = descRow.createCell(i);
cell.setCellValue(descriptions[i]);
cell.setCellStyle(style);
log.info("Set cell value to: {}", descriptions[i]);
}
}
}