|
@@ -279,6 +279,207 @@ public class ProjectApprovalController {
|
|
return msg;
|
|
return msg;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @RequestMapping("/tempSave")
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public HttpRespMsg tempSave(@RequestBody ProjectApproval projectApproval) throws Exception{
|
|
|
|
+ HttpRespMsg msg=new HttpRespMsg();
|
|
|
|
+ String[] arr=new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
|
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
|
+ Integer companyId = user.getCompanyId();
|
|
|
|
+ WxCorpInfo wxCorpInfo = wxCorpInfoService.getOne(new LambdaQueryWrapper<WxCorpInfo>().eq(WxCorpInfo::getCompanyId, companyId));
|
|
|
|
+ List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
|
|
|
|
+ List<ProjectCategory> categoryList = projectCategoryService.list(new LambdaQueryWrapper<ProjectCategory>().eq(ProjectCategory::getCompanyId, companyId));
|
|
|
|
+ //编辑重新提交修改状态为待提交
|
|
|
|
+ projectApproval.setStatus(-1);
|
|
|
|
+ if(projectApproval.getId()==null){
|
|
|
|
+ projectApproval.setCompanyId(companyId);
|
|
|
|
+ projectApproval.setCreateDate(LocalDate.now());
|
|
|
|
+ projectApproval.setCreatorId(user.getId());
|
|
|
|
+ }
|
|
|
|
+ //新增操作记录数据
|
|
|
|
+ ProjectApprovalLog projectApprovalLog=new ProjectApprovalLog();
|
|
|
|
+ projectApprovalLog.setCreateTime(LocalDateTime.now());
|
|
|
|
+ projectApprovalLog.setUserName(user.getName());
|
|
|
|
+ if(projectApproval.getId()==null){
|
|
|
|
+ //暂存
|
|
|
|
+ projectApprovalLog.setType(-1);
|
|
|
|
+ }else {
|
|
|
|
+ //提交
|
|
|
|
+ projectApprovalLog.setType(0);
|
|
|
|
+ }
|
|
|
|
+ Optional<ProjectCategory> category = categoryList.stream().filter(c -> c.getId().equals(projectApproval.getCategory())).findFirst();
|
|
|
|
+ if(category.isPresent()){
|
|
|
|
+ projectApproval.setCategoryName(category.get().getName());
|
|
|
|
+ }
|
|
|
|
+ if(projectApproval.getInchargerId()!=null){
|
|
|
|
+ User id = userMapper.selectById(projectApproval.getInchargerId());
|
|
|
|
+ projectApproval.setInchargerName(id.getName());
|
|
|
|
+ }
|
|
|
|
+ if (projectApproval.getId() != null) {
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotEmpty(projectApproval.getProjectCode())){
|
|
|
|
+ //编辑
|
|
|
|
+ Integer count=projectMapper.selectCount(new LambdaQueryWrapper<Project>().eq(Project::getCompanyId, companyId)
|
|
|
|
+ .eq( Project::getProjectCode, projectApproval.getProjectCode())
|
|
|
|
+ .ne(Project::getApproveId,projectApproval.getId()));
|
|
|
|
+ Integer count1=projectApprovalService.count(new LambdaQueryWrapper<ProjectApproval>().eq(ProjectApproval::getCompanyId, companyId).eq(ProjectApproval::getProjectCode, projectApproval.getProjectCode()).ne(ProjectApproval::getId,projectApproval.getId()));
|
|
|
|
+ if(count>0||count1>0){
|
|
|
|
+ msg.setError("已存在项目编号为["+projectApproval.getProjectCode()+"]的项目/立项");
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //新增
|
|
|
|
+ if(!StringUtils.isEmpty(projectApproval.getProjectCode())){
|
|
|
|
+ Integer count=projectMapper.selectCount(new LambdaQueryWrapper<Project>().eq(Project::getCompanyId, companyId).eq(Project::getProjectCode, projectApproval.getProjectCode()));
|
|
|
|
+ Integer count1=projectApprovalService.count(new LambdaQueryWrapper<ProjectApproval>().eq(ProjectApproval::getCompanyId, companyId).eq(ProjectApproval::getProjectCode, projectApproval.getProjectCode()));
|
|
|
|
+ if(count>0||count1>0){
|
|
|
|
+ msg.setError("已存在项目编号为["+projectApproval.getProjectCode()+"]的项目/立项");
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(!projectApprovalService.saveOrUpdate(projectApproval)){
|
|
|
|
+ msg.setError("验证失败");
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
+ projectApprovalLog.setProjectApprovalId(projectApproval.getId());
|
|
|
|
+ projectApprovalLogService.save(projectApprovalLog);
|
|
|
|
+ participationApprovalService.remove(new LambdaQueryWrapper<ParticipationApproval>().eq(ParticipationApproval::getProjectApprovalId,projectApproval.getId()));
|
|
|
|
+ projectApprovalBasecostService.remove(new LambdaQueryWrapper<ProjectApprovalBasecost>().eq(ProjectApprovalBasecost::getProjectApprovalId,projectApproval.getId()));
|
|
|
|
+ projectApprovalAuditorService.remove(new LambdaQueryWrapper<ProjectApprovalAuditor>().eq(ProjectApprovalAuditor::getProjectApprovalId,projectApproval.getId()));
|
|
|
|
+ projectApprovalCheckService.remove(new LambdaQueryWrapper<ProjectApprovalCheck>().eq(ProjectApprovalCheck::getProjectApprovalId,projectApproval.getId()).eq(ProjectApprovalCheck::getStatus,0));
|
|
|
|
+ if(projectApproval.getParticipationApprovalList()!=null&&projectApproval.getParticipationApprovalList().size()>0){
|
|
|
|
+ List<ParticipationApproval> participationApprovalList = projectApproval.getParticipationApprovalList();
|
|
|
|
+ participationApprovalList.forEach(p->{
|
|
|
|
+ p.setProjectApprovalId(projectApproval.getId());
|
|
|
|
+ Optional<User> first = userList.stream().filter(u -> u.getId().equals(p.getUserId())).findFirst();
|
|
|
|
+ if(first.isPresent()){
|
|
|
|
+ p.setUserName(first.get().getName());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ if(participationApprovalList.size()>0){
|
|
|
|
+ participationApprovalService.saveBatch(participationApprovalList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(projectApproval.getProjectApprovalBasecostList()!=null&&projectApproval.getProjectApprovalBasecostList().size()>0){
|
|
|
|
+ List<ProjectApprovalBasecost> projectApprovalBasecostList = projectApproval.getProjectApprovalBasecostList();
|
|
|
|
+ projectApprovalBasecostList.forEach(p->{
|
|
|
|
+ p.setProjectApprovalId(projectApproval.getId());
|
|
|
|
+ });
|
|
|
|
+ projectApprovalBasecostService.saveBatch(projectApprovalBasecostList);
|
|
|
|
+ }
|
|
|
|
+ if(projectApproval.getProjectApprovalAuditorList()!=null&&projectApproval.getProjectApprovalAuditorList().size()>0){
|
|
|
|
+ List<ProjectApprovalAuditor> projectApprovalAuditorList = projectApproval.getProjectApprovalAuditorList();
|
|
|
|
+ projectApprovalAuditorList.forEach(p->{
|
|
|
|
+ p.setProjectApprovalId(projectApproval.getId());
|
|
|
|
+ Optional<User> first = userList.stream().filter(u -> u.getId().equals(p.getAuditorId())).findFirst();
|
|
|
|
+ if(first.isPresent()){
|
|
|
|
+ p.setAuditorName(first.get().getName());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ if(projectApprovalAuditorList.size()>0){
|
|
|
|
+ projectApprovalAuditorService.saveBatch(projectApprovalAuditorList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(projectApproval.getProjectApprovalCheckList()!=null&&projectApproval.getProjectApprovalCheckList().size()>0){
|
|
|
|
+ List<ProjectApprovalCheck> projectApprovalCheckList = projectApproval.getProjectApprovalCheckList();
|
|
|
|
+ projectApprovalCheckList.forEach(p->{
|
|
|
|
+ p.setProjectApprovalId(projectApproval.getId());
|
|
|
|
+ });
|
|
|
|
+ projectApprovalCheckList=projectApprovalCheckList.stream().filter(p-> !StringUtils.isEmpty(p.getUserId())).collect(Collectors.toList());
|
|
|
|
+ for (int i = 0; i < projectApprovalCheckList.size(); i++) {
|
|
|
|
+ projectApprovalCheckList.get(i).setSeq(i+1);
|
|
|
|
+ }
|
|
|
|
+ if(projectApprovalCheckList.size()>0){
|
|
|
|
+ projectApprovalCheckService.saveOrUpdateBatch(projectApprovalCheckList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(projectApproval.getStatus()==-1){
|
|
|
|
+ if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
|
|
|
|
+ //更新审核人 发送到企业微信完成审核动作
|
|
|
|
+ String detail = wxCorpInfoService.getTemplateDetail(companyId);
|
|
|
|
+ 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");
|
|
|
|
+ //控件名称 这里为了统一工时管家格式 限制企业需要用到我们提供的名称(项目编号 项目名称 项目分类 项目类型 项目经理 级别 合同金额 计划开始日期 计划结束日期)
|
|
|
|
+ JSONArray titleArray = property.getJSONArray("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();
|
|
|
|
+ JSONObject titleOb = titleArray.getJSONObject(0);
|
|
|
|
+ switch (titleOb.getString("text")){
|
|
|
|
+ case "项目编号":
|
|
|
|
+ value.put("text",projectApproval.getProjectCode()==null?"":projectApproval.getProjectCode());
|
|
|
|
+ break;
|
|
|
|
+ case "项目名称":
|
|
|
|
+ value.put("text",projectApproval.getProjectName());
|
|
|
|
+ break;
|
|
|
|
+ case "项目分类":
|
|
|
|
+ value.put("text",projectApproval.getCategoryName()==null?"":projectApproval.getCategoryName());
|
|
|
|
+ break;
|
|
|
|
+ case "项目类型":
|
|
|
|
+ value.put("text",projectApproval.getIsPublic()==0?"正式项目":"非项目");
|
|
|
|
+ break;
|
|
|
|
+ case "项目经理":
|
|
|
|
+ value.put("text",projectApproval.getInchargerName()==null?"":("$userName="+projectApproval.getInchargerName()+"$"));
|
|
|
|
+ break;
|
|
|
|
+ case "级别":
|
|
|
|
+ value.put("text",arr[projectApproval.getLevel()-1]);
|
|
|
|
+ break;
|
|
|
|
+ case "合同金额":
|
|
|
|
+ value.put("text",projectApproval.getContractAmount()==null?String.valueOf(0):String.valueOf(projectApproval.getContractAmount()));
|
|
|
|
+ break;
|
|
|
|
+ case "计划开始日期":
|
|
|
|
+ value.put("text",projectApproval.getPlanStartDate()==null?"":df.format(projectApproval.getPlanStartDate()));
|
|
|
|
+ break;
|
|
|
|
+ case "计划结束日期":
|
|
|
|
+ value.put("text",projectApproval.getPlanEndDate()==null?"":df.format(projectApproval.getPlanEndDate()));
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ content.put("value",value);
|
|
|
|
+ contents.add(content);
|
|
|
|
+ }
|
|
|
|
+ apply_data.put("contents",contents);
|
|
|
|
+ requestData.put("apply_data",apply_data);
|
|
|
|
+ requestData.put("approver",new JSONArray());
|
|
|
|
+ requestData.put("summary_list",new JSONArray());
|
|
|
|
+ System.out.println("===============>发送到企业微信的数据"+requestData);
|
|
|
|
+ //发送到企业微信
|
|
|
|
+ String sp_no = wxCorpInfoService.applyEvent(request, requestData);
|
|
|
|
+ projectApproval.setWxCorpSpNo(sp_no);
|
|
|
|
+ projectApprovalService.updateById(projectApproval);
|
|
|
|
+ }else {
|
|
|
|
+ throw new Exception("企业暂未同步服务商审批模板,推送企业微信审批失败,请联系服务商!");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return msg;
|
|
|
|
+ }
|
|
|
|
|
|
@RequestMapping("/getDetail")
|
|
@RequestMapping("/getDetail")
|
|
public HttpRespMsg getDetail(Integer id){
|
|
public HttpRespMsg getDetail(Integer id){
|