Browse Source

提交

master
zhouhaibin 12 months ago
parent
commit
cdaa26fd58
  1. BIN
      Resources/项目入库模板.xlsx
  2. 6
      huzhou/pom.xml
  3. 38
      huzhou/src/main/java/org/jeecg/modules/huzhou/common/HuzhouCommonUtils.java
  4. 322
      huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlanController.java
  5. 48
      huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlaninfoHistoryController.java
  6. 538
      huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectController.java
  7. 47
      huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectinfoHistoryController.java
  8. 142
      huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouUploadfileinfoController.java
  9. 42
      huzhou/src/main/java/org/jeecg/modules/huzhou/controller/WorkflowController.java
  10. 5
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/BaseEntity.java
  11. 16
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouPlaninfo.java
  12. 17
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouPlaninfoHistory.java
  13. 49
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouPlaninfofile.java
  14. 4
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouProcessinfo.java
  15. 28
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouProjectinfo.java
  16. 25
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouProjectinfoHistory.java
  17. 1
      huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouUploadfileinfo.java
  18. 14
      huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/HuzhouPlaninfoHistoryMapper.java
  19. 8
      huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/HuzhouPlaninfofileMapper.java
  20. 12
      huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/HuzhouProjectinfoHistoryMapper.java
  21. 22
      huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/xml/HuzhouPlaninfoHistoryMapper.xml
  22. 18
      huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/xml/HuzhouProjectinfoHistoryMapper.xml
  23. 5
      huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/xml/WorkflowMapper.xml
  24. 19
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouPlaninfoHistoryService.java
  25. 15
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouPlaninfoService.java
  26. 7
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouPlaninfofileService.java
  27. 4
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouProcessinfoService.java
  28. 14
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouProjectinfoHistoryService.java
  29. 5
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouProjectinfoService.java
  30. 7
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouUploadfileinfoService.java
  31. 4
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouUserprojectService.java
  32. 2
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/IWorkflowService.java
  33. 94
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouPlaninfoHistoryServiceImpl.java
  34. 344
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java
  35. 11
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java
  36. 25
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouProcessinfoServiceImpl.java
  37. 58
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouProjectinfoHistoryServiceImpl.java
  38. 29
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java
  39. 68
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouUploadfileinfoServiceImpl.java
  40. 27
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouUserprojectServiceImpl.java
  41. 8
      huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/WorkflowServiceImpl.java
  42. 22
      huzhou/src/main/java/org/jeecg/modules/huzhou/vo/HuzhouPlaninfoOV.java
  43. 7
      huzhou/src/main/java/org/jeecg/modules/huzhou/vo/ProjectApproveOV.java
  44. BIN
      huzhou/src/main/resources/项目入库模板.xlsx
  45. BIN
      huzhou/src/main/resources/项目计划模板.xlsx
  46. 2
      jeecg-module-system/jeecg-system-start/src/main/resources/application.yml
  47. 38
      jeecg-module-system/jeecg-system-start/src/main/resources/process/项目资料审批流程.bpmn20.xml
  48. 6
      jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/message/test/SendMessageTest.java
  49. 7
      pom.xml

BIN
Resources/项目入库模板.xlsx

Binary file not shown.

6
huzhou/pom.xml

@ -32,6 +32,12 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.68</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>

38
huzhou/src/main/java/org/jeecg/modules/huzhou/common/HuzhouCommonUtils.java

@ -1,20 +1,30 @@
package org.jeecg.modules.huzhou.common;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class HuzhouCommonUtils {
public static List<String> extractObjectAttributes(Object user) {
/**
* 获取实体类的值
* @param object
* @return
*/
public static List<String> extractObjectAttributes(Object object) {
List<String> attributes = new ArrayList<>();
Class<?> clazz = user.getClass();
Class<?> clazz = object.getClass();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
try {
String name = method.getName();
if (name.startsWith("get")) { // 假设所有的getter方法都不带参数,并且返回一个基本数据类型或其包装类
Object value = method.invoke(user);
Object value = method.invoke(object);
if (value != null) { // 过滤掉null值
attributes.add(name.substring(3) + "=" + value); // 去掉"get"并添加等号和值
}
@ -25,4 +35,26 @@ public class HuzhouCommonUtils {
}
return attributes;
}
public static void setObjectAttributes(Object object,String fieldname,Object value) throws Exception {
Class<?> clazz = object.getClass();
Field field = clazz.getDeclaredField(fieldname);
field.setAccessible(true);
Class typeClass = field.getType();
Constructor con = typeClass.getConstructor(value.getClass());//获取有参构造函数
Object obj = con.newInstance(value);//构造函数做初始化
field.set(object,obj);
//Field[] declaredFields = clazz.getDeclaredFields();
//Method[] methods = clazz.getDeclaredMethods();
// for (Method method : methods) {
// try {
// String name = method.getName();
// if (name.contains(StringUtils.capitalize(methodname))&&name.startsWith("set")) { // 假设所有的getter方法都不带参数,并且返回一个基本数据类型或其包装类
// method.invoke(object,value);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
}
}

322
huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlanController.java

@ -1,19 +1,44 @@
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.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
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.HuzhouPlaninfoOV;
import org.jeecg.modules.huzhou.vo.ProjectApproveOV;
import org.springframework.beans.BeanUtils;
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 java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@RestController
@RequestMapping("/huzhouPlan")
@ -21,128 +46,211 @@ 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 IHuzhouPlaninfofileService planinfofileService;
@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);
}
@Autowired
private IHuzhouPlaninfoHistoryService planinfoHistoryService;
@Value(value = "${jeecg.path.upload}")
private String uploadpath;
@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");
/**
* 上传计划信息
* @param multipartFile
* @param projectid
* @return
* @throws Exception
*/
@PostMapping("/submitplaninfoUploadFile")
public Result<?> submitPlaninfoUploadFile(@RequestParam(value = "file",required = false) MultipartFile multipartFile,
@RequestParam String projectid) throws Exception {
HashMap<String, Object> hashMap = planinfoService.getPlanInfoListFromFile(multipartFile, projectid);
boolean res = (boolean) hashMap.get("res");
if(!res){
return Result.error((String)hashMap.get("msg"));
}
ArrayList<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr");
// int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
// HashMap<String, String> NameMap = new HashMap<String, String>();
// HashMap<String, String> chineseNameMap = new HashMap<String, String>();
//
// Row titlerow = sheet.getRow(0);
// Row chineseTitlerow = sheet.getRow(1);
// int cellNum = 5;
// //获取字段名称
// for (int i = 0; i < cellNum; i++) {
// NameMap.put(String.valueOf(i),titlerow.getCell(i).getStringCellValue());
// }
// for (int i = 1; i < cellNum; i++) {
// chineseNameMap.put(String.valueOf(i),chineseTitlerow.getCell(i).getStringCellValue());
// }
// for (int i = 2; i < physicalNumberOfRows; i++) {
// Row row = sheet.getRow(i);
// HuzhouPlaninfo huzhouPlaninfo = new HuzhouPlaninfo();
// for (int j = 0; j < cellNum; j++) {
// String value = "";
// if(row.getCell(j)!=null){
// row.getCell(j).setCellType(CellType.STRING);
// value = row.getCell(j).getStringCellValue();
// }
// if(value==null||value.length()==0){
// String s = chineseNameMap.get(String.valueOf(j));
// return Result.error("第"+(i+1)+"行,"+s+",不能为空");
// }
// String name = NameMap.get(String.valueOf(j));
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
// if("scheduledEndTime".equals(name)){
// Date date = dateFormat.parse(value);
// huzhouPlaninfo.setScheduledEndTime(date);
// }else if("scheduledStartTime".equals(name)){
// Date date = dateFormat.parse(value);
// huzhouPlaninfo.setScheduledStartTime(date);
// }else {
// HuzhouCommonUtils.setObjectAttributes(huzhouPlaninfo,name,value);
// }
// if(value!=null&&"taskLevel".equals(name)){
// int index = value.lastIndexOf(".");
// if(index!=-1){
// String substring = value.substring(0, index);
// HuzhouCommonUtils.setObjectAttributes(huzhouPlaninfo,"superior",substring);
// }else {
//// String substring = value.substring(0, index);
// HuzhouCommonUtils.setObjectAttributes(huzhouPlaninfo,"superior","0");
// }
// }
// }
// huzhouPlaninfo.setProjectId(projectid);
// huzhouPlaninfo.setIsfinish("0");
// huzhouPlaninfoArrayList.add(huzhouPlaninfo);
//
// }
planinfoService.saveBatch(huzhouPlaninfoArrayList);
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);
String processInstanceId = workFlow.getProcessInstanceId();
HuzhouProcessinfo huzhouProcessinfo = new HuzhouProcessinfo();
huzhouProcessinfo.setBusinesskey(businessKey);
huzhouProcessinfo.setStatus("3");//该项目的第一个流程
huzhouProcessinfo.setStage("3");//项目计划
huzhouProcessinfo.setProcessstatus("1");
huzhouProcessinfo.setProcessinstanceid(processInstanceId);
huzhouProcessinfo.setProjectid(projectId);
huzhouProcessinfo.setProjectid(projectid);
processinfoService.save(huzhouProcessinfo);
return Result.OK("保存成功");
projectinfoService.modifyStageById(projectid,"4");
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);
@PostMapping("/approvePlaninfo")
public Result<?> approvePlaninfo(@RequestParam(value = "file",required = false) MultipartFile file,
@RequestParam String taskId,
@RequestParam String flag,
@RequestParam String projectid,
@RequestParam String comment,
@RequestParam String stage) throws Exception {
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = currentUser.getId();
if(file!=null&&"1".equals(flag)){
//发生了修改
HashMap<String, Object> hashMap = planinfoService.getPlanInfoListFromFile(file, projectid);
boolean res = (boolean) hashMap.get("res");
if(!res){
return Result.error((String)hashMap.get("msg"));
}
ArrayList<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr");
//保存历史记录
planinfoHistoryService.savePlanInfoToHistory(projectid);
//删除原纪录
planinfoService.removeByProjectId(projectid);
planinfoService.saveBatch(huzhouPlaninfoArrayList);
}
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment, stage);
String userTaskName = workFlow.getUserTask();
if("3".equals(flag)){
projectinfoService.modifyStageById(projectid,"0");
processinfoService.modifyStatusByProjectId(projectid,"0","3");
return Result.ok("作废成功!");
}
if("计划审批二".equals(userTaskName)&&"1".equals(flag)){
projectinfoService.modifyStageById(projectid,"5");
processinfoService.modifyStatusByProjectId(projectid,"2","3");
}
return Result.ok("审批成功");
}
@PostMapping("/modifyPlaninfo")
public Result<?> modifyPlaninfo(@RequestParam(value = "file",required = false) MultipartFile multipartFile,
@RequestParam String projectid) throws Exception {
HashMap<String, Object> hashMap = planinfoService.getPlanInfoListFromFile(multipartFile, projectid);
boolean res = (boolean) hashMap.get("res");
if(!res){
return Result.error((String)hashMap.get("msg"));
}
ArrayList<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr");
List<HuzhouPlaninfo> planinfoHistoryList = planinfoService.getFinishListByProjectId(projectid);
if(planinfoHistoryList.size()>0){
for (HuzhouPlaninfo his:planinfoHistoryList){
boolean isexist=false;
String hisTaskLevel = his.getTaskLevel();
String hisTaskName = his.getTaskName();
for(int i =0;i<huzhouPlaninfoArrayList.size();i++){
// for (HuzhouPlaninfo now:huzhouPlaninfoArrayList){
HuzhouPlaninfo now = huzhouPlaninfoArrayList.get(i);
String nowTaskName = now.getTaskName();
String nowTaskLevel = now.getTaskLevel();
if(hisTaskLevel.equals(nowTaskLevel)&&hisTaskName.equals(nowTaskName)){
isexist=true;
huzhouPlaninfoArrayList.remove(now);
break;
}
}
if(!isexist){
return Result.error("任务级别:"+hisTaskLevel+",任务名称:"+hisTaskName+"已完成,无法修改!");
}
}
}
planinfoHistoryService.savePlanInfoToHistory(projectid);
planinfoService.removeByProjectId(projectid);
planinfoService.saveBatch(huzhouPlaninfoArrayList);
return Result.ok("修改计划成功");
}
@GetMapping("/queryPlanInfoMainTimeline")
public Result<?> queryPlanInfoMainTimeline(String projectid){
ArrayList<HuzhouPlaninfoOV> planInfoMainTimelineList = planinfoService.getPlanInfoMainTimelineList(projectid);
return Result.ok(planInfoMainTimelineList);
}
@PostMapping("/planUploadFile")
@Transactional()
public Result<?> planUploadFile(@RequestParam(value = "file")
MultipartFile[] files,@RequestParam(value = "planinfoid") String planinfoid) throws IOException {
//获取当前时间
planinfoService.saveOrModifyPlanUploadFile(files,planinfoid,"1");
return Result.OK("上传成功!!");
}
@PostMapping("/planUploadModifyFile")
@Transactional()
public Result<?> planUploadModifyFile(@RequestParam(value = "file")
MultipartFile[] files,@RequestParam(value = "planinfoid") String planinfoid) throws IOException {
planinfoService.saveOrModifyPlanUploadFile(files,planinfoid,"2");
return Result.ok("修改成功");
}
@GetMapping("/queryPlaninfoFilePageByid")
public Result<?> queryPlaninfoFilePageByid(String planinfoid,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
LambdaQueryWrapper<HuzhouPlaninfofile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(HuzhouPlaninfofile::getPlaninfoid,planinfoid);
lambdaQueryWrapper.orderByDesc(BaseEntity::getCreatetime);
Page<HuzhouPlaninfofile> page = new Page<>(pageNo, pageSize);
Page<HuzhouPlaninfofile> planinfofilePage = planinfofileService.page(page, lambdaQueryWrapper);
return Result.ok(planinfofilePage);
}
}

48
huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlaninfoHistoryController.java

@ -0,0 +1,48 @@
package org.jeecg.modules.huzhou.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfoHistory;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfoHistoryService;
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfoService;
import org.jeecg.modules.huzhou.vo.HuzhouPlaninfoOV;
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.ArrayList;
@RestController
@RequestMapping("/huzhouPlaninfoHistory")
public class HuzhouPlaninfoHistoryController {
@Autowired
private IHuzhouPlaninfoService planinfoService;
@Autowired
private IHuzhouPlaninfoHistoryService planinfoHistoryService;
@GetMapping("/planInfoHistoryPageList")
public Result<?> planInfoHistoryPageList(HuzhouProjectinfo projectinfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
Page<HuzhouProjectinfo> historyPageList = planinfoHistoryService.getPlanInfoHistoryPageList(projectinfo, pageNo, pageSize);
return Result.ok(historyPageList);
}
@GetMapping("/singlePlanInfoHistoryPageList")
public Result<?> singlePlanInfoHistoryPageList(String projectId,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
Page<HuzhouPlaninfoHistory> historyPageList = planinfoHistoryService.getSinglePlanInfoHistoryPageList(projectId, pageNo, pageSize);
return Result.OK(historyPageList);
}
@GetMapping("/queryPlanInfoHistoryGroupList")
public Result<?> queryPlanInfoHistoryGroupList(HuzhouPlaninfoHistory planinfoHistory){
//获取项目入库数据
ArrayList<HuzhouPlaninfoOV> huzhouPlaninfoOVS = planinfoHistoryService.queryPlanInfoHistoryGroupList(planinfoHistory);
return Result.OK(huzhouPlaninfoOVS);
}
}

538
huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectController.java

@ -5,33 +5,30 @@ 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.*;
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.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
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.DictModel;
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.ISysDictService;
import org.jeecg.modules.system.service.ISysUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.parameters.P;
import org.springframework.core.io.ClassPathResource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
@ -39,25 +36,19 @@ 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.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.util.*;
import java.util.stream.Collectors;
@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;
@ -68,18 +59,34 @@ public class HuzhouProjectController {
@Autowired
private IHuzhouUserprojectService userprojectService;
@Autowired
private IHuzhouUploadfileinfoService uploadfileinfoService;
@Value(value = "${jeecg.path.upload}")
private String uploadpath;
private ISysDictService sysDictService;
@Autowired
private ISysUserService userService;
private IHuzhouProjectinfoHistoryService projectinfoHistoryService;
/**
* 本地local miniominio 阿里alioss
*/
@Value(value="${jeecg.uploadType}")
private String uploadType;
@PostMapping("/submitProject")
@Transactional
public Result<String> submitProject(@RequestBody HuzhouProjectinfo info){
//保存项目信息
info.setStage("1");//最开始的状态
int constructionPeriod = Integer.parseInt(info.getConstructionPeriod());
LocalDate now = LocalDate.now();
LocalDate localDate = LocalDate.of(2025, 6, 30);
Period period = Period.between(now, localDate);
int month = period.getYears()*12+period.getMonths();
if(constructionPeriod>month){
return Result.error("无法在2025年年中验收的项目不允许入库");
}
projectinfoService.save(info);
//保存项目流程相关的信息
//设置businessKey
//设置项目状态
//新增项目人员关系表
userprojectService.saveFromProject(info);
ArrayList<String> arrayList = new ArrayList<>();
//设置下一个节点处理人
//使用角色查询
@ -88,309 +95,272 @@ public class HuzhouProjectController {
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.setStage("1");//该项目的第一个流程
huzhouProcessinfo.setProcessinstanceid(processInstanceId);
huzhouProcessinfo.setProjectid(info.getId());
huzhouProcessinfo.setProcessstatus("1");
processinfoService.save(huzhouProcessinfo);
return Result.ok("项目入库申请已发起成功");
}
@PostMapping("/batchImportProjects")
public Result<?> batchImportProjects(@RequestParam(value = "file",required = false) MultipartFile multipartFile) throws Exception {
if (multipartFile == null && multipartFile.getSize() == 0) {
return Result.error("文件上传错误,重新上传");
}
//获取文件名称 判断文件是否为 Execl
String filename = multipartFile.getOriginalFilename();
if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
return Result.error("文件上传格式有误,请重新上传");
}
InputStream inputStream = multipartFile.getInputStream();
Workbook workbook = null;
if (filename.endsWith(".xlsx")) {
workbook = new XSSFWorkbook(inputStream);
} else {
workbook = new HSSFWorkbook(inputStream);
}
Sheet sheet = workbook.getSheetAt(0);
ArrayList<HuzhouProjectinfo> huzhouProjectinfos = new ArrayList<>();
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
HashMap<String, String> NameMap = new HashMap<String, String>();
HashMap<String, String> chineseNameMap = new HashMap<String, String>();
Row titlerow = sheet.getRow(0);
Row chineseTitlerow = sheet.getRow(1);
int cellNum = 32;
//获取字段名称
for (int i = 0; i < cellNum; i++) {
NameMap.put(String.valueOf(i),titlerow.getCell(i).getStringCellValue());
}
for (int i = 1; i < cellNum; i++) {
chineseNameMap.put(String.valueOf(i),chineseTitlerow.getCell(i).getStringCellValue());
}
for (int i = 2; i < physicalNumberOfRows; i++) {
Row row = sheet.getRow(i);
HuzhouProjectinfo huzhouProjectinfo = new HuzhouProjectinfo();
for (int j = 1; j < cellNum; j++) {
String value = "";
if(row.getCell(j)!=null){
row.getCell(j).setCellType(CellType.STRING);
value = row.getCell(j).getStringCellValue();
}
if(j<=21&&(value==null||value.length()==0)){
String s = chineseNameMap.get(String.valueOf(j));
return Result.error("第"+(i+1)+"行,"+s+",不能为空");
}
String name = NameMap.get(String.valueOf(j));
//所属任务
if("reformName".equals(name)){
List<DictModel> reformTasks = sysDictService.getDictItems("reformTasks");
String dictValue = null;
for (DictModel dict:reformTasks) {
if(dict.getText().equals(value)){
dictValue=dict.getValue();
}
}
if(dictValue==null){
String s = chineseNameMap.get(String.valueOf(j));
return Result.error("第"+(i+1)+"行,"+s+",不在字典中,请联系管理员");
}
value= dictValue;
}
if("superLeader".equals(name)){
List<DictModel> reformTasks = sysDictService.getDictItems("room");
String dictValue = null;
for (DictModel dict:reformTasks) {
if(dict.getText().equals(value)){
dictValue=dict.getValue();
}
}
if(dictValue==null){
String s = chineseNameMap.get(String.valueOf(j));
return Result.error("第"+(i+1)+"行,"+s+",不在字典中,请联系管理员");
}
value= dictValue;
}
if("constructionPeriod".equals(name)){
int constructionPeriod = Integer.parseInt(value);
LocalDate now = LocalDate.now();
LocalDate localDate = LocalDate.of(2025, 6, 31);
Period period = Period.between(now, localDate);
int month = period.getYears()*12+period.getMonths();
if(constructionPeriod>month){
return Result.error("无法在2025年年中验收的项目不允许入库");
}
}
if(name.contains("Money")){
try {
BigDecimal bigDecimal = new BigDecimal(value);
}catch (Exception e){
String s = chineseNameMap.get(String.valueOf(j));
return Result.error("第"+(i+1)+"行,"+s+",金额格式错误");
}
}
HuzhouCommonUtils.setObjectAttributes(huzhouProjectinfo,name,value);
}
huzhouProjectinfo.setStage("1");
huzhouProjectinfos.add(huzhouProjectinfo);
}
projectinfoService.saveBatch(huzhouProjectinfos);
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();
for (HuzhouProjectinfo p :huzhouProjectinfos) {
HuzhouProcessinfo huzhouProcessinfo = new HuzhouProcessinfo();
huzhouProcessinfo.setBusinesskey(businessKey);
huzhouProcessinfo.setStage("1");//该项目的第一个流程
huzhouProcessinfo.setProcessinstanceid(processInstanceId);
huzhouProcessinfo.setProjectid(p.getId());
huzhouProcessinfo.setProcessstatus("1");
processinfoService.save(huzhouProcessinfo);
}
//创建流程
return Result.OK("批量导入成功");
}
@PostMapping("/approveProjectInfo")
public Result<?> approveProjectInfo(@RequestBody HashMap<String,Object> param){
public Result<?> approveProjectInfo(@RequestBody ProjectApproveOV projectApproveOV){
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)){
// 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 stage = (String) param.get("stage");
// String isEdit = (String) param.get("isEdit");
// Map projectInfoMap = (Map) param.get("projectInfo");
// List<Map> projectArr = (List<Map>) param.get("projectArr");
String taskId = projectApproveOV.getTaskId();
HuzhouProjectinfo projectinfo = projectApproveOV.getProjectInfo();
String comment = projectApproveOV.getComment();
String projectid = projectApproveOV.getProjectid();
String flag = projectApproveOV.getFlag();
String stage = projectApproveOV.getStage();
String isEdit = projectApproveOV.getIsEdit();
List<HuzhouProjectinfo> projectArr = projectApproveOV.getProjectArr();
// HuzhouProjectinfo projectinfo =null;
// if(projectInfo!=null){
// String jsonString = JSON.toJSONString(projectInfo);
// projectinfo = JSON.parseObject(jsonString, HuzhouProjectinfo.class);
// }
if("1".equals(isEdit)&&"1".equals(flag)&&"1".equals(stage)){
if(null!=projectinfo){
//查询修改前信息进行保存
HuzhouProjectinfo projectinfoHistory= projectinfoService.getById(projectid);
projectinfoHistoryService.saveFromProject(projectinfoHistory);
projectinfoService.updateById(projectinfo);
//保存修改记录
//删除此项目原来的人员和项目对应信息
LambdaQueryWrapper<HuzhouUserproject> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouUserproject::getProjectId,projectid);
boolean remove = userprojectService.remove(queryWrapper);
userprojectService.removeByProjectId(projectid);
//保存新的人员和项目对应信息
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);
}
}
userprojectService.saveFromProject(projectinfo);
}
}
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment, status);
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment, stage);
String userTaskName = workFlow.getUserTask();
if("3".equals(flag)){
if(projectArr!=null){
for (HuzhouProjectinfo item:projectArr) {
projectinfoService.modifyStageById(item.getId(),"0");
processinfoService.modifyStatusByProjectId(item.getId(),"0","1");
}
}else{
projectinfoService.modifyStageById(projectid,"0");
processinfoService.modifyStatusByProjectId(projectid,"0","1");
}
return Result.ok("作废成功!");
//管理单位审批通过,最后一个节点流程通过
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();
if(projectArr!=null){
if("管理单位审批".equals(userTaskName)&&"1".equals(flag)){
for (HuzhouProjectinfo item:projectArr) {
String id = item.getId();
projectinfoService.modifyStageById(id,"2");
processinfoService.modifyStatusByProjectId(id,"2","1");
}
}
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);
}else{
//管理单位审批通过,最后一个节点流程通过
if("管理单位审批".equals(userTaskName)&&"1".equals(flag)){
projectinfoService.modifyStageById(projectid,"2");
processinfoService.modifyStatusByProjectId(projectid,"2","1");
}
}
if("计划审批二".equals(userTaskName)&&"1".equals(flag)){
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(HuzhouProjectinfo::getStatus,"6");
updateWrapper.eq(HuzhouProjectinfo::getId,projectid);
projectinfoService.update(updateWrapper);
projectinfoService.modifyStageById(projectid,"5");
processinfoService.modifyStatusByProjectId(projectid,"2","3");
}
return Result.ok("审批成功");
}
@PostMapping("/deleteProcesss")
public Result<?> deleteProcesss(String processInstanceId){
runtimeService.deleteProcessInstance(processInstanceId,"发起人删除");
return Result.OK("流程删除成功");
}
@PostMapping("/modifyProjectInfo")
public Result<?> modifyProjectInfo(@RequestBody HuzhouProjectinfo huzhouProjectinfo){
HuzhouProjectinfo projectinfoHistory= projectinfoService.getById(huzhouProjectinfo.getId());
projectinfoService.updateById(huzhouProjectinfo);
projectinfoHistoryService.saveFromProject(projectinfoHistory);
userprojectService.removeByProjectId(huzhouProjectinfo.getId());
userprojectService.saveFromProject(huzhouProjectinfo);
return Result.ok("修改成功");
}
@GetMapping("/projectInfoPageList")
public Result<IPage<HuzhouProjectinfo>> queryPageList(@RequestParam Map<String, Object> params,
public Result<IPage<HuzhouProjectinfo>> queryPageList(HuzhouProjectinfo projectinfo,
@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);
projectinfo.setStage(null);
IPage<HuzhouProjectinfo> pageList = projectinfoService.getProjectInfoPageList(projectinfo, pageNo, pageSize);
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);
@GetMapping("/projectApprovedPageList")
public Result<IPage<HuzhouProjectinfo>> queryProjectApprovedPage(HuzhouProjectinfo projectinfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
projectinfo.setStage("3");
IPage<HuzhouProjectinfo> infoPageList = projectinfoService.getProjectInfoPageList(projectinfo, pageNo, pageSize);
return Result.OK(infoPageList);
}
@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("/getIsbatchImportProjects")
public Result<?> getIsbatchImportProjects(String processInstanceId){
List<HuzhouProcessinfo> processinfoList = processinfoService.getListByInstid(processInstanceId);
if(processinfoList.size()>1){
return Result.OK(true);
}
return Result.OK(false);
}
@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("/batchImportProjectPageListByInstid")
public Result<?> getBatchImportProjectsListByInstid(String processInstanceId,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
List<HuzhouProcessinfo> processinfoList = processinfoService.getListByInstid(processInstanceId);
List<String> projectidList = processinfoList.stream()
.map(HuzhouProcessinfo::getProjectid)
.collect(Collectors.toList());
LambdaQueryWrapper<HuzhouProjectinfo> projectinfoQueryWrapper = new LambdaQueryWrapper<>();
projectinfoQueryWrapper.in(HuzhouProjectinfo::getId,projectidList);
Page<HuzhouProjectinfo> huzhouProjectinfoPage = new Page<>(pageNo,pageSize);
Page<HuzhouProjectinfo> projectinfoPage = projectinfoService.page(huzhouProjectinfoPage, projectinfoQueryWrapper);
return Result.ok(projectinfoPage);
}
@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);
}
}

47
huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectinfoHistoryController.java

@ -0,0 +1,47 @@
package org.jeecg.modules.huzhou.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
import org.jeecg.modules.huzhou.mapper.HuzhouProjectinfoHistoryMapper;
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoHistoryService;
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService;
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;
@RestController
@RequestMapping("/huzhouProjectinfoHistory")
public class HuzhouProjectinfoHistoryController {
@Autowired
private IHuzhouProjectinfoHistoryService projectinfoHistoryService;
@GetMapping("/projectInfoHistoryPageList")
public Result<?> projectInfoHistoryPageList(HuzhouProjectinfo projectinfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
Page<HuzhouProjectinfo> historyPageList = projectinfoHistoryService.getProjectInfoHistoryPageList(projectinfo, pageNo, pageSize);
return Result.ok(historyPageList);
}
@GetMapping("/singleProjectInfoHistoryPageList")
public Result<?> singleProjectInfoHistoryPageList(HuzhouProjectinfoHistory projectinfoHistory,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
Page<HuzhouProjectinfoHistory> historyPageList = projectinfoHistoryService.getSingleProjectInfoHistoryPageList(projectinfoHistory, pageNo, pageSize);
return Result.OK(historyPageList);
}
@GetMapping("/queryProjectInfoHistoryById")
public Result<HuzhouProjectinfoHistory> queryProjectInfoHistoryById(String id){
//获取项目入库数据
HuzhouProjectinfoHistory projectinfo = projectinfoHistoryService.getById(id);
return Result.OK(projectinfo);
}
}

142
huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouUploadfileinfoController.java

@ -0,0 +1,142 @@
package org.jeecg.modules.huzhou.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.io.FileUtils;
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.HuzhouUploadfileinfo;
import org.jeecg.modules.huzhou.entity.WorkFlow;
import org.jeecg.modules.huzhou.service.IHuzhouProcessinfoService;
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService;
import org.jeecg.modules.huzhou.service.IHuzhouUploadfileinfoService;
import org.jeecg.modules.huzhou.service.IWorkflowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
@RestController
@RequestMapping("/huzhouUploadfileinfo")
public class HuzhouUploadfileinfoController {
@Autowired
private IHuzhouUploadfileinfoService uploadfileinfoService;
@Autowired
private IWorkflowService workflowService;
@Autowired
private IHuzhouProcessinfoService processinfoService;
@Autowired
private IHuzhouProjectinfoService projectinfoService;
@GetMapping("/downloadfile")
public void downloadfile(HttpServletResponse response, String path, String fileName) throws IOException {
InputStream fileInputStream =null;
File file = null;
if(path.startsWith("Resources")){
path = path.substring(path.indexOf("/")+1);
ClassPathResource classPathResource = new ClassPathResource(path);
fileInputStream =classPathResource.getInputStream();
}else{
fileInputStream = new FileInputStream(path);
file = new File(path);
}
response.setContentType("application/octet-stream");
if(file!=null){
response.addHeader("Content-Length", "" + file.length());
}else{
response.addHeader("Content-Length", "" + fileInputStream.available());
}
// response.setContentType("multipart/form-data");
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("/uploacFilePageList")
public Result<IPage<HuzhouUploadfileinfo>> queryResourceInfo(HuzhouUploadfileinfo uploadfileinfo,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
IPage<HuzhouUploadfileinfo> huzhouUploadfileinfoIPage = uploadfileinfoService.getuploacFilePageList(uploadfileinfo, pageNo, pageSize);
return Result.OK(huzhouUploadfileinfoIPage);
}
@PostMapping("/submitUploadFile")
@Transactional()
public Result<?> submitUploadFile(@RequestParam(value = "file")
MultipartFile[] files,@RequestParam(value = "projectid") String projectid) throws IOException {
uploadfileinfoService.saveFileAndFileInfo(files, projectid);
ArrayList<String> arrayList = new ArrayList<>();
//设置下一个节点处理人
//使用角色查询
arrayList.add("1752895307869614081");
arrayList.add("1752895591849160705");
WorkFlow workFlow = workflowService.createFlow("项目资料上传流程", arrayList);
String businessKey = workFlow.getBusinessKey();
String processInstanceId = workFlow.getProcessInstanceId();
//保存项目信息
projectinfoService.modifyStageById(projectid,"3");
//保存项目流程相关的信息
//设置businessKey
//设置项目状态
HuzhouProcessinfo huzhouProcessinfo = new HuzhouProcessinfo();
huzhouProcessinfo.setBusinesskey(businessKey);
huzhouProcessinfo.setStage("2");//
huzhouProcessinfo.setProcessinstanceid(processInstanceId);
huzhouProcessinfo.setProjectid(projectid);
processinfoService.save(huzhouProcessinfo);
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 stage,
@RequestParam(value = "adviceFile",required = false) MultipartFile[] adviceFile) throws IOException {
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = currentUser.getId();
WorkFlow workFlow = workflowService.approveProjectInfo(taskId, flag, comment, stage);
String userTaskName = workFlow.getUserTask();
if("发起人".equals(workFlow.getUserTask())&&null != file){
uploadfileinfoService.modifyUploadFile(file,projectid,"1");
}
//意见文件
if(adviceFile!=null&&"0".equals(flag)){
uploadfileinfoService.modifyUploadFile(adviceFile,projectid,"2");
}
if("3".equals(flag)){
processinfoService.modifyStatusByProjectId(projectid,"0","2");
return Result.ok("作废成功!");
}
//管理单位审批通过,最后一个节点流程通过
if("流程审批二".equals(userTaskName)&&"1".equals(flag)){
processinfoService.modifyStatusByProjectId(projectid,"2","2");
}
return Result.ok("审批成功");
}
}

42
huzhou/src/main/java/org/jeecg/modules/huzhou/controller/WorkflowController.java

@ -3,7 +3,6 @@ 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;
@ -84,7 +83,16 @@ public class WorkflowController {
//获取项目id
LambdaQueryWrapper<HuzhouProcessinfo> processQueryWrapper = new LambdaQueryWrapper<>();
processQueryWrapper.eq(HuzhouProcessinfo::getProcessinstanceid,processInstanceId);
HuzhouProcessinfo processinfo = processinfoService.getOne(processQueryWrapper);
List<HuzhouProcessinfo> huzhouProcessinfoList = processinfoService.list(processQueryWrapper);
HuzhouProcessinfo processinfo = null;
if(huzhouProcessinfoList.size()>=1){
processinfo = huzhouProcessinfoList.get(0);
String projectid = processinfo.getProjectid();
stringObjectHashMap.put("projectid",projectid);
}else {
}
if(processinfo!=null){
String projectid = processinfo.getProjectid();
stringObjectHashMap.put("projectid",projectid);
@ -94,7 +102,7 @@ public class WorkflowController {
HuzhouProjectinfo projectInfo = projectinfoService.getOne(projetcQueryWrapper);
stringObjectHashMap.put("projectName",projectInfo.getProjectName());
stringObjectHashMap.put("createTime",projectInfo.getCreatetime());
stringObjectHashMap.put("status",processinfo.getStatus());
stringObjectHashMap.put("stage",processinfo.getStage());
}
@ -165,10 +173,18 @@ public class WorkflowController {
//获取项目id
LambdaQueryWrapper<HuzhouProcessinfo> processQueryWrapper = new LambdaQueryWrapper<>();
processQueryWrapper.eq(HuzhouProcessinfo::getProcessinstanceid,processInstanceId);
HuzhouProcessinfo processinfo = processinfoService.getOne(processQueryWrapper);
if(processinfo!=null){
List<HuzhouProcessinfo> huzhouProcessinfoList = processinfoService.list(processQueryWrapper);
HuzhouProcessinfo processinfo = null;
if(huzhouProcessinfoList.size()>=1){
processinfo = huzhouProcessinfoList.get(0);
String projectid = processinfo.getProjectid();
reshashMap.put("projectid",projectid);
}else {
}
if(processinfo!=null){
String projectid = processinfo.getProjectid();
//获取项目名称
LambdaQueryWrapper<HuzhouProjectinfo> projetcQueryWrapper = new LambdaQueryWrapper<>();
projetcQueryWrapper.eq(HuzhouProjectinfo::getId,projectid);
@ -177,7 +193,7 @@ public class WorkflowController {
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());
reshashMap.put("stage",processinfo.getStage());
}
resList.add(reshashMap);
HistoricProcessInstance historicProcessInstance =historyService.createHistoricProcessInstanceQuery()
@ -219,14 +235,14 @@ public class WorkflowController {
return Result.ok(taskPage);
}
@GetMapping("/getprocessInfo")
public Result<IPage<HashMap<String,Object>>> getprocessInfo(String projectid,String status,
public Result<IPage<HashMap<String,Object>>> getprocessInfo(String projectid,String stage,
@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);//属于第几部流程
queryWrapper.eq(HuzhouProcessinfo::getStage,stage);//属于第几部流程
HuzhouProcessinfo processinfo = processinfoService.getOne(queryWrapper);
String processinstanceid = processinfo.getProcessinstanceid();
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
@ -275,7 +291,7 @@ public class WorkflowController {
@GetMapping("/getActionParam")
public Result<?> getActionParam(String projectid,String status,String taskId,String procesType){
public Result<?> getActionParam(String projectid,String stage,String taskId,String procesType){
HashMap<String,Object> outRes = new HashMap<>();
ArrayList<Object> actionButtons = new ArrayList<>();
//如果是已办
@ -287,19 +303,19 @@ public class WorkflowController {
HuzhouProjectinfo projectinfo = projectinfoService.getById(projectid);
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid);
queryWrapper.eq(HuzhouProcessinfo::getStatus,status);//属于第几部流程
queryWrapper.eq(HuzhouProcessinfo::getStage,stage);//属于第几部流程
HuzhouProcessinfo processinfo = processinfoService.getOne(queryWrapper);
String processinstanceid = processinfo.getProcessinstanceid();
List<HistoricTaskInstance> list = historyService
.createHistoricTaskInstanceQuery()
.processInstanceId(processinstanceid)
.orderByHistoricTaskInstanceEndTime()
.orderByTaskCreateTime()
.desc()
.list();
HistoricTaskInstance taskInstance = null;
if (!list.isEmpty()) {
if (list.get(0).getEndTime() != null) {
taskInstance = list.get(0);
if (list.get(1).getEndTime() != null) {
taskInstance = list.get(1);
String userid = taskInstance.getAssignee();
//上一个节点是你处理的(已办可以撤回)
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();

5
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/BaseEntity.java

@ -1,5 +1,6 @@
package org.jeecg.modules.huzhou.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
@ -14,11 +15,15 @@ public class BaseEntity {
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@JSONField(format="yyyy-MM-dd")
private Date createtime;
/**
* 最后更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JSONField(format="yyyy-MM-dd")
private Date updatetime;
/**

16
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouPlaninfo.java

@ -1,5 +1,6 @@
package org.jeecg.modules.huzhou.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@ -35,22 +36,33 @@ public class HuzhouPlaninfo extends BaseEntity implements Serializable {
* 计划开始时间
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
@JSONField(format="yyyy-MM-dd")
private Date scheduledStartTime;
/**
* 计划结束时间
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
@JSONField(format="yyyy-MM-dd")
private Date scheduledEndTime;
/**
* 实际开始时间
*/
@JSONField(format="yyyy-MM-dd")
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
private Date actualStartTime;
/**
* 实际结束时间
*/
private Date actualEndTime;
@JSONField(format="yyyy-MM-dd")
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
private Date actualEndTime;
private String taskLevel;
private String taskFile;
private String superior;
private String isfinish;
private String groupId;
}

17
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouPlaninfoHistory.java

@ -0,0 +1,17 @@
package org.jeecg.modules.huzhou.entity;
import java.util.Date;
import java.io.Serializable;
/**
* (HuzhouPlaninfoHistory)实体类
*
* @author makejava
* @since 2024-02-21 14:04:41
*/
public class HuzhouPlaninfoHistory extends HuzhouPlaninfo implements Serializable {
private static final long serialVersionUID = 174139688711733935L;
}

49
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouPlaninfofile.java

@ -0,0 +1,49 @@
package org.jeecg.modules.huzhou.entity;
import lombok.Data;
import java.util.Date;
import java.io.Serializable;
/**
* (HuzhouPlaninfofile)实体类
*
* @author makejava
* @since 2024-02-18 17:06:46
*/
@Data
public class HuzhouPlaninfofile extends BaseEntity implements Serializable {
private static final long serialVersionUID = -59331814014234677L;
/**
* 文档编号
*/
private Integer id;
/**
* 任务id
*/
private String planinfoid;
/**
* 文档名称
*/
private String documentName;
/**
* 文档类型
*/
private String documentType;
/**
* 文档位置
*/
private String documentPath;
/**
* 文档属于项目的哪个阶段
*/
private String stage;
/**
* 文件大小
*/
private Long size;
private String status;
}

4
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouProcessinfo.java

@ -13,6 +13,7 @@ import java.io.Serializable;
@Data
public class HuzhouProcessinfo extends BaseEntity implements Serializable {
private static final long serialVersionUID = 641518690443763605L;
private String id;
/**
* 流程实例id
*/
@ -28,7 +29,8 @@ public class HuzhouProcessinfo extends BaseEntity implements Serializable {
/**
* 当前流程属于项目的哪个阶段
*/
private String status;
private String stage;
private String processstatus;
}

28
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouProjectinfo.java

@ -125,23 +125,7 @@ public class HuzhouProjectinfo extends BaseEntity implements Serializable{
/**
* 项目状态
*/
private String status;
/**
* 创建时间
*/
private Date createtime;
/**
* 创建人
*/
private String creator;
/**
* 修改时间
*/
private Date updatetime;
/**
* 修改人
*/
private String updater;
private String stage;
/**
* 单位属性
*/
@ -149,23 +133,23 @@ public class HuzhouProjectinfo extends BaseEntity implements Serializable{
/**
* 总投资
*/
private String totalInvestment;
private String totalMoney;
/**
* 自筹资金
*/
private String selfFunding;
private String selfMoney;
/**
* 2023年支付
*/
private Double payamount2023;
private Double payamount2023Money;
/**
* 2024年支付
*/
private Double payamount2024;
private Double payamount2024Money;
/**
* 2025年支付
*/
private Double payamount2025;
private Double payamount2025Money;

25
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouProjectinfoHistory.java

@ -0,0 +1,25 @@
package org.jeecg.modules.huzhou.entity;
import lombok.Data;
import java.util.Date;
import java.io.Serializable;
/**
* (HuzhouProjectinfoHistory)实体类
*
* @author makejava
* @since 2024-02-20 11:27:03
*/
@Data
public class HuzhouProjectinfoHistory extends HuzhouProjectinfo implements Serializable {
private static final long serialVersionUID = 376671943052847409L;
private String projectId;
}

1
huzhou/src/main/java/org/jeecg/modules/huzhou/entity/HuzhouUploadfileinfo.java

@ -41,5 +41,6 @@ public class HuzhouUploadfileinfo extends BaseEntity implements Serializable {
* 文件大小
*/
private long size;
private String stage;
}

14
huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/HuzhouPlaninfoHistoryMapper.java

@ -0,0 +1,14 @@
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.jeecg.modules.huzhou.entity.HuzhouPlaninfoHistory;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
@Mapper
public interface HuzhouPlaninfoHistoryMapper extends BaseMapper<HuzhouPlaninfoHistory> {
Page<HuzhouProjectinfo> getPlanInfoHistoryPageList(Page page,HuzhouProjectinfo projectinfo);
Page<HuzhouPlaninfoHistory> getSinglePlanInfoHistoryPageList(Page page,String projectid);
}

8
huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/HuzhouPlaninfofileMapper.java

@ -0,0 +1,8 @@
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.HuzhouPlaninfofile;
@Mapper
public interface HuzhouPlaninfofileMapper extends BaseMapper<HuzhouPlaninfofile> {
}

12
huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/HuzhouProjectinfoHistoryMapper.java

@ -0,0 +1,12 @@
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.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
@Mapper
public interface HuzhouProjectinfoHistoryMapper extends BaseMapper<HuzhouProjectinfoHistory> {
Page<HuzhouProjectinfo> getProjectInfoHistoryPageList(Page page,HuzhouProjectinfo projectinfo);
}

22
huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/xml/HuzhouPlaninfoHistoryMapper.xml

@ -0,0 +1,22 @@
<?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.HuzhouPlaninfoHistoryMapper">
<select id="getPlanInfoHistoryPageList" resultType="org.jeecg.modules.huzhou.entity.HuzhouProjectinfo" parameterType="org.jeecg.modules.huzhou.entity.HuzhouProjectinfo">
select DISTINCT p.id,p.project_name,p.description,p.duty_workplace,p.phone,p.stage
from huzhou_projectinfo p inner join
(SELECT project_id,group_id FROM huzhou_planinfo_history GROUP BY group_id,project_id) h on h.project_id=p.id
<where>
<if test="projectinfo.id!=null and projectinfo.id!=''">
<bind name="tempStr" value="'%' + projectinfo.id + '%'" />
p.id like #{tempStr}
</if>
<if test="projectinfo.projectName!=null and projectinfo.projectName!=''">
<bind name="tempStr" value="'%' + projectinfo.projectName + '%'" />
and p.projectName like #{tempStr}
</if>
</where>
</select>
<select id="getSinglePlanInfoHistoryPageList" resultType="org.jeecg.modules.huzhou.entity.HuzhouPlaninfoHistory">
SELECT group_id,project_id,MIN(createtime) createtime,MIN(id) id FROM huzhou_planinfo_history where project_id =#{projectid} GROUP BY group_id,project_id order by createtime desc
</select>
</mapper>

18
huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/xml/HuzhouProjectinfoHistoryMapper.xml

@ -0,0 +1,18 @@
<?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.HuzhouProjectinfoHistoryMapper">
<select id="getProjectInfoHistoryPageList" resultType="org.jeecg.modules.huzhou.entity.HuzhouProjectinfo" parameterType="org.jeecg.modules.huzhou.entity.HuzhouProjectinfo">
select DISTINCT p.id,p.project_name,p.description,p.duty_workplace,p.phone,p.stage
from huzhou_projectinfo p inner join huzhou_projectinfo_history h on h.project_id=p.id
<where>
<if test="projectinfo.id!=null and projectinfo.id!=''">
<bind name="tempStr" value="'%' + projectinfo.id + '%'" />
p.id like #{tempStr}
</if>
<if test="projectinfo.projectName!=null and projectinfo.projectName!=''">
<bind name="tempStr" value="'%' + projectinfo.projectName + '%'" />
and p.projectName like #{tempStr}
</if>
</where>
</select>
</mapper>

5
huzhou/src/main/java/org/jeecg/modules/huzhou/mapper/xml/WorkflowMapper.xml

@ -2,13 +2,16 @@
<!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 processDefinitionId,processInstanceId from (
SELECT DISTINCT
RES.PROC_DEF_ID_ processDefinitionId,RES.PROC_INST_ID_ processInstanceId
RES.PROC_DEF_ID_ processDefinitionId,RES.PROC_INST_ID_ processInstanceId,res.START_TIME_
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
ORDER BY res.START_TIME_ DESC
) a
</select>
</mapper>

19
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouPlaninfoHistoryService.java

@ -0,0 +1,19 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfoHistory;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
import org.jeecg.modules.huzhou.vo.HuzhouPlaninfoOV;
import java.util.ArrayList;
public interface IHuzhouPlaninfoHistoryService extends IService<HuzhouPlaninfoHistory> {
void savePlanInfoToHistory(String projectid);
Page<HuzhouProjectinfo> getPlanInfoHistoryPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize);
Page<HuzhouPlaninfoHistory> getSinglePlanInfoHistoryPageList(String projectid, Integer pageNo, Integer pageSize);
ArrayList<HuzhouPlaninfoOV> queryPlanInfoHistoryGroupList(HuzhouPlaninfoHistory planinfoHistory);
}

15
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouPlaninfoService.java

@ -1,9 +1,18 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.poi.ss.usermodel.Sheet;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo;
import org.jeecg.modules.huzhou.vo.HuzhouPlaninfoOV;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* (HuzhouPlaninfo)表服务接口
@ -12,5 +21,11 @@ import org.springframework.data.domain.PageRequest;
* @since 2024-01-30 16:01:09
*/
public interface IHuzhouPlaninfoService extends IService<HuzhouPlaninfo> {
HashMap<String,Object> getPlanInfoListFromFile(MultipartFile multipartFile,String projectid) throws Exception;
ArrayList<HuzhouPlaninfoOV> getPlanInfoMainTimelineList(String projectid);
void saveOrModifyPlanUploadFile(MultipartFile[] files,String planinfoid,String type) throws IOException;
List<HuzhouPlaninfo> getListByProjectId(String projectid);
void removeByProjectId(String projectid);
List<HuzhouPlaninfo> getFinishListByProjectId(String projectid);
}

7
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouPlaninfofileService.java

@ -0,0 +1,7 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfofile;
public interface IHuzhouPlaninfofileService extends IService<HuzhouPlaninfofile> {
}

4
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouProcessinfoService.java

@ -4,6 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.huzhou.entity.HuzhouProcessinfo;
import org.springframework.stereotype.Service;
import java.util.List;
public interface IHuzhouProcessinfoService extends IService<HuzhouProcessinfo> {
void callBack(String processId,String flag);
void modifyStatusByProjectId(String projectid,String status,String stage);
List<HuzhouProcessinfo> getListByInstid(String processInstanceId);
}

14
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouProjectinfoHistoryService.java

@ -0,0 +1,14 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
import org.springframework.web.bind.annotation.RequestParam;
public interface IHuzhouProjectinfoHistoryService extends IService<HuzhouProjectinfoHistory> {
void saveFromProject(HuzhouProjectinfo projectinfo);
Page<HuzhouProjectinfo> getProjectInfoHistoryPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize);
Page<HuzhouProjectinfoHistory> getSingleProjectInfoHistoryPageList(HuzhouProjectinfoHistory history, Integer pageNo, Integer pageSize);
}

5
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouProjectinfoService.java

@ -1,8 +1,10 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
/**
@ -13,4 +15,7 @@ import org.springframework.stereotype.Service;
*/
public interface IHuzhouProjectinfoService extends IService<HuzhouProjectinfo>{
// void submitProject(HuzhouProjectinfo info);
void modifyStageById(String id,String stage);
IPage<HuzhouProjectinfo> getProjectInfoPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize);
}

7
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouUploadfileinfoService.java

@ -1,10 +1,13 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.huzhou.entity.HuzhouUploadfileinfo;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List;
/**
* (HuzhouUploadfileinfo)表服务接口
@ -13,5 +16,7 @@ import java.io.IOException;
* @since 2024-01-29 14:21:06
*/
public interface IHuzhouUploadfileinfoService extends IService<HuzhouUploadfileinfo> {
void modifyUploadFile(MultipartFile[] files, String projectid, String status) throws IOException;
void modifyUploadFile(MultipartFile[] files, String projectid, String stage) throws IOException;
void saveFileAndFileInfo(MultipartFile[] files,String projectid) throws IOException;
IPage<HuzhouUploadfileinfo> getuploacFilePageList(HuzhouUploadfileinfo uploadfileinfo, Integer pageNo, Integer pageSize);
}

4
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IHuzhouUserprojectService.java

@ -1,6 +1,7 @@
package org.jeecg.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouUserproject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
@ -13,5 +14,6 @@ import org.springframework.data.domain.PageRequest;
*/
public interface IHuzhouUserprojectService extends IService<HuzhouUserproject> {
void saveFromProject(HuzhouProjectinfo projectinfo);
void removeByProjectId(String projectId);
}

2
huzhou/src/main/java/org/jeecg/modules/huzhou/service/IWorkflowService.java

@ -7,5 +7,5 @@ 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);
WorkFlow approveProjectInfo(String taskId,String flag,String comment,String stage);
}

94
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouPlaninfoHistoryServiceImpl.java

@ -0,0 +1,94 @@
package org.jeecg.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfoHistory;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
import org.jeecg.modules.huzhou.mapper.HuzhouPlaninfoHistoryMapper;
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfoHistoryService;
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfoService;
import org.jeecg.modules.huzhou.vo.HuzhouPlaninfoOV;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class HuzhouPlaninfoHistoryServiceImpl extends ServiceImpl<HuzhouPlaninfoHistoryMapper, HuzhouPlaninfoHistory> implements IHuzhouPlaninfoHistoryService {
@Autowired
private IHuzhouPlaninfoService planinfoService;
@Autowired
private HuzhouPlaninfoHistoryMapper planinfoHistoryMapper;
@Override
public void savePlanInfoToHistory(String projectid) {
List<HuzhouPlaninfo> planinfoHistory = planinfoService.getListByProjectId(projectid);
List<HuzhouPlaninfoHistory> planinfoHistorylist = Lists.transform(planinfoHistory, entity->{
HuzhouPlaninfoHistory huzhouPlaninfoHistory = new HuzhouPlaninfoHistory();
BeanUtils.copyProperties(entity,huzhouPlaninfoHistory);
huzhouPlaninfoHistory.setId(null);
huzhouPlaninfoHistory.setCreatetime(null);
return huzhouPlaninfoHistory;
});
this.saveBatch(planinfoHistorylist);
}
@Override
public Page<HuzhouProjectinfo> getPlanInfoHistoryPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) {
Page<HuzhouProjectinfo> projectinfoPage = new Page<>(pageNo, pageSize);
Page<HuzhouProjectinfo> pageList = planinfoHistoryMapper.getPlanInfoHistoryPageList(projectinfoPage, projectinfo);
return pageList;
}
@Override
public Page<HuzhouPlaninfoHistory> getSinglePlanInfoHistoryPageList(String projectid, Integer pageNo, Integer pageSize) {
Page<HuzhouProjectinfoHistory> page = new Page<>(pageNo, pageSize);
Page<HuzhouPlaninfoHistory> pageList = planinfoHistoryMapper.getSinglePlanInfoHistoryPageList(page, projectid);
return pageList;
}
@Override
public ArrayList<HuzhouPlaninfoOV> queryPlanInfoHistoryGroupList(HuzhouPlaninfoHistory planinfoHistory) {
String projectId = planinfoHistory.getProjectId();
String groupId = planinfoHistory.getGroupId();
LambdaQueryWrapper<HuzhouPlaninfoHistory> planinfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfoHistory::getProjectId,projectId);
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfoHistory::getSuperior,"0");
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfoHistory::getGroupId,groupId);
List<HuzhouPlaninfoHistory> historyList = this.list(planinfoLambdaQueryWrapper);
ArrayList<HuzhouPlaninfoOV> mapArrayList = new ArrayList<>();
for (HuzhouPlaninfo info:historyList) {
// String json = JSON.toJSONString(info);
// HashMap<String, Object> map = JSON.parseObject(json, HashMap.class);
HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV();
BeanUtils.copyProperties(info,huzhouPlaninfoOV);
HuzhouPlaninfoOV setchilddata = setchild(huzhouPlaninfoOV);
mapArrayList.add(setchilddata);
}
return mapArrayList;
}
private HuzhouPlaninfoOV setchild(HuzhouPlaninfoOV planinfoOV){
ArrayList<HuzhouPlaninfoOV> mapArrayList = new ArrayList<>();
String taskLevel = planinfoOV.getTaskLevel();
LambdaQueryWrapper<HuzhouPlaninfoHistory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfoHistory::getSuperior,taskLevel);
queryWrapper.eq(HuzhouPlaninfoHistory::getProjectId,planinfoOV.getProjectId());
queryWrapper.eq(HuzhouPlaninfoHistory::getGroupId,planinfoOV.getGroupId());
List<HuzhouPlaninfoHistory> historyList = this.list(queryWrapper);
if(historyList.size()!=0){
for(HuzhouPlaninfo childInfo:historyList){
HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV();
BeanUtils.copyProperties(childInfo,huzhouPlaninfoOV);
HuzhouPlaninfoOV setchildmap = setchild(huzhouPlaninfoOV);
mapArrayList.add(setchildmap);
}
planinfoOV.setChildren(mapArrayList);
}
return planinfoOV;
}
}

344
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java

@ -1,13 +1,39 @@
package org.jeecg.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.util.CommonUtils;
import org.jeecg.modules.huzhou.common.HuzhouCommonUtils;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfofile;
import org.jeecg.modules.huzhou.mapper.HuzhouPlaninfoMapper;
import org.jeecg.modules.huzhou.mapper.HuzhouPlaninfofileMapper;
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfoService;
import org.jeecg.modules.huzhou.vo.HuzhouPlaninfoOV;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
/**
* (HuzhouPlaninfo)表服务实现类
@ -17,4 +43,322 @@ import javax.annotation.Resource;
*/
@Service
public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,HuzhouPlaninfo> implements IHuzhouPlaninfoService {
@Value(value = "${jeecg.path.upload}")
private String uploadpath;
@Autowired
private HuzhouPlaninfofileMapper planinfofileMapper;
@Override
public HashMap<String,Object> getPlanInfoListFromFile(MultipartFile multipartFile,String projectid) throws Exception {
HashMap<String, Object> resHashMap = new HashMap<>();
if (multipartFile == null && multipartFile.getSize() == 0) {
resHashMap.put("res",false);
resHashMap.put("msg","文件上传错误,重新上传");
return resHashMap;
}
//获取文件名称 判断文件是否为 Execl
String filename = multipartFile.getOriginalFilename();
if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
resHashMap.put("res",false);
resHashMap.put("msg","文件上传格式有误,请重新上传");
return resHashMap;
}
InputStream inputStream = multipartFile.getInputStream();
Workbook workbook = null;
if (filename.endsWith(".xlsx")) {
workbook = new XSSFWorkbook(inputStream);
} else {
workbook = new HSSFWorkbook(inputStream);
}
Sheet sheet = workbook.getSheetAt(0);
ArrayList<HuzhouPlaninfo> huzhouPlaninfoArrayList = new ArrayList<>();
String uuid = UUID.randomUUID().toString();
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
HashMap<String, String> NameMap = new HashMap<String, String>();
HashMap<String, String> chineseNameMap = new HashMap<String, String>();
Row titlerow = sheet.getRow(0);
Row chineseTitlerow = sheet.getRow(1);
int cellNum = 5;
//获取字段名称
for (int i = 0; i < cellNum; i++) {
NameMap.put(String.valueOf(i),titlerow.getCell(i).getStringCellValue());
}
for (int i = 1; i < cellNum; i++) {
chineseNameMap.put(String.valueOf(i),chineseTitlerow.getCell(i).getStringCellValue());
}
for (int i = 2; i < physicalNumberOfRows; i++) {
Row row = sheet.getRow(i);
HuzhouPlaninfo huzhouPlaninfo = new HuzhouPlaninfo();
for (int j = 0; j < cellNum; j++) {
String value = "";
if(row.getCell(j)!=null){
int code = row.getCell(j).getCellType().getCode();
Cell cell = row.getCell(j);
if(CellType.NUMERIC.getCode() == code){
double cellValue = row.getCell(j).getNumericCellValue();
value=realStringValueOfDouble(cellValue);
}else
{
row.getCell(j).setCellType(CellType.STRING);
value = row.getCell(j).getStringCellValue();
}
}
if(value==null||value.length()==0){
String s = chineseNameMap.get(String.valueOf(j));
resHashMap.put("res",false);
resHashMap.put("msg","第"+(i+1)+"行,"+s+",不能为空");
return resHashMap;
}
String name = NameMap.get(String.valueOf(j));
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
if("scheduledEndTime".equals(name)){
try {
Date date = null;
if(value==null){
continue;
}
Cell cell = row.getCell(j);
if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
SimpleDateFormat sdf = null;
// 验证short值
if (cell.getCellStyle().getDataFormat() == 14) {
sdf = new SimpleDateFormat("yyyy/MM/dd");
} else if (cell.getCellStyle().getDataFormat() == 21) {
sdf = new SimpleDateFormat("HH:mm:ss");
} else if (cell.getCellStyle().getDataFormat() == 22) {
sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
} else {
String s = chineseNameMap.get(String.valueOf(j));
resHashMap.put("res",false);
resHashMap.put("msg","第"+(i+1)+"行,"+s+",日期格错误【yyyy-MM-dd】");
return resHashMap;
}
date = cell.getDateCellValue();
}else{
date = dateFormat.parse(value);
}
huzhouPlaninfo.setScheduledEndTime(date);
}catch (Exception e){
String s = chineseNameMap.get(String.valueOf(j));
resHashMap.put("res",false);
resHashMap.put("msg","第"+(i+1)+"行,"+s+",日期格错误【yyyy-MM-dd】");
return resHashMap;
}
}else if("scheduledStartTime".equals(name)){
try{
Date date = null;
if(value==null){
continue;
}
Cell cell = row.getCell(j);
if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
SimpleDateFormat sdf = null;
// 验证short值
if (cell.getCellStyle().getDataFormat() == 14) {
sdf = new SimpleDateFormat("yyyy/MM/dd");
} else if (cell.getCellStyle().getDataFormat() == 21) {
sdf = new SimpleDateFormat("HH:mm:ss");
} else if (cell.getCellStyle().getDataFormat() == 22) {
sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
} else {
String s = chineseNameMap.get(String.valueOf(j));
resHashMap.put("res",false);
resHashMap.put("msg","第"+(i+1)+"行,"+s+",日期格错误【yyyy-MM-dd】");
return resHashMap;
}
date = cell.getDateCellValue();
}else{
date = dateFormat.parse(value);
}
huzhouPlaninfo.setScheduledStartTime(date);
}catch (Exception e){
String s = chineseNameMap.get(String.valueOf(j));
resHashMap.put("res",false);
resHashMap.put("msg","第"+(i+1)+"行,"+s+",日期格错误【yyyy-MM-dd】");
return resHashMap;
}
}else {
HuzhouCommonUtils.setObjectAttributes(huzhouPlaninfo,name,value);
}
if(value!=null&&"taskLevel".equals(name)){
int index = value.lastIndexOf(".");
if(index!=-1){
String substring = value.substring(0, index);
HuzhouCommonUtils.setObjectAttributes(huzhouPlaninfo,"superior",substring);
}else {
HuzhouCommonUtils.setObjectAttributes(huzhouPlaninfo,"superior","0");
}
}
}
huzhouPlaninfo.setProjectId(projectid);
huzhouPlaninfo.setGroupId(uuid);
huzhouPlaninfo.setIsfinish("0");
huzhouPlaninfoArrayList.add(huzhouPlaninfo);
}
resHashMap.put("res",true);
resHashMap.put("arr",huzhouPlaninfoArrayList);
return resHashMap;
}
@Override
public ArrayList<HuzhouPlaninfoOV> getPlanInfoMainTimelineList(String projectid) {
LambdaQueryWrapper<HuzhouPlaninfo> planinfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getSuperior,"0");
List<HuzhouPlaninfo> huzhouPlaninfoList = this.list(planinfoLambdaQueryWrapper);
ArrayList<HuzhouPlaninfoOV> mapArrayList = new ArrayList<>();
for (HuzhouPlaninfo info:huzhouPlaninfoList) {
// String json = JSON.toJSONString(info);
// HashMap<String, Object> map = JSON.parseObject(json, HashMap.class);
HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV();
BeanUtils.copyProperties(info,huzhouPlaninfoOV);
HuzhouPlaninfoOV setchilddata = setchild(huzhouPlaninfoOV);
String taskLevel = info.getTaskLevel();
//查询任务整体进度情况
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.likeRight(HuzhouPlaninfo::getTaskLevel,taskLevel);
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
//所有:所有下级还要加他自己
long count = this.count(queryWrapper);
//查询完成的数量
queryWrapper.eq(HuzhouPlaninfo::getIsfinish,"1");
long finishCount = this.count(queryWrapper);
BigDecimal a = new BigDecimal(count);
BigDecimal b = new BigDecimal(finishCount);
String percent = b.divide(a, 2, BigDecimal.ROUND_HALF_UP).toString();
if("0.00".equals(percent)){
percent="0";
}else if("1.00".equals(percent)){
percent="1";
}
percent = percent.substring(percent.indexOf(".")+1);
setchilddata.setPercent(percent);
if(setchilddata.getScheduledEndTime().getTime()<new Date().getTime()){
setchilddata.setProgressStatus("exception");
}
mapArrayList.add(setchilddata);
}
return mapArrayList;
}
/**
* 保存或修改任务计划期间上传的文化
* @param files
* @param planinfoid
* @param type 类型1 新增2修改
*/
@Override
public void saveOrModifyPlanUploadFile(MultipartFile[] files, String planinfoid, String type) throws IOException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String currentDay = dateFormat.format(new Date());
File filePath = new File(uploadpath +File.separator+"planinfoFile"+ 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);//保存文件
if("2".equals(type)){
//修改以前记录为作废
LambdaUpdateWrapper<HuzhouPlaninfofile> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(HuzhouPlaninfofile::getPlaninfoid,planinfoid);
updateWrapper.eq(HuzhouPlaninfofile::getDocumentName,originalFilename);
updateWrapper.set(HuzhouPlaninfofile::getStatus,"0");
planinfofileMapper.update(null,updateWrapper);
}
HuzhouPlaninfofile huzhouUploadfileinfo = new HuzhouPlaninfofile();
huzhouUploadfileinfo.setDocumentName(originalFilename);//未加工过的文件名称
huzhouUploadfileinfo.setDocumentType(item.getContentType());
huzhouUploadfileinfo.setDocumentPath(savePath);
huzhouUploadfileinfo.setSize(item.getSize());
huzhouUploadfileinfo.setPlaninfoid(planinfoid);
huzhouUploadfileinfo.setStatus("1");
planinfofileMapper.insert(huzhouUploadfileinfo);
}
HuzhouPlaninfo huzhouPlaninfo = new HuzhouPlaninfo();
huzhouPlaninfo.setId(planinfoid);
huzhouPlaninfo.setIsfinish("1");
huzhouPlaninfo.setActualEndTime(new Date());
this.updateById(huzhouPlaninfo);
}
@Override
public List<HuzhouPlaninfo> getListByProjectId(String projectid) {
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
List<HuzhouPlaninfo> huzhouPlaninfoList = this.list(queryWrapper);
return huzhouPlaninfoList;
}
@Override
public void removeByProjectId(String projectid) {
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
queryWrapper.eq(HuzhouPlaninfo::getIsfinish,"0");
this.remove(queryWrapper);
}
@Override
public List<HuzhouPlaninfo> getFinishListByProjectId(String projectid) {
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
queryWrapper.eq(HuzhouPlaninfo::getIsfinish,"1");
List<HuzhouPlaninfo> huzhouPlaninfoList = this.list(queryWrapper);
return huzhouPlaninfoList;
}
private HuzhouPlaninfoOV setchild(HuzhouPlaninfoOV planinfoOV){
ArrayList<HuzhouPlaninfoOV> mapArrayList = new ArrayList<>();
String taskLevel = planinfoOV.getTaskLevel();
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfo::getSuperior,taskLevel.toString());
queryWrapper.eq(HuzhouPlaninfo::getProjectId,planinfoOV.getProjectId());
List<HuzhouPlaninfo> huzhouPlaninfoList = this.list(queryWrapper);
if(huzhouPlaninfoList.size()!=0){
for(HuzhouPlaninfo childInfo:huzhouPlaninfoList){
HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV();
BeanUtils.copyProperties(childInfo,huzhouPlaninfoOV);
HuzhouPlaninfoOV setchildmap = setchild(huzhouPlaninfoOV);
mapArrayList.add(setchildmap);
}
planinfoOV.setChildren(mapArrayList);
}
return planinfoOV;
}
public static String realStringValueOfDouble(Double d) {
String doubleStr = d.toString();
boolean b = doubleStr.contains("E");
int indexOfPoint = doubleStr.indexOf('.');
if (b) {
int indexOfE = doubleStr.indexOf('E');
BigInteger xs = new BigInteger(doubleStr.substring(indexOfPoint + BigInteger.ONE.intValue(), indexOfE));
int pow = Integer.parseInt(doubleStr.substring(indexOfE + BigInteger.ONE.intValue()));
int xsLen = xs.toByteArray().length;
int scale = xsLen - pow > 0 ? xsLen - pow : 0;
final String format = "%." + scale + "f";
doubleStr = String.format(format, d);
} else {
java.util.regex.Pattern p = Pattern.compile(".0$");
java.util.regex.Matcher m = p.matcher(doubleStr);
if (m.find()) {
doubleStr = doubleStr.replace(".0", "");
}
}
return doubleStr;
}
}

11
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java

@ -0,0 +1,11 @@
package org.jeecg.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfofile;
import org.jeecg.modules.huzhou.mapper.HuzhouPlaninfofileMapper;
import org.jeecg.modules.huzhou.service.IHuzhouPlaninfofileService;
import org.springframework.stereotype.Service;
@Service
public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofileMapper, HuzhouPlaninfofile> implements IHuzhouPlaninfofileService {
}

25
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouProcessinfoServiceImpl.java

@ -1,5 +1,7 @@
package org.jeecg.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowNode;
@ -162,4 +164,27 @@ public class HuzhouProcessinfoServiceImpl extends ServiceImpl<HuzhouProcessinfoM
//恢复原方向
flowNode.setOutgoingFlows(oriSequenceFlows);
}
/**
* 修改项目流程在流程表中的状态
* @param projectid 项目id
* @param status 状态
* @param stage 阶段
*/
@Override
public void modifyStatusByProjectId(String projectid, String status,String stage) {
LambdaUpdateWrapper<HuzhouProcessinfo> processinfoWrapper = new LambdaUpdateWrapper<>();
processinfoWrapper.eq(HuzhouProcessinfo::getProjectid,projectid);
processinfoWrapper.eq(HuzhouProcessinfo::getStage,stage);
processinfoWrapper.set(HuzhouProcessinfo::getProcessstatus,status);
this.update(processinfoWrapper);
}
@Override
public List<HuzhouProcessinfo> getListByInstid(String processInstanceId) {
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProcessinfo::getProcessinstanceid,processInstanceId);
List<HuzhouProcessinfo> processinfoList = this.list(queryWrapper);
return processinfoList;
}
}

58
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouProjectinfoHistoryServiceImpl.java

@ -0,0 +1,58 @@
package org.jeecg.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfoHistory;
import org.jeecg.modules.huzhou.mapper.HuzhouProjectinfoHistoryMapper;
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoHistoryService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class HuzhouProjectinfoHistoryServiceImpl extends ServiceImpl<HuzhouProjectinfoHistoryMapper, HuzhouProjectinfoHistory> implements IHuzhouProjectinfoHistoryService {
@Autowired
private HuzhouProjectinfoHistoryMapper historyMapper;
@Override
public void saveFromProject(HuzhouProjectinfo projectinfo) {
HuzhouProjectinfoHistory history = new HuzhouProjectinfoHistory();
BeanUtils.copyProperties(projectinfo,history);
history.setProjectId(projectinfo.getId());
history.setId(null);
history.setCreatetime(null);
this.save(history);
}
/**
* 获取有历史记录的项目的分页信息
* @param projectinfo 项目信息
* @param pageNo 起始页
* @param pageSize 每页数
* @return
*/
@Override
public Page<HuzhouProjectinfo> getProjectInfoHistoryPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) {
Page<HuzhouProjectinfo> projectinfoPage = new Page<>(pageNo,pageSize);
Page<HuzhouProjectinfo> historyPageList = historyMapper.getProjectInfoHistoryPageList(projectinfoPage,projectinfo);
return historyPageList;
}
/**
* 根据当前项目id获取当前项目的历史记录分页信息
* @param history 项目信息
* @param pageNo
* @param pageSize
* @return
*/
@Override
public Page<HuzhouProjectinfoHistory> getSingleProjectInfoHistoryPageList(HuzhouProjectinfoHistory history, Integer pageNo, Integer pageSize) {
Page<HuzhouProjectinfoHistory> projectinfoPage = new Page<>(pageNo,pageSize);
LambdaQueryWrapper<HuzhouProjectinfoHistory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProjectinfoHistory::getProjectId,history.getProjectId());
Page<HuzhouProjectinfoHistory> historyPage = this.page(projectinfoPage, queryWrapper);
return historyPage;
}
}

29
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

@ -1,6 +1,13 @@
package org.jeecg.modules.huzhou.service.impl;
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.jeecg.modules.huzhou.entity.BaseEntity;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.mapper.HuzhouProjectinfoMapper;
import org.jeecg.modules.huzhou.service.IHuzhouProjectinfoService;
@ -11,4 +18,26 @@ import org.springframework.stereotype.Service;
public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoMapper, HuzhouProjectinfo>
implements IHuzhouProjectinfoService {
@Override
public void modifyStageById(String id, String stage) {
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(HuzhouProjectinfo::getId,id);
updateWrapper.set(HuzhouProjectinfo::getStage,stage);
this.update(updateWrapper);
}
@Override
public IPage<HuzhouProjectinfo> getProjectInfoPageList(HuzhouProjectinfo projectinfo, Integer pageNo, Integer pageSize) {
IPage page = new Page(pageNo, pageSize);
LambdaQueryWrapper<HuzhouProjectinfo> huzhouProjectinfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
String projectName = projectinfo.getProjectName();
String projectId =projectinfo.getId();
String stage = projectinfo.getStage();
huzhouProjectinfoLambdaQueryWrapper.like(StringUtils.isNotBlank(projectName),HuzhouProjectinfo::getProjectName,projectName);
huzhouProjectinfoLambdaQueryWrapper.like(StringUtils.isNotBlank(projectId),HuzhouProjectinfo::getId,projectId);
huzhouProjectinfoLambdaQueryWrapper.ge(StringUtils.isNotBlank(stage),HuzhouProjectinfo::getStage,stage);
huzhouProjectinfoLambdaQueryWrapper.orderByDesc(BaseEntity::getCreatetime);
IPage pageList = this.page(page, huzhouProjectinfoLambdaQueryWrapper);
return pageList;
}
}

68
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouUploadfileinfoServiceImpl.java

@ -2,6 +2,9 @@ package org.jeecg.modules.huzhou.service.impl;
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.SymbolConstant;
@ -30,17 +33,12 @@ import java.util.List;
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<>();
public void modifyUploadFile(MultipartFile[] files, String projectid, String stage) throws IOException {
LambdaUpdateWrapper<HuzhouUploadfileinfo> queryWrapper = new LambdaUpdateWrapper<>();
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);
queryWrapper.eq(HuzhouUploadfileinfo::getStage,stage);
queryWrapper.set(HuzhouUploadfileinfo::getStatus,"0");
this.update(queryWrapper);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String currentDay = dateFormat.format(new Date());
File filePath = new File(uploadpath + File.separator + currentDay + File.separator);
@ -65,11 +63,59 @@ public class HuzhouUploadfileinfoServiceImpl extends ServiceImpl<HuzhouUploadfil
huzhouUploadfileinfo.setDocumentName(originalFilename);//未加工过的文件名称
huzhouUploadfileinfo.setDocumentType(item.getContentType());
huzhouUploadfileinfo.setDocumentPath(savePath);
huzhouUploadfileinfo.setStatus(status);
huzhouUploadfileinfo.setStage(stage);
huzhouUploadfileinfo.setStatus("1");
huzhouUploadfileinfo.setSize(item.getSize());
huzhouUploadfileinfo.setProjectid(projectid);
boolean save = this.save(huzhouUploadfileinfo);
}
}
@Override
public void saveFileAndFileInfo(MultipartFile[] files,String projectid) 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();
}
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("1");
huzhouUploadfileinfo.setStage("1");
huzhouUploadfileinfo.setSize(item.getSize());
huzhouUploadfileinfo.setProjectid(projectid);
this.save(huzhouUploadfileinfo);
}
}
@Override
public IPage<HuzhouUploadfileinfo> getuploacFilePageList(HuzhouUploadfileinfo uploadfileinfo, Integer pageNo, Integer pageSize) {
String projectid = uploadfileinfo.getProjectid();
String stage = uploadfileinfo.getStage();
IPage<HuzhouUploadfileinfo> huzhouUploadfileinfoIPage = new Page<>(pageNo,pageSize);
LambdaUpdateWrapper<HuzhouUploadfileinfo> huzhouUploadfileinfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
huzhouUploadfileinfoLambdaUpdateWrapper.eq(HuzhouUploadfileinfo::getProjectid,projectid);
huzhouUploadfileinfoLambdaUpdateWrapper.eq(HuzhouUploadfileinfo::getStage,stage);
IPage<HuzhouUploadfileinfo> uploadfileinfoIPage = this.page(huzhouUploadfileinfoIPage, huzhouUploadfileinfoLambdaUpdateWrapper);
return uploadfileinfoIPage;
}
}

27
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/HuzhouUserprojectServiceImpl.java

@ -1,6 +1,9 @@
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.modules.huzhou.common.HuzhouCommonUtils;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.jeecg.modules.huzhou.entity.HuzhouUserproject;
import org.jeecg.modules.huzhou.mapper.HuzhouUserprojectMapper;
import org.jeecg.modules.huzhou.service.IHuzhouUserprojectService;
@ -10,6 +13,7 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import javax.annotation.Resource;
import java.util.List;
/**
* (HuzhouUserproject)表服务实现类
@ -19,5 +23,28 @@ import javax.annotation.Resource;
*/
@Service("huzhouUserprojectService")
public class HuzhouUserprojectServiceImpl extends ServiceImpl<HuzhouUserprojectMapper,HuzhouUserproject> implements IHuzhouUserprojectService {
/**
* 从project把人员信息提取并保存
* @param projectinfo 项目信息
*/
@Override
public void saveFromProject(HuzhouProjectinfo projectinfo) {
List<String> extractObjectAttributes = HuzhouCommonUtils.extractObjectAttributes(projectinfo);
for (String s:extractObjectAttributes) {
if(s.contains("Contactor")){
String userId = s.split("=")[1];
HuzhouUserproject huzhouUserproject = new HuzhouUserproject();
huzhouUserproject.setProjectId(projectinfo.getId());
huzhouUserproject.setUserId(userId);
this.save(huzhouUserproject);
}
}
}
@Override
public void removeByProjectId(String projectId) {
LambdaQueryWrapper<HuzhouUserproject> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouUserproject::getProjectId,projectId);
boolean remove = this.remove(queryWrapper);
}
}

8
huzhou/src/main/java/org/jeecg/modules/huzhou/service/impl/WorkflowServiceImpl.java

@ -76,7 +76,7 @@ public class WorkflowServiceImpl implements IWorkflowService {
workFlow.setProcessInstanceId(processInstanceId);
return workFlow;
}
public WorkFlow approveProjectInfo(String taskId,String flag,String comment,String status){
public WorkFlow approveProjectInfo(String taskId,String flag,String comment,String stage){
LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = currentUser.getId();
// 获取当前任务
@ -101,7 +101,7 @@ public class WorkflowServiceImpl implements IWorkflowService {
return workFlow;
}
if("1".equals(status)){
if("1".equals(stage)){
if(!"管理单位审批".equals(userTask.getName())){
//搞到当前userTask的出处
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
@ -131,7 +131,7 @@ public class WorkflowServiceImpl implements IWorkflowService {
}
}
}
}else if("2".equals(status)){
}else if("2".equals(stage)){
if(!"流程审批二".equals(userTask.getName())){
//搞到当前userTask的出处
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
@ -161,7 +161,7 @@ public class WorkflowServiceImpl implements IWorkflowService {
}
}
}
}else if("3".equals(status)){
}else if("3".equals(stage)){
if(!"计划审批二".equals(userTask.getName())){
//搞到当前userTask的出处
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();

22
huzhou/src/main/java/org/jeecg/modules/huzhou/vo/HuzhouPlaninfoOV.java

@ -0,0 +1,22 @@
package org.jeecg.modules.huzhou.vo;
import lombok.Data;
import org.jeecg.modules.huzhou.entity.HuzhouPlaninfo;
import java.util.List;
@Data
public class HuzhouPlaninfoOV extends HuzhouPlaninfo {
private List<HuzhouPlaninfoOV> children;
/**
* 项目进度
*/
private String percent;
/**
* 图标状态
*/
private String progressStatus;
/**
* 任务完成节点
*/
private String status;
}

7
huzhou/src/main/java/org/jeecg/modules/huzhou/vo/ProjectApproveOV.java

@ -3,15 +3,18 @@ package org.jeecg.modules.huzhou.vo;
import lombok.Data;
import org.jeecg.modules.huzhou.entity.HuzhouProjectinfo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Data
public class ProjectApproveOV {
private String taskId;
private String flag;
private String comment;
private String projectid;
private String status;
private String stage;
private String isEdit;
private HuzhouProjectinfo projectInfo;
private MultipartFile[] file;
private List<HuzhouProjectinfo> projectArr;
}

BIN
huzhou/src/main/resources/项目入库模板.xlsx

Binary file not shown.

BIN
huzhou/src/main/resources/项目计划模板.xlsx

Binary file not shown.

2
jeecg-module-system/jeecg-system-start/src/main/resources/application.yml

@ -2,4 +2,4 @@ spring:
application:
name: 湖州市公立医院改革与高质量发展项目管理平台
profiles:
active: '@profile.name@'
active: dev

38
jeecg-module-system/jeecg-system-start/src/main/resources/process/项目资料审批流程.bpmn20.xml

@ -0,0 +1,38 @@
<?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-a344dc27-4730-42ab-b5b7-45b68676229b"/>
<userTask id="sid-f7615632-11a4-42e3-95fc-90ec1ecaebf2" name="发起人" activiti:assignee="${start}"/>
<userTask id="sid-bc5bb0f9-6c54-46ae-b14e-7e54058126b9" name="管理人员" activiti:candidateUsers="${users}"/>
<sequenceFlow id="sid-e76b4e53-1304-48f7-b058-59c267d36aad" sourceRef="sid-a344dc27-4730-42ab-b5b7-45b68676229b" targetRef="sid-f7615632-11a4-42e3-95fc-90ec1ecaebf2"/>
<sequenceFlow id="sid-e9d5b67b-8e81-4e5e-a092-2e84ff5f504d" sourceRef="sid-f7615632-11a4-42e3-95fc-90ec1ecaebf2" targetRef="sid-bc5bb0f9-6c54-46ae-b14e-7e54058126b9"/>
<sequenceFlow id="sid-73cb4983-d2c0-4552-a201-04c2225f4fe0" sourceRef="sid-bc5bb0f9-6c54-46ae-b14e-7e54058126b9" targetRef="sid-f7615632-11a4-42e3-95fc-90ec1ecaebf2">
<conditionExpression>${type==0}</conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_项目资料审批流程">
<bpmndi:BPMNPlane bpmnElement="项目资料审批流程" id="BPMNPlane_项目资料审批流程">
<bpmndi:BPMNShape id="shape-a51486a0-95c2-4072-a5d2-bc5fc5a9465f" bpmnElement="sid-a344dc27-4730-42ab-b5b7-45b68676229b">
<omgdc:Bounds x="-25.0" y="-10.0" width="30.0" height="30.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-9cac8723-3b85-4529-a9b2-ffd2d91220ea" bpmnElement="sid-f7615632-11a4-42e3-95fc-90ec1ecaebf2">
<omgdc:Bounds x="50.0" y="-35.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="shape-4a1d2caf-461f-4d3e-b038-1a54bcff1809" bpmnElement="sid-bc5bb0f9-6c54-46ae-b14e-7e54058126b9">
<omgdc:Bounds x="220.0" y="-35.0" width="100.0" height="80.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="edge-ec34600d-b649-4260-a507-3fc1a7cdf79f" bpmnElement="sid-e76b4e53-1304-48f7-b058-59c267d36aad">
<omgdi:waypoint x="5.0" y="5.0"/>
<omgdi:waypoint x="50.0" y="5.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-1b7ca38d-7392-4e70-8b0c-0aad91d0b2e4" bpmnElement="sid-e9d5b67b-8e81-4e5e-a092-2e84ff5f504d">
<omgdi:waypoint x="150.0" y="5.0"/>
<omgdi:waypoint x="220.0" y="5.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="edge-a7d8998e-1d9d-4616-a43b-470d0ead556d" bpmnElement="sid-73cb4983-d2c0-4552-a201-04c2225f4fe0">
<omgdi:waypoint x="220.0" y="-15.0"/>
<omgdi:waypoint x="150.0" y="-15.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

6
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/message/test/SendMessageTest.java

@ -64,9 +64,9 @@ public class SendMessageTest {
public void createproess(){
Deployment deployment = repositoryService
.createDeployment()
.addClasspathResource("process/项目计划审批流程.bpmn20.xml")
.addClasspathResource("process/项目计划审批流程.png")
.name("项目资料上传流程")
.addClasspathResource("process/项目资料审批流程.bpmn20.xml")
.addClasspathResource("process/项目资料审批流程.png")
.name("项目资料审批流程")
.deploy();
System.out.println("deployment.getId() = " + deployment.getId());
System.out.println("deployment.getName() = " + deployment.getName());

7
pom.xml

@ -417,6 +417,7 @@
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!-- 避免font文件的二进制文件格式压缩破坏 -->
<plugin>
@ -430,7 +431,10 @@
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
</nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
@ -445,6 +449,7 @@
<include>**/*.xml</include>
<include>**/*.json</include>
<include>**/*.ftl</include>
<include>*.xlsx</include>
</includes>
</resource>
</resources>

Loading…
Cancel
Save