浏览代码

提交审批数据到企业微信

Min 1 年之前
父节点
当前提交
0f036538b7

+ 84 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectApprovalController.java

@@ -1,11 +1,16 @@
 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.google.gson.JsonObject;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.*;
+import com.management.platform.service.impl.WxCorpInfoServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.beans.BeanUtils;
 import org.springframework.transaction.annotation.Transactional;
@@ -21,9 +26,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
 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;
 
 /**
@@ -58,6 +62,10 @@ public class ProjectApprovalController {
     private ProjectApprovalCheckService projectApprovalCheckService;
     @Resource
     private ProjectApprovalLogService projectApprovalLogService;
+    @Resource
+    private WxCorpInfoService wxCorpInfoService;
+    @Resource
+    private WxCorpTemplateService wxCorpTemplateService;
 
     /**
      * 分页获取项目列表
@@ -72,8 +80,9 @@ public class ProjectApprovalController {
 
     @RequestMapping("/editProjectApproval")
     @Transactional(rollbackFor = Exception.class)
-    public HttpRespMsg editProjectApproval(@RequestBody ProjectApproval projectApproval) {
+    public HttpRespMsg editProjectApproval(@RequestBody ProjectApproval projectApproval) throws Exception {
         HttpRespMsg msg=new HttpRespMsg();
+        String[] arr=new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
         User user = userMapper.selectById(request.getHeader("token"));
         Integer companyId = user.getCompanyId();
         List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
@@ -147,7 +156,77 @@ public class ProjectApprovalController {
             if(projectApprovalCheckList.size()>0){
                 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("企业暂未同步服务商审批模板,推送企业微信审批失败,请联系服务商!");
+                }
             }
         }
         //新增操作记录数据

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/WxCorpInfoService.java

@@ -79,5 +79,7 @@ public interface WxCorpInfoService extends IService<WxCorpInfo> {
 
     public void copyTemplate(HttpServletRequest request,Integer templateType) throws Exception;
 
-    public String getTemplateDetail(HttpServletRequest request,String templateId,Integer templateType) throws Exception;
+    public String getTemplateDetail(HttpServletRequest request,Integer templateType) throws Exception;
+
+    public void applyEvent(HttpServletRequest request,JSONObject data) throws Exception;
 }

+ 24 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -85,6 +85,9 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     //获取企业审批模板详情
     public static final String GET_TEMPLATE_DETAIL = "https://qyapi.weixin.qq.com/cgi-bin/oa/gettemplatedetail?access_token=ACCESS_TOKEN";
 
+    //提交审批至企业微信
+    public static final String APPLY_EVENT = "https://qyapi.weixin.qq.com/cgi-bin/oa/applyevent?access_token=ACCESS_TOKEN";
+
 
     public static final int TEXT_CARD_MSG_BUSTRIP_WAITING_AUDIT = 0;//出差待审核
     public static final int TEXT_CARD_MSG_BUSTRIP_AGREE = 1;//出差审核通过
@@ -2380,7 +2383,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
      * 获取企业审批模板详情
      * */
     @Override
-    public String getTemplateDetail(HttpServletRequest request,String templateId,Integer templateType) throws Exception {
+    public String getTemplateDetail(HttpServletRequest request,Integer templateType) throws Exception {
         User user = userMapper.selectById(request.getHeader("token"));
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
         WxCorpTemplate template = wxCorpTemplateService.getById(wxCorpInfo.getCompanyId());
@@ -2404,4 +2407,24 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         }
         return null;
     }
+
+    /**
+     * 提交审批到企业微信
+     * */
+    @Override
+    public void applyEvent(HttpServletRequest request,JSONObject data) throws Exception {
+        User user = userMapper.selectById(request.getHeader("token"));
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", user.getCompanyId()));
+        String url=APPLY_EVENT.replace("ACCESS_TOKEN",getCorpAccessToken(wxCorpInfo));
+        HttpHeaders headers = new HttpHeaders();
+        RestTemplate restTemplate = new RestTemplate();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        HttpEntity<JSONObject> entity = new HttpEntity<>(data, headers);
+        ResponseEntity<String> ResponseEntity = restTemplate.postForEntity(url, entity, String.class);
+        if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = ResponseEntity.getBody();
+        }
+    }
 }