zhouhaibin
8 months ago
57 changed files with 3027 additions and 117 deletions
@ -0,0 +1,28 @@ |
|||||
|
package org.jeecg.modules.huzhou.common; |
||||
|
|
||||
|
import java.lang.reflect.Method; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
|
||||
|
public class HuzhouCommonUtils { |
||||
|
public static List<String> extractObjectAttributes(Object user) { |
||||
|
List<String> attributes = new ArrayList<>(); |
||||
|
Class<?> clazz = user.getClass(); |
||||
|
Method[] methods = clazz.getDeclaredMethods(); |
||||
|
|
||||
|
for (Method method : methods) { |
||||
|
try { |
||||
|
String name = method.getName(); |
||||
|
if (name.startsWith("get")) { // 假设所有的getter方法都不带参数,并且返回一个基本数据类型或其包装类
|
||||
|
Object value = method.invoke(user); |
||||
|
if (value != null) { // 过滤掉null值
|
||||
|
attributes.add(name.substring(3) + "=" + value); // 去掉"get"并添加等号和值
|
||||
|
} |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
return attributes; |
||||
|
} |
||||
|
} |
@ -0,0 +1,148 @@ |
|||||
|
package org.jeecg.modules.huzhou.controller; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import org.apache.commons.lang.StringUtils; |
||||
|
import org.checkerframework.checker.units.qual.A; |
||||
|
import org.jeecg.common.api.vo.Result; |
||||
|
import org.jeecg.modules.huzhou.entity.*; |
||||
|
import org.jeecg.modules.huzhou.service.*; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Arrays; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/huzhouPlan") |
||||
|
public class HuzhouPlanController { |
||||
|
@Autowired |
||||
|
private IHuzhouPlaninfoService planinfoService; |
||||
|
@Autowired |
||||
|
private IHuzhouPlanmoduleService planmoduleService; |
||||
|
@Autowired |
||||
|
private IHuzhouPlanmoduledetailService planmoduledetailService; |
||||
|
@Autowired |
||||
|
private IWorkflowService workflowService; |
||||
|
@Autowired |
||||
|
private IHuzhouProcessinfoService processinfoService; |
||||
|
@Autowired |
||||
|
private IHuzhouProjectinfoService projectinfoService; |
||||
|
@GetMapping("/queryPlanModulePage") |
||||
|
public Result<Page<HuzhouPlanmodule>> queryPlanModulePage(HuzhouPlanmodule planmodule,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
LambdaQueryWrapper<HuzhouPlanmodule> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
String moduleName = planmodule.getModuleName(); |
||||
|
String projectType = planmodule.getProjectType(); |
||||
|
queryWrapper.eq(StringUtils.isNotBlank(moduleName), HuzhouPlanmodule::getModuleName,moduleName) |
||||
|
.eq(StringUtils.isNotBlank(projectType),HuzhouPlanmodule::getProjectType,projectType); |
||||
|
Page<HuzhouPlanmodule> planmodulePage = new Page<>(pageNo,pageSize); |
||||
|
|
||||
|
Page<HuzhouPlanmodule> page = planmoduleService.page(planmodulePage, queryWrapper); |
||||
|
return Result.OK(page); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/queryPlanModuleone") |
||||
|
public Result<HuzhouPlanmodule> queryPlanModuleByid(HuzhouPlanmodule planmodule){ |
||||
|
LambdaQueryWrapper<HuzhouPlanmodule> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
int planmoduleId = planmodule.getId(); |
||||
|
String projectType = planmodule.getProjectType(); |
||||
|
queryWrapper.eq(planmoduleId!=0,HuzhouPlanmodule::getId,planmoduleId) |
||||
|
.eq(StringUtils.isNotBlank(projectType),HuzhouPlanmodule::getProjectType,projectType); |
||||
|
HuzhouPlanmodule one = planmoduleService.getOne(queryWrapper); |
||||
|
return Result.OK(one); |
||||
|
} |
||||
|
@PostMapping("/savePlanModule") |
||||
|
public Result<?> savePlanModule(@RequestBody HuzhouPlanmodule planmodule){ |
||||
|
String projectType = planmodule.getProjectType(); |
||||
|
LambdaQueryWrapper<HuzhouPlanmodule> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouPlanmodule::getProjectType,projectType); |
||||
|
int size = planmoduleService.list(queryWrapper).size(); |
||||
|
if(size>0){ |
||||
|
return Result.error("此项目类型已存在模板,无法新增"); |
||||
|
} |
||||
|
planmoduleService.save(planmodule); |
||||
|
return Result.ok("新增项目模板成功"); |
||||
|
} |
||||
|
@PostMapping("/modifyPlanModule") |
||||
|
public Result<?> modifyPlanModule(@RequestBody HuzhouPlanmodule planmodule){ |
||||
|
String projectType = planmodule.getProjectType(); |
||||
|
int planmoduleId = planmodule.getId(); |
||||
|
LambdaQueryWrapper<HuzhouPlanmodule> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouPlanmodule::getProjectType,projectType); |
||||
|
queryWrapper.ne(HuzhouPlanmodule::getId,planmoduleId); |
||||
|
int size = planmoduleService.list(queryWrapper).size(); |
||||
|
if(size>0){ |
||||
|
return Result.error("此项目类型已存在模板"); |
||||
|
} |
||||
|
planmoduleService.updateById(planmodule); |
||||
|
return Result.ok("修改项目模板成功"); |
||||
|
} |
||||
|
@DeleteMapping("/deletePlanModule") |
||||
|
public Result<?> deletePlanModule(@RequestParam("id") Integer id){ |
||||
|
planmoduleService.removeById(id); |
||||
|
return Result.ok("删除项目模板成功"); |
||||
|
} |
||||
|
@GetMapping("/queryPlanModuleDetailPage") |
||||
|
public Result<List<HuzhouPlanmoduledetail>> queryPlanModuleDetailPage(HuzhouPlanmoduledetail planmoduledetail){ |
||||
|
LambdaQueryWrapper<HuzhouPlanmoduledetail> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
String moduleId = planmoduledetail.getModuleId(); |
||||
|
queryWrapper.eq(StringUtils.isNotBlank(moduleId), HuzhouPlanmoduledetail::getModuleId,moduleId); |
||||
|
List<HuzhouPlanmoduledetail> list = planmoduledetailService.list(queryWrapper); |
||||
|
return Result.OK(list); |
||||
|
} |
||||
|
@PostMapping("/savePlanModuleDatail") |
||||
|
public Result<?> savePlanModuleDatail(@RequestBody() List<HuzhouPlanmoduledetail> planmoduledetails){ |
||||
|
//先删除后增加
|
||||
|
String moduleId = planmoduledetails.get(0).getModuleId(); |
||||
|
LambdaQueryWrapper<HuzhouPlanmoduledetail> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouPlanmoduledetail::getModuleId,moduleId); |
||||
|
boolean remove = planmoduledetailService.remove(queryWrapper); |
||||
|
for (HuzhouPlanmoduledetail p:planmoduledetails |
||||
|
) { |
||||
|
planmoduledetailService.save(p); |
||||
|
} |
||||
|
return Result.ok("新增项目模板成功"); |
||||
|
} |
||||
|
@PostMapping("/saveProjectPlan") |
||||
|
public Result<?> saveProjectPlan(@RequestBody List<HuzhouPlaninfo> planinfos){ |
||||
|
if(planinfos.size()==0){ |
||||
|
return Result.error("数量为0"); |
||||
|
} |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752895307869614081"); |
||||
|
arrayList.add("1752895591849160705"); |
||||
|
WorkFlow workFlow = workflowService.createFlow("项目计划审批流程", arrayList); |
||||
|
String processInstanceId = workFlow.getProcessInstanceId(); |
||||
|
String businessKey = workFlow.getBusinessKey(); |
||||
|
planinfos.forEach(item->{ |
||||
|
planinfoService.save(item); |
||||
|
}); |
||||
|
String projectId = planinfos.get(0).getProjectId(); |
||||
|
//保存项目信息
|
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"5");//3表示项目资料流程审批阶段
|
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectId); |
||||
|
projectinfoService.update(null,updateWrapper); |
||||
|
HuzhouProcessinfo huzhouProcessinfo = new HuzhouProcessinfo(); |
||||
|
huzhouProcessinfo.setBusinesskey(businessKey); |
||||
|
huzhouProcessinfo.setStatus("3");//该项目的第一个流程
|
||||
|
huzhouProcessinfo.setProcessinstanceid(processInstanceId); |
||||
|
huzhouProcessinfo.setProjectid(projectId); |
||||
|
processinfoService.save(huzhouProcessinfo); |
||||
|
return Result.OK("保存成功"); |
||||
|
} |
||||
|
@GetMapping("/queryProjectPlan") |
||||
|
public Result< List<HuzhouPlaninfo>> queryProjectPlan(HuzhouPlaninfo planinfo){ |
||||
|
String projectId = planinfo.getProjectId(); |
||||
|
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(StringUtils.isNotBlank(projectId),HuzhouPlaninfo::getProjectId,projectId); |
||||
|
queryWrapper.orderByAsc(HuzhouPlaninfo::getOrderNumber); |
||||
|
List<HuzhouPlaninfo> list = planinfoService.list(queryWrapper); |
||||
|
return Result.OK(list); |
||||
|
} |
||||
|
} |
@ -0,0 +1,396 @@ |
|||||
|
package org.jeecg.modules.huzhou.controller; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import org.activiti.bpmn.model.BpmnModel; |
||||
|
import org.activiti.bpmn.model.FlowElement; |
||||
|
import org.activiti.bpmn.model.SequenceFlow; |
||||
|
import org.activiti.bpmn.model.UserTask; |
||||
|
import org.activiti.engine.*; |
||||
|
|
||||
|
import org.activiti.engine.impl.identity.Authentication; |
||||
|
|
||||
|
import org.activiti.engine.runtime.ProcessInstance; |
||||
|
import org.activiti.engine.task.Task; |
||||
|
import org.apache.commons.beanutils.BeanMap; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.apache.shiro.SecurityUtils; |
||||
|
import org.checkerframework.checker.units.qual.A; |
||||
|
import org.jeecg.common.api.vo.Result; |
||||
|
import org.jeecg.common.constant.SymbolConstant; |
||||
|
import org.jeecg.common.system.vo.LoginUser; |
||||
|
import org.jeecg.common.util.CommonUtils; |
||||
|
import org.jeecg.modules.huzhou.common.HuzhouCommonUtils; |
||||
|
import org.jeecg.modules.huzhou.entity.*; |
||||
|
import org.jeecg.modules.huzhou.service.*; |
||||
|
import org.jeecg.modules.huzhou.vo.ProjectApproveOV; |
||||
|
import org.jeecg.modules.system.entity.SysUser; |
||||
|
import org.jeecg.modules.system.service.ISysUserService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.security.core.parameters.P; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.util.FileCopyUtils; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import javax.servlet.ServletOutputStream; |
||||
|
import javax.servlet.http.HttpServletResponse; |
||||
|
import java.io.BufferedInputStream; |
||||
|
import java.io.File; |
||||
|
import java.io.FileInputStream; |
||||
|
import java.io.IOException; |
||||
|
import java.lang.reflect.Method; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.*; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/huzhouProject") |
||||
|
public class HuzhouProjectController { |
||||
|
@Autowired |
||||
|
private RuntimeService runtimeService; |
||||
|
@Autowired |
||||
|
private TaskService taskService; |
||||
|
@Autowired |
||||
|
private RepositoryService repositoryService; |
||||
|
@Autowired |
||||
|
private HistoryService historyService; |
||||
|
|
||||
|
@Autowired |
||||
|
private IWorkflowService workflowService; |
||||
|
@Autowired |
||||
|
private IHuzhouProcessinfoService processinfoService; |
||||
|
@Autowired |
||||
|
private IHuzhouProjectinfoService projectinfoService; |
||||
|
@Autowired |
||||
|
private IHuzhouUserprojectService userprojectService; |
||||
|
@Autowired |
||||
|
private IHuzhouUploadfileinfoService uploadfileinfoService; |
||||
|
@Value(value = "${jeecg.path.upload}") |
||||
|
private String uploadpath; |
||||
|
@Autowired |
||||
|
private ISysUserService userService; |
||||
|
/** |
||||
|
* 本地:local minio:minio 阿里:alioss |
||||
|
*/ |
||||
|
@Value(value="${jeecg.uploadType}") |
||||
|
private String uploadType; |
||||
|
@PostMapping("/submitProject") |
||||
|
public Result<String> submitProject(@RequestBody HuzhouProjectinfo info){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752895307869614081"); |
||||
|
arrayList.add("1752895591849160705"); |
||||
|
WorkFlow workFlow = workflowService.createFlow("initiatesProjects", arrayList); |
||||
|
String processInstanceId = workFlow.getProcessInstanceId(); |
||||
|
String businessKey = workFlow.getBusinessKey(); |
||||
|
//保存项目信息
|
||||
|
info.setStatus("1");//最开始的状态
|
||||
|
projectinfoService.save(info); |
||||
|
//保存项目流程相关的信息
|
||||
|
//设置businessKey
|
||||
|
//设置项目状态
|
||||
|
//新增项目人员关系表
|
||||
|
List<String> extractObjectAttributes = HuzhouCommonUtils.extractObjectAttributes(info); |
||||
|
for (String s:extractObjectAttributes) { |
||||
|
if(s.contains("Contactor")){ |
||||
|
String s1 = s.split("=")[1]; |
||||
|
HuzhouUserproject huzhouUserproject = new HuzhouUserproject(); |
||||
|
huzhouUserproject.setProjectId(info.getId()); |
||||
|
huzhouUserproject.setUserId(s1); |
||||
|
userprojectService.save(huzhouUserproject); |
||||
|
} |
||||
|
} |
||||
|
HuzhouProcessinfo huzhouProcessinfo = new HuzhouProcessinfo(); |
||||
|
huzhouProcessinfo.setBusinesskey(businessKey); |
||||
|
huzhouProcessinfo.setStatus("1");//该项目的第一个流程
|
||||
|
huzhouProcessinfo.setProcessinstanceid(processInstanceId); |
||||
|
huzhouProcessinfo.setProjectid(info.getId()); |
||||
|
processinfoService.save(huzhouProcessinfo); |
||||
|
return Result.ok("项目入库申请已发起成功"); |
||||
|
} |
||||
|
@PostMapping("/approveProjectInfo") |
||||
|
public Result<?> approveProjectInfo(@RequestBody HashMap<String,Object> param){ |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
String taskId = (String) param.get("taskId"); |
||||
|
String flag = (String) param.get("flag"); |
||||
|
String comment = (String) param.get("comment"); |
||||
|
String projectid = (String) param.get("projectid"); |
||||
|
String status = (String) param.get("status"); |
||||
|
String isEdit = (String) param.get("isEdit"); |
||||
|
Map projectInfoMap = (Map) param.get("projectInfo"); |
||||
|
String jsonString = JSON.toJSONString(projectInfoMap); |
||||
|
HuzhouProjectinfo projectinfo = JSON.parseObject(jsonString, HuzhouProjectinfo.class); |
||||
|
if("3".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"0");//表示作废
|
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
return Result.OK("流程作废成功"); |
||||
|
} |
||||
|
if("1".equals(isEdit)&&"1".equals(flag)&&"1".equals(status)){ |
||||
|
if(null!=projectinfo){ |
||||
|
projectinfoService.updateById(projectinfo); |
||||
|
//删除此项目原来的人员和项目对应信息
|
||||
|
LambdaQueryWrapper<HuzhouUserproject> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouUserproject::getProjectId,projectid); |
||||
|
boolean remove = userprojectService.remove(queryWrapper); |
||||
|
//保存新的人员和项目对应信息
|
||||
|
List<String> extractObjectAttributes = HuzhouCommonUtils.extractObjectAttributes(projectinfo); |
||||
|
for (String s:extractObjectAttributes) { |
||||
|
if(s.contains("Contactor")){ |
||||
|
String s1 = s.split("=")[1]; |
||||
|
HuzhouUserproject huzhouUserproject = new HuzhouUserproject(); |
||||
|
huzhouUserproject.setProjectId(projectinfo.getId()); |
||||
|
huzhouUserproject.setUserId(s1); |
||||
|
userprojectService.save(huzhouUserproject); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment, status); |
||||
|
String userTaskName = workFlow.getUserTask(); |
||||
|
|
||||
|
//管理单位审批通过,最后一个节点流程通过
|
||||
|
if("管理单位审批".equals(userTaskName)&&"1".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"2"); |
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
} |
||||
|
if("流程审批二".equals(userTaskName)&&"1".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"4"); |
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
} |
||||
|
if("计划审批二".equals(userTaskName)&&"1".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"6"); |
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
} |
||||
|
return Result.ok("审批成功"); |
||||
|
} |
||||
|
@PostMapping("/approveUploadFile") |
||||
|
public Result<?> approveUploadFile(@RequestParam(value = "file",required = false) MultipartFile[] file, |
||||
|
@RequestParam String taskId, |
||||
|
@RequestParam String flag, |
||||
|
@RequestParam String projectid, |
||||
|
@RequestParam String comment, |
||||
|
@RequestParam String status) throws IOException { |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
|
||||
|
|
||||
|
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment, status); |
||||
|
String userTaskName = workFlow.getUserTask(); |
||||
|
if("发起人".equals(workFlow.getUserTask())&&null != file){ |
||||
|
uploadfileinfoService.modifyUploadFile(file,projectid,status); |
||||
|
} |
||||
|
//管理单位审批通过,最后一个节点流程通过
|
||||
|
if("管理单位审批".equals(userTaskName)&&"1".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"2"); |
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
} |
||||
|
if("流程审批二".equals(userTaskName)&&"1".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"4"); |
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
} |
||||
|
if("计划审批二".equals(userTaskName)&&"1".equals(flag)){ |
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"6"); |
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(updateWrapper); |
||||
|
} |
||||
|
return Result.ok("审批成功"); |
||||
|
} |
||||
|
@PostMapping("/deleteProcesss") |
||||
|
public Result<?> deleteProcesss(String processInstanceId){ |
||||
|
runtimeService.deleteProcessInstance(processInstanceId,"发起人删除"); |
||||
|
return Result.OK("流程删除成功"); |
||||
|
} |
||||
|
@GetMapping("/projectInfoPageList") |
||||
|
public Result<IPage<HuzhouProjectinfo>> queryPageList(@RequestParam Map<String, Object> params, |
||||
|
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
IPage page = new Page(pageNo, pageSize); |
||||
|
LambdaQueryWrapper<HuzhouProjectinfo> huzhouProjectinfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
String projectName = (String) params.get("projectName"); |
||||
|
String projectId = (String) params.get("projectId"); |
||||
|
huzhouProjectinfoLambdaQueryWrapper.like(StringUtils.isNotBlank(projectName),HuzhouProjectinfo::getProjectName,projectName); |
||||
|
huzhouProjectinfoLambdaQueryWrapper.like(StringUtils.isNotBlank(projectId),HuzhouProjectinfo::getId,projectId); |
||||
|
IPage pageList = projectinfoService.page(page, huzhouProjectinfoLambdaQueryWrapper); |
||||
|
return Result.OK(pageList); |
||||
|
|
||||
|
} |
||||
|
@GetMapping("/queryProjectInfoById") |
||||
|
public Result<HuzhouProjectinfo> queryProjectInfoById(String projectid){ |
||||
|
//获取项目入库数据
|
||||
|
HuzhouProjectinfo projectinfo = projectinfoService.getById(projectid); |
||||
|
// List<String> attributes = new ArrayList<>();
|
||||
|
//
|
||||
|
// List<String> extractObjectAttributes = HuzhouCommonUtils.extractObjectAttributes(projectinfo);
|
||||
|
// for (String s:extractObjectAttributes) {
|
||||
|
// if(s.contains("Contactor")){
|
||||
|
// String s1 = s.split("=")[1];
|
||||
|
// SysUser user = userService.getById(s1);
|
||||
|
// String realname = user.getRealname();
|
||||
|
// Class<?> clazz = projectinfo.getClass();
|
||||
|
// Method[] methods = clazz.getDeclaredMethods();
|
||||
|
//
|
||||
|
// for (Method method : methods) {
|
||||
|
// try {
|
||||
|
// String name = method.getName();
|
||||
|
// if (name.contains(s.split("=")[0])) { // 假设所有的getter方法都不带参数,并且返回一个基本数据类型或其包装类
|
||||
|
// method.invoke(projectinfo,realname);
|
||||
|
// }
|
||||
|
// } catch (Exception e) {
|
||||
|
// e.printStackTrace();
|
||||
|
// }
|
||||
|
// }
|
||||
|
// }
|
||||
|
// }
|
||||
|
// LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
// queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid);
|
||||
|
// HuzhouProcessinfo processinfo = processinfoService.getOne(queryWrapper);
|
||||
|
//获取项目入库流程数据
|
||||
|
|
||||
|
return Result.OK(projectinfo); |
||||
|
|
||||
|
} |
||||
|
@GetMapping("/queryprocessinfoById") |
||||
|
public Result<HuzhouProcessinfo> queryprocessinfoById(String projectid){ |
||||
|
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid); |
||||
|
queryWrapper.orderByDesc(HuzhouProcessinfo::getStatus); |
||||
|
HuzhouProcessinfo processinfo = processinfoService.list(queryWrapper).get(0); |
||||
|
|
||||
|
return Result.OK(processinfo); |
||||
|
|
||||
|
} |
||||
|
@PostMapping("/uploadFile") |
||||
|
@Transactional() |
||||
|
public Result<?> uploadFile(@RequestParam(value = "file") |
||||
|
MultipartFile[] files,@RequestParam(value = "projectid") String projectid, |
||||
|
@RequestParam(value = "status") String status) throws IOException { |
||||
|
//获取当前时间
|
||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); |
||||
|
String currentDay = dateFormat.format(new Date()); |
||||
|
File filePath = new File(uploadpath + File.separator + currentDay + File.separator); |
||||
|
//文件夹不存在则创建
|
||||
|
if (!filePath.exists()) { |
||||
|
// 创建文件根目录
|
||||
|
filePath.mkdirs(); |
||||
|
}else { |
||||
|
// return modifyUploadFile(files,projectid,status);
|
||||
|
} |
||||
|
for (MultipartFile item:files) { |
||||
|
String fileName =null; |
||||
|
String originalFilename = item.getOriginalFilename(); |
||||
|
originalFilename = CommonUtils.getFileName(originalFilename); |
||||
|
if(originalFilename.indexOf(SymbolConstant.SPOT)!=-1){ |
||||
|
fileName = originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf(".")); |
||||
|
}else{ |
||||
|
fileName = originalFilename+ "_" + System.currentTimeMillis(); |
||||
|
} |
||||
|
String savePath = filePath.getPath() + File.separator + fileName; |
||||
|
File savefile = new File(savePath); |
||||
|
FileCopyUtils.copy(item.getBytes(), savefile);//保存文件
|
||||
|
HuzhouUploadfileinfo huzhouUploadfileinfo = new HuzhouUploadfileinfo(); |
||||
|
huzhouUploadfileinfo.setDocumentName(originalFilename);//未加工过的文件名称
|
||||
|
huzhouUploadfileinfo.setDocumentType(item.getContentType()); |
||||
|
huzhouUploadfileinfo.setDocumentPath(savePath); |
||||
|
huzhouUploadfileinfo.setStatus(status); |
||||
|
huzhouUploadfileinfo.setSize(item.getSize()); |
||||
|
huzhouUploadfileinfo.setProjectid(projectid); |
||||
|
boolean save = uploadfileinfoService.save(huzhouUploadfileinfo); |
||||
|
} |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752895307869614081"); |
||||
|
arrayList.add("1752895591849160705"); |
||||
|
WorkFlow workFlow = workflowService.createFlow("项目资料上传流程", arrayList); |
||||
|
String businessKey = workFlow.getBusinessKey(); |
||||
|
String processInstanceId = workFlow.getProcessInstanceId(); |
||||
|
//保存项目信息
|
||||
|
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
updateWrapper.set(HuzhouProjectinfo::getStatus,"3");//3表示项目资料流程审批阶段
|
||||
|
updateWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
projectinfoService.update(null,updateWrapper); |
||||
|
|
||||
|
//保存项目流程相关的信息
|
||||
|
//设置businessKey
|
||||
|
//设置项目状态
|
||||
|
HuzhouProcessinfo huzhouProcessinfo = new HuzhouProcessinfo(); |
||||
|
huzhouProcessinfo.setBusinesskey(businessKey); |
||||
|
huzhouProcessinfo.setStatus("2");//该项目的第一个流程
|
||||
|
huzhouProcessinfo.setProcessinstanceid(processInstanceId); |
||||
|
huzhouProcessinfo.setProjectid(projectid); |
||||
|
processinfoService.save(huzhouProcessinfo); |
||||
|
return Result.OK("上传成功!!"); |
||||
|
} |
||||
|
@GetMapping("/downloadfile") |
||||
|
public void downloadfile(HttpServletResponse response,String path,String fileName) throws IOException { |
||||
|
FileInputStream fileInputStream = new FileInputStream(path); |
||||
|
response.setContentType("application/octet-stream"); |
||||
|
// response.setHeader("Content-disposition", "attachment;filename=" + fileName);
|
||||
|
BufferedInputStream inputStream =null; |
||||
|
try { |
||||
|
ServletOutputStream outputStream = response.getOutputStream(); |
||||
|
inputStream = new BufferedInputStream(fileInputStream); |
||||
|
byte[] bytes = new byte[1024]; |
||||
|
int len =inputStream.read(bytes); |
||||
|
while (len!=-1){ |
||||
|
outputStream.write(bytes,0,bytes.length); |
||||
|
outputStream.flush(); |
||||
|
len=inputStream.read(bytes); |
||||
|
} |
||||
|
}finally { |
||||
|
if(inputStream!=null){ |
||||
|
inputStream.close(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/queryResourceInfo") |
||||
|
public Result<IPage<HuzhouUploadfileinfo>> queryResourceInfo(@RequestParam Map<String, Object> params, |
||||
|
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
String projectid = (String) params.get("projectid"); |
||||
|
String status = (String) params.get("status"); |
||||
|
IPage<HuzhouUploadfileinfo> huzhouUploadfileinfoIPage = new Page<>(pageNo,pageSize); |
||||
|
LambdaUpdateWrapper<HuzhouUploadfileinfo> huzhouUploadfileinfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); |
||||
|
huzhouUploadfileinfoLambdaUpdateWrapper.eq(HuzhouUploadfileinfo::getProjectid,projectid); |
||||
|
huzhouUploadfileinfoLambdaUpdateWrapper.eq(HuzhouUploadfileinfo::getStatus,status); |
||||
|
IPage<HuzhouUploadfileinfo> uploadfileinfoIPage = uploadfileinfoService.page(huzhouUploadfileinfoIPage, huzhouUploadfileinfoLambdaUpdateWrapper); |
||||
|
return Result.OK(uploadfileinfoIPage); |
||||
|
} |
||||
|
|
||||
|
@GetMapping("/queryProjectApprovedPage") |
||||
|
public Result<Page<HuzhouProjectinfo>> queryProjectApprovedPage(HuzhouProjectinfo projectinfo, |
||||
|
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
Page<HuzhouProjectinfo> projectinfoPage = new Page<>(pageNo, pageSize); |
||||
|
LambdaQueryWrapper<HuzhouProjectinfo> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
String projectName = projectinfo.getProjectName(); |
||||
|
String projectinfoId = projectinfo.getId(); |
||||
|
queryWrapper.like(StringUtils.isNotBlank(projectName),HuzhouProjectinfo::getProjectName,projectName); |
||||
|
queryWrapper.like(StringUtils.isNotBlank(projectinfoId),HuzhouProjectinfo::getId,projectinfoId); |
||||
|
queryWrapper.ge(HuzhouProjectinfo::getStatus,"4"); |
||||
|
Page<HuzhouProjectinfo> page = projectinfoService.page(projectinfoPage, queryWrapper); |
||||
|
return Result.OK(page); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,118 @@ |
|||||
|
package org.jeecg.modules.huzhou.controller; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.apache.shiro.SecurityUtils; |
||||
|
import org.jeecg.common.api.vo.Result; |
||||
|
import org.jeecg.common.system.vo.LoginUser; |
||||
|
import org.jeecg.modules.huzhou.entity.BaseEntity; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService; |
||||
|
import org.jeecg.modules.system.entity.SysUser; |
||||
|
import org.jeecg.modules.system.service.ISysUserService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import java.util.HashSet; |
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/huzhouUser") |
||||
|
public class HuzhouUserController { |
||||
|
@Autowired |
||||
|
private ISysUserService userService; |
||||
|
@Autowired |
||||
|
private IHuzhouProjectinfoService projectinfoService; |
||||
|
@GetMapping("/getMyAddressBook") |
||||
|
public Result<Page<SysUser>> getMyAddressBook(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
//先查询当前参与的项目
|
||||
|
//获取当前登录人
|
||||
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = loginUser.getId(); |
||||
|
//查询参与的项目
|
||||
|
LambdaQueryWrapper<HuzhouProjectinfo> projectinfoQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
projectinfoQueryWrapper.eq(HuzhouProjectinfo::getManageContactor,userId) |
||||
|
.or() |
||||
|
.eq(HuzhouProjectinfo::getControlerContactor,userId) |
||||
|
.or() |
||||
|
.eq(HuzhouProjectinfo::getOwnerContactor,userId) |
||||
|
.or() |
||||
|
.eq(HuzhouProjectinfo::getContructorContactor,userId) |
||||
|
.or() |
||||
|
.eq(HuzhouProjectinfo::getSupervisorContactor,userId) |
||||
|
.or() |
||||
|
.eq(HuzhouProjectinfo::getConsultContactor,userId) |
||||
|
.or() |
||||
|
.eq(BaseEntity::getCreator,userId); |
||||
|
//projectinfoQueryWrapper.eq(BaseEntity::getCreator,userId);
|
||||
|
List<HuzhouProjectinfo> projectinfoList = projectinfoService.list(projectinfoQueryWrapper); |
||||
|
List<String> manageContactors = projectinfoList.stream() |
||||
|
.map(HuzhouProjectinfo::getManageContactor) |
||||
|
.collect(Collectors.toList()); |
||||
|
List<String> controlerContactors = projectinfoList.stream() |
||||
|
.map(HuzhouProjectinfo::getControlerContactor) |
||||
|
.collect(Collectors.toList()); |
||||
|
List<String> ownerContactors = projectinfoList.stream() |
||||
|
.map(HuzhouProjectinfo::getOwnerContactor) |
||||
|
.collect(Collectors.toList()); |
||||
|
List<String> contructorContactor = projectinfoList.stream() |
||||
|
.map(HuzhouProjectinfo::getContructorContactor) |
||||
|
.collect(Collectors.toList()); |
||||
|
List<String> supervisorContactor = projectinfoList.stream().map(HuzhouProjectinfo::getSupervisorContactor).collect(Collectors.toList()); |
||||
|
List<String> consultContactor = projectinfoList.stream().map(HuzhouProjectinfo::getConsultContactor).collect(Collectors.toList()); |
||||
|
HashSet<String> hashSet = new HashSet<>(); |
||||
|
hashSet.addAll(manageContactors); |
||||
|
hashSet.addAll(controlerContactors); |
||||
|
hashSet.addAll(ownerContactors); |
||||
|
hashSet.addAll(contructorContactor); |
||||
|
hashSet.addAll(supervisorContactor); |
||||
|
hashSet.addAll(consultContactor); |
||||
|
Page<SysUser> sysUserPage = new Page<>(pageNo,pageSize); |
||||
|
LambdaQueryWrapper<SysUser> sysUserQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
sysUserQueryWrapper.in(hashSet.size()>0,SysUser::getId,hashSet) |
||||
|
.or().eq(SysUser::getId,userId); |
||||
|
Page<SysUser> userPage = userService.page(sysUserPage, sysUserQueryWrapper); |
||||
|
return Result.OK(userPage); |
||||
|
} |
||||
|
@GetMapping("/getWorkPlaceTypeDict") |
||||
|
public Result<?> getWorkPlaceDict(String workPlaceType){ |
||||
|
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
sysUserLambdaQueryWrapper.eq(SysUser::getWorkplaceType,workPlaceType) |
||||
|
.select(SysUser::getWorkplaceType,SysUser::getWorkplace); |
||||
|
List<Map<String, String>> mapList = userService.list(sysUserLambdaQueryWrapper) |
||||
|
.stream() |
||||
|
.distinct() |
||||
|
.map(sysUser -> Map.of( |
||||
|
"value", sysUser.getWorkplace(), |
||||
|
"label", sysUser.getWorkplace() |
||||
|
)).collect(Collectors.toList()); |
||||
|
return Result.OK(mapList); |
||||
|
} |
||||
|
@GetMapping("/getContactorDict") |
||||
|
public Result<?> getContactorDict(String workPlace,String workPlaceType){ |
||||
|
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
sysUserLambdaQueryWrapper.eq(StringUtils.isNotBlank(workPlace),SysUser::getWorkplace,workPlace) |
||||
|
.eq(StringUtils.isNotBlank(workPlaceType),SysUser::getWorkplaceType,workPlaceType); |
||||
|
List<Map<String, String>> mapList = userService.list(sysUserLambdaQueryWrapper) |
||||
|
.stream() |
||||
|
.map(sysUser -> Map.of( |
||||
|
"value", sysUser.getId(), |
||||
|
"label", sysUser.getRealname() |
||||
|
)).collect(Collectors.toList()); |
||||
|
return Result.OK(mapList); |
||||
|
} |
||||
|
@GetMapping("/getUserInfoByid") |
||||
|
public Result<?> getUserInfoByid(String id){ |
||||
|
|
||||
|
SysUser byId = userService.getById(id); |
||||
|
return Result.ok(byId); |
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,367 @@ |
|||||
|
package org.jeecg.modules.huzhou.controller; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.fasterxml.jackson.module.kotlin.ReflectionCache; |
||||
|
import org.activiti.bpmn.model.*; |
||||
|
import org.activiti.engine.HistoryService; |
||||
|
import org.activiti.engine.RepositoryService; |
||||
|
import org.activiti.engine.RuntimeService; |
||||
|
import org.activiti.engine.TaskService; |
||||
|
import org.activiti.engine.history.*; |
||||
|
import org.activiti.engine.impl.identity.Authentication; |
||||
|
import org.activiti.engine.impl.persistence.entity.TaskEntityImpl; |
||||
|
import org.activiti.engine.repository.ProcessDefinition; |
||||
|
import org.activiti.engine.runtime.Execution; |
||||
|
import org.activiti.engine.runtime.ProcessInstance; |
||||
|
import org.activiti.engine.task.Comment; |
||||
|
import org.activiti.engine.task.Task; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.apache.shiro.SecurityUtils; |
||||
|
import org.checkerframework.checker.units.qual.A; |
||||
|
import org.jeecg.common.api.vo.Result; |
||||
|
import org.jeecg.common.system.vo.LoginUser; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProcessinfo; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
import org.jeecg.modules.huzhou.mapper.WorkflowMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouProcessinfoService; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.util.CollectionUtils; |
||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.*; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/workflow") |
||||
|
public class WorkflowController { |
||||
|
@Autowired |
||||
|
private TaskService taskService; |
||||
|
@Autowired |
||||
|
private HistoryService historyService; |
||||
|
@Autowired |
||||
|
private RepositoryService repositoryService; |
||||
|
@Autowired |
||||
|
private RuntimeService runtimeService; |
||||
|
@Autowired |
||||
|
private IHuzhouProcessinfoService processinfoService; |
||||
|
@Autowired |
||||
|
private IHuzhouProjectinfoService projectinfoService; |
||||
|
@Autowired |
||||
|
private WorkflowMapper workflowMapper; |
||||
|
@GetMapping("/myTaskList") |
||||
|
public Result<Page<HashMap<String, Object>>> myTaskList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
List<HashMap<String, Object>> taskMapList = new ArrayList<>(); |
||||
|
List<Task> taskList = taskService.createTaskQuery() |
||||
|
.orderByTaskCreateTime() |
||||
|
.desc() |
||||
|
.taskCandidateOrAssigned(userId) |
||||
|
.listPage((pageNo-1)*pageSize,pageSize); |
||||
|
if (!CollectionUtils.isEmpty(taskList)) { |
||||
|
for (Task task:taskList) { |
||||
|
HashMap<String, Object> stringObjectHashMap = new HashMap<>(); |
||||
|
stringObjectHashMap.put("taskId",task.getId()); |
||||
|
stringObjectHashMap.put("taskName",task.getName()); |
||||
|
String processInstanceId = task.getProcessInstanceId(); |
||||
|
|
||||
|
String processDefinitionId = task.getProcessDefinitionId(); |
||||
|
//获取当前流程名称
|
||||
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() |
||||
|
.processDefinitionId(processDefinitionId).singleResult(); |
||||
|
if(processDefinition!=null){ |
||||
|
String processName = processDefinition.getName(); |
||||
|
stringObjectHashMap.put("processName",processName); |
||||
|
} |
||||
|
//获取项目id
|
||||
|
LambdaQueryWrapper<HuzhouProcessinfo> processQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
processQueryWrapper.eq(HuzhouProcessinfo::getProcessinstanceid,processInstanceId); |
||||
|
HuzhouProcessinfo processinfo = processinfoService.getOne(processQueryWrapper); |
||||
|
if(processinfo!=null){ |
||||
|
String projectid = processinfo.getProjectid(); |
||||
|
stringObjectHashMap.put("projectid",projectid); |
||||
|
//获取项目名称
|
||||
|
LambdaQueryWrapper<HuzhouProjectinfo> projetcQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
projetcQueryWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
HuzhouProjectinfo projectInfo = projectinfoService.getOne(projetcQueryWrapper); |
||||
|
stringObjectHashMap.put("projectName",projectInfo.getProjectName()); |
||||
|
stringObjectHashMap.put("createTime",projectInfo.getCreatetime()); |
||||
|
stringObjectHashMap.put("status",processinfo.getStatus()); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
stringObjectHashMap.put("processInstanceId",processInstanceId); |
||||
|
stringObjectHashMap.put("processDefinitionId",task.getProcessDefinitionId()); |
||||
|
taskMapList.add(stringObjectHashMap); |
||||
|
} |
||||
|
} |
||||
|
// //由于activiti7的懒加载机制,无法将结果直接返回.先强转成Task实现类,在调用其方法
|
||||
|
// List<TaskEntityImpl> taskImpls = taskList.stream().map(x -> (TaskEntityImpl) x).collect(Collectors.toList());
|
||||
|
// //返回的结果相同
|
||||
|
// List<Object> collect = taskImpls.stream().map(TaskEntityImpl::getPersistentState).collect(Collectors.toList());
|
||||
|
|
||||
|
int taskCount = taskService.createTaskQuery() |
||||
|
.taskCandidateOrAssigned(userId) |
||||
|
.list() |
||||
|
.size(); |
||||
|
Page<HashMap<String, Object>> taskPage = new Page<>(); |
||||
|
taskPage.setCurrent(pageNo); |
||||
|
taskPage.setSize(pageSize); |
||||
|
taskPage.setTotal(taskCount); |
||||
|
taskPage.setRecords(taskMapList); |
||||
|
return Result.ok(taskPage); |
||||
|
} |
||||
|
@GetMapping("/myCompleteTask") |
||||
|
public Result<Page<HashMap<String, String>>> myCompleteTask(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
//历史任务查询暂定这样(一条流程处理两次会有两条记录),后面通过sql
|
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
ArrayList<HashMap<String, String>> resList = new ArrayList<>(); |
||||
|
// List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
|
||||
|
// .taskAssignee(userId)
|
||||
|
// .orderByTaskCreateTime()
|
||||
|
// .desc()
|
||||
|
// .listPage((pageNo-1)*pageSize, pageSize);
|
||||
|
Page<Map<String, String>> mapPage = new Page<>(pageNo,pageSize); |
||||
|
Page<Map<String, String>> completeTaskByAssignee = workflowMapper.getCompleteTaskByAssignee(mapPage, userId); |
||||
|
List<Map<String, String>> records = completeTaskByAssignee.getRecords(); |
||||
|
// for (HistoricTaskInstance his: historicTaskInstances) {
|
||||
|
for (Map<String, String> his: records) { |
||||
|
HashMap<String, String> reshashMap = new HashMap<>(); |
||||
|
String processInstanceId = his.get("processInstanceId"); |
||||
|
String processDefinitionId = his.get("processDefinitionId"); |
||||
|
reshashMap.put("processInstanceId",processInstanceId); |
||||
|
//获取taskid
|
||||
|
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() |
||||
|
.processInstanceId(processInstanceId) |
||||
|
.orderByTaskCreateTime().desc().list(); |
||||
|
reshashMap.put("taskId",list.get(0).getId()); |
||||
|
//根据流程实例查询当前流所在位置
|
||||
|
Task task = taskService.createTaskQuery() |
||||
|
.processInstanceId(processInstanceId) |
||||
|
.active() |
||||
|
.singleResult(); |
||||
|
if(task!=null){ |
||||
|
String currentTaskName = task.getName(); |
||||
|
reshashMap.put("currentTaskName",currentTaskName); |
||||
|
} |
||||
|
|
||||
|
//获取当前流程名称
|
||||
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() |
||||
|
.processDefinitionId(processDefinitionId).singleResult(); |
||||
|
if(processDefinition!=null){ |
||||
|
String processName = processDefinition.getName(); |
||||
|
reshashMap.put("processName",processName); |
||||
|
} |
||||
|
//获取项目id
|
||||
|
LambdaQueryWrapper<HuzhouProcessinfo> processQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
processQueryWrapper.eq(HuzhouProcessinfo::getProcessinstanceid,processInstanceId); |
||||
|
HuzhouProcessinfo processinfo = processinfoService.getOne(processQueryWrapper); |
||||
|
if(processinfo!=null){ |
||||
|
String projectid = processinfo.getProjectid(); |
||||
|
reshashMap.put("projectid",projectid); |
||||
|
//获取项目名称
|
||||
|
LambdaQueryWrapper<HuzhouProjectinfo> projetcQueryWrapper = new LambdaQueryWrapper<>(); |
||||
|
projetcQueryWrapper.eq(HuzhouProjectinfo::getId,projectid); |
||||
|
HuzhouProjectinfo projectInfo = projectinfoService.getOne(projetcQueryWrapper); |
||||
|
reshashMap.put("projectName",projectInfo.getProjectName()); |
||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
||||
|
String createtime = dateFormat.format(projectInfo.getCreatetime()); |
||||
|
reshashMap.put("createTime",createtime); |
||||
|
reshashMap.put("status",processinfo.getStatus()); |
||||
|
} |
||||
|
resList.add(reshashMap); |
||||
|
HistoricProcessInstance historicProcessInstance =historyService.createHistoricProcessInstanceQuery() |
||||
|
.processInstanceId(processInstanceId) |
||||
|
.singleResult(); |
||||
|
if(Objects.isNull(historicProcessInstance)) |
||||
|
{ |
||||
|
reshashMap.put("processStatus","流程不存在"); |
||||
|
} |
||||
|
if(Objects.isNull(historicProcessInstance.getEndTime())){ |
||||
|
reshashMap.put("processStatus","审批中"); |
||||
|
} |
||||
|
else { |
||||
|
if(StringUtils.isNotBlank(historicProcessInstance.getDeleteReason())){ |
||||
|
reshashMap.put("processStatus","已作废"); |
||||
|
}else { |
||||
|
reshashMap.put("processStatus","已完成"); |
||||
|
} |
||||
|
} |
||||
|
// //获取流程的状态是否完成
|
||||
|
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
||||
|
// .processInstanceId(processInstanceId)
|
||||
|
// .singleResult();
|
||||
|
// if(processinfo==null){
|
||||
|
// reshashMap.put("processStatus","已完成");
|
||||
|
// }else {
|
||||
|
// reshashMap.put("processStatus","审判中");
|
||||
|
// }
|
||||
|
} |
||||
|
int taskCount = historyService.createHistoricTaskInstanceQuery() |
||||
|
.taskAssignee(userId) |
||||
|
.list() |
||||
|
.size(); |
||||
|
Page<HashMap<String, String>> taskPage = new Page<>(); |
||||
|
taskPage.setCurrent(pageNo); |
||||
|
taskPage.setSize(pageSize); |
||||
|
taskPage.setTotal(taskCount); |
||||
|
taskPage.setRecords(resList); |
||||
|
return Result.ok(taskPage); |
||||
|
} |
||||
|
@GetMapping("/getprocessInfo") |
||||
|
public Result<IPage<HashMap<String,Object>>> getprocessInfo(String projectid,String status, |
||||
|
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
||||
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ |
||||
|
//通过项目id查询流程id
|
||||
|
HuzhouProjectinfo projectinfo = projectinfoService.getById(projectid); |
||||
|
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid); |
||||
|
queryWrapper.eq(HuzhouProcessinfo::getStatus,status);//属于第几部流程
|
||||
|
HuzhouProcessinfo processinfo = processinfoService.getOne(queryWrapper); |
||||
|
String processinstanceid = processinfo.getProcessinstanceid(); |
||||
|
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() |
||||
|
.processInstanceId(processinstanceid) |
||||
|
.orderByTaskCreateTime().asc().listPage((pageNo-1)*pageSize,pageSize); |
||||
|
List<HashMap<String,Object>> approvalEntityList = new ArrayList<>(); |
||||
|
String approvalSuggestion = ""; |
||||
|
HistoricVariableInstance historicVariableInstance = null; |
||||
|
List<Comment> commentList = null; |
||||
|
for(HistoricTaskInstance item : list) { |
||||
|
HashMap<String, Object> hashMap = new HashMap<>(); |
||||
|
commentList = taskService.getTaskComments(item.getId()); |
||||
|
if (commentList != null && !commentList.isEmpty()) { |
||||
|
approvalSuggestion = commentList.get(0).getFullMessage(); |
||||
|
} else { |
||||
|
approvalSuggestion = ""; |
||||
|
} |
||||
|
Map<String, Object> taskLocalVariables = item.getTaskLocalVariables(); |
||||
|
//获取当前节点的任务变量
|
||||
|
List<HistoricVariableInstance> variablelist = historyService.createHistoricVariableInstanceQuery() |
||||
|
.taskId(item.getId()) |
||||
|
.list(); |
||||
|
if (variablelist.size()>0) { |
||||
|
for (HistoricVariableInstance hisvar:variablelist) { |
||||
|
hashMap.put(hisvar.getVariableName(),hisvar.getValue()); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
hashMap.put("operateDate", item.getEndTime()); |
||||
|
hashMap.put("operator", item.getAssignee()); |
||||
|
hashMap.put("taskName", item.getName()); |
||||
|
hashMap.put("comment", approvalSuggestion); |
||||
|
approvalEntityList.add(hashMap); |
||||
|
} |
||||
|
int countSize = historyService.createHistoricTaskInstanceQuery() |
||||
|
.processInstanceId(processinstanceid) |
||||
|
.orderByTaskCreateTime().asc().list().size(); |
||||
|
IPage<HashMap<String,Object>> listIPage = new Page<>(); |
||||
|
listIPage.setRecords(approvalEntityList); |
||||
|
listIPage.setTotal(countSize); |
||||
|
listIPage.setSize(pageSize); |
||||
|
listIPage.setCurrent(pageNo); |
||||
|
return Result.OK(listIPage); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@GetMapping("/getActionParam") |
||||
|
public Result<?> getActionParam(String projectid,String status,String taskId,String procesType){ |
||||
|
HashMap<String,Object> outRes = new HashMap<>(); |
||||
|
ArrayList<Object> actionButtons = new ArrayList<>(); |
||||
|
//如果是已办
|
||||
|
if("1".equals(procesType)){ |
||||
|
outRes.put("buttons",actionButtons); |
||||
|
outRes.put("showApprovalForm",false); |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String currentLoginuserId = currentUser.getId(); |
||||
|
HuzhouProjectinfo projectinfo = projectinfoService.getById(projectid); |
||||
|
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid); |
||||
|
queryWrapper.eq(HuzhouProcessinfo::getStatus,status);//属于第几部流程
|
||||
|
HuzhouProcessinfo processinfo = processinfoService.getOne(queryWrapper); |
||||
|
String processinstanceid = processinfo.getProcessinstanceid(); |
||||
|
List<HistoricTaskInstance> list = historyService |
||||
|
.createHistoricTaskInstanceQuery() |
||||
|
.processInstanceId(processinstanceid) |
||||
|
.orderByHistoricTaskInstanceEndTime() |
||||
|
.desc() |
||||
|
.list(); |
||||
|
HistoricTaskInstance taskInstance = null; |
||||
|
if (!list.isEmpty()) { |
||||
|
if (list.get(0).getEndTime() != null) { |
||||
|
taskInstance = list.get(0); |
||||
|
String userid = taskInstance.getAssignee(); |
||||
|
//上一个节点是你处理的(已办可以撤回)
|
||||
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
||||
|
if(task==null){ |
||||
|
return Result.OK(outRes); |
||||
|
} |
||||
|
String processInstanceId = task.getProcessInstanceId(); |
||||
|
//获取当前模型
|
||||
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); |
||||
|
// 获取当前节点
|
||||
|
FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); |
||||
|
|
||||
|
UserTask userTask = (UserTask) flowElement; |
||||
|
String name = userTask.getName(); |
||||
|
if(currentLoginuserId.equals(userid)&&!"发起人".equals(name)){ |
||||
|
HashMap<String, String> hashMap = new HashMap<>(); |
||||
|
hashMap.put("label","撤回"); |
||||
|
hashMap.put("value","2"); |
||||
|
actionButtons.add(hashMap); |
||||
|
outRes.put("buttons",actionButtons); |
||||
|
outRes.put("showApprovalForm",true); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}else{ |
||||
|
//代办 发起人可以作废,还要可以修改,加一个修改表示(前端也行)
|
||||
|
|
||||
|
outRes.put("showApprovalForm",true); |
||||
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
||||
|
String processInstanceId = task.getProcessInstanceId(); |
||||
|
//获取当前模型
|
||||
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); |
||||
|
// 获取当前节点
|
||||
|
FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); |
||||
|
|
||||
|
UserTask userTask = (UserTask) flowElement; |
||||
|
String name = userTask.getName(); |
||||
|
if("发起人".equals(name)){ |
||||
|
HashMap<String, String> hashMap1 = new HashMap<>(); |
||||
|
hashMap1.put("label","同意"); |
||||
|
hashMap1.put("value","1"); |
||||
|
actionButtons.add(hashMap1); |
||||
|
HashMap<String, String> hashMap = new HashMap<>(); |
||||
|
hashMap.put("label","作废"); |
||||
|
hashMap.put("value","3"); |
||||
|
outRes.put("IsEdit",true); |
||||
|
actionButtons.add(hashMap); |
||||
|
}else { |
||||
|
HashMap<String, String> hashMap1 = new HashMap<>(); |
||||
|
hashMap1.put("label","同意"); |
||||
|
hashMap1.put("value","1"); |
||||
|
actionButtons.add(hashMap1); |
||||
|
HashMap<String, String> hashMap = new HashMap<>(); |
||||
|
|
||||
|
hashMap.put("label","拒绝"); |
||||
|
hashMap.put("value","0"); |
||||
|
actionButtons.add(hashMap); |
||||
|
} |
||||
|
} |
||||
|
//获取上一个处理人
|
||||
|
outRes.put("buttons",actionButtons); |
||||
|
return Result.OK(outRes); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.FieldFill; |
||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
@Data |
||||
|
public class BaseEntity { |
||||
|
@TableField(fill = FieldFill.INSERT) |
||||
|
|
||||
|
private String creator; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
@TableField(fill = FieldFill.INSERT) |
||||
|
private Date createtime; |
||||
|
/** |
||||
|
* 最后更新时间 |
||||
|
*/ |
||||
|
@TableField(fill = FieldFill.INSERT_UPDATE) |
||||
|
private Date updatetime; |
||||
|
|
||||
|
/** |
||||
|
* 更新者,目前使用 SysUser 的 id 编号 |
||||
|
* |
||||
|
* 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 |
||||
|
*/ |
||||
|
@TableField(fill = FieldFill.UPDATE) |
||||
|
private String updater; |
||||
|
} |
@ -0,0 +1,57 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlaninfo)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:01:09 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouPlaninfo extends BaseEntity implements Serializable { |
||||
|
private static final long serialVersionUID = -76445082989108429L; |
||||
|
/** |
||||
|
* 项目计划id |
||||
|
*/ |
||||
|
private String id; |
||||
|
/** |
||||
|
* 项目id |
||||
|
*/ |
||||
|
private String projectId; |
||||
|
/** |
||||
|
* 任务名称 |
||||
|
*/ |
||||
|
private String taskName; |
||||
|
/** |
||||
|
* 任务启动顺序序号 |
||||
|
*/ |
||||
|
private String orderNumber; |
||||
|
/** |
||||
|
* 计划开始时间 |
||||
|
*/ |
||||
|
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") |
||||
|
private Date scheduledStartTime; |
||||
|
/** |
||||
|
* 计划结束时间 |
||||
|
*/ |
||||
|
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") |
||||
|
|
||||
|
private Date scheduledEndTime; |
||||
|
/** |
||||
|
* 实际开始时间 |
||||
|
*/ |
||||
|
private Date actualStartTime; |
||||
|
/** |
||||
|
* 实际结束时间 |
||||
|
*/ |
||||
|
private Date actualEndTime; |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,34 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlanmodule)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:02:30 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouPlanmodule extends BaseEntity implements Serializable { |
||||
|
private static final long serialVersionUID = 808500478305209789L; |
||||
|
/** |
||||
|
* 计划模板id |
||||
|
*/ |
||||
|
@TableId(type = IdType.AUTO) |
||||
|
private int id; |
||||
|
/** |
||||
|
* 模板名称 |
||||
|
*/ |
||||
|
private String moduleName; |
||||
|
/** |
||||
|
* 项目类型 |
||||
|
*/ |
||||
|
private String projectType; |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,39 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlanmoduledetail)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:02:46 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouPlanmoduledetail extends BaseEntity implements Serializable { |
||||
|
private static final long serialVersionUID = -22580960950467884L; |
||||
|
/** |
||||
|
* 计划模板详情id |
||||
|
*/ |
||||
|
private String id; |
||||
|
/** |
||||
|
* 模板id |
||||
|
*/ |
||||
|
private String moduleId; |
||||
|
/** |
||||
|
* 任务名称 |
||||
|
*/ |
||||
|
private String taskName; |
||||
|
/** |
||||
|
* 任务启动顺序序号 |
||||
|
*/ |
||||
|
private String orderNumber; |
||||
|
/** |
||||
|
* 阶段最长时间 |
||||
|
*/ |
||||
|
private String maxDays; |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,34 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhoouProcessinfo)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-23 19:06:12 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouProcessinfo extends BaseEntity implements Serializable { |
||||
|
private static final long serialVersionUID = 641518690443763605L; |
||||
|
/** |
||||
|
* 流程实例id |
||||
|
*/ |
||||
|
private String processinstanceid; |
||||
|
/** |
||||
|
* 业务key |
||||
|
*/ |
||||
|
private String businesskey; |
||||
|
/** |
||||
|
* 流程所属项目id |
||||
|
*/ |
||||
|
private String projectid; |
||||
|
/** |
||||
|
* 当前流程属于项目的哪个阶段 |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,173 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouProjectinfo)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-02-05 14:14:53 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouProjectinfo extends BaseEntity implements Serializable{ |
||||
|
private static final long serialVersionUID = 952171041224600588L; |
||||
|
/** |
||||
|
* 项目id |
||||
|
*/ |
||||
|
private String id; |
||||
|
/** |
||||
|
* 项目名称 |
||||
|
*/ |
||||
|
private String projectName; |
||||
|
/** |
||||
|
* 行政区划 |
||||
|
*/ |
||||
|
private String adminDivision; |
||||
|
/** |
||||
|
* 主要任务及标志性成果 |
||||
|
*/ |
||||
|
private String description; |
||||
|
/** |
||||
|
* 项目类型 |
||||
|
*/ |
||||
|
private String projectType; |
||||
|
/** |
||||
|
* 责任单位 |
||||
|
*/ |
||||
|
private String dutyWorkplace; |
||||
|
/** |
||||
|
* 建设年限 |
||||
|
*/ |
||||
|
private String constructionPeriod; |
||||
|
/** |
||||
|
* 中央资金 |
||||
|
*/ |
||||
|
private Double centralMoney; |
||||
|
/** |
||||
|
* 省级资金 |
||||
|
*/ |
||||
|
private Double provincialMoney; |
||||
|
/** |
||||
|
* 市级资金 |
||||
|
*/ |
||||
|
private Double cityMoney; |
||||
|
/** |
||||
|
* 区县级资金 |
||||
|
*/ |
||||
|
private Double countyMoney; |
||||
|
/** |
||||
|
* 所属改革任务 |
||||
|
*/ |
||||
|
private String reformName; |
||||
|
/** |
||||
|
* 上级指导处室 |
||||
|
*/ |
||||
|
private String superLeader; |
||||
|
/** |
||||
|
* 项目联系人 |
||||
|
*/ |
||||
|
private String projectContacts; |
||||
|
/** |
||||
|
* 联系电话 |
||||
|
*/ |
||||
|
private String phone; |
||||
|
/** |
||||
|
* 管理单位 |
||||
|
*/ |
||||
|
private String manageOrg; |
||||
|
/** |
||||
|
* 管理单位负责人 |
||||
|
*/ |
||||
|
private String manageContactor; |
||||
|
/** |
||||
|
* 监理单位 |
||||
|
*/ |
||||
|
private String controler; |
||||
|
/** |
||||
|
* 监理单位负责人 |
||||
|
*/ |
||||
|
private String controlerContactor; |
||||
|
/** |
||||
|
* 监管单位 |
||||
|
*/ |
||||
|
private String supervisor; |
||||
|
/** |
||||
|
* 监管单位负责人 |
||||
|
*/ |
||||
|
private String supervisorContactor; |
||||
|
/** |
||||
|
* 建设单位 |
||||
|
*/ |
||||
|
private String owner; |
||||
|
/** |
||||
|
* 建设单位负责人 |
||||
|
*/ |
||||
|
private String ownerContactor; |
||||
|
/** |
||||
|
* 咨询单位 |
||||
|
*/ |
||||
|
private String consult; |
||||
|
/** |
||||
|
* 咨询单位负责人 |
||||
|
*/ |
||||
|
private String consultContactor; |
||||
|
/** |
||||
|
* 承建单位 |
||||
|
*/ |
||||
|
private String contructor; |
||||
|
/** |
||||
|
* 承建单位负责人 |
||||
|
*/ |
||||
|
private String contructorContactor; |
||||
|
/** |
||||
|
* 项目状态 |
||||
|
*/ |
||||
|
private String status; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Date createtime; |
||||
|
/** |
||||
|
* 创建人 |
||||
|
*/ |
||||
|
private String creator; |
||||
|
/** |
||||
|
* 修改时间 |
||||
|
*/ |
||||
|
private Date updatetime; |
||||
|
/** |
||||
|
* 修改人 |
||||
|
*/ |
||||
|
private String updater; |
||||
|
/** |
||||
|
* 单位属性 |
||||
|
*/ |
||||
|
private String workplaceProperties; |
||||
|
/** |
||||
|
* 总投资 |
||||
|
*/ |
||||
|
private String totalInvestment; |
||||
|
/** |
||||
|
* 自筹资金 |
||||
|
*/ |
||||
|
private String selfFunding; |
||||
|
/** |
||||
|
* 2023年支付 |
||||
|
*/ |
||||
|
private Double payamount2023; |
||||
|
/** |
||||
|
* 2024年支付 |
||||
|
*/ |
||||
|
private Double payamount2024; |
||||
|
/** |
||||
|
* 2025年支付 |
||||
|
*/ |
||||
|
private Double payamount2025; |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,45 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouUploadfileinfo)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-29 14:21:06 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouUploadfileinfo extends BaseEntity implements Serializable { |
||||
|
private static final long serialVersionUID = -47951391694982856L; |
||||
|
/** |
||||
|
* 文档编号 |
||||
|
*/ |
||||
|
private Integer id; |
||||
|
/** |
||||
|
* 项目id |
||||
|
*/ |
||||
|
private String projectid; |
||||
|
/** |
||||
|
* 文档名称 |
||||
|
*/ |
||||
|
private String documentName; |
||||
|
/** |
||||
|
* 文档类型 |
||||
|
*/ |
||||
|
private String documentType; |
||||
|
/** |
||||
|
* 文档位置 |
||||
|
*/ |
||||
|
private String documentPath; |
||||
|
/** |
||||
|
* 文档属于项目的哪个阶段 |
||||
|
*/ |
||||
|
private String status; |
||||
|
/** |
||||
|
* 文件大小 |
||||
|
*/ |
||||
|
private long size; |
||||
|
} |
||||
|
|
@ -0,0 +1,32 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouUserproject)实体类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-02-01 09:57:56 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class HuzhouUserproject implements Serializable { |
||||
|
private static final long serialVersionUID = 234624016576325502L; |
||||
|
/** |
||||
|
* 表id |
||||
|
*/ |
||||
|
private Integer id; |
||||
|
/** |
||||
|
* 用户id |
||||
|
*/ |
||||
|
private String userId; |
||||
|
/** |
||||
|
* 项目id |
||||
|
*/ |
||||
|
private String projectId; |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,19 @@ |
|||||
|
package org.jeecg.modules.huzhou.entity; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class WorkFlow { |
||||
|
/** |
||||
|
* 流程实例id |
||||
|
*/ |
||||
|
private String processInstanceId; |
||||
|
/** |
||||
|
* 业务表流程key值 |
||||
|
*/ |
||||
|
private String businessKey; |
||||
|
/** |
||||
|
* 当前节点名称 |
||||
|
*/ |
||||
|
private String userTask; |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
package org.jeecg.modules.huzhou.handler; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; |
||||
|
import org.apache.ibatis.reflection.MetaObject; |
||||
|
import org.apache.shiro.SecurityUtils; |
||||
|
import org.jeecg.common.system.vo.LoginUser; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Component |
||||
|
public class MyMetaObjectHandler implements MetaObjectHandler { |
||||
|
/** |
||||
|
* 插入时的填充策略 |
||||
|
* |
||||
|
* @param metaObject |
||||
|
*/ |
||||
|
@Override |
||||
|
public void insertFill(MetaObject metaObject) { |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
this.setFieldValByName("createtime", new Date(), metaObject); |
||||
|
this.setFieldValByName("updatetime", new Date(), metaObject); |
||||
|
this.setFieldValByName("creator",userId,metaObject); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新时的填充策略 |
||||
|
* |
||||
|
* @param metaObject |
||||
|
*/ |
||||
|
@Override |
||||
|
public void updateFill(MetaObject metaObject) { |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
this.setFieldValByName("updatetime", new Date(), metaObject); |
||||
|
this.setFieldValByName("updater",userId,metaObject); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouPlaninfoMapper extends BaseMapper<HuzhouPlaninfo> { |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlanmodule; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouPlanmoduleMapper extends BaseMapper<HuzhouPlanmodule> { |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlanmoduledetail; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouPlanmoduledetailMapper extends BaseMapper<HuzhouPlanmoduledetail> { |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProcessinfo; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouProcessinfoMapper extends BaseMapper<HuzhouProcessinfo> { |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouProjectinfoMapper extends BaseMapper<HuzhouProjectinfo> { |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouUploadfileinfo; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouUploadfileinfoMapper extends BaseMapper<HuzhouUploadfileinfo> { |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouUserproject; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface HuzhouUserprojectMapper extends BaseMapper<HuzhouUserproject> { |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package org.jeecg.modules.huzhou.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface WorkflowMapper extends BaseMapper<Object> { |
||||
|
Page<Map<String,String>> getCompleteTaskByAssignee(Page page, @Param("userid") String id); |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="org.jeecg.modules.huzhou.mapper.WorkflowMapper"> |
||||
|
<select id="getCompleteTaskByAssignee" resultType="Map"> |
||||
|
SELECT DISTINCT |
||||
|
RES.PROC_DEF_ID_ processDefinitionId,RES.PROC_INST_ID_ processInstanceId |
||||
|
FROM |
||||
|
ACT_HI_TASKINST RES |
||||
|
INNER JOIN ACT_RE_PROCDEF D ON RES.PROC_DEF_ID_ = D.ID_ |
||||
|
WHERE |
||||
|
RES.ASSIGNEE_ = #{userid} |
||||
|
AND RES.END_TIME_ IS NOT NULL |
||||
|
</select> |
||||
|
</mapper> |
@ -0,0 +1,16 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo; |
||||
|
import org.springframework.data.domain.Page; |
||||
|
import org.springframework.data.domain.PageRequest; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlaninfo)表服务接口 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:01:09 |
||||
|
*/ |
||||
|
public interface IHuzhouPlaninfoService extends IService<HuzhouPlaninfo> { |
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlanmodule; |
||||
|
import org.springframework.data.domain.Page; |
||||
|
import org.springframework.data.domain.PageRequest; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlanmodule)表服务接口 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:02:30 |
||||
|
*/ |
||||
|
public interface IHuzhouPlanmoduleService extends IService<HuzhouPlanmodule> { |
||||
|
|
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlanmoduledetail; |
||||
|
import org.springframework.data.domain.Page; |
||||
|
import org.springframework.data.domain.PageRequest; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlanmoduledetail)表服务接口 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:02:46 |
||||
|
*/ |
||||
|
public interface IHuzhouPlanmoduledetailService extends IService<HuzhouPlanmoduledetail> { |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* (HuzhouProjectinfo)表服务接口 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-23 09:33:31 |
||||
|
*/ |
||||
|
public interface IHuzhouProjectinfoService extends IService<HuzhouProjectinfo>{ |
||||
|
|
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouUploadfileinfo; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouUploadfileinfo)表服务接口 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-29 14:21:06 |
||||
|
*/ |
||||
|
public interface IHuzhouUploadfileinfoService extends IService<HuzhouUploadfileinfo> { |
||||
|
void modifyUploadFile(MultipartFile[] files, String projectid, String status) throws IOException; |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouUserproject; |
||||
|
import org.springframework.data.domain.Page; |
||||
|
import org.springframework.data.domain.PageRequest; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouUserproject)表服务接口 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-02-01 09:59:12 |
||||
|
*/ |
||||
|
public interface IHuzhouUserprojectService extends IService<HuzhouUserproject> { |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
package org.jeecg.modules.huzhou.service; |
||||
|
|
||||
|
import org.jeecg.modules.huzhou.entity.WorkFlow; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
|
||||
|
public interface IWorkflowService { |
||||
|
WorkFlow createFlow(String processDefinitionKey, ArrayList<String> nextList); |
||||
|
void callBack(String processId,String flag); |
||||
|
WorkFlow approveProjectInfo(String taskId,String flag,String comment,String status); |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouPlaninfoMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfoService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlaninfo)表服务实现类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:01:09 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,HuzhouPlaninfo> implements IHuzhouPlaninfoService { |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlanmodule; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouPlanmoduleMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouPlanmoduleService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlanmodule)表服务实现类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:02:30 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class HuzhouPlanmoduleServiceImpl extends ServiceImpl<HuzhouPlanmoduleMapper,HuzhouPlanmodule> implements IHuzhouPlanmoduleService { |
||||
|
|
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouPlanmoduledetail; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouPlanmoduledetailMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouPlanmoduledetailService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouPlanmoduledetail)表服务实现类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-30 16:02:46 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class HuzhouPlanmoduledetailServiceImpl extends ServiceImpl<HuzhouPlanmoduledetailMapper,HuzhouPlanmoduledetail> implements IHuzhouPlanmoduledetailService { |
||||
|
|
||||
|
} |
@ -0,0 +1,165 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.activiti.bpmn.model.BpmnModel; |
||||
|
import org.activiti.bpmn.model.FlowNode; |
||||
|
import org.activiti.bpmn.model.SequenceFlow; |
||||
|
import org.activiti.engine.HistoryService; |
||||
|
import org.activiti.engine.RepositoryService; |
||||
|
import org.activiti.engine.RuntimeService; |
||||
|
import org.activiti.engine.TaskService; |
||||
|
import org.activiti.engine.history.HistoricActivityInstance; |
||||
|
import org.activiti.engine.history.HistoricTaskInstance; |
||||
|
import org.activiti.engine.impl.identity.Authentication; |
||||
|
import org.activiti.engine.runtime.Execution; |
||||
|
import org.activiti.engine.task.Task; |
||||
|
import org.apache.shiro.SecurityUtils; |
||||
|
import org.jeecg.common.system.vo.LoginUser; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProcessinfo; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouProcessinfoMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouProcessinfoService; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.HashMap; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Service |
||||
|
|
||||
|
public class HuzhouProcessinfoServiceImpl extends ServiceImpl<HuzhouProcessinfoMapper, HuzhouProcessinfo> implements IHuzhouProcessinfoService { |
||||
|
@Autowired |
||||
|
private TaskService taskService; |
||||
|
@Autowired |
||||
|
private HistoryService historyService; |
||||
|
@Autowired |
||||
|
private RepositoryService repositoryService; |
||||
|
@Autowired |
||||
|
private RuntimeService runtimeService; |
||||
|
|
||||
|
@Override |
||||
|
public void callBack(String processId, String flag) { |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
//通过流程id查找到当前的任务
|
||||
|
List<Task> tasks= taskService.createTaskQuery() |
||||
|
.processInstanceId(processId).orderByTaskCreateTime().desc() |
||||
|
.list(); |
||||
|
//tasks.get(0).setAssignee("1748190800971665409");
|
||||
|
//如果为空或者小于等于0则证明没有可查看到的任务
|
||||
|
if (tasks == null||tasks.size()<=0) { |
||||
|
System.out.println("当前没有任务或者任务已执行完了"); |
||||
|
} |
||||
|
//查看所有走过的历史任务
|
||||
|
List<HistoricTaskInstance> htlist = historyService.createHistoricTaskInstanceQuery() |
||||
|
.processInstanceId(processId) |
||||
|
.finished().orderByHistoricTaskInstanceEndTime().desc() |
||||
|
.list(); |
||||
|
if (htlist == null||htlist.size()<=0) { |
||||
|
System.out.println("请先提交任务"); |
||||
|
} |
||||
|
String myTaskId = null; |
||||
|
HistoricTaskInstance myTask = null; |
||||
|
//前一个任务节点,也就是提交人 拿到前一个任务
|
||||
|
for (HistoricTaskInstance hti : htlist) { |
||||
|
//回退到zhangsan也就是任务A,业务中这里就是当前登录的用户名 TODO:从登录名拿
|
||||
|
if (userId.equals(hti.getAssignee())) { |
||||
|
myTaskId = hti.getId(); |
||||
|
// taskService.set
|
||||
|
// tasks.get(0).setName("");
|
||||
|
myTask = hti; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (myTask == null) { |
||||
|
System.out.println("这个任务不是你的任务"); |
||||
|
} |
||||
|
//流程定义id
|
||||
|
String processDefinitionId = myTask.getProcessDefinitionId(); |
||||
|
|
||||
|
//整个流程节点对象
|
||||
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); |
||||
|
|
||||
|
//我的节点
|
||||
|
String myActivityId = null; |
||||
|
//历史节点完成节点
|
||||
|
List<HistoricActivityInstance> haiList = |
||||
|
historyService |
||||
|
.createHistoricActivityInstanceQuery() |
||||
|
.executionId(myTask.getExecutionId()) |
||||
|
.finished() |
||||
|
.list(); |
||||
|
//拿到我的节点 _3
|
||||
|
for (HistoricActivityInstance hai : haiList) { |
||||
|
if (myTaskId.equals(hai.getTaskId())) { |
||||
|
myActivityId = hai.getActivityId(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
//我的流程节点
|
||||
|
FlowNode myFlowNode = |
||||
|
(FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId); |
||||
|
//当前执行对象
|
||||
|
Execution execution = runtimeService.createExecutionQuery() |
||||
|
.executionId(tasks.get(0).getExecutionId()).singleResult(); |
||||
|
//当任务执行节点_4
|
||||
|
String activityId = execution.getActivityId(); |
||||
|
|
||||
|
System.out.println(activityId); |
||||
|
//当前流程节点对象
|
||||
|
FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess() |
||||
|
.getFlowElement(activityId); |
||||
|
// flowNode.getName() 节点名称
|
||||
|
//记录原活动方向出方向
|
||||
|
List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>(); |
||||
|
oriSequenceFlows.addAll(flowNode.getOutgoingFlows()); |
||||
|
|
||||
|
//清理活动方向
|
||||
|
flowNode.getOutgoingFlows().clear(); |
||||
|
|
||||
|
//建立新方向
|
||||
|
List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>(); |
||||
|
SequenceFlow newSequenceFlow = new SequenceFlow(); |
||||
|
newSequenceFlow.setId("newSequenceFlowId"); |
||||
|
newSequenceFlow.setSourceFlowElement(flowNode); |
||||
|
newSequenceFlow.setTargetFlowElement(myFlowNode); |
||||
|
newSequenceFlowList.add(newSequenceFlow); |
||||
|
flowNode.setOutgoingFlows(newSequenceFlowList); |
||||
|
//设置操作人记录 和备注信息
|
||||
|
Authentication.setAuthenticatedUserId(userId); |
||||
|
taskService.claim(tasks.get(0).getId(),userId); |
||||
|
taskService.setVariableLocal(tasks.get(0).getId(),"approvalStatue",flag); |
||||
|
taskService.addComment(tasks.get(0).getId(), tasks.get(0).getProcessInstanceId(), "上一节点撤回"); |
||||
|
String taskId= tasks.get(0).getId(); |
||||
|
//完成任务
|
||||
|
// if (tasks.size() > 1) {
|
||||
|
// //会签撤回
|
||||
|
// HashMap<String, Object> variables = new HashMap<>();
|
||||
|
// variables.put("pass",true);
|
||||
|
//// variables.put("param","y");
|
||||
|
// taskService.complete(taskId,variables);
|
||||
|
// //恢复原方向
|
||||
|
// flowNode.setOutgoingFlows(oriSequenceFlows);
|
||||
|
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(tasks.get(0).getProcessInstanceId()).singleResult();
|
||||
|
// //更新数据库 从新设置state为未提交状态
|
||||
|
// Apply apply = new Apply();
|
||||
|
// apply.setCode(processInstance.getBusinessKey());
|
||||
|
// apply.setState(0);
|
||||
|
//
|
||||
|
//
|
||||
|
// return applyService.updateByCode(apply);
|
||||
|
// }
|
||||
|
//普通撤回
|
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
HashMap<String, Object> hashMap = new HashMap<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add(userId); |
||||
|
hashMap.put("users",arrayList); |
||||
|
taskService.complete(taskId,hashMap); |
||||
|
//恢复原方向
|
||||
|
flowNode.setOutgoingFlows(oriSequenceFlows); |
||||
|
} |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouProjectinfoMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
|
||||
|
public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoMapper, HuzhouProjectinfo> |
||||
|
implements IHuzhouProjectinfoService { |
||||
|
|
||||
|
} |
@ -0,0 +1,75 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.jeecg.common.api.vo.Result; |
||||
|
import org.jeecg.common.constant.SymbolConstant; |
||||
|
import org.jeecg.common.util.CommonUtils; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouUploadfileinfo; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouUploadfileinfoMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouUploadfileinfoService; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.util.FileCopyUtils; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.io.IOException; |
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouUploadfileinfo)表服务实现类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-01-29 14:21:06 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class HuzhouUploadfileinfoServiceImpl extends ServiceImpl<HuzhouUploadfileinfoMapper,HuzhouUploadfileinfo> implements IHuzhouUploadfileinfoService { |
||||
|
@Value(value = "${jeecg.path.upload}") |
||||
|
private String uploadpath; |
||||
|
public void modifyUploadFile(MultipartFile[] files, String projectid, String status) throws IOException { |
||||
|
LambdaQueryWrapper<HuzhouUploadfileinfo> queryWrapper = new LambdaQueryWrapper<>(); |
||||
|
queryWrapper.eq(HuzhouUploadfileinfo::getProjectid,projectid); |
||||
|
queryWrapper.eq(HuzhouUploadfileinfo::getStatus,status); |
||||
|
List<HuzhouUploadfileinfo> list = this.list(queryWrapper); |
||||
|
list.forEach(item->{ |
||||
|
File file = new File(item.getDocumentPath()); |
||||
|
file.delete(); |
||||
|
}); |
||||
|
this.remove(queryWrapper); |
||||
|
|
||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); |
||||
|
String currentDay = dateFormat.format(new Date()); |
||||
|
File filePath = new File(uploadpath + File.separator + currentDay + File.separator); |
||||
|
//文件夹不存在则创建
|
||||
|
if (!filePath.exists()) { |
||||
|
// 创建文件根目录
|
||||
|
filePath.mkdirs(); |
||||
|
} |
||||
|
for (MultipartFile item:files) { |
||||
|
String fileName =null; |
||||
|
String originalFilename = item.getOriginalFilename(); |
||||
|
originalFilename = CommonUtils.getFileName(originalFilename); |
||||
|
if(originalFilename.indexOf(SymbolConstant.SPOT)!=-1){ |
||||
|
fileName = originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf(".")); |
||||
|
}else{ |
||||
|
fileName = originalFilename+ "_" + System.currentTimeMillis(); |
||||
|
} |
||||
|
String savePath = filePath.getPath() + File.separator + fileName; |
||||
|
File savefile = new File(savePath); |
||||
|
FileCopyUtils.copy(item.getBytes(), savefile);//保存文件
|
||||
|
HuzhouUploadfileinfo huzhouUploadfileinfo = new HuzhouUploadfileinfo(); |
||||
|
huzhouUploadfileinfo.setDocumentName(originalFilename);//未加工过的文件名称
|
||||
|
huzhouUploadfileinfo.setDocumentType(item.getContentType()); |
||||
|
huzhouUploadfileinfo.setDocumentPath(savePath); |
||||
|
huzhouUploadfileinfo.setStatus(status); |
||||
|
huzhouUploadfileinfo.setSize(item.getSize()); |
||||
|
huzhouUploadfileinfo.setProjectid(projectid); |
||||
|
boolean save = this.save(huzhouUploadfileinfo); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouUserproject; |
||||
|
import org.jeecg.modules.huzhou.mapper.HuzhouUserprojectMapper; |
||||
|
import org.jeecg.modules.huzhou.service.IHuzhouUserprojectService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.data.domain.Page; |
||||
|
import org.springframework.data.domain.PageImpl; |
||||
|
import org.springframework.data.domain.PageRequest; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
|
||||
|
/** |
||||
|
* (HuzhouUserproject)表服务实现类 |
||||
|
* |
||||
|
* @author makejava |
||||
|
* @since 2024-02-01 09:59:12 |
||||
|
*/ |
||||
|
@Service("huzhouUserprojectService") |
||||
|
public class HuzhouUserprojectServiceImpl extends ServiceImpl<HuzhouUserprojectMapper,HuzhouUserproject> implements IHuzhouUserprojectService { |
||||
|
|
||||
|
} |
@ -0,0 +1,327 @@ |
|||||
|
package org.jeecg.modules.huzhou.service.impl; |
||||
|
|
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
||||
|
import org.activiti.bpmn.model.*; |
||||
|
import org.activiti.engine.HistoryService; |
||||
|
import org.activiti.engine.RepositoryService; |
||||
|
import org.activiti.engine.RuntimeService; |
||||
|
import org.activiti.engine.TaskService; |
||||
|
import org.activiti.engine.history.HistoricActivityInstance; |
||||
|
import org.activiti.engine.history.HistoricTaskInstance; |
||||
|
import org.activiti.engine.impl.identity.Authentication; |
||||
|
import org.activiti.engine.runtime.Execution; |
||||
|
import org.activiti.engine.runtime.ProcessInstance; |
||||
|
import org.activiti.engine.task.Task; |
||||
|
import org.apache.shiro.SecurityUtils; |
||||
|
import org.jeecg.common.api.vo.Result; |
||||
|
import org.jeecg.common.system.vo.LoginUser; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProcessinfo; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
import org.jeecg.modules.huzhou.entity.WorkFlow; |
||||
|
import org.jeecg.modules.huzhou.service.IWorkflowService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.web.bind.annotation.RequestBody; |
||||
|
|
||||
|
import java.text.SimpleDateFormat; |
||||
|
import java.util.*; |
||||
|
@Service |
||||
|
public class WorkflowServiceImpl implements IWorkflowService { |
||||
|
@Autowired |
||||
|
private TaskService taskService; |
||||
|
@Autowired |
||||
|
private HistoryService historyService; |
||||
|
@Autowired |
||||
|
private RepositoryService repositoryService; |
||||
|
@Autowired |
||||
|
private RuntimeService runtimeService; |
||||
|
public WorkFlow createFlow(String processDefinitionKey,ArrayList<String> nextList){ |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
//流程的创建
|
||||
|
// 流程定义KEY(流程名字)
|
||||
|
// 业务表KEY(用于把业务数据与Activiti7流程数据相关联)
|
||||
|
String businessKey = UUID.randomUUID().toString().replace("-",""); |
||||
|
// 参数
|
||||
|
Map<String, Object> variables = new HashMap<>(); |
||||
|
//设置流程发起人参数
|
||||
|
variables.put("start",userId); |
||||
|
ProcessInstance processInstance = this.runtimeService |
||||
|
.startProcessInstanceByKey(processDefinitionKey, businessKey, variables); |
||||
|
String processInstanceId = processInstance.getProcessInstanceId();//流程实例id要存下来
|
||||
|
System.out.println("流程实例ID:" + processInstanceId); |
||||
|
|
||||
|
//发起人处理流程
|
||||
|
Task task = taskService.createTaskQuery() |
||||
|
.processInstanceId(processInstanceId) |
||||
|
.orderByTaskCreateTime() |
||||
|
.desc() |
||||
|
.list() |
||||
|
.get(0); |
||||
|
String taskId = task.getId(); |
||||
|
variables.clear(); |
||||
|
Authentication.setAuthenticatedUserId(userId);//添加审批人
|
||||
|
taskService.setVariableLocal(taskId,"approvalStatue","1");//添加审批状态
|
||||
|
String comment = "同意"; |
||||
|
taskService.addComment(taskId,processInstanceId,comment);//添加审批意见
|
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
//下一个节点处理人 可以配置(测试默认这个)
|
||||
|
variables.put("users",nextList); |
||||
|
taskService.complete(taskId, variables); |
||||
|
WorkFlow workFlow = new WorkFlow(); |
||||
|
workFlow.setBusinessKey(businessKey); |
||||
|
workFlow.setProcessInstanceId(processInstanceId); |
||||
|
return workFlow; |
||||
|
} |
||||
|
public WorkFlow approveProjectInfo(String taskId,String flag,String comment,String status){ |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
// 获取当前任务
|
||||
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); |
||||
|
String processInstanceId = task.getProcessInstanceId(); |
||||
|
//获取当前模型
|
||||
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); |
||||
|
// 获取当前节点
|
||||
|
FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); |
||||
|
|
||||
|
UserTask userTask = (UserTask) flowElement; |
||||
|
WorkFlow workFlow = new WorkFlow(); |
||||
|
workFlow.setUserTask(userTask.getName()); |
||||
|
HashMap<String, Object> hashMap = new HashMap<>(); |
||||
|
if("3".equals(flag)){ |
||||
|
taskService.setVariableLocal(taskId,"approvalStatue",flag); |
||||
|
taskService.addComment(taskId,processInstanceId,comment);//添加审批意见
|
||||
|
runtimeService.deleteProcessInstance(processInstanceId,"发起人删除"); |
||||
|
return workFlow; |
||||
|
}else if("2".equals(flag)){ |
||||
|
callBack(processInstanceId,flag); |
||||
|
|
||||
|
return workFlow; |
||||
|
} |
||||
|
if("1".equals(status)){ |
||||
|
if(!"管理单位审批".equals(userTask.getName())){ |
||||
|
//搞到当前userTask的出处
|
||||
|
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows(); |
||||
|
//直接获得目标元素
|
||||
|
FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement(); |
||||
|
//转换一下类型
|
||||
|
UserTask nextUserTask = (UserTask) targetFlowElement; |
||||
|
String nextUserTaskName = nextUserTask.getName(); |
||||
|
|
||||
|
if("监管单位审批".equals(nextUserTaskName)){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752895307869614081"); |
||||
|
arrayList.add("1752895591849160705"); |
||||
|
hashMap.put("users",arrayList); |
||||
|
}else if("管理单位审批".equals(nextUserTaskName)){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752893978598207490"); |
||||
|
hashMap.put("users",arrayList); |
||||
|
//TODO 流程审批通过,需要改变项目状态
|
||||
|
}else { |
||||
|
if(!"管理单位审批".equals(userTask.getName())){ |
||||
|
throw new RuntimeException("找不到下一个节点"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}else if("2".equals(status)){ |
||||
|
if(!"流程审批二".equals(userTask.getName())){ |
||||
|
//搞到当前userTask的出处
|
||||
|
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows(); |
||||
|
//直接获得目标元素
|
||||
|
FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement(); |
||||
|
//转换一下类型
|
||||
|
UserTask nextUserTask = (UserTask) targetFlowElement; |
||||
|
String nextUserTaskName = nextUserTask.getName(); |
||||
|
|
||||
|
if("流程审批一".equals(nextUserTaskName)){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752895307869614081"); |
||||
|
arrayList.add("1752895591849160705"); |
||||
|
hashMap.put("users",arrayList); |
||||
|
}else if("流程审批二".equals(nextUserTaskName)){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752893978598207490"); |
||||
|
hashMap.put("users",arrayList); |
||||
|
//TODO 流程审批通过,需要改变项目状态
|
||||
|
}else { |
||||
|
if(!"流程审批二".equals(userTask.getName())){ |
||||
|
throw new RuntimeException("找不到下一个节点"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}else if("3".equals(status)){ |
||||
|
if(!"计划审批二".equals(userTask.getName())){ |
||||
|
//搞到当前userTask的出处
|
||||
|
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows(); |
||||
|
//直接获得目标元素
|
||||
|
FlowElement targetFlowElement = outgoingFlows.get(0).getTargetFlowElement(); |
||||
|
//转换一下类型
|
||||
|
UserTask nextUserTask = (UserTask) targetFlowElement; |
||||
|
String nextUserTaskName = nextUserTask.getName(); |
||||
|
|
||||
|
if("计划审批一".equals(nextUserTaskName)){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752895307869614081"); |
||||
|
arrayList.add("1752895591849160705"); |
||||
|
hashMap.put("users",arrayList); |
||||
|
}else if("计划审批二".equals(nextUserTaskName)){ |
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add("1752893978598207490"); |
||||
|
hashMap.put("users",arrayList); |
||||
|
//TODO 流程审批通过,需要改变项目状态
|
||||
|
}else { |
||||
|
if(!"计划审批二".equals(userTask.getName())){ |
||||
|
throw new RuntimeException("找不到下一个节点"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
taskService.claim(task.getId(), userId);//拾取任务
|
||||
|
Authentication.setAuthenticatedUserId(userId);//添加审批人
|
||||
|
taskService.setVariableLocal(taskId,"approvalStatue",flag); |
||||
|
taskService.addComment(taskId,processInstanceId,comment);//添加审批意见
|
||||
|
hashMap.put("type",flag); |
||||
|
taskService.complete(taskId, hashMap); |
||||
|
//Comment comment1 = taskService.getComment(taskId);
|
||||
|
return workFlow; |
||||
|
} |
||||
|
public void callBack(String processId,String flag) { |
||||
|
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); |
||||
|
String userId = currentUser.getId(); |
||||
|
//通过流程id查找到当前的任务
|
||||
|
List<Task> tasks= taskService.createTaskQuery() |
||||
|
.processInstanceId(processId).orderByTaskCreateTime().desc() |
||||
|
.list(); |
||||
|
//tasks.get(0).setAssignee("1748190800971665409");
|
||||
|
//如果为空或者小于等于0则证明没有可查看到的任务
|
||||
|
if (tasks == null||tasks.size()<=0) { |
||||
|
System.out.println("当前没有任务或者任务已执行完了"); |
||||
|
} |
||||
|
//查看所有走过的历史任务
|
||||
|
List<HistoricTaskInstance> htlist = historyService.createHistoricTaskInstanceQuery() |
||||
|
.processInstanceId(processId) |
||||
|
.finished().orderByHistoricTaskInstanceEndTime().desc() |
||||
|
.list(); |
||||
|
if (htlist == null||htlist.size()<=0) { |
||||
|
System.out.println("请先提交任务"); |
||||
|
} |
||||
|
String myTaskId = null; |
||||
|
HistoricTaskInstance myTask = null; |
||||
|
//前一个任务节点,也就是提交人 拿到前一个任务
|
||||
|
for (HistoricTaskInstance hti : htlist) { |
||||
|
//回退到zhangsan也就是任务A,业务中这里就是当前登录的用户名 TODO:从登录名拿
|
||||
|
if (userId.equals(hti.getAssignee())) { |
||||
|
myTaskId = hti.getId(); |
||||
|
// taskService.set
|
||||
|
// tasks.get(0).setName("");
|
||||
|
myTask = hti; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (myTask == null) { |
||||
|
System.out.println("这个任务不是你的任务"); |
||||
|
} |
||||
|
//流程定义id
|
||||
|
String processDefinitionId = myTask.getProcessDefinitionId(); |
||||
|
|
||||
|
//整个流程节点对象
|
||||
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); |
||||
|
|
||||
|
//我的节点
|
||||
|
String myActivityId = null; |
||||
|
//历史节点完成节点
|
||||
|
List<HistoricActivityInstance> haiList = |
||||
|
historyService |
||||
|
.createHistoricActivityInstanceQuery() |
||||
|
.executionId(myTask.getExecutionId()) |
||||
|
.finished() |
||||
|
.list(); |
||||
|
//拿到我的节点 _3
|
||||
|
for (HistoricActivityInstance hai : haiList) { |
||||
|
if (myTaskId.equals(hai.getTaskId())) { |
||||
|
myActivityId = hai.getActivityId(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
//我的流程节点
|
||||
|
FlowNode myFlowNode = |
||||
|
(FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId); |
||||
|
//当前执行对象
|
||||
|
Execution execution = runtimeService.createExecutionQuery() |
||||
|
.executionId(tasks.get(0).getExecutionId()).singleResult(); |
||||
|
//当任务执行节点_4
|
||||
|
String activityId = execution.getActivityId(); |
||||
|
|
||||
|
System.out.println(activityId); |
||||
|
//当前流程节点对象
|
||||
|
FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess() |
||||
|
.getFlowElement(activityId); |
||||
|
// flowNode.getName() 节点名称
|
||||
|
//记录原活动方向出方向
|
||||
|
List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>(); |
||||
|
oriSequenceFlows.addAll(flowNode.getOutgoingFlows()); |
||||
|
|
||||
|
//清理活动方向
|
||||
|
flowNode.getOutgoingFlows().clear(); |
||||
|
|
||||
|
//建立新方向
|
||||
|
List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>(); |
||||
|
SequenceFlow newSequenceFlow = new SequenceFlow(); |
||||
|
newSequenceFlow.setId("newSequenceFlowId"); |
||||
|
newSequenceFlow.setSourceFlowElement(flowNode); |
||||
|
newSequenceFlow.setTargetFlowElement(myFlowNode); |
||||
|
newSequenceFlowList.add(newSequenceFlow); |
||||
|
flowNode.setOutgoingFlows(newSequenceFlowList); |
||||
|
//设置操作人记录 和备注信息
|
||||
|
Authentication.setAuthenticatedUserId(userId); |
||||
|
taskService.claim(tasks.get(0).getId(),userId); |
||||
|
taskService.setVariableLocal(tasks.get(0).getId(),"approvalStatue",flag); |
||||
|
taskService.addComment(tasks.get(0).getId(), tasks.get(0).getProcessInstanceId(), "上一节点撤回"); |
||||
|
String taskId= tasks.get(0).getId(); |
||||
|
//完成任务
|
||||
|
// if (tasks.size() > 1) {
|
||||
|
// //会签撤回
|
||||
|
// HashMap<String, Object> variables = new HashMap<>();
|
||||
|
// variables.put("pass",true);
|
||||
|
//// variables.put("param","y");
|
||||
|
// taskService.complete(taskId,variables);
|
||||
|
// //恢复原方向
|
||||
|
// flowNode.setOutgoingFlows(oriSequenceFlows);
|
||||
|
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(tasks.get(0).getProcessInstanceId()).singleResult();
|
||||
|
// //更新数据库 从新设置state为未提交状态
|
||||
|
// Apply apply = new Apply();
|
||||
|
// apply.setCode(processInstance.getBusinessKey());
|
||||
|
// apply.setState(0);
|
||||
|
//
|
||||
|
//
|
||||
|
// return applyService.updateByCode(apply);
|
||||
|
// }
|
||||
|
//普通撤回
|
||||
|
ArrayList<String> arrayList = new ArrayList<>(); |
||||
|
HashMap<String, Object> hashMap = new HashMap<>(); |
||||
|
//设置下一个节点处理人
|
||||
|
//使用角色查询
|
||||
|
arrayList.add(userId); |
||||
|
hashMap.put("users",arrayList); |
||||
|
taskService.complete(taskId,hashMap); |
||||
|
//恢复原方向
|
||||
|
flowNode.setOutgoingFlows(oriSequenceFlows); |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package org.jeecg.modules.huzhou.vo; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
@Data |
||||
|
public class ProjectApproveOV { |
||||
|
private String taskId; |
||||
|
private String flag; |
||||
|
private String comment; |
||||
|
private String projectid; |
||||
|
private String status; |
||||
|
private String isEdit; |
||||
|
private HuzhouProjectinfo projectInfo; |
||||
|
|
||||
|
private MultipartFile[] file; |
||||
|
} |
@ -0,0 +1,4 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
<mapper namespace="org.jeecg.modules.huzhou.mapper.HuzhouUserprojectMapper"> |
||||
|
</mapper> |
@ -0,0 +1,63 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> |
||||
|
<process id="initiatesProjects" name="initiatesProjects" isExecutable="true"> |
||||
|
<startEvent id="sid-2ddbdfc7-a61e-4340-856e-77d29149d6ec"/> |
||||
|
<userTask id="sid-8467fd8a-101e-4188-97f9-62eb1d3b32e3" name="发起人" activiti:assignee="${start}"/> |
||||
|
<userTask id="sid-7a4a2aef-83ab-4d33-8cb2-13bb0f622632" name="监管单位" activiti:candidateUsers="${users}"/> |
||||
|
<userTask id="sid-e3e4feb9-3ec8-4784-bd49-5ad75cb5aba9" name="管理单位" activiti:candidateUsers="${users}"/> |
||||
|
<endEvent id="sid-4b932b6d-d74a-4bf8-8459-f6266b952e57"/> |
||||
|
<sequenceFlow id="sid-bdfa8439-2d39-4a89-abc9-8bba8a79ff28" sourceRef="sid-2ddbdfc7-a61e-4340-856e-77d29149d6ec" targetRef="sid-8467fd8a-101e-4188-97f9-62eb1d3b32e3"/> |
||||
|
<sequenceFlow id="sid-775db3c7-0612-467d-9947-4201476eea11" sourceRef="sid-8467fd8a-101e-4188-97f9-62eb1d3b32e3" targetRef="sid-7a4a2aef-83ab-4d33-8cb2-13bb0f622632"> |
||||
|
<conditionExpression/> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-f76597c2-2a1d-44b2-8179-40d9153417a4" sourceRef="sid-7a4a2aef-83ab-4d33-8cb2-13bb0f622632" targetRef="sid-e3e4feb9-3ec8-4784-bd49-5ad75cb5aba9"> |
||||
|
<conditionExpression>${type==1}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-88fe0f0e-26e9-4958-987f-8101c24f53d5" sourceRef="sid-e3e4feb9-3ec8-4784-bd49-5ad75cb5aba9" targetRef="sid-8467fd8a-101e-4188-97f9-62eb1d3b32e3"> |
||||
|
<conditionExpression>${type==0}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-62fe5c25-6c97-4bbb-b460-c4df2e7989a8" sourceRef="sid-7a4a2aef-83ab-4d33-8cb2-13bb0f622632" targetRef="sid-8467fd8a-101e-4188-97f9-62eb1d3b32e3"> |
||||
|
<conditionExpression>${type==0}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
</process> |
||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_initiatesProjects"> |
||||
|
<bpmndi:BPMNPlane bpmnElement="initiatesProjects" id="BPMNPlane_initiatesProjects"> |
||||
|
<bpmndi:BPMNShape id="shape-d0ea9c04-b3f5-439f-b11e-7736c9309205" bpmnElement="sid-2ddbdfc7-a61e-4340-856e-77d29149d6ec"> |
||||
|
<omgdc:Bounds x="-370.0" y="-10.000001" width="30.0" height="30.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-a2fb3972-b9fa-4310-9dd1-026581bfb6e4" bpmnElement="sid-8467fd8a-101e-4188-97f9-62eb1d3b32e3"> |
||||
|
<omgdc:Bounds x="-315.0" y="-30.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-d6bf1909-3f2e-4c04-8aa6-afb060583c0a" bpmnElement="sid-7a4a2aef-83ab-4d33-8cb2-13bb0f622632"> |
||||
|
<omgdc:Bounds x="-175.0" y="-30.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-9c402e1b-2140-4126-a18d-68d9efcec310" bpmnElement="sid-e3e4feb9-3ec8-4784-bd49-5ad75cb5aba9"> |
||||
|
<omgdc:Bounds x="-25.0" y="-25.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-cf988b9e-6332-40d2-ab0f-c6ecd66b3e08" bpmnElement="sid-4b932b6d-d74a-4bf8-8459-f6266b952e57"> |
||||
|
<omgdc:Bounds x="140.0" y="0.0" width="30.0" height="30.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNEdge id="edge-68116070-2442-4b7e-aa7b-33a297f550d9" bpmnElement="sid-bdfa8439-2d39-4a89-abc9-8bba8a79ff28"> |
||||
|
<omgdi:waypoint x="-355.0" y="20.0"/> |
||||
|
<omgdi:waypoint x="-265.0" y="50.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-1676080c-e02c-48c2-827c-ec5665461b16" bpmnElement="sid-775db3c7-0612-467d-9947-4201476eea11"> |
||||
|
<omgdi:waypoint x="-215.0" y="10.0"/> |
||||
|
<omgdi:waypoint x="-175.0" y="10.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-371d2a9b-23a7-4d2f-b694-060fea5692b3" bpmnElement="sid-f76597c2-2a1d-44b2-8179-40d9153417a4"> |
||||
|
<omgdi:waypoint x="-75.0" y="10.0"/> |
||||
|
<omgdi:waypoint x="-25.0" y="15.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-359416ea-932b-4ddd-a6a7-b891c3c79003" bpmnElement="sid-88fe0f0e-26e9-4958-987f-8101c24f53d5"> |
||||
|
<omgdi:waypoint x="-25.0" y="-5.0"/> |
||||
|
<omgdi:waypoint x="-120.0" y="-117.5"/> |
||||
|
<omgdi:waypoint x="-215.0" y="-10.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-62977425-9326-4f2b-9c6d-e40570db0b2d" bpmnElement="sid-62fe5c25-6c97-4bbb-b460-c4df2e7989a8"> |
||||
|
<omgdi:waypoint x="-175.0" y="30.0"/> |
||||
|
<omgdi:waypoint x="-215.0" y="30.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
</bpmndi:BPMNPlane> |
||||
|
</bpmndi:BPMNDiagram> |
||||
|
</definitions> |
After Width: | Height: | Size: 20 KiB |
@ -0,0 +1,68 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> |
||||
|
<process id="项目计划审批流程" name="项目计划审批流程" isExecutable="true"> |
||||
|
<startEvent id="sid-e73b7a02-bc88-4b11-89bb-2c150d70e397"/> |
||||
|
<userTask id="sid-62be9d89-e8e5-4fda-9c33-3b4059ad2018" name="发起人" activiti:assignee="${start}"/> |
||||
|
<userTask id="sid-94c7064c-f1fc-4228-b126-8e45deb9ae5f" name="计划审批一" activiti:candidateUsers="${users}"/> |
||||
|
<userTask id="sid-65dfce6b-0e09-4f6a-afe2-f88ec495ebec" name="计划审批二" activiti:candidateUsers="${users}"/> |
||||
|
<sequenceFlow id="sid-431a0560-2ea1-487a-ac0d-e67d81e960bd" sourceRef="sid-e73b7a02-bc88-4b11-89bb-2c150d70e397" targetRef="sid-62be9d89-e8e5-4fda-9c33-3b4059ad2018"/> |
||||
|
<sequenceFlow id="sid-37de44c2-a93e-4135-8351-ae28197e4f1c" sourceRef="sid-94c7064c-f1fc-4228-b126-8e45deb9ae5f" targetRef="sid-65dfce6b-0e09-4f6a-afe2-f88ec495ebec"> |
||||
|
<conditionExpression>${type==1}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-7daf1858-4982-412a-a291-135112779914" sourceRef="sid-94c7064c-f1fc-4228-b126-8e45deb9ae5f" targetRef="sid-62be9d89-e8e5-4fda-9c33-3b4059ad2018"> |
||||
|
<conditionExpression>${type==0}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<endEvent id="sid-ed1def5c-cd64-4f86-8e63-6f5b4e656331"/> |
||||
|
<sequenceFlow id="sid-43a62ce3-012a-4cc2-8adb-cf8c60531962" sourceRef="sid-65dfce6b-0e09-4f6a-afe2-f88ec495ebec" targetRef="sid-ed1def5c-cd64-4f86-8e63-6f5b4e656331"> |
||||
|
<conditionExpression>${type==1}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-b1c67a3c-9127-4bb9-8b5d-4f411bbc5d89" sourceRef="sid-65dfce6b-0e09-4f6a-afe2-f88ec495ebec" targetRef="sid-62be9d89-e8e5-4fda-9c33-3b4059ad2018"> |
||||
|
<conditionExpression>${type==0}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-4fb52b4e-08cb-4753-a460-665d82a9de7b" sourceRef="sid-62be9d89-e8e5-4fda-9c33-3b4059ad2018" targetRef="sid-94c7064c-f1fc-4228-b126-8e45deb9ae5f"/> |
||||
|
</process> |
||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_项目计划审批流程"> |
||||
|
<bpmndi:BPMNPlane bpmnElement="项目计划审批流程" id="BPMNPlane_项目计划审批流程"> |
||||
|
<bpmndi:BPMNShape id="shape-500338ae-e6f4-4621-adcd-303e949c6ca5" bpmnElement="sid-e73b7a02-bc88-4b11-89bb-2c150d70e397"> |
||||
|
<omgdc:Bounds x="-360.0" y="5.0" width="30.0" height="30.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-d33dbd6c-271d-4c31-868c-2aae359a6602" bpmnElement="sid-62be9d89-e8e5-4fda-9c33-3b4059ad2018"> |
||||
|
<omgdc:Bounds x="-305.0" y="-10.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-51d6a9eb-5b52-405e-99a0-5f9d7a6e4b29" bpmnElement="sid-94c7064c-f1fc-4228-b126-8e45deb9ae5f"> |
||||
|
<omgdc:Bounds x="-170.0" y="-10.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-527c4526-deab-4042-bcd4-292fbe63250e" bpmnElement="sid-65dfce6b-0e09-4f6a-afe2-f88ec495ebec"> |
||||
|
<omgdc:Bounds x="-45.0" y="-9.999999" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNEdge id="edge-1e5ff341-bc16-4fa8-ad29-ab444468a92e" bpmnElement="sid-431a0560-2ea1-487a-ac0d-e67d81e960bd"> |
||||
|
<omgdi:waypoint x="-330.0" y="12.5"/> |
||||
|
<omgdi:waypoint x="-305.0" y="10.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-f5f7ce87-461f-441e-913e-44b82705ea2b" bpmnElement="sid-37de44c2-a93e-4135-8351-ae28197e4f1c"> |
||||
|
<omgdi:waypoint x="-70.0" y="30.0"/> |
||||
|
<omgdi:waypoint x="-45.0" y="30.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-b80849be-364d-49df-a033-cd69ddf73b91" bpmnElement="sid-7daf1858-4982-412a-a291-135112779914"> |
||||
|
<omgdi:waypoint x="-170.0" y="10.0"/> |
||||
|
<omgdi:waypoint x="-205.0" y="10.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNShape id="shape-7d60ba40-b4c7-4512-933c-0974c83cbb15" bpmnElement="sid-ed1def5c-cd64-4f86-8e63-6f5b4e656331"> |
||||
|
<omgdc:Bounds x="95.0" y="15.0" width="30.0" height="30.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNEdge id="edge-09827345-6cc4-41c0-b2b1-c0957162175b" bpmnElement="sid-43a62ce3-012a-4cc2-8adb-cf8c60531962"> |
||||
|
<omgdi:waypoint x="55.0" y="30.0"/> |
||||
|
<omgdi:waypoint x="95.0" y="30.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-4d317693-c8ea-4979-bcd3-ebbbe14ebb46" bpmnElement="sid-b1c67a3c-9127-4bb9-8b5d-4f411bbc5d89"> |
||||
|
<omgdi:waypoint x="5.0" y="-10.0"/> |
||||
|
<omgdi:waypoint x="-120.0" y="-130.0"/> |
||||
|
<omgdi:waypoint x="-255.0" y="-10.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-eb899f1c-24e5-4d19-85be-3c6fc4997e21" bpmnElement="sid-4fb52b4e-08cb-4753-a460-665d82a9de7b"> |
||||
|
<omgdi:waypoint x="-205.0" y="30.0"/> |
||||
|
<omgdi:waypoint x="-170.0" y="30.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
</bpmndi:BPMNPlane> |
||||
|
</bpmndi:BPMNDiagram> |
||||
|
</definitions> |
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,68 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> |
||||
|
<process id="项目资料上传流程" name="项目资料上传流程" isExecutable="true"> |
||||
|
<startEvent id="sid-6f817ee4-e85c-43d5-bb1b-2d6843dc2197"/> |
||||
|
<userTask id="sid-a7256209-fa03-49f4-8fb3-132b60d1df8f" name="发起人" activiti:assignee="${start}"/> |
||||
|
<userTask id="sid-5aa6679d-8bd3-4bf2-9d05-4d871b33682e" name="流程审批一" activiti:candidateUsers="${users}"/> |
||||
|
<userTask id="sid-5c826bb0-3eff-4eb6-b98b-adf6318b5bd3" name="流程审批二" activiti:candidateUsers="${users}"/> |
||||
|
<endEvent id="sid-ab19179c-c70b-4a7e-96e2-7b593b947c50"/> |
||||
|
<sequenceFlow id="sid-1710b5f8-c0db-495a-a02c-cab58fce264b" sourceRef="sid-6f817ee4-e85c-43d5-bb1b-2d6843dc2197" targetRef="sid-a7256209-fa03-49f4-8fb3-132b60d1df8f"/> |
||||
|
<sequenceFlow id="sid-0f265dec-c03e-49f4-8e43-cd6d4f565bc3" sourceRef="sid-a7256209-fa03-49f4-8fb3-132b60d1df8f" targetRef="sid-5aa6679d-8bd3-4bf2-9d05-4d871b33682e"> |
||||
|
<conditionExpression/> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-1659f764-5d0e-42d4-acb8-55008a420ea0" sourceRef="sid-5aa6679d-8bd3-4bf2-9d05-4d871b33682e" targetRef="sid-5c826bb0-3eff-4eb6-b98b-adf6318b5bd3"> |
||||
|
<conditionExpression>${type==1}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-2c379972-6e99-4458-8138-034101a4ef24" sourceRef="sid-5c826bb0-3eff-4eb6-b98b-adf6318b5bd3" targetRef="sid-ab19179c-c70b-4a7e-96e2-7b593b947c50"/> |
||||
|
<sequenceFlow id="sid-73d2f9cf-c91f-4047-87be-3f9e7276a9bb" sourceRef="sid-5aa6679d-8bd3-4bf2-9d05-4d871b33682e" targetRef="sid-a7256209-fa03-49f4-8fb3-132b60d1df8f"> |
||||
|
<conditionExpression>${type==0}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
<sequenceFlow id="sid-a6e429ff-c9d9-4793-b4f2-877e352170bf" sourceRef="sid-5c826bb0-3eff-4eb6-b98b-adf6318b5bd3" targetRef="sid-a7256209-fa03-49f4-8fb3-132b60d1df8f"> |
||||
|
<conditionExpression>${type==0}</conditionExpression> |
||||
|
</sequenceFlow> |
||||
|
</process> |
||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_项目资料上传流程"> |
||||
|
<bpmndi:BPMNPlane bpmnElement="项目资料上传流程" id="BPMNPlane_项目资料上传流程"> |
||||
|
<bpmndi:BPMNShape id="shape-df67e7d3-3794-48fc-9005-f761e2b7ce74" bpmnElement="sid-6f817ee4-e85c-43d5-bb1b-2d6843dc2197"> |
||||
|
<omgdc:Bounds x="-275.0" y="-20.0" width="30.0" height="30.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-960fbb91-f11c-45ea-ac9d-7cc0ed75c721" bpmnElement="sid-a7256209-fa03-49f4-8fb3-132b60d1df8f"> |
||||
|
<omgdc:Bounds x="-210.00002" y="-40.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-0cd38088-a1fb-4606-ace6-ebcf78a53821" bpmnElement="sid-5aa6679d-8bd3-4bf2-9d05-4d871b33682e"> |
||||
|
<omgdc:Bounds x="-85.000015" y="-40.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-1388daba-4315-4c49-b8c6-ebfaa7cc92e0" bpmnElement="sid-5c826bb0-3eff-4eb6-b98b-adf6318b5bd3"> |
||||
|
<omgdc:Bounds x="44.999985" y="-40.0" width="100.0" height="80.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNShape id="shape-4d8fce42-145e-4fbf-9f06-e8e1dc55ea58" bpmnElement="sid-ab19179c-c70b-4a7e-96e2-7b593b947c50"> |
||||
|
<omgdc:Bounds x="189.99998" y="-15.0" width="30.0" height="30.0"/> |
||||
|
</bpmndi:BPMNShape> |
||||
|
<bpmndi:BPMNEdge id="edge-872ebcd1-c795-44e7-bb50-4431fa404285" bpmnElement="sid-1710b5f8-c0db-495a-a02c-cab58fce264b"> |
||||
|
<omgdi:waypoint x="-245.0" y="2.5"/> |
||||
|
<omgdi:waypoint x="-210.00002" y="0.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-4ea5e51b-fa56-4343-a03c-ad748414787a" bpmnElement="sid-0f265dec-c03e-49f4-8e43-cd6d4f565bc3"> |
||||
|
<omgdi:waypoint x="-110.000015" y="0.0"/> |
||||
|
<omgdi:waypoint x="-85.000015" y="0.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-4f0f6959-b074-47e5-9aad-7ca971d6cc00" bpmnElement="sid-1659f764-5d0e-42d4-acb8-55008a420ea0"> |
||||
|
<omgdi:waypoint x="14.999985" y="0.0"/> |
||||
|
<omgdi:waypoint x="44.999985" y="0.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-46ebf852-c0e8-4067-b648-5e9fb3194b99" bpmnElement="sid-2c379972-6e99-4458-8138-034101a4ef24"> |
||||
|
<omgdi:waypoint x="144.99998" y="0.0"/> |
||||
|
<omgdi:waypoint x="189.99998" y="0.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-b2931190-1527-458f-85c8-edc79ac98dc1" bpmnElement="sid-73d2f9cf-c91f-4047-87be-3f9e7276a9bb"> |
||||
|
<omgdi:waypoint x="-85.000015" y="-20.0"/> |
||||
|
<omgdi:waypoint x="-110.000015" y="-20.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
<bpmndi:BPMNEdge id="edge-89c88fb7-0335-4368-a93e-5231753c1e4c" bpmnElement="sid-a6e429ff-c9d9-4793-b4f2-877e352170bf"> |
||||
|
<omgdi:waypoint x="44.999985" y="-20.0"/> |
||||
|
<omgdi:waypoint x="-30.000015" y="-140.0"/> |
||||
|
<omgdi:waypoint x="-135.00002" y="-40.0"/> |
||||
|
</bpmndi:BPMNEdge> |
||||
|
</bpmndi:BPMNPlane> |
||||
|
</bpmndi:BPMNDiagram> |
||||
|
</definitions> |
After Width: | Height: | Size: 17 KiB |
Loading…
Reference in new issue