Browse Source

结案保存附件

dev_shibei_match
zhaoqifeng 5 years ago
parent
commit
84b0b439c7
  1. 42
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/FileDTO.java
  2. 9
      epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectClosedFromDTO.java
  3. 7
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java
  4. 9
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java
  5. 11
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java
  6. 218
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java
  7. 15
      epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java

42
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/FileDTO.java

@ -0,0 +1,42 @@
package com.epmet.dto.form;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author zhaoqifeng
* @dscription
* @date 2020/12/21 15:37
*/
@NoArgsConstructor
@Data
public class FileDTO implements Serializable {
private static final long serialVersionUID = -5307959406648243353L;
/**
* 文件名
*/
private String name;
/**
* url地址
*/
private String url;
/**
* 文件类型(图片 - image 视频 - video 语音 - voice 文档 - doc)
*/
private String type;
/**
* 后缀名
*/
private String format;
/**
* 文件大小 kb
*/
private Integer size;
/**
* 语音或视频文件时长单位秒
*/
private Integer duration;
}

9
epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectClosedFromDTO.java

@ -5,6 +5,7 @@ import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
/**
* @author zhaoqifeng
@ -46,4 +47,12 @@ public class ProjectClosedFromDTO implements Serializable {
* 部门名
*/
private String departmentName;
/**
* 公开答复对应文件集合
*/
private List<FileDTO> publicFile;
/**
* 内部备注对应文件集合
*/
private List<FileDTO> internalFile;
}

7
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java

@ -121,6 +121,13 @@ public class ProjectTraceController {
return new Result();
}
@PostMapping("closeproject-v2")
@RequirePermission(requirePermission = RequirePermissionEnum.WORK_PROJECT_TRACE_CLOSE)
public Result closedV2(@LoginUser TokenDto tokenDto, @RequestBody ProjectClosedFromDTO fromDTO) {
projectTraceService.closedV2(tokenDto, fromDTO);
return new Result();
}
/**
* 可退回节点列表
*

9
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectService.java

@ -146,6 +146,15 @@ public interface ProjectService extends BaseService<ProjectEntity> {
*/
void closed(ProjectClosedFromDTO fromDTO);
/**
* 项目结案
* @author zhaoqifeng
* @date 2020/5/13 9:54
* @param fromDTO 参数
* @return void
*/
void closedV2(ProjectClosedFromDTO fromDTO);
/**
* 项目退回
* @author zhaoqifeng

11
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java

@ -68,6 +68,17 @@ public interface ProjectTraceService {
*/
void closed(TokenDto tokenDto, ProjectClosedFromDTO fromDTO);
/**
* 项目结案
*
* @param tokenDto token
* @param fromDTO 入参
* @return com.epmet.commons.tools.utils.Result
* @author zhaoqifeng
* @date 2020/5/11 16:27
*/
void closedV2(TokenDto tokenDto, ProjectClosedFromDTO fromDTO);
/**
* 可退回节点列表
*

218
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectServiceImpl.java

@ -102,6 +102,8 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
private String textSyncScanMethod;
@Autowired
private ProjectOrgRelationDao relationDao;
@Autowired
private ProjectProcessAttachmentService projectProcessAttachmentService;
private final static String ONE_DAY = "<1";
@ -408,22 +410,158 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
projectProcessEntity.setCostWorkdays(getDetentionDays(projectDto));
projectProcessService.insert(projectProcessEntity);
//对项目节点耗时记录进行更新,更新全部未处理节点以及结案人的节点耗时
//List<ProjectOrgRelationEntity> periodsToUpdate = relationDao.selectAllUnhandledProcess(fromDTO.getProjectId());
//if(CollectionUtils.isEmpty(periodsToUpdate)){
// log.error("com.epmet.service.impl.ProjectServiceImpl.closed,至少存在一条处理时间为空的项目节点耗时记录,但是没有找到,参数:{}",JSON.toJSONString(fromDTO));
// throw new RenException("至少存在一条处理时间为空的项目节点耗时记录,但是没有找到");
//}
ProjectOrgRelationEntity orientRelation = relationDao.selectByProjectStaffId(operatorProjectReference.getId());
if(null == orientRelation){
log.error("com.epmet.service.impl.ProjectServiceImpl.closed,找不到结案工作人员的节点耗时相关记录,参数:{}",JSON.toJSONString(fromDTO));
throw new RenException("找不到结案工作人员的节点耗时相关记录");
}
Integer delta_t = calculateDelta_T(ProjectConstant.IMPRECISE_CALCULATION,
ProjectConstant.CALCULATION_TYPE_DEFAULT, operatorProjectReference.getId(),orientRelation.getInformedDate(),current);
//List<TimestampIntervalFormDTO> intervalList = new LinkedList<>();
//periodsToUpdate.forEach(local -> {
// TimestampIntervalFormDTO obj = new TimestampIntervalFormDTO();
// obj.setId(local.getProjectStaffId());
// obj.setLeft(local.getInformedDate());
// obj.setRight(current);
// intervalList.add(obj);
//});
ProjectOrgRelationEntity carrier = new ProjectOrgRelationEntity();
carrier.setProjectStaffId(operatorProjectReference.getId());
carrier.setOperation(ProjectConstant.OPERATION_CLOSE);
carrier.setTotalPeriod(delta_t);
carrier.setHandledDate(current);
if(null == orientRelation.getFirstDealtDate()){
carrier.setFirstReplyPeriod(delta_t);
carrier.setFirstDealtDate(current);
}
relationDao.maintainTimePropertyConsistency(carrier);
//通知
List<UserMessageFormDTO> msgList = new ArrayList<>();
//2020.10.26 添加项目结案发送微信订阅消息操作 sun
List<WxSubscribeMessageFormDTO> wxmpMsgList = new ArrayList<>();
//通知项目相关人员
List<ProjectRelatedPersonnelDTO> personnelList = projectRelatedPersonnelService.getPersonnelListByProjectId(fromDTO.getProjectId());
personnelList.forEach(p -> {
UserMessageFormDTO messageFormDTO = new UserMessageFormDTO();
messageFormDTO.setCustomerId(projectEntity.getCustomerId());
messageFormDTO.setApp(p.getApp());
messageFormDTO.setGridId(p.getGridId());
messageFormDTO.setUserId(p.getUserId());
messageFormDTO.setTitle(UserMessageConstant.PROJECT_TITLE);
messageFormDTO.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
messageFormDTO.setReadFlag(Constant.UNREAD);
msgList.add(messageFormDTO);
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(projectEntity.getCustomerId());
msg.setClientType(p.getApp());
msg.setUserId(p.getUserId());
msg.setBehaviorType("项目消息");
msg.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
msg.setMessageTime(new Date());
msg.setGridId(p.getGridId());
wxmpMsgList.add(msg);
});
//通知项目关联的部门人员
List<String> staffList = projectStaffService.getStaffsByProjectId(fromDTO.getProjectId());
staffList.add(projectEntity.getCreatedBy());
staffList.stream().distinct().forEach(s -> {
UserMessageFormDTO messageFormDTO = new UserMessageFormDTO();
messageFormDTO.setCustomerId(projectEntity.getCustomerId());
messageFormDTO.setApp(ProjectConstant.GOV);
messageFormDTO.setGridId("*");
messageFormDTO.setUserId(s);
messageFormDTO.setTitle(UserMessageConstant.PROJECT_TITLE);
messageFormDTO.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
messageFormDTO.setReadFlag(Constant.UNREAD);
msgList.add(messageFormDTO);
WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO();
msg.setCustomerId(projectEntity.getCustomerId());
msg.setClientType(AppClientConstant.APP_GOV);
msg.setUserId(s);
msg.setBehaviorType("项目消息");
msg.setMessageContent(String.format(UserMessageConstant.PROJECT_CLOSED_MSG, projectEntity.getTitle(), fromDTO.getPublicReply()));
msg.setMessageTime(new Date());
msg.setGridId("*");
wxmpMsgList.add(msg);
});
messageFeignClient.saveUserMessageList(msgList);
//2020.10.26 发送微信订阅消息 sun
logger.info("项目结案,开始推送微信订阅消息");
Result result = epmetMessageOpenFeignClient.sendWxSubscribeMessage(wxmpMsgList);
if (!result.success()) {
logger.error("项目结案成功,发送微信订阅消息失败" + JSON.toJSONString(result));
}
}
/**
* 项目结案
*
* @param fromDTO 参数
* @return void
* @author zhaoqifeng
* @date 2020/5/13 9:54
*/
@Override
public void closedV2(ProjectClosedFromDTO fromDTO) {
//公开回复内容审核
if (StringUtils.isNotBlank(fromDTO.getPublicReply())) {
TextScanParamDTO textScanParamDTO = new TextScanParamDTO();
TextTaskDTO taskDTO = new TextTaskDTO();
taskDTO.setDataId(UUID.randomUUID().toString().replace("-", ""));
taskDTO.setContent(fromDTO.getPublicReply());
textScanParamDTO.getTasks().add(taskDTO);
Result<SyncScanResult> textSyncScanResult = ScanContentUtils.textSyncScan(scanApiUrl.concat(textSyncScanMethod), textScanParamDTO);
if (!textSyncScanResult.success()) {
throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode());
} else {
if (!textSyncScanResult.getData().isAllPass()) {
throw new RenException(EpmetErrorCode.TEXT_SCAN_FAILED.getCode());
}
}
}
//更新项目表状态
ProjectEntity projectEntity = baseDao.selectById(fromDTO.getProjectId());
if (ProjectConstant.CLOSED.equals(projectEntity.getStatus())) {
throw new RenException(EpmetErrorCode.PROJECT_IS_CLOSED.getCode());
}
Date current = new Date();
projectEntity.setStatus(ProjectConstant.CLOSED);
projectEntity.setClosedStatus(fromDTO.getClosedStatus());
baseDao.updateById(projectEntity);
//更新项目关联表
ProjectStaffEntity projectStaffEntity = new ProjectStaffEntity();
projectStaffEntity.setId(fromDTO.getProjectStaffId());
projectStaffEntity.setIsHandle(ProjectConstant.HANDLE);
projectStaffService.updateById(projectStaffEntity);
//查询结案人员的信息
ProjectStaffEntity operatorProjectReference = projectStaffService.selectById(fromDTO.getProjectStaffId());
if(null == operatorProjectReference){
log.error("com.epmet.service.impl.ProjectServiceImpl.closed,找不到结案工作人员的相关记录,参数:{}",JSON.toJSONString(fromDTO));
throw new RenException("找不到结案工作人员的相关记录");
}
//结案记录加入项目进展表
ProjectProcessEntity projectProcessEntity = new ProjectProcessEntity();
projectProcessEntity.setProjectId(fromDTO.getProjectId());
projectProcessEntity.setCustomerId(operatorProjectReference.getCustomerId());
projectProcessEntity.setDepartmentName(fromDTO.getDepartmentName());
projectProcessEntity.setAgencyId(operatorProjectReference.getOrgId());
projectProcessEntity.setGridId(operatorProjectReference.getGridId());
projectProcessEntity.setDepartmentId(operatorProjectReference.getDepartmentId());
projectProcessEntity.setOrgIdPath(operatorProjectReference.getOrgIdPath());
projectProcessEntity.setEndTime(new Date());
projectProcessEntity.setOperation(ProjectConstant.OPERATION_CLOSE);
projectProcessEntity.setOperationName(ProjectConstant.OPERATION_CLOSE_NAME);
projectProcessEntity.setPublicReply(fromDTO.getPublicReply());
projectProcessEntity.setInternalRemark(fromDTO.getInternalRemark());
projectProcessEntity.setStaffId(fromDTO.getUserId());
ProjectDTO projectDto = ConvertUtils.sourceToTarget(projectEntity, ProjectDTO.class);
projectDto.setUpdatedTime(projectDto.getCreatedTime());
projectProcessEntity.setCostWorkdays(getDetentionDays(projectDto));
projectProcessService.insert(projectProcessEntity);
//保存附件
saveFile(fromDTO.getPublicFile(), fromDTO.getInternalFile(), operatorProjectReference.getCustomerId(), fromDTO.getProjectId(),
projectProcessEntity.getId());
ProjectOrgRelationEntity orientRelation = relationDao.selectByProjectStaffId(operatorProjectReference.getId());
if(null == orientRelation){
@ -1422,4 +1560,56 @@ public class ProjectServiceImpl extends BaseServiceImpl<ProjectDao, ProjectEntit
});
return projects;
}
private void saveFile(List<FileDTO> publicFile, List<FileDTO> internalFile, String customerId, String projectId, String processId) {
if (CollectionUtils.isNotEmpty(internalFile)) {
int i = 0;
List<ProjectProcessAttachmentEntity> list = new ArrayList<>();
for (FileDTO item : internalFile) {
ProjectProcessAttachmentEntity entity = new ProjectProcessAttachmentEntity();
entity.setCustomerId(customerId);
entity.setProjectId(projectId);
entity.setProcessId(processId);
entity.setFilePlace("internal");
entity.setFileName(item.getName());
entity.setAttachmentName("");
entity.setAttachmentSize(item.getSize());
entity.setAttachmentFormat(item.getFormat());
entity.setAttachmentType(item.getType());
entity.setAttachmentUrl(item.getUrl());
entity.setSort(i);
entity.setDuration(item.getDuration());
entity.setIsRelease(NumConstant.ONE);
list.add(entity);
i++;
}
projectProcessAttachmentService.insertBatch(list);
}
if (CollectionUtils.isNotEmpty(publicFile)) {
//TODO 内容安全检查
int i = 0;
List<ProjectProcessAttachmentEntity> list = new ArrayList<>();
for (FileDTO item : publicFile) {
ProjectProcessAttachmentEntity entity = new ProjectProcessAttachmentEntity();
entity.setCustomerId(customerId);
entity.setProjectId(projectId);
entity.setProcessId(processId);
entity.setFilePlace("public");
entity.setFileName(item.getName());
entity.setAttachmentName("");
entity.setAttachmentSize(item.getSize());
entity.setAttachmentFormat(item.getFormat());
entity.setAttachmentType(item.getType());
entity.setAttachmentUrl(item.getUrl());
entity.setSort(i);
entity.setDuration(item.getDuration());
entity.setIsRelease(NumConstant.ZERO);
list.add(entity);
i++;
}
projectProcessAttachmentService.insertBatch(list);
}
}
}

15
epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java

@ -64,6 +64,21 @@ public class ProjectTraceServiceImpl implements ProjectTraceService {
projectService.closed(fromDTO);
}
/**
* 项目结案
*
* @param tokenDto token
* @param fromDTO 入参
* @return com.epmet.commons.tools.utils.Result
* @author zhaoqifeng
* @date 2020/5/11 16:27
*/
@Override
public void closedV2(TokenDto tokenDto, ProjectClosedFromDTO fromDTO) {
fromDTO.setUserId(tokenDto.getUserId());
projectService.closedV2(fromDTO);
}
@Override
public List<ReturnListResultDTO> getReturnableList(ReturnListFromDTO fromDTO) {
return projectProcessService.getReturnableList(fromDTO);

Loading…
Cancel
Save