dev
parent
5cb71429cd
commit
2bae6d28a7
|
|
@ -314,32 +314,27 @@ public class EvalProcessControlExecutor implements EvalProcessControlApi {
|
||||||
assertPreNodesCompleted(project);
|
assertPreNodesCompleted(project);
|
||||||
|
|
||||||
EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, project.getOrgId());
|
EvalProcessControlEntity entity = evalProcessControlGateway.getByProjectId(projectId, project.getOrgId());
|
||||||
if (entity != null && entity.getArchiveFlag() != null && entity.getArchiveFlag() == 1) {
|
if (entity == null) {
|
||||||
|
throw new BizException(ErrorCode.DATA_NOT_EXIST);
|
||||||
|
}
|
||||||
|
if (entity.getArchiveFlag() != null && entity.getArchiveFlag() == 1) {
|
||||||
throw new BizException(ErrorCode.EVAL_ARCHIVE_ALREADY_DONE);
|
throw new BizException(ErrorCode.EVAL_ARCHIVE_ALREADY_DONE);
|
||||||
}
|
}
|
||||||
// 验证签字是否完成
|
// 验证签字是否完成
|
||||||
assertSignTaskCompleted(projectId, project.getOrgId());
|
if (!SignatureTaskStatusEnum.COMPLETED.getCode().equals(entity.getReviewerSignatureTaskStatus())) {
|
||||||
|
throw new BizException(ErrorCode.EVAL_ARCHIVE_SIGN_INCOMPLETE);
|
||||||
// 验证归档交接单是否已生成
|
|
||||||
if (entity == null || !"created".equals(entity.getHandoverFormStatus())) {
|
|
||||||
throw new BizException(ErrorCode.EVAL_HANDOVER_FORM_NOT_CREATED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity == null) {
|
|
||||||
entity = new EvalProcessControlEntity();
|
entity = new EvalProcessControlEntity();
|
||||||
|
entity.setId(entity.getId());
|
||||||
entity.setOrgId(project.getOrgId());
|
entity.setOrgId(project.getOrgId());
|
||||||
entity.setProjectId(projectId);
|
entity.setProjectId(projectId);
|
||||||
}
|
|
||||||
entity.setPrecheckPassFlag(1);
|
entity.setPrecheckPassFlag(1);
|
||||||
entity.setArchiveFlag(1);
|
entity.setArchiveFlag(1);
|
||||||
entity.setStatusCode(3);
|
entity.setStatusCode(3);
|
||||||
evalProjectNodeSupport.fillNodeStatus(3, entity);
|
evalProjectNodeSupport.fillNodeStatus(3, entity);
|
||||||
entity.setControlTime(LocalDateTime.now());
|
entity.setControlTime(LocalDateTime.now());
|
||||||
if (entity.getId() == null) {
|
|
||||||
entity = evalProcessControlGateway.save(entity);
|
|
||||||
} else {
|
|
||||||
entity = evalProcessControlGateway.modify(entity);
|
entity = evalProcessControlGateway.modify(entity);
|
||||||
}
|
|
||||||
|
|
||||||
EvalReportEntity report = buildReport(project);
|
EvalReportEntity report = buildReport(project);
|
||||||
evalReportGateway.saveInternal(report);
|
evalReportGateway.saveInternal(report);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package org.qinan.safetyeval.app.executor.institution;
|
package org.qinan.safetyeval.app.executor.institution;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import org.qinan.safetyeval.app.convertor.EvalSignTaskCmdConvertor;
|
import org.qinan.safetyeval.app.convertor.EvalSignTaskCmdConvertor;
|
||||||
import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi;
|
import org.qinan.safetyeval.client.api.institution.EvalSignTaskApi;
|
||||||
|
|
@ -15,7 +13,6 @@ import org.qinan.safetyeval.client.dto.institution.EvalSignTaskPageQuery;
|
||||||
import org.qinan.safetyeval.client.dto.institution.EvalSignTaskSaveCmd;
|
import org.qinan.safetyeval.client.dto.institution.EvalSignTaskSaveCmd;
|
||||||
import org.qinan.safetyeval.domain.constant.*;
|
import org.qinan.safetyeval.domain.constant.*;
|
||||||
import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity;
|
import org.qinan.safetyeval.domain.entity.EvalSignTaskEntity;
|
||||||
import org.qinan.safetyeval.domain.entity.SafetyMessageEntity;
|
|
||||||
import org.qinan.safetyeval.domain.exception.BizException;
|
import org.qinan.safetyeval.domain.exception.BizException;
|
||||||
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway;
|
import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway;
|
||||||
|
|
@ -30,11 +27,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.time.LocalDateTime;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -53,8 +46,6 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi {
|
||||||
@Autowired
|
@Autowired
|
||||||
private SafetyMessageGateway safetyMessageGateway;
|
private SafetyMessageGateway safetyMessageGateway;
|
||||||
@Autowired
|
@Autowired
|
||||||
private EvalProjectMemberMapper evalProjectMemberMapper;
|
|
||||||
@Autowired
|
|
||||||
private EvalRiskParticipantMapper evalRiskParticipantMapper;
|
private EvalRiskParticipantMapper evalRiskParticipantMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private EvalInternalReviewMapper evalInternalReviewMapper;
|
private EvalInternalReviewMapper evalInternalReviewMapper;
|
||||||
|
|
@ -69,37 +60,8 @@ public class EvalSignTaskExecutor implements EvalSignTaskApi {
|
||||||
EvalSignTaskEntity entity = evalSignTaskCmdConvertor.convertSaveCmdToE(cmd);
|
EvalSignTaskEntity entity = evalSignTaskCmdConvertor.convertSaveCmdToE(cmd);
|
||||||
entity.setOrgId(orgId);
|
entity.setOrgId(orgId);
|
||||||
EvalSignTaskEntity result = evalSignTaskDomainService.add(entity);
|
EvalSignTaskEntity result = evalSignTaskDomainService.add(entity);
|
||||||
// todo 消息发送
|
// 发送签字任务通知消息
|
||||||
SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity();
|
safetyMessageGateway.saveSignMsg(cmd.getTaskTitle(), cmd.getNodeCode(), cmd.getProjectId(), cmd.getSignerPersonnelId());
|
||||||
safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM);
|
|
||||||
safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID);
|
|
||||||
safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg());
|
|
||||||
Map<String, Object> params = new HashMap<>();
|
|
||||||
params.put("title", cmd.getTaskTitle());
|
|
||||||
Map<String, String> fillMap = new HashMap<>();
|
|
||||||
ProjectStageEnum projectStageEnum = ProjectStageEnum.fromNode(cmd.getNodeCode());
|
|
||||||
if (projectStageEnum == null) {
|
|
||||||
throw new BizException(ErrorCode.EVAL_PROJECT_NODE_NOT_FOUND);
|
|
||||||
}
|
|
||||||
fillMap.put("fileName", projectStageEnum.getMsg());
|
|
||||||
fillMap.put("version", "v1");
|
|
||||||
if (ProjectStageEnum.RISK_ANALYSIS.getMsg().equals(cmd.getNodeCode())) {
|
|
||||||
fillMap.put("role", "");
|
|
||||||
} else {
|
|
||||||
// 查询角色
|
|
||||||
List<EvalProjectMemberDO> evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper<EvalProjectMemberDO>()
|
|
||||||
.select(EvalProjectMemberDO::getRole)
|
|
||||||
.eq(EvalProjectMemberDO::getProjectId, cmd.getProjectId())
|
|
||||||
.eq(EvalProjectMemberDO::getPersonnelId, cmd.getSignerPersonnelId())
|
|
||||||
.last("limit 1"));
|
|
||||||
fillMap.put("role", ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole()));
|
|
||||||
}
|
|
||||||
params.put("content", NoticeTypeEnum.SIGN_TASK_NOTICE.fillTemplate(fillMap));
|
|
||||||
safetyMessageEntity.setSendContent(JSON.toJSONString(params));
|
|
||||||
safetyMessageEntity.setReceiveId(Long.valueOf(cmd.getSignerPersonnelId()));
|
|
||||||
safetyMessageEntity.setSendState(0);
|
|
||||||
safetyMessageEntity.setCreateTime(LocalDateTime.now());
|
|
||||||
safetyMessageGateway.save(safetyMessageEntity);
|
|
||||||
return SingleResponse.success(evalSignTaskCmdConvertor.convertEToCO(result));
|
return SingleResponse.success(evalSignTaskCmdConvertor.convertEToCO(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package org.qinan.safetyeval.domain.constant;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息发送状态枚举
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum MessageSendStateEnum {
|
||||||
|
|
||||||
|
UNSENT(0, "未发送"),
|
||||||
|
SENT(1, "已发送");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
private final String desc;
|
||||||
|
}
|
||||||
|
|
@ -3,4 +3,11 @@ package org.qinan.safetyeval.domain.constant;
|
||||||
public interface MsgConstant {
|
public interface MsgConstant {
|
||||||
String MSG_TYPE_SYSTEM = "system";
|
String MSG_TYPE_SYSTEM = "system";
|
||||||
Long MSG_TYPE_SYSTEM_ID = 0L;
|
Long MSG_TYPE_SYSTEM_ID = 0L;
|
||||||
|
|
||||||
|
/** 签字任务默认版本号 */
|
||||||
|
String SIGN_TASK_DEFAULT_VERSION = "v1";
|
||||||
|
|
||||||
|
/** 消息内容JSON字段名 */
|
||||||
|
String MSG_CONTENT_KEY_TITLE = "title";
|
||||||
|
String MSG_CONTENT_KEY_CONTENT = "content";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@ package org.qinan.safetyeval.domain.exception;
|
||||||
*/
|
*/
|
||||||
public enum ErrorCode {
|
public enum ErrorCode {
|
||||||
|
|
||||||
|
|
||||||
|
DATA_NOT_EXIST("01-02-101", "数据不存在"),
|
||||||
// ---- 部门 ----
|
// ---- 部门 ----
|
||||||
ORG_DEPARTMENT_NOT_FOUND("01-02-001", "部门不存在"),
|
ORG_DEPARTMENT_NOT_FOUND("01-02-001", "部门不存在"),
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,26 @@ import org.qinan.safetyeval.domain.query.SafetyMessageQuery;
|
||||||
*/
|
*/
|
||||||
public interface SafetyMessageGateway {
|
public interface SafetyMessageGateway {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送签字任务通知消息
|
||||||
|
*
|
||||||
|
* @param taskTitle 任务标题
|
||||||
|
* @param nodeCode 节点编码
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param signerPersonnelId 签字人员ID
|
||||||
|
*/
|
||||||
|
void saveSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送签字任务通知消息
|
||||||
|
*
|
||||||
|
* @param taskTitle 任务标题
|
||||||
|
* @param nodeCode 节点编码
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param signerPersonnelId 签字人员ID
|
||||||
|
*/
|
||||||
|
void saveSpecSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId);
|
||||||
|
|
||||||
SafetyMessageEntity save(SafetyMessageEntity entity);
|
SafetyMessageEntity save(SafetyMessageEntity entity);
|
||||||
|
|
||||||
SafetyMessageEntity get(Long id);
|
SafetyMessageEntity get(Long id);
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,33 @@
|
||||||
package org.qinan.safetyeval.infrastructure.gatewayimpl;
|
package org.qinan.safetyeval.infrastructure.gatewayimpl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.qinan.safetyeval.domain.constant.MessageSendStateEnum;
|
||||||
|
import org.qinan.safetyeval.domain.constant.MsgConstant;
|
||||||
|
import org.qinan.safetyeval.domain.constant.NoticeTypeEnum;
|
||||||
|
import org.qinan.safetyeval.domain.constant.ProjectStageEnum;
|
||||||
import org.qinan.safetyeval.domain.entity.SafetyMessageEntity;
|
import org.qinan.safetyeval.domain.entity.SafetyMessageEntity;
|
||||||
|
import org.qinan.safetyeval.domain.exception.BizException;
|
||||||
|
import org.qinan.safetyeval.domain.exception.ErrorCode;
|
||||||
import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway;
|
import org.qinan.safetyeval.domain.gateway.SafetyMessageGateway;
|
||||||
import org.qinan.safetyeval.domain.query.PageResult;
|
import org.qinan.safetyeval.domain.query.PageResult;
|
||||||
import org.qinan.safetyeval.domain.query.SafetyMessageQuery;
|
import org.qinan.safetyeval.domain.query.SafetyMessageQuery;
|
||||||
import org.qinan.safetyeval.infrastructure.convertor.SafetyMessageDoConvertor;
|
import org.qinan.safetyeval.infrastructure.convertor.SafetyMessageDoConvertor;
|
||||||
|
import org.qinan.safetyeval.infrastructure.dataobject.EvalProjectMemberDO;
|
||||||
import org.qinan.safetyeval.infrastructure.dataobject.SafetyMessageDO;
|
import org.qinan.safetyeval.infrastructure.dataobject.SafetyMessageDO;
|
||||||
|
import org.qinan.safetyeval.infrastructure.mapper.EvalProjectMemberMapper;
|
||||||
import org.qinan.safetyeval.infrastructure.mapper.SafetyMessageMapper;
|
import org.qinan.safetyeval.infrastructure.mapper.SafetyMessageMapper;
|
||||||
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
import org.qinan.safetyeval.infrastructure.support.InsertFieldDefaults;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息中心 Gateway 实现
|
* 消息中心 Gateway 实现
|
||||||
|
|
@ -28,6 +41,87 @@ public class SafetyMessageGatewayImpl implements SafetyMessageGateway {
|
||||||
private SafetyMessageMapper safetyMessageMapper;
|
private SafetyMessageMapper safetyMessageMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private SafetyMessageDoConvertor safetyMessageDoConvertor;
|
private SafetyMessageDoConvertor safetyMessageDoConvertor;
|
||||||
|
@Resource
|
||||||
|
private EvalProjectMemberMapper evalProjectMemberMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId) {
|
||||||
|
SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity();
|
||||||
|
safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM);
|
||||||
|
safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID);
|
||||||
|
safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put(MsgConstant.MSG_CONTENT_KEY_TITLE, taskTitle);
|
||||||
|
|
||||||
|
Map<String, String> fillMap = new HashMap<>();
|
||||||
|
ProjectStageEnum projectStageEnum = ProjectStageEnum.fromNode(nodeCode);
|
||||||
|
if (projectStageEnum == null) {
|
||||||
|
throw new BizException(ErrorCode.EVAL_PROJECT_NODE_NOT_FOUND);
|
||||||
|
}
|
||||||
|
fillMap.put("fileName", projectStageEnum.getMsg());
|
||||||
|
fillMap.put("version", MsgConstant.SIGN_TASK_DEFAULT_VERSION);
|
||||||
|
|
||||||
|
if (projectStageEnum == ProjectStageEnum.RISK_ANALYSIS) {
|
||||||
|
fillMap.put("role", "");
|
||||||
|
} else {
|
||||||
|
// 查询角色
|
||||||
|
List<EvalProjectMemberDO> evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper<EvalProjectMemberDO>()
|
||||||
|
.select(EvalProjectMemberDO::getRole)
|
||||||
|
.eq(EvalProjectMemberDO::getProjectId, projectId)
|
||||||
|
.eq(EvalProjectMemberDO::getPersonnelId, signerPersonnelId)
|
||||||
|
.last("limit 1"));
|
||||||
|
fillMap.put("role", ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole()));
|
||||||
|
}
|
||||||
|
|
||||||
|
params.put(MsgConstant.MSG_CONTENT_KEY_CONTENT, NoticeTypeEnum.SIGN_TASK_NOTICE.fillTemplate(fillMap));
|
||||||
|
safetyMessageEntity.setSendContent(JSON.toJSONString(params));
|
||||||
|
safetyMessageEntity.setReceiveId(Long.valueOf(signerPersonnelId));
|
||||||
|
safetyMessageEntity.setSendState(MessageSendStateEnum.UNSENT.getCode());
|
||||||
|
safetyMessageEntity.setCreateTime(LocalDateTime.now());
|
||||||
|
|
||||||
|
save(safetyMessageEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveSpecSignMsg(String taskTitle, String nodeCode, String projectId, String signerPersonnelId) {
|
||||||
|
SafetyMessageEntity safetyMessageEntity = new SafetyMessageEntity();
|
||||||
|
safetyMessageEntity.setSendName(MsgConstant.MSG_TYPE_SYSTEM);
|
||||||
|
safetyMessageEntity.setSendId(MsgConstant.MSG_TYPE_SYSTEM_ID);
|
||||||
|
safetyMessageEntity.setSendType(NoticeTypeEnum.SIGN_TASK_NOTICE.getMsg());
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>();
|
||||||
|
params.put(MsgConstant.MSG_CONTENT_KEY_TITLE, taskTitle);
|
||||||
|
|
||||||
|
Map<String, String> fillMap = new HashMap<>();
|
||||||
|
ProjectStageEnum projectStageEnum = ProjectStageEnum.fromNode(nodeCode);
|
||||||
|
if (projectStageEnum == null) {
|
||||||
|
throw new BizException(ErrorCode.EVAL_PROJECT_NODE_NOT_FOUND);
|
||||||
|
}
|
||||||
|
fillMap.put("fileName", projectStageEnum.getMsg());
|
||||||
|
fillMap.put("version", MsgConstant.SIGN_TASK_DEFAULT_VERSION);
|
||||||
|
|
||||||
|
if (projectStageEnum == ProjectStageEnum.RISK_ANALYSIS) {
|
||||||
|
fillMap.put("role", "");
|
||||||
|
} else {
|
||||||
|
// 查询角色
|
||||||
|
List<EvalProjectMemberDO> evalProjectMemberDOS = evalProjectMemberMapper.selectList(new LambdaQueryWrapper<EvalProjectMemberDO>()
|
||||||
|
.select(EvalProjectMemberDO::getRole)
|
||||||
|
.eq(EvalProjectMemberDO::getProjectId, projectId)
|
||||||
|
.eq(EvalProjectMemberDO::getPersonnelId, signerPersonnelId)
|
||||||
|
.last("limit 1"));
|
||||||
|
fillMap.put("role", ProjectStageEnum.fromVals(evalProjectMemberDOS.get(0).getRole()));
|
||||||
|
}
|
||||||
|
|
||||||
|
params.put(MsgConstant.MSG_CONTENT_KEY_CONTENT, NoticeTypeEnum.SIGN_TASK_NOTICE.fillTemplate(fillMap));
|
||||||
|
safetyMessageEntity.setSendContent(JSON.toJSONString(params));
|
||||||
|
safetyMessageEntity.setReceiveId(Long.valueOf(signerPersonnelId));
|
||||||
|
safetyMessageEntity.setSendState(MessageSendStateEnum.UNSENT.getCode());
|
||||||
|
safetyMessageEntity.setCreateTime(LocalDateTime.now());
|
||||||
|
|
||||||
|
save(safetyMessageEntity);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SafetyMessageEntity save(SafetyMessageEntity entity) {
|
public SafetyMessageEntity save(SafetyMessageEntity entity) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue