|
@@ -1,11 +1,16 @@
|
|
package com.management.platform.controller;
|
|
package com.management.platform.controller;
|
|
|
|
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.google.gson.JsonObject;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.entity.*;
|
|
import com.management.platform.mapper.ProjectMapper;
|
|
import com.management.platform.mapper.ProjectMapper;
|
|
import com.management.platform.mapper.UserMapper;
|
|
import com.management.platform.mapper.UserMapper;
|
|
import com.management.platform.service.*;
|
|
import com.management.platform.service.*;
|
|
|
|
+import com.management.platform.service.impl.WxCorpInfoServiceImpl;
|
|
import com.management.platform.util.HttpRespMsg;
|
|
import com.management.platform.util.HttpRespMsg;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -21,9 +26,8 @@ import javax.annotation.Resource;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Optional;
|
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -57,19 +61,11 @@ public class ProjectApprovalController {
|
|
@Resource
|
|
@Resource
|
|
private ProjectApprovalCheckService projectApprovalCheckService;
|
|
private ProjectApprovalCheckService projectApprovalCheckService;
|
|
@Resource
|
|
@Resource
|
|
- private ProjectService projectService;
|
|
|
|
- @Resource
|
|
|
|
- private ProjectBasecostService projectBasecostService;
|
|
|
|
- @Resource
|
|
|
|
- private ProjectAuditorService projectAuditorService;
|
|
|
|
- @Resource
|
|
|
|
- private ParticipationService participationService;
|
|
|
|
- @Resource
|
|
|
|
- private SysFunctionService sysFunctionService;
|
|
|
|
- @Resource
|
|
|
|
private ProjectApprovalLogService projectApprovalLogService;
|
|
private ProjectApprovalLogService projectApprovalLogService;
|
|
@Resource
|
|
@Resource
|
|
- private ReportService reportService;
|
|
|
|
|
|
+ private WxCorpInfoService wxCorpInfoService;
|
|
|
|
+ @Resource
|
|
|
|
+ private WxCorpTemplateService wxCorpTemplateService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 分页获取项目列表
|
|
* 分页获取项目列表
|
|
@@ -84,8 +80,9 @@ public class ProjectApprovalController {
|
|
|
|
|
|
@RequestMapping("/editProjectApproval")
|
|
@RequestMapping("/editProjectApproval")
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
- public HttpRespMsg editProjectApproval(@RequestBody ProjectApproval projectApproval) {
|
|
|
|
|
|
+ public HttpRespMsg editProjectApproval(@RequestBody ProjectApproval projectApproval) throws Exception {
|
|
HttpRespMsg msg=new HttpRespMsg();
|
|
HttpRespMsg msg=new HttpRespMsg();
|
|
|
|
+ String[] arr=new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
|
|
User user = userMapper.selectById(request.getHeader("token"));
|
|
User user = userMapper.selectById(request.getHeader("token"));
|
|
Integer companyId = user.getCompanyId();
|
|
Integer companyId = user.getCompanyId();
|
|
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
|
|
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
|
|
@@ -158,6 +155,78 @@ public class ProjectApprovalController {
|
|
}
|
|
}
|
|
if(projectApprovalCheckList.size()>0){
|
|
if(projectApprovalCheckList.size()>0){
|
|
projectApprovalCheckService.saveOrUpdateBatch(projectApprovalCheckList);
|
|
projectApprovalCheckService.saveOrUpdateBatch(projectApprovalCheckList);
|
|
|
|
+ //更新审核人 发送到企业微信完成审核动作
|
|
|
|
+ String detail = wxCorpInfoService.getTemplateDetail(request, 0);
|
|
|
|
+ if(detail!=null&&!StringUtils.isEmpty(detail)){
|
|
|
|
+ DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
+ JSONObject resultOb = JSONObject.parseObject(detail);
|
|
|
|
+ JSONObject template_content = resultOb.getJSONObject("template_content");
|
|
|
|
+ JSONArray controls = template_content.getJSONArray("controls");
|
|
|
|
+ Map<String,Object> templateMap=new HashMap<>();
|
|
|
|
+ WxCorpTemplate template = wxCorpTemplateService.getById(companyId);
|
|
|
|
+ JSONObject requestData=new JSONObject();
|
|
|
|
+ requestData.put("template_id",template.getTemplateId());
|
|
|
|
+ requestData.put("creator_userid",user.getCorpwxUserid());
|
|
|
|
+ //审核模式 0-通过接口指定审批人、抄送人(此时approver、notifyer等参数可用);1-使用此模板在管理后台设置的审批流程(需要保证审批流程中没有“申请人自选”节点),支持条件审批
|
|
|
|
+ requestData.put("use_template_approver",1);
|
|
|
|
+ JSONObject apply_data=new JSONObject();
|
|
|
|
+ JSONArray contents=new JSONArray();
|
|
|
|
+ for (int i = 0; i < controls.size(); i++) {
|
|
|
|
+ JSONObject item = controls.getJSONObject(i);
|
|
|
|
+ JSONObject property = item.getJSONObject("property");
|
|
|
|
+ //控件id指定到指定控件
|
|
|
|
+ String templateId = property.getString("id");
|
|
|
|
+ //控件名称 这里为了统一工时管家格式 限制企业需要用到我们提供的名称(项目编号 项目名称 项目分类 项目类型 项目经理 级别 合同金额 计划开始日期 计划结束日期)
|
|
|
|
+ String title = property.getString("title");
|
|
|
|
+ //控件类型 在这里统一用Text Text-文本;Textarea-多行文本;Number-数字;Money-金额;Date-日期/日期+时间;Selector-单选/多选;Contact-成员/部门;Tips-说明文字;File-附件;Table-明细;Attendance-假勤控件;Vacation-请假控件;Location-位置;RelatedApproval-关联审批单;Formula-公式;DateRange-时长;BankAccount-收款账户
|
|
|
|
+ String control = property.getString("control");
|
|
|
|
+ //是否必填
|
|
|
|
+ String require = property.getString("require");
|
|
|
|
+ //是否打印
|
|
|
|
+ String un_print = property.getString("un_print");
|
|
|
|
+ JSONObject content=new JSONObject();
|
|
|
|
+ content.put("control",control);
|
|
|
|
+ content.put("id",templateId);
|
|
|
|
+ JSONObject value=new JSONObject();
|
|
|
|
+ switch (title){
|
|
|
|
+ case "项目编号":
|
|
|
|
+ value.put("text",projectApproval.getProjectCode());
|
|
|
|
+ break;
|
|
|
|
+ case "项目名称":
|
|
|
|
+ value.put("text",projectApproval.getProjectName());
|
|
|
|
+ break;
|
|
|
|
+ case "项目分类":
|
|
|
|
+ value.put("text",projectApproval.getCategoryName());
|
|
|
|
+ break;
|
|
|
|
+ case "项目类型":
|
|
|
|
+ value.put("text",projectApproval.getIsPublic()==0?"正式项目":"非项目");
|
|
|
|
+ break;
|
|
|
|
+ case "项目经理":
|
|
|
|
+ value.put("text",projectApproval.getInchargerName());
|
|
|
|
+ break;
|
|
|
|
+ case "级别":
|
|
|
|
+ value.put("text",arr[projectApproval.getLevel()-1]);
|
|
|
|
+ break;
|
|
|
|
+ case "合同金额":
|
|
|
|
+ value.put("text",projectApproval.getContractAmount());
|
|
|
|
+ break;
|
|
|
|
+ case "计划开始日期":
|
|
|
|
+ value.put("text",df.format(projectApproval.getPlanStartDate()));
|
|
|
|
+ break;
|
|
|
|
+ case "计划结束日期":
|
|
|
|
+ value.put("text",df.format(projectApproval.getPlanEndDate()));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ content.put("value",value);
|
|
|
|
+ contents.add(content);
|
|
|
|
+ }
|
|
|
|
+ apply_data.put("contents",contents);
|
|
|
|
+ requestData.put("apply_data",apply_data);
|
|
|
|
+ System.out.println("===============>发送到企业微信的数据"+requestData);
|
|
|
|
+// wxCorpInfoService.applyEvent(request,requestData);
|
|
|
|
+ }else {
|
|
|
|
+ throw new Exception("企业暂未同步服务商审批模板,推送企业微信审批失败,请联系服务商!");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//新增操作记录数据
|
|
//新增操作记录数据
|
|
@@ -220,114 +289,7 @@ public class ProjectApprovalController {
|
|
@RequestMapping("/check")
|
|
@RequestMapping("/check")
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public HttpRespMsg check(Integer id,Integer checkType,Integer revokeType){
|
|
public HttpRespMsg check(Integer id,Integer checkType,Integer revokeType){
|
|
- HttpRespMsg msg=new HttpRespMsg();
|
|
|
|
- User user = userMapper.selectById(request.getHeader("token"));
|
|
|
|
- ProjectApproval projectApproval = projectApprovalService.getById(id);
|
|
|
|
- List<ProjectApprovalCheck> projectApprovalChecks = projectApprovalCheckService.list(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId, id));
|
|
|
|
- Optional<ProjectApprovalCheck> first = projectApprovalChecks.stream().filter(p -> p.getUserId().equals(user.getId())&&p.getStatus()==0).findFirst();
|
|
|
|
-// boolean hasAllPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "管理全部立项申请");
|
|
|
|
-// boolean hasCheckPriviledge = sysFunctionService.hasPriviledge(user.getRoleId(), "审核立项申请");
|
|
|
|
- if(checkType!=3){
|
|
|
|
- if(projectApprovalChecks.size()>0){
|
|
|
|
- if(!first.isPresent()){
|
|
|
|
- msg.setError("审核人验证失败,请按照审核人顺序审核");
|
|
|
|
- return msg;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ProjectApprovalLog projectApprovalLog=new ProjectApprovalLog();
|
|
|
|
- switch (checkType){
|
|
|
|
- /*审核通过*/
|
|
|
|
- case 1:
|
|
|
|
- ProjectApprovalCheck projectApprovalCheck = first.get();
|
|
|
|
- projectApprovalCheck.setStatus(1);
|
|
|
|
- projectApprovalCheckService.updateById(projectApprovalCheck);
|
|
|
|
- //检查剩余的数据
|
|
|
|
- List<ProjectApprovalCheck> approvalChecks = projectApprovalChecks.stream().filter(p -> !p.getId().equals(first.get().getId())).collect(Collectors.toList());
|
|
|
|
- boolean b = approvalChecks.stream().anyMatch(a -> a.getStatus() != 1);
|
|
|
|
- if(!b){
|
|
|
|
- projectApproval.setStatus(1);
|
|
|
|
- projectApprovalService.updateById(projectApproval);
|
|
|
|
- //立项审核通过后创建项目数据
|
|
|
|
- Project project=new Project();
|
|
|
|
- BeanUtils.copyProperties(projectApproval,project);
|
|
|
|
- project.setId(null);
|
|
|
|
- project.setCreateDate(LocalDate.now());
|
|
|
|
- List<ProjectApprovalBasecost> projectApprovalBasecostList = projectApprovalBasecostService.list(new LambdaQueryWrapper<ProjectApprovalBasecost>().eq(ProjectApprovalBasecost::getProjectApprovalId, id));
|
|
|
|
- List<ParticipationApproval> participationApprovalList = participationApprovalService.list(new LambdaQueryWrapper<ParticipationApproval>().eq(ParticipationApproval::getProjectApprovalId, id));
|
|
|
|
- List<ProjectApprovalAuditor> projectApprovalAuditorList = projectApprovalAuditorService.list(new LambdaQueryWrapper<ProjectApprovalAuditor>().eq(ProjectApprovalAuditor::getProjectApprovalId, id));
|
|
|
|
- projectService.save(project);
|
|
|
|
- List<ProjectBasecost> projectBasecostList=new ArrayList<>();
|
|
|
|
- List<Participation> participationList=new ArrayList<>();
|
|
|
|
- List<ProjectAuditor> projectAuditorList=new ArrayList<>();
|
|
|
|
- projectApprovalBasecostList.forEach(p->{
|
|
|
|
- ProjectBasecost projectBasecost=new ProjectBasecost();
|
|
|
|
- BeanUtils.copyProperties(p,projectBasecost);
|
|
|
|
- projectBasecost.setId(null);
|
|
|
|
- projectBasecost.setProjectId(project.getId());
|
|
|
|
- projectBasecostList.add(projectBasecost);
|
|
|
|
- });
|
|
|
|
- participationApprovalList.forEach(p->{
|
|
|
|
- Participation participation=new Participation();
|
|
|
|
- BeanUtils.copyProperties(p,participation);
|
|
|
|
- participation.setId(null);
|
|
|
|
- participation.setProjectId(project.getId());
|
|
|
|
- participationList.add(participation);
|
|
|
|
- });
|
|
|
|
- projectApprovalAuditorList.forEach(p->{
|
|
|
|
- ProjectAuditor projectAuditor=new ProjectAuditor();
|
|
|
|
- BeanUtils.copyProperties(p,projectAuditor);
|
|
|
|
- projectAuditor.setId(null);
|
|
|
|
- projectAuditor.setProjectId(project.getId());
|
|
|
|
- projectAuditorList.add(projectAuditor);
|
|
|
|
- });
|
|
|
|
- projectBasecostService.saveBatch(projectBasecostList);
|
|
|
|
- participationService.saveBatch(participationList);
|
|
|
|
- projectAuditorService.saveBatch(projectAuditorList);
|
|
|
|
- //新增操作记录数据
|
|
|
|
- projectApprovalLog.setCreateTime(LocalDateTime.now());
|
|
|
|
- projectApprovalLog.setProjectApprovalId(projectApproval.getId());
|
|
|
|
- //通过
|
|
|
|
- projectApprovalLog.setType(2);
|
|
|
|
- projectApprovalLogService.save(projectApprovalLog);
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- /*驳回*/
|
|
|
|
- case 2:
|
|
|
|
- projectApproval.setStatus(2);
|
|
|
|
- projectApprovalService.updateById(projectApproval);
|
|
|
|
- //新增操作记录数据
|
|
|
|
- projectApprovalLog.setCreateTime(LocalDateTime.now());
|
|
|
|
- projectApprovalLog.setProjectApprovalId(projectApproval.getId());
|
|
|
|
- //驳回
|
|
|
|
- projectApprovalLog.setType(3);
|
|
|
|
- projectApprovalLogService.save(projectApprovalLog);
|
|
|
|
- break;
|
|
|
|
- /*撤销*/
|
|
|
|
- case 3:
|
|
|
|
- Project project = projectService.getOne(new LambdaQueryWrapper<Project>().eq(Project::getApproveId,projectApproval.getId()));
|
|
|
|
- if(project!=null){
|
|
|
|
- int count = reportService.count(new LambdaQueryWrapper<Report>().eq(Report::getProjectId, project.getId()));
|
|
|
|
- if(count>0){
|
|
|
|
- msg.setError("已存在填报数据无法撤销立项");
|
|
|
|
- return msg;
|
|
|
|
- }
|
|
|
|
- projectAuditorService.remove(new LambdaQueryWrapper<ProjectAuditor>().eq(ProjectAuditor::getProjectId,project.getId()));
|
|
|
|
- projectBasecostService.remove(new LambdaQueryWrapper<ProjectBasecost>().eq(ProjectBasecost::getProjectId,project.getId()));
|
|
|
|
- participationService.remove(new LambdaQueryWrapper<Participation>().eq(Participation::getProjectId,project.getId()));
|
|
|
|
- project.deleteById(project.getId());
|
|
|
|
- }
|
|
|
|
- projectApproval.setStatus(3);
|
|
|
|
- projectApprovalService.updateById(projectApproval);
|
|
|
|
- //新增操作记录数据
|
|
|
|
- projectApprovalLog.setCreateTime(LocalDateTime.now());
|
|
|
|
- projectApprovalLog.setProjectApprovalId(projectApproval.getId());
|
|
|
|
- //驳回
|
|
|
|
- projectApprovalLog.setType(4);
|
|
|
|
- projectApprovalLogService.save(projectApprovalLog);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- return msg;
|
|
|
|
|
|
+ return projectApprovalService.check(id,checkType,revokeType);
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping("/importData")
|
|
@RequestMapping("/importData")
|