Merge branch 'master' into feature/20260519
This commit is contained in:
+12
@@ -55,6 +55,18 @@ public class TaskDTO implements java.io.Serializable {
|
|||||||
|
|
||||||
/** 业务标题*/
|
/** 业务标题*/
|
||||||
private String bpmBizTitle;
|
private String bpmBizTitle;
|
||||||
|
/** 截止时间 */
|
||||||
|
private String deadline;
|
||||||
|
/** 截止时间是否逾期 */
|
||||||
|
private Boolean deadlineOverdue;
|
||||||
|
/** 截止时间逾期天数 */
|
||||||
|
private Long overdueDays;
|
||||||
|
/** 截止时间是否临近 */
|
||||||
|
private Boolean deadlineSoon;
|
||||||
|
/** 截止时间剩余天数 */
|
||||||
|
private Long remainingDays;
|
||||||
|
/** 截止时间提醒文案 */
|
||||||
|
private String deadlineWarnText;
|
||||||
/** 流程状态 未发起、处理中、处理完成*/
|
/** 流程状态 未发起、处理中、处理完成*/
|
||||||
private String bpmStatus;
|
private String bpmStatus;
|
||||||
/** 超时提醒*/
|
/** 超时提醒*/
|
||||||
|
|||||||
+39
@@ -296,6 +296,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|||||||
Set<String> needSet = new HashSet<String>();
|
Set<String> needSet = new HashSet<String>();
|
||||||
needSet.add(WorkFlowGlobals.BPM_BIZ_TITLE);
|
needSet.add(WorkFlowGlobals.BPM_BIZ_TITLE);
|
||||||
needSet.add(WorkFlowGlobals.BPM_DES_FORM_CODE);
|
needSet.add(WorkFlowGlobals.BPM_DES_FORM_CODE);
|
||||||
|
needSet.add("deadline");
|
||||||
Map<String, Object> processVariables = runtimeService.getVariables(processInstanceId,needSet);
|
Map<String, Object> processVariables = runtimeService.getVariables(processInstanceId,needSet);
|
||||||
|
|
||||||
//流程定义
|
//流程定义
|
||||||
@@ -309,6 +310,21 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|||||||
dto.setTaskId(t.getTaskDefinitionKey());
|
dto.setTaskId(t.getTaskDefinitionKey());
|
||||||
dto.setTaskEndTime(t.getDueDate());
|
dto.setTaskEndTime(t.getDueDate());
|
||||||
dto.setProcessInstanceId(t.getProcessInstanceId());
|
dto.setProcessInstanceId(t.getProcessInstanceId());
|
||||||
|
String deadline = oConvertUtils.getString(processVariables.get("deadline"));
|
||||||
|
dto.setDeadline(deadline);
|
||||||
|
Long deadlineGapDays = calcDeadlineGapDays(deadline);
|
||||||
|
dto.setDeadlineOverdue(false);
|
||||||
|
dto.setDeadlineSoon(false);
|
||||||
|
if (deadlineGapDays != null && deadlineGapDays < 0) {
|
||||||
|
Long overdueDays = Math.abs(deadlineGapDays);
|
||||||
|
dto.setDeadlineOverdue(true);
|
||||||
|
dto.setOverdueDays(overdueDays);
|
||||||
|
dto.setDeadlineWarnText("已逾期" + overdueDays + "天");
|
||||||
|
} else if (deadlineGapDays != null && deadlineGapDays <= 3) {
|
||||||
|
dto.setDeadlineSoon(true);
|
||||||
|
dto.setRemainingDays(deadlineGapDays);
|
||||||
|
dto.setDeadlineWarnText(deadlineGapDays == 0 ? "今天截止" : "剩余" + deadlineGapDays + "天");
|
||||||
|
}
|
||||||
dto.setProcessApplyUserId(applyUserId);
|
dto.setProcessApplyUserId(applyUserId);
|
||||||
// dto.setProcessApplyUserName(ownerSysUser!=null?ownerSysUser.getRealname():"");
|
// dto.setProcessApplyUserName(ownerSysUser!=null?ownerSysUser.getRealname():"");
|
||||||
dto.setProcessDefinitionId(processInstance != null ? processInstance.getProcessDefinitionId() : null);
|
dto.setProcessDefinitionId(processInstance != null ? processInstance.getProcessDefinitionId() : null);
|
||||||
@@ -546,6 +562,29 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算截止日期与今天的天数差,负数表示已逾期
|
||||||
|
* @param deadline
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Long calcDeadlineGapDays(String deadline) {
|
||||||
|
if (oConvertUtils.isEmpty(deadline)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
String deadlineText = deadline.trim();
|
||||||
|
if (deadlineText.length() < 10) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String deadlineDateText = deadlineText.substring(0, 10).replace("/", "-").replace(".", "-");
|
||||||
|
java.time.LocalDate deadlineDate = java.time.LocalDate.parse(deadlineDateText);
|
||||||
|
return java.time.temporal.ChronoUnit.DAYS.between(java.time.LocalDate.now(), deadlineDate);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("待办任务deadline解析失败:{}", deadline);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取业务ID
|
* 获取业务ID
|
||||||
*
|
*
|
||||||
|
|||||||
+26
@@ -46,6 +46,11 @@ import java.util.stream.Stream;
|
|||||||
@RequestMapping("/act/process/extActProcessNode")
|
@RequestMapping("/act/process/extActProcessNode")
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ExtActProcessNodeController {
|
public class ExtActProcessNodeController {
|
||||||
|
private static final String BUSINESS_ID = "business_id";
|
||||||
|
private static final String BUSINESS_TABLE_NAME = "business_tablename";
|
||||||
|
private static final String BUSINESS_ID_CAMEL = "businessId";
|
||||||
|
private static final String BUSINESS_TABLE_NAME_CAMEL = "businessTablename";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IExtActProcessNodeService extActProcessNodeService;
|
private IExtActProcessNodeService extActProcessNodeService;
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -359,9 +364,20 @@ public class ExtActProcessNodeController {
|
|||||||
String formUrlMobile = activitiService.getHisVarinst(WorkFlowGlobals.BPM_FORM_CONTENT_URL_MOBILE,procInstId);
|
String formUrlMobile = activitiService.getHisVarinst(WorkFlowGlobals.BPM_FORM_CONTENT_URL_MOBILE,procInstId);
|
||||||
String dataId = activitiService.getHisVarinst(WorkFlowGlobals.BPM_DATA_ID,procInstId);
|
String dataId = activitiService.getHisVarinst(WorkFlowGlobals.BPM_DATA_ID,procInstId);
|
||||||
String tableName = activitiService.getHisVarinst(WorkFlowGlobals.BPM_FORM_KEY,procInstId);
|
String tableName = activitiService.getHisVarinst(WorkFlowGlobals.BPM_FORM_KEY,procInstId);
|
||||||
|
// 历史/抄送查看需要真实业务表数据,补齐发起流程时写入的业务ID和业务表名变量。
|
||||||
|
String businessId = getHisVarinstByNames(procInstId, BUSINESS_ID, BUSINESS_ID_CAMEL);
|
||||||
|
String businessTableName = getHisVarinstByNames(procInstId, BUSINESS_TABLE_NAME, BUSINESS_TABLE_NAME_CAMEL);
|
||||||
Map<String,Object> variablesMap = new HashMap<String,Object>();
|
Map<String,Object> variablesMap = new HashMap<String,Object>();
|
||||||
variablesMap.put(WorkFlowGlobals.BPM_DATA_ID, dataId);
|
variablesMap.put(WorkFlowGlobals.BPM_DATA_ID, dataId);
|
||||||
variablesMap.put(WorkFlowGlobals.BPM_FORM_KEY, tableName);
|
variablesMap.put(WorkFlowGlobals.BPM_FORM_KEY, tableName);
|
||||||
|
if (oConvertUtils.isNotEmpty(businessId)) {
|
||||||
|
variablesMap.put(BUSINESS_ID, businessId);
|
||||||
|
variablesMap.put(BUSINESS_ID_CAMEL, businessId);
|
||||||
|
}
|
||||||
|
if (oConvertUtils.isNotEmpty(businessTableName)) {
|
||||||
|
variablesMap.put(BUSINESS_TABLE_NAME, businessTableName);
|
||||||
|
variablesMap.put(BUSINESS_TABLE_NAME_CAMEL, businessTableName);
|
||||||
|
}
|
||||||
Map<String,Object> map = new HashMap<String,Object>();
|
Map<String,Object> map = new HashMap<String,Object>();
|
||||||
map.put("formUrl", formUrl);
|
map.put("formUrl", formUrl);
|
||||||
map.put("formUrlMobile", formUrlMobile);
|
map.put("formUrlMobile", formUrlMobile);
|
||||||
@@ -376,6 +392,16 @@ public class ExtActProcessNodeController {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getHisVarinstByNames(String procInstId, String... varNames) {
|
||||||
|
for (String varName : varNames) {
|
||||||
|
String value = activitiService.getHisVarinst(varName, procInstId);
|
||||||
|
if (oConvertUtils.isNotEmpty(value)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据流程编码和业务key查询任务节点信息,查询我的待办任务
|
* 根据流程编码和业务key查询任务节点信息,查询我的待办任务
|
||||||
|
|||||||
+100
-15
@@ -7,6 +7,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang.StreamUtils;
|
import org.apache.commons.lang.StreamUtils;
|
||||||
|
import org.flowable.bpmn.converter.BpmnXMLConverter;
|
||||||
|
import org.flowable.bpmn.model.BpmnModel;
|
||||||
|
import org.flowable.bpmn.model.FlowElement;
|
||||||
|
import org.flowable.bpmn.model.FlowElementsContainer;
|
||||||
|
import org.flowable.bpmn.model.Task;
|
||||||
import org.flowable.common.engine.api.FlowableException;
|
import org.flowable.common.engine.api.FlowableException;
|
||||||
import org.flowable.engine.IdentityService;
|
import org.flowable.engine.IdentityService;
|
||||||
import org.flowable.engine.RepositoryService;
|
import org.flowable.engine.RepositoryService;
|
||||||
@@ -51,6 +56,11 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.xml.stream.XMLInputFactory;
|
||||||
|
import javax.xml.stream.XMLStreamReader;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.sql.Blob;
|
import java.sql.Blob;
|
||||||
import java.sql.Clob;
|
import java.sql.Clob;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -183,6 +193,11 @@ public class ExtActProcessServiceImpl extends ServiceImpl<ExtActProcessMapper, E
|
|||||||
processnodeDeployment.setNodeConfigJson(node.getNodeConfigJson());
|
processnodeDeployment.setNodeConfigJson(node.getNodeConfigJson());
|
||||||
processnodeDeployment.setDeploymentId(deployment.getId());
|
processnodeDeployment.setDeploymentId(deployment.getId());
|
||||||
processnodeDeployment.setFormId(node.getFormId());
|
processnodeDeployment.setFormId(node.getFormId());
|
||||||
|
// 发布版本快照必须带上开关字段,否则运行时会回退到默认配置。
|
||||||
|
processnodeDeployment.setFormEditStatus(node.getFormEditStatus());
|
||||||
|
processnodeDeployment.setCcStatus(node.getCcStatus());
|
||||||
|
processnodeDeployment.setSelnextUserStatus(node.getSelnextUserStatus());
|
||||||
|
processnodeDeployment.setMsgStatus(node.getMsgStatus());
|
||||||
processnodeDeployment.setModelAndView(node.getModelAndView());
|
processnodeDeployment.setModelAndView(node.getModelAndView());
|
||||||
processnodeDeployment.setModelAndViewMobile(node.getModelAndViewMobile());
|
processnodeDeployment.setModelAndViewMobile(node.getModelAndViewMobile());
|
||||||
processnodeDeployment.setNodeTimeout(node.getNodeTimeout());
|
processnodeDeployment.setNodeTimeout(node.getNodeTimeout());
|
||||||
@@ -1263,7 +1278,9 @@ public class ExtActProcessServiceImpl extends ServiceImpl<ExtActProcessMapper, E
|
|||||||
log.info(" 流程开始节点类型 startType :" + startType);
|
log.info(" 流程开始节点类型 startType :" + startType);
|
||||||
log.info(" 乐观锁 updateCount :" + updateCount);
|
log.info(" 乐观锁 updateCount :" + updateCount);
|
||||||
|
|
||||||
DesUtils.checkNodeDuplicate(nodes);
|
// 以前端提交的 BPMN XML 为准解析节点,避免 nodes 字符串漏传内嵌子流程节点后误删配置。
|
||||||
|
Map<String, ProcessNodeInfo> processNodeInfoMap = parseProcessNodeInfoMap(processDescriptor);
|
||||||
|
DesUtils.checkNodeDuplicate(toDesignerNodeString(processNodeInfoMap.values()));
|
||||||
ExtActProcess process = extActProcessMapper.selectById(processDefinitionId);
|
ExtActProcess process = extActProcessMapper.selectById(processDefinitionId);
|
||||||
//第一次进入设计流程的时候,processDefinitionId始终为零,导致流程保存多份
|
//第一次进入设计流程的时候,processDefinitionId始终为零,导致流程保存多份
|
||||||
if ("0".equals(processDefinitionId) && process == null) {
|
if ("0".equals(processDefinitionId) && process == null) {
|
||||||
@@ -1351,19 +1368,16 @@ public class ExtActProcessServiceImpl extends ServiceImpl<ExtActProcessMapper, E
|
|||||||
//同步修改流程节点配置
|
//同步修改流程节点配置
|
||||||
// 1.查出原来的流程节点
|
// 1.查出原来的流程节点
|
||||||
List<ExtActProcessNode> oldNodeList = extActProcessNodeMapper.queryAllNodesByProcessKey(processkey);
|
List<ExtActProcessNode> oldNodeList = extActProcessNodeMapper.queryAllNodesByProcessKey(processkey);
|
||||||
List<String> newNodeList = new ArrayList<>();
|
Map<String, ExtActProcessNode> oldNodeMap = oldNodeList.stream()
|
||||||
if (nodes != null && nodes.length() > 3) {
|
.collect(Collectors.toMap(ExtActProcessNode::getProcessNodeCode, node -> node, (left, right) -> left));
|
||||||
String[] temp = nodes.split("@@@");
|
// newNodeList 是 XML 中真实存在的可配置任务节点,后续只删除不在此清单中的旧配置。
|
||||||
for (int i = 0; i < temp.length; i++) {
|
List<String> newNodeList = new ArrayList<>(processNodeInfoMap.keySet());
|
||||||
ExtActProcessNode processnode = null;
|
for (ProcessNodeInfo nodeInfo : processNodeInfoMap.values()) {
|
||||||
String[] fileds = temp[i].split("###");
|
String tid = nodeInfo.getId();
|
||||||
String tid = fileds[0].substring(3);
|
String name = nodeInfo.getName();
|
||||||
String name = fileds[1].substring(9);
|
ExtActProcessNode processnode = oldNodeMap.get(tid);
|
||||||
newNodeList.add(tid);
|
|
||||||
|
|
||||||
// 2.查询节点是否存在
|
// 2.查询节点是否存在
|
||||||
processnode = oldNodeList.stream().filter(node -> node.getProcessNodeCode().equals(tid)).findFirst().orElse(null);
|
|
||||||
//processnode = extActProcessNodeMapper.queryByNodeCodeAndProcessKey(processkey, tid);
|
|
||||||
if (processnode == null) {
|
if (processnode == null) {
|
||||||
processnode = new ExtActProcessNode();
|
processnode = new ExtActProcessNode();
|
||||||
processnode.setProcessNodeCode(tid);
|
processnode.setProcessNodeCode(tid);
|
||||||
@@ -1385,7 +1399,6 @@ public class ExtActProcessServiceImpl extends ServiceImpl<ExtActProcessMapper, E
|
|||||||
processnode.setMsgStatus(CommonConstant.STATUS_1);
|
processnode.setMsgStatus(CommonConstant.STATUS_1);
|
||||||
extActProcessNodeMapper.insert(processnode);
|
extActProcessNodeMapper.insert(processnode);
|
||||||
} else {
|
} else {
|
||||||
processnode.setProcessNodeCode(tid);
|
|
||||||
processnode.setProcessNodeName(name);
|
processnode.setProcessNodeName(name);
|
||||||
processnode.setProcessId(process.getId());
|
processnode.setProcessId(process.getId());
|
||||||
extActProcessNodeMapper.updateById(processnode);
|
extActProcessNodeMapper.updateById(processnode);
|
||||||
@@ -1393,15 +1406,87 @@ public class ExtActProcessServiceImpl extends ServiceImpl<ExtActProcessMapper, E
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 3.筛选出需要删除的节点【TV360X-1119 自定义start节点不能删】
|
// 3.筛选出需要删除的节点【TV360X-1119 自定义start节点不能删】
|
||||||
List<String> needToDeleteNodes = oldNodeList.stream().filter(element -> !newNodeList.contains(element.getProcessNodeCode()) && !element.getProcessNodeCode().toLowerCase().contains("start"))
|
List<String> needToDeleteNodes = oldNodeList.stream().filter(element -> !newNodeList.contains(element.getProcessNodeCode()))
|
||||||
.map(ExtActProcessNode::getProcessNodeCode).collect(Collectors.toList());
|
.map(ExtActProcessNode::getProcessNodeCode).collect(Collectors.toList());
|
||||||
if(!CollectionUtils.isEmpty(needToDeleteNodes)){
|
if(!CollectionUtils.isEmpty(needToDeleteNodes)){
|
||||||
extActProcessNodeMapper.deleteNodeByProcessId(process.getId(), needToDeleteNodes);
|
extActProcessNodeMapper.deleteNodeByProcessId(process.getId(), needToDeleteNodes);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
//update-end---author:scott ---date::2023-11-18 for:【QQYUN-7020】流程设计器里面节点删除了,但是配置里面节点未删除
|
//update-end---author:scott ---date::2023-11-18 for:【QQYUN-7020】流程设计器里面节点删除了,但是配置里面节点未删除
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从 BPMN XML 解析流程配置节点。XML 解析失败时直接中断保存,避免按不完整节点清单删除已有配置。
|
||||||
|
*/
|
||||||
|
private Map<String, ProcessNodeInfo> parseProcessNodeInfoMap(String processDescriptor) throws Exception {
|
||||||
|
if (oConvertUtils.isEmpty(processDescriptor)) {
|
||||||
|
throw new Exception("Process XML cannot be empty");
|
||||||
|
}
|
||||||
|
XMLInputFactory xif = XMLInputFactory.newInstance();
|
||||||
|
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
|
||||||
|
xif.setProperty("javax.xml.stream.isSupportingExternalEntities", false);
|
||||||
|
try (InputStreamReader xmlIn = new InputStreamReader(new ByteArrayInputStream(processDescriptor.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8)) {
|
||||||
|
XMLStreamReader xtr = xif.createXMLStreamReader(xmlIn);
|
||||||
|
BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
|
||||||
|
Map<String, ProcessNodeInfo> nodeInfoMap = new LinkedHashMap<>();
|
||||||
|
for (org.flowable.bpmn.model.Process process : bpmnModel.getProcesses()) {
|
||||||
|
collectProcessNodeInfos(process, nodeInfoMap);
|
||||||
|
}
|
||||||
|
return nodeInfoMap;
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Parse BPMN XML process nodes failed", e);
|
||||||
|
throw new Exception("Parse BPMN XML process nodes failed, please check process designer XML", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void collectProcessNodeInfos(FlowElementsContainer container, Map<String, ProcessNodeInfo> nodeInfoMap) {
|
||||||
|
if (container == null || CollectionUtils.isEmpty(container.getFlowElements())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (FlowElement flowElement : container.getFlowElements()) {
|
||||||
|
if (isConfigurableProcessNode(flowElement) && oConvertUtils.isNotEmpty(flowElement.getId())) {
|
||||||
|
nodeInfoMap.put(flowElement.getId(), new ProcessNodeInfo(flowElement.getId(), oConvertUtils.getString(flowElement.getName(), "")));
|
||||||
|
}
|
||||||
|
// 子流程本身不作为配置节点保存,但要递归进入子流程内部收集任务节点。
|
||||||
|
if (flowElement instanceof FlowElementsContainer) {
|
||||||
|
collectProcessNodeInfos((FlowElementsContainer) flowElement, nodeInfoMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isConfigurableProcessNode(FlowElement flowElement) {
|
||||||
|
// 只同步任务节点,排除开始、结束事件以及 bpmn:SubProcess 容器。
|
||||||
|
return flowElement instanceof Task;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toDesignerNodeString(Collection<ProcessNodeInfo> nodeInfos) {
|
||||||
|
if (CollectionUtils.isEmpty(nodeInfos)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
StringBuilder nodes = new StringBuilder();
|
||||||
|
for (ProcessNodeInfo nodeInfo : nodeInfos) {
|
||||||
|
nodes.append("id=").append(nodeInfo.getId()).append("###nodeName=").append(nodeInfo.getName()).append("@@@");
|
||||||
|
}
|
||||||
|
return nodes.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ProcessNodeInfo {
|
||||||
|
private final String id;
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
private ProcessNodeInfo(String id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -36,6 +36,7 @@ import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -106,6 +107,7 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
|
|||||||
if (oConvertUtils.isEmpty(bgPartymatter.getDelFlag())) {
|
if (oConvertUtils.isEmpty(bgPartymatter.getDelFlag())) {
|
||||||
bgPartymatter.setDelFlag("0");
|
bgPartymatter.setDelFlag("0");
|
||||||
}
|
}
|
||||||
|
fillGeneratedNumber(bgPartymatter);
|
||||||
bgPartymatterService.save(bgPartymatter);
|
bgPartymatterService.save(bgPartymatter);
|
||||||
return Result.OK("添加成功!");
|
return Result.OK("添加成功!");
|
||||||
}
|
}
|
||||||
@@ -120,6 +122,7 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
|
|||||||
@RequiresPermissions("bgpartymatter:bg_partymatter:edit")
|
@RequiresPermissions("bgpartymatter:bg_partymatter:edit")
|
||||||
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
|
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
|
||||||
public Result<String> edit(@RequestBody BgPartymatter bgPartymatter) {
|
public Result<String> edit(@RequestBody BgPartymatter bgPartymatter) {
|
||||||
|
fillGeneratedNumber(bgPartymatter);
|
||||||
bgPartymatterService.updateById(bgPartymatter);
|
bgPartymatterService.updateById(bgPartymatter);
|
||||||
return Result.OK("编辑成功!");
|
return Result.OK("编辑成功!");
|
||||||
}
|
}
|
||||||
@@ -139,11 +142,24 @@ public class BgPartymatterController extends JeecgController<BgPartymatter, IBgP
|
|||||||
return Result.error("流程实例ID不能为空");
|
return Result.error("流程实例ID不能为空");
|
||||||
}
|
}
|
||||||
String varField = oConvertUtils.isEmpty(dto.getVarField()) ? "json_data" : dto.getVarField();
|
String varField = oConvertUtils.isEmpty(dto.getVarField()) ? "json_data" : dto.getVarField();
|
||||||
|
fillGeneratedNumber(dto.getFormData());
|
||||||
bgPartymatterService.updateById(dto.getFormData());
|
bgPartymatterService.updateById(dto.getFormData());
|
||||||
runtimeService.setVariable(dto.getProcessInstanceId(), varField, JSONObject.toJSONString(dto.getFormData()));
|
runtimeService.setVariable(dto.getProcessInstanceId(), varField, JSONObject.toJSONString(dto.getFormData()));
|
||||||
return Result.OK("保存成功");
|
return Result.OK("保存成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据会议时间和议题序号生成业务序号,规则:yyyyMMdd-议题序号。
|
||||||
|
* 前端会即时回显,后端保存前再次生成,保证接口调用和流程保存数据一致。
|
||||||
|
*/
|
||||||
|
private void fillGeneratedNumber(BgPartymatter bgPartymatter) {
|
||||||
|
if (bgPartymatter == null || bgPartymatter.getMatterTime() == null || bgPartymatter.getItemNumber() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String dateText = new SimpleDateFormat("yyyyMMdd").format(bgPartymatter.getMatterTime());
|
||||||
|
bgPartymatter.setNumber(dateText + "-" + bgPartymatter.getItemNumber());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过id删除
|
* 通过id删除
|
||||||
* @param id
|
* @param id
|
||||||
|
|||||||
+27
-7
@@ -4,6 +4,7 @@ import java.io.Serializable;
|
|||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||||
@@ -65,6 +66,11 @@ public class BgPartymatter implements Serializable {
|
|||||||
@Excel(name = "序号", width = 15)
|
@Excel(name = "序号", width = 15)
|
||||||
@Schema(description = "序号")
|
@Schema(description = "序号")
|
||||||
private java.lang.String number;
|
private java.lang.String number;
|
||||||
|
/**议题序号*/
|
||||||
|
@Excel(name = "议题序号", width = 15)
|
||||||
|
@Schema(description = "议题序号")
|
||||||
|
@TableField("item_number")
|
||||||
|
private java.lang.Integer itemNumber;
|
||||||
/**会议时间*/
|
/**会议时间*/
|
||||||
@Excel(name = "会议时间", width = 15, format = "yyyy-MM-dd")
|
@Excel(name = "会议时间", width = 15, format = "yyyy-MM-dd")
|
||||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||||
@@ -83,11 +89,25 @@ public class BgPartymatter implements Serializable {
|
|||||||
@Excel(name = "事项目录编码", width = 15)
|
@Excel(name = "事项目录编码", width = 15)
|
||||||
@Schema(description = "事项目录编码")
|
@Schema(description = "事项目录编码")
|
||||||
private java.lang.String matterCode;
|
private java.lang.String matterCode;
|
||||||
/**责任部门*/
|
/**抄告单编号*/
|
||||||
@Excel(name = "责任部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
@Excel(name = "抄告单编号", width = 15)
|
||||||
|
@Schema(description = "抄告单编号")
|
||||||
|
private java.lang.String noticeNumber;
|
||||||
|
/**是否为三重一大决策*/
|
||||||
|
@Excel(name = "是否为三重一大决策", width = 15, dicCode = "yn")
|
||||||
|
@Dict(dicCode = "yn")
|
||||||
|
@Schema(description = "是否为三重一大决策")
|
||||||
|
private java.lang.String isImportant;
|
||||||
|
/**主办部门*/
|
||||||
|
@Excel(name = "主办部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||||
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||||
@Schema(description = "责任部门")
|
@Schema(description = "主办部门")
|
||||||
private java.lang.String responDeptid;
|
private java.lang.String responDeptid;
|
||||||
|
/**协办部门*/
|
||||||
|
@Excel(name = "协办部门", width = 15, dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||||
|
@Dict(dictTable = "sys_depart", dicText = "depart_name", dicCode = "id")
|
||||||
|
@Schema(description = "协办部门")
|
||||||
|
private java.lang.String assistDeptid;
|
||||||
/**实际执行情况*/
|
/**实际执行情况*/
|
||||||
@Excel(name = "实际执行情况", width = 15)
|
@Excel(name = "实际执行情况", width = 15)
|
||||||
@Schema(description = "实际执行情况")
|
@Schema(description = "实际执行情况")
|
||||||
@@ -107,10 +127,10 @@ public class BgPartymatter implements Serializable {
|
|||||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||||
@Schema(description = "要求完成日期")
|
@Schema(description = "要求完成日期")
|
||||||
private java.util.Date deadline;
|
private java.util.Date deadline;
|
||||||
/**紧急程度*/
|
/**是否急件*/
|
||||||
@Excel(name = "紧急程度", width = 15)
|
@Excel(name = "是否急件", width = 15, dicCode = "yn")
|
||||||
@Dict(dicCode = "urgency_level")
|
@Dict(dicCode = "yn")
|
||||||
@Schema(description = "紧急程度")
|
@Schema(description = "是否急件")
|
||||||
private java.lang.String urgencyLevel;
|
private java.lang.String urgencyLevel;
|
||||||
/**是否需要所办领导审批*/
|
/**是否需要所办领导审批*/
|
||||||
@Excel(name = "是否需要所办领导审批", width = 15,replace = {"是_1","否_0"} )
|
@Excel(name = "是否需要所办领导审批", width = 15,replace = {"是_1","否_0"} )
|
||||||
|
|||||||
+1
@@ -80,6 +80,7 @@ public class BgPartymatterFeedback implements Serializable {
|
|||||||
private java.util.Date actualTime;
|
private java.util.Date actualTime;
|
||||||
/**完成状态*/
|
/**完成状态*/
|
||||||
@Excel(name = "完成状态", width = 15)
|
@Excel(name = "完成状态", width = 15)
|
||||||
|
@Dict(dicCode = "feedback_status")
|
||||||
@Schema(description = "完成状态")
|
@Schema(description = "完成状态")
|
||||||
private java.lang.String bpmStatus;
|
private java.lang.String bpmStatus;
|
||||||
/**流程实例id*/
|
/**流程实例id*/
|
||||||
|
|||||||
+1
@@ -80,6 +80,7 @@ public class TaskTask implements Serializable {
|
|||||||
private java.lang.String processType;
|
private java.lang.String processType;
|
||||||
/**流程状态*/
|
/**流程状态*/
|
||||||
@Excel(name = "流程状态", width = 15)
|
@Excel(name = "流程状态", width = 15)
|
||||||
|
@Dict(dicCode = "super_status")
|
||||||
@Schema(description = "流程状态")
|
@Schema(description = "流程状态")
|
||||||
private java.lang.String bpmStatus;
|
private java.lang.String bpmStatus;
|
||||||
/**关联台账事项ID*/
|
/**关联台账事项ID*/
|
||||||
|
|||||||
Reference in New Issue
Block a user