diff --git a/Resources/项目入库模板.xlsx b/Resources/项目入库模板.xlsx
new file mode 100644
index 0000000..eddf676
Binary files /dev/null and b/Resources/项目入库模板.xlsx differ
diff --git a/huzhou/pom.xml b/huzhou/pom.xml
index c3c8cd5..19970b6 100644
--- a/huzhou/pom.xml
+++ b/huzhou/pom.xml
@@ -32,6 +32,12 @@
+
+ org.bouncycastle
+ bcprov-jdk15on
+ 1.68
+ compile
+
diff --git a/huzhou/src/main/java/org/jeecg/modules/huzhou/common/HuzhouCommonUtils.java b/huzhou/src/main/java/org/jeecg/modules/huzhou/common/HuzhouCommonUtils.java
index 3ab14a3..b2a7a67 100644
--- a/huzhou/src/main/java/org/jeecg/modules/huzhou/common/HuzhouCommonUtils.java
+++ b/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 extractObjectAttributes(Object user) {
+ /**
+ * 获取实体类的值
+ * @param object
+ * @return
+ */
+ public static List extractObjectAttributes(Object object) {
List 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();
+// }
+// }
+ }
}
diff --git a/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlanController.java b/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlanController.java
index 3b32ac2..7719bd5 100644
--- a/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlanController.java
+++ b/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> queryPlanModulePage(HuzhouPlanmodule planmodule,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
- @RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
- LambdaQueryWrapper 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 planmodulePage = new Page<>(pageNo,pageSize);
-
- Page 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 queryPlanModuleByid(HuzhouPlanmodule planmodule){
- LambdaQueryWrapper 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 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 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> queryPlanModuleDetailPage(HuzhouPlanmoduledetail planmoduledetail){
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- String moduleId = planmoduledetail.getModuleId();
- queryWrapper.eq(StringUtils.isNotBlank(moduleId), HuzhouPlanmoduledetail::getModuleId,moduleId);
- List list = planmoduledetailService.list(queryWrapper);
- return Result.OK(list);
- }
- @PostMapping("/savePlanModuleDatail")
- public Result> savePlanModuleDatail(@RequestBody() List planmoduledetails){
- //先删除后增加
- String moduleId = planmoduledetails.get(0).getModuleId();
- LambdaQueryWrapper 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 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 hashMap = planinfoService.getPlanInfoListFromFile(multipartFile, projectid);
+ boolean res = (boolean) hashMap.get("res");
+ if(!res){
+ return Result.error((String)hashMap.get("msg"));
}
+ ArrayList huzhouPlaninfoArrayList = (ArrayList) hashMap.get("arr");
+// int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
+// HashMap NameMap = new HashMap();
+// HashMap chineseNameMap = new HashMap();
+//
+// 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 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 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> queryProjectPlan(HuzhouPlaninfo planinfo){
- String projectId = planinfo.getProjectId();
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(StringUtils.isNotBlank(projectId),HuzhouPlaninfo::getProjectId,projectId);
- queryWrapper.orderByAsc(HuzhouPlaninfo::getOrderNumber);
- List 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 hashMap = planinfoService.getPlanInfoListFromFile(file, projectid);
+ boolean res = (boolean) hashMap.get("res");
+ if(!res){
+ return Result.error((String)hashMap.get("msg"));
+ }
+ ArrayList huzhouPlaninfoArrayList = (ArrayList) 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 hashMap = planinfoService.getPlanInfoListFromFile(multipartFile, projectid);
+ boolean res = (boolean) hashMap.get("res");
+ if(!res){
+ return Result.error((String)hashMap.get("msg"));
+ }
+ ArrayList huzhouPlaninfoArrayList = (ArrayList) hashMap.get("arr");
+ List 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 queryPlanInfoMainTimeline(String projectid){
+ ArrayList 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 lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(HuzhouPlaninfofile::getPlaninfoid,planinfoid);
+ lambdaQueryWrapper.orderByDesc(BaseEntity::getCreatetime);
+ Page page = new Page<>(pageNo, pageSize);
+ Page planinfofilePage = planinfofileService.page(page, lambdaQueryWrapper);
+ return Result.ok(planinfofilePage);
+ }
+
}
diff --git a/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlaninfoHistoryController.java b/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouPlaninfoHistoryController.java
new file mode 100644
index 0000000..5d37eb5
--- /dev/null
+++ b/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 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 historyPageList = planinfoHistoryService.getSinglePlanInfoHistoryPageList(projectId, pageNo, pageSize);
+ return Result.OK(historyPageList);
+ }
+ @GetMapping("/queryPlanInfoHistoryGroupList")
+ public Result> queryPlanInfoHistoryGroupList(HuzhouPlaninfoHistory planinfoHistory){
+ //获取项目入库数据
+ ArrayList huzhouPlaninfoOVS = planinfoHistoryService.queryPlanInfoHistoryGroupList(planinfoHistory);
+ return Result.OK(huzhouPlaninfoOVS);
+
+ }
+}
diff --git a/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectController.java b/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectController.java
index 518cf0e..95960cb 100644
--- a/huzhou/src/main/java/org/jeecg/modules/huzhou/controller/HuzhouProjectController.java
+++ b/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 minio:minio 阿里:alioss
*/
@Value(value="${jeecg.uploadType}")
private String uploadType;
@PostMapping("/submitProject")
+ @Transactional
public Result 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 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 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 huzhouProjectinfos = new ArrayList<>();
+ int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
+ HashMap NameMap = new HashMap();
+ HashMap chineseNameMap = new HashMap();
+
+ 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 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 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 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 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 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
@@ -445,6 +449,7 @@
**/*.xml
**/*.json
**/*.ftl
+ *.xlsx