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