package doumeemes.core.utils.dingding; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.aliyun.dingtalkoauth2_1_0.Client; 
 | 
import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketHeaders; 
 | 
import com.aliyun.dingtalkoauth2_1_0.models.CreateJsapiTicketResponse; 
 | 
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest; 
 | 
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse; 
 | 
import com.aliyun.dingtalktodo_1_0.models.*; 
 | 
import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceHeaders; 
 | 
import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceRequest; 
 | 
import com.aliyun.dingtalkworkflow_1_0.models.StartProcessInstanceResponse; 
 | 
import com.aliyun.tea.TeaException; 
 | 
import com.aliyun.teaopenapi.models.Config; 
 | 
import com.aliyun.teautil.Common; 
 | 
import com.aliyun.teautil.models.RuntimeOptions; 
 | 
import com.dingtalk.api.DefaultDingTalkClient; 
 | 
import com.dingtalk.api.DingTalkClient; 
 | 
import com.dingtalk.api.request.*; 
 | 
import com.dingtalk.api.response.*; 
 | 
import com.taobao.api.ApiException; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.DateUtil; 
 | 
import doumeemes.dao.business.model.BackOrderDetail; 
 | 
import doumeemes.dao.business.model.Backorder; 
 | 
import doumeemes.dao.business.model.CompanyUser; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.Arrays; 
 | 
import java.util.List; 
 | 
  
 | 
  
 | 
public class DingDingUtil { 
 | 
    //{"app_key":"dingn6zwdmiy5a9ur1rw","app_secret":"txf8odwb5Hga4E96EnniLtJSwaZSCq7R93ZRDTLhPj7pnmsc9dUr7P7FyZrxYobt","agentid":"1653751134"} 
 | 
    public static void main(String[] args) throws  Exception { 
 | 
//        System.out.println(getInnerAppTokenNew("dingn6zwdmiy5a9ur1rw","txf8odwb5Hga4E96EnniLtJSwaZSCq7R93ZRDTLhPj7pnmsc9dUr7P7FyZrxYobt")); 
 | 
//        System.out.println(getInnerAppToken("dingn6zwdmiy5a9ur1rw","txf8odwb5Hga4E96EnniLtJSwaZSCq7R93ZRDTLhPj7pnmsc9dUr7P7FyZrxYobt")); 
 | 
        System.out.println(getJsTicketNew("39d76cacbd72335d82c3e3d735e247a4")); 
 | 
    } 
 | 
    /** 
 | 
     * 使用 Token 初始化账号Client 
 | 
     * @return Client 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static Client createClient() throws Exception { 
 | 
        Config config = new Config(); 
 | 
        config.protocol = "https"; 
 | 
        config.regionId = "central"; 
 | 
        return new Client(config); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 创建代办 
 | 
     * @param token 
 | 
     * @param createTodoTaskRequest 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static boolean createTodoTask(String token, CreateTodoTaskRequest createTodoTaskRequest) throws Exception { 
 | 
        Config config = new Config(); 
 | 
        config.protocol = "https"; 
 | 
        config.regionId = "central"; 
 | 
        com.aliyun.dingtalktodo_1_0.Client client = new com.aliyun.dingtalktodo_1_0.Client(config); 
 | 
        CreateTodoTaskHeaders createTodoTaskHeaders = new CreateTodoTaskHeaders(); 
 | 
        createTodoTaskHeaders.xAcsDingtalkAccessToken = token; 
 | 
        try { 
 | 
            client.createTodoTaskWithOptions("", createTodoTaskRequest, createTodoTaskHeaders, new RuntimeOptions()); 
 | 
            return  true; 
 | 
        } catch (TeaException err) { 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } catch (Exception _err) { 
 | 
            TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
    /** 
 | 
     * 更新代办执行者状态 
 | 
     * @param token 
 | 
     * @param updateTodoTaskExecutorStatusRequest 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static boolean updateTodoTaskStatus(String token, UpdateTodoTaskExecutorStatusRequest updateTodoTaskExecutorStatusRequest) throws Exception { 
 | 
        Config config = new Config(); 
 | 
        config.protocol = "https"; 
 | 
        config.regionId = "central"; 
 | 
        com.aliyun.dingtalktodo_1_0.Client client = new com.aliyun.dingtalktodo_1_0.Client(config); 
 | 
        UpdateTodoTaskExecutorStatusHeaders updateTodoTaskExecutorStatusHeaders = new UpdateTodoTaskExecutorStatusHeaders(); 
 | 
        updateTodoTaskExecutorStatusHeaders.xAcsDingtalkAccessToken = token; 
 | 
        try { 
 | 
            client.updateTodoTaskExecutorStatusWithOptions("", "", updateTodoTaskExecutorStatusRequest, updateTodoTaskExecutorStatusHeaders, new RuntimeOptions()); 
 | 
            return  true; 
 | 
        } catch (TeaException err) { 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } catch (Exception _err) { 
 | 
            TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
    /** 
 | 
     * 更新待办任务 
 | 
     * @param token 
 | 
     * @param updateTodoTaskRequest 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static boolean updateTodoTaskInfo(String token, UpdateTodoTaskRequest updateTodoTaskRequest) throws Exception { 
 | 
        Config config = new Config(); 
 | 
        config.protocol = "https"; 
 | 
        config.regionId = "central"; 
 | 
        com.aliyun.dingtalktodo_1_0.Client client = new com.aliyun.dingtalktodo_1_0.Client(config); 
 | 
        UpdateTodoTaskHeaders updateTodoTaskHeaders = new UpdateTodoTaskHeaders(); 
 | 
        updateTodoTaskHeaders.xAcsDingtalkAccessToken = token; 
 | 
        try { 
 | 
            client.updateTodoTaskWithOptions("", "", updateTodoTaskRequest, updateTodoTaskHeaders, new RuntimeOptions()); 
 | 
            return  true; 
 | 
        } catch (TeaException err) { 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } catch (Exception _err) { 
 | 
            TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
    /** 
 | 
     * 更新待办任务 
 | 
     * @param token 
 | 
     * @param deleteTodoTaskRequest 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static boolean deleteTodoTask(String token, DeleteTodoTaskRequest deleteTodoTaskRequest) throws Exception { 
 | 
        Config config = new Config(); 
 | 
        config.protocol = "https"; 
 | 
        config.regionId = "central"; 
 | 
        com.aliyun.dingtalktodo_1_0.Client client = new com.aliyun.dingtalktodo_1_0.Client(config); 
 | 
        DeleteTodoTaskHeaders deleteTodoTaskHeaders = new DeleteTodoTaskHeaders(); 
 | 
        deleteTodoTaskHeaders.xAcsDingtalkAccessToken = token; 
 | 
        try { 
 | 
            client.deleteTodoTaskWithOptions("", "", deleteTodoTaskRequest, deleteTodoTaskHeaders, new RuntimeOptions()); 
 | 
            return true; 
 | 
        } catch (TeaException err) { 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } catch (Exception _err) { 
 | 
            TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
    public static   String getInnerAppTokenNew(String appKey,String appSecret) throws Exception { 
 | 
       Client client = createClient(); 
 | 
        GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest() 
 | 
                .setAppKey(appKey) 
 | 
                .setAppSecret(appSecret); 
 | 
        try { 
 | 
            GetAccessTokenResponse response =  client.getAccessToken(getAccessTokenRequest); 
 | 
            if(response!=null && response.getBody()!=null){ 
 | 
                return  response.getBody().getAccessToken(); 
 | 
            } 
 | 
        } catch (TeaException err) { 
 | 
            if (!Common.empty(err.code) && ! Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } catch (Exception _err) { 
 | 
            TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
            if (! Common.empty(err.code) && ! Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
    public static String getInnerAppToken(String appKey,String appSecret){ 
 | 
         try { 
 | 
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); 
 | 
             OapiGettokenRequest req = new OapiGettokenRequest(); 
 | 
             req.setAppkey(appKey); 
 | 
             req.setAppsecret(appSecret); 
 | 
             req.setHttpMethod("GET"); 
 | 
             OapiGettokenResponse rsp = client.execute(req); 
 | 
             System.out.println(rsp.getBody()); 
 | 
             return  rsp.getBody(); 
 | 
         } catch (ApiException e) { 
 | 
             e.printStackTrace(); 
 | 
         } 
 | 
         return  null; 
 | 
     } 
 | 
     public static   String getJsTicketNew(String token) throws  Exception{ 
 | 
         Client client =  createClient(); 
 | 
         CreateJsapiTicketHeaders createJsapiTicketHeaders = new CreateJsapiTicketHeaders(); 
 | 
         createJsapiTicketHeaders.xAcsDingtalkAccessToken = token; 
 | 
         try { 
 | 
             CreateJsapiTicketResponse response =   client.createJsapiTicketWithOptions(createJsapiTicketHeaders, new RuntimeOptions()); 
 | 
             if(response!=null && response.getBody()!=null){ 
 | 
                 return  response.getBody().getJsapiTicket(); 
 | 
             } 
 | 
         } catch (TeaException err) { 
 | 
             if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                 // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
             } 
 | 
  
 | 
         } catch (Exception _err) { 
 | 
             TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
             if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                 // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
             } 
 | 
  
 | 
         } 
 | 
         return null; 
 | 
     } 
 | 
     public static   String sendActionCardNotice(String token,Long agentId,String userIds,String url,String title, String content) throws  Exception{ 
 | 
         try { 
 | 
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); 
 | 
             OapiMessageCorpconversationAsyncsendV2Request req = new OapiMessageCorpconversationAsyncsendV2Request(); 
 | 
             req.setAgentId(agentId); 
 | 
             req.setUseridList(userIds); 
 | 
             req.setToAllUser(false); 
 | 
             OapiMessageCorpconversationAsyncsendV2Request.Msg obj1 = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); 
 | 
             obj1.setMsgtype("action_card"); 
 | 
             OapiMessageCorpconversationAsyncsendV2Request.Markdown obj5 = new  OapiMessageCorpconversationAsyncsendV2Request.Markdown(); 
 | 
             obj5.setTitle(title); 
 | 
             obj5.setText(content); 
 | 
             OapiMessageCorpconversationAsyncsendV2Request.ActionCard obj6 = new OapiMessageCorpconversationAsyncsendV2Request.ActionCard(); 
 | 
             obj6.setSingleUrl(url); 
 | 
             obj6.setSingleTitle("查看详情"); 
 | 
             obj6.setTitle(title); 
 | 
             obj6.setMarkdown(title+"\n# "+content); 
 | 
             obj1.setActionCard(obj6); 
 | 
             req.setMsg(obj1); 
 | 
             OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(req, token); 
 | 
             System.out.println(rsp.getBody()); 
 | 
             return rsp.getBody(); 
 | 
         } catch (ApiException e) { 
 | 
             e.printStackTrace(); 
 | 
         } 
 | 
         return null; 
 | 
     } 
 | 
    /** 
 | 
     * 通过免登码获取用户userid( 
 | 
     * @param token 
 | 
     * @param code 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
     public static   CompanyUser getUserInfoByCode(String token,String code) throws  Exception{ 
 | 
         try { 
 | 
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo"); 
 | 
             OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest(); 
 | 
             req.setCode(code); 
 | 
             OapiV2UserGetuserinfoResponse rsp = client.execute(req, token); 
 | 
             JSONObject json =JSONObject.parseObject(rsp.getBody()); 
 | 
             System.out.println(rsp.getBody()); 
 | 
             CompanyUser  user = new CompanyUser(); 
 | 
             user.setDdUserid(json.getJSONObject("result").getString("userid")); 
 | 
             user.setDdUnionid(json.getJSONObject("result").getString("unionid")); 
 | 
             return  user; 
 | 
         } catch (ApiException e) { 
 | 
             e.printStackTrace(); 
 | 
         }catch (Exception e) { 
 | 
             e.printStackTrace(); 
 | 
         } 
 | 
         return null; 
 | 
     } 
 | 
    /** 
 | 
     * 通过userid获取用户手机号信息 
 | 
     * @param token 
 | 
     * @param userId 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
     public static   String getUserMobileByUserId(String token,String userId) throws  Exception{ 
 | 
         try { 
 | 
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); 
 | 
             OapiV2UserGetRequest req = new OapiV2UserGetRequest(); 
 | 
             req.setUserid(userId); 
 | 
             OapiV2UserGetResponse rsp = client.execute(req, token); 
 | 
             System.out.println(rsp.getBody()); 
 | 
             JSONObject json =JSONObject.parseObject(rsp.getBody()); 
 | 
             return  json.getJSONObject("result").getString("mobile"); 
 | 
         } catch (Exception e) { 
 | 
             e.printStackTrace(); 
 | 
         } 
 | 
  
 | 
         return null; 
 | 
     } 
 | 
    /** 
 | 
     * 通过授权code获取用户手机号信息 
 | 
     * @param token 
 | 
     * @param code 
 | 
     * @return 
 | 
     * @throws Exception 
 | 
     */ 
 | 
     public static   String getUserMobileByCode(String token, String code) throws  Exception{ 
 | 
         CompanyUser user = getUserInfoByCode(token,code); 
 | 
         return getUserMobileByUserId(token,user.getDdUserid()) ; 
 | 
     } 
 | 
     public static   String getJsTicket(){ 
 | 
         try { 
 | 
                 DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/get_jsapi_ticket"); 
 | 
                 OapiGetJsapiTicketRequest req = new OapiGetJsapiTicketRequest(); 
 | 
                 req.setHttpMethod("GET"); 
 | 
                 OapiGetJsapiTicketResponse rsp = client.execute(req, ""); 
 | 
                 System.out.println(rsp.getBody()); 
 | 
             return  rsp.getBody(); 
 | 
         } catch (Exception e) { 
 | 
             e.printStackTrace(); 
 | 
         } 
 | 
         return  null; 
 | 
     } 
 | 
  
 | 
    /** 
 | 
     * 自有OA审批 
 | 
     */ 
 | 
    public static String createJobTmpl(String token,Long agentId ) { 
 | 
        try { 
 | 
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/process/save"); 
 | 
            OapiProcessSaveRequest req = new OapiProcessSaveRequest(); 
 | 
            OapiProcessSaveRequest.SaveProcessRequest obj1 = new OapiProcessSaveRequest.SaveProcessRequest(); 
 | 
            obj1.setAgentid(agentId); 
 | 
//            obj1.setProcessCode(proCode); 
 | 
            obj1.setName("不良品返工审批模板"); 
 | 
            List<OapiProcessSaveRequest.FormComponentVo> list3 = new ArrayList<>(); 
 | 
            OapiProcessSaveRequest.FormComponentVo obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextField"); 
 | 
            OapiProcessSaveRequest.FormComponentPropVo obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextField_code"); 
 | 
            obj5.setLabel("申请编码"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("DDDateField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("DDDateField_date"); 
 | 
            obj5.setLabel("申请日期"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextField_type"); 
 | 
            obj5.setLabel("申请类型"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextField_info"); 
 | 
            obj5.setLabel("产品信息"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextField_pro"); 
 | 
            obj5.setLabel("产生工序"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextField_back"); 
 | 
            obj5.setLabel("返工工序"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextareaField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextareaField_reason"); 
 | 
            obj5.setLabel("不良原因"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextField_user"); 
 | 
            obj5.setLabel("申请人"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj4 = new OapiProcessSaveRequest.FormComponentVo(); 
 | 
            obj4.setComponentName("TextareaField"); 
 | 
            obj5 = new OapiProcessSaveRequest.FormComponentPropVo(); 
 | 
            obj5.setId("TextareaField_list"); 
 | 
            obj5.setLabel("返工工装清单"); 
 | 
            obj4.setProps(obj5); 
 | 
            list3.add(obj4); 
 | 
  
 | 
            obj1.setFormComponentList(list3); 
 | 
            req.setSaveProcessRequest(obj1); 
 | 
            OapiProcessSaveResponse rsp = client.execute(req, token); 
 | 
            System.out.println(rsp.getBody()); 
 | 
            JSONObject json =JSONObject.parseObject(rsp.getBody()); 
 | 
            return  json.getJSONObject("result").getString("process_code"); 
 | 
        } catch (ApiException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
  
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 官方OA发起审批实例 
 | 
     * @param token 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static String startProcessInstance(String token, String userid, String processCode, Backorder  model) throws Exception { 
 | 
  
 | 
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create"); 
 | 
        OapiProcessinstanceCreateRequest req = new OapiProcessinstanceCreateRequest(); 
 | 
        req.setProcessCode(processCode); 
 | 
        req.setOriginatorUserId(userid); 
 | 
        req.setDeptId(1L); 
 | 
        List<OapiProcessinstanceCreateRequest.FormComponentValueVo> list2 = new ArrayList<OapiProcessinstanceCreateRequest.FormComponentValueVo>(); 
 | 
        OapiProcessinstanceCreateRequest.FormComponentValueVo obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
        obj3.setName("申请编码"); 
 | 
        obj3.setValue(model.getCode()); 
 | 
        list2.add(obj3); 
 | 
  
 | 
        String temp = ""; 
 | 
        if(model.getDetailList()!=null){ 
 | 
            for(BackOrderDetail d : model.getDetailList()){ 
 | 
                if(Constants.equalsInteger(d.getUnitData(),Constants.ONE)){ 
 | 
                    temp+=d.getApplianceCode() +"  "+Constants.formatBigdecimal4Float(d.getNum()) +d.getUnitName()+"\n"; 
 | 
//                    temp+="物料信息:"+d.getMaterialName() +" | "+Constants.formatBigdecimal4Float(d.getNum()) +d.getUnitName()+"\n"; 
 | 
                    temp+="物料信息:"+d.getMaterialName() +" | "+d.getMaterialCode()+"\n"; 
 | 
                }else{ 
 | 
                    temp+=d.getApplianceCode() +"  "+Constants.formatBigdecimal(d.getNum()).intValue()+d.getUnitName()+"\n"; 
 | 
//                    temp+="物料信息:"+d.getMaterialName() +" | "+Constants.formatBigdecimal(d.getNum()).intValue()+d.getUnitName()+"\n"; 
 | 
                    temp+="物料信息:"+d.getMaterialName() +" | "+d.getMaterialCode()+"\n"; 
 | 
                } 
 | 
                temp+="批 次 号:"+d.getBatch() +"\n"; 
 | 
                temp+="生产工序:"+d.getProcedureName() +"\n\n"; 
 | 
            } 
 | 
        } 
 | 
        if(Constants.equalsInteger(model.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("入库仓库"); 
 | 
            obj3 .setValue(model.getWarehouseName()); 
 | 
            list2.add(obj3); 
 | 
  
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("出库仓库"); 
 | 
            obj3 .setValue(model.getWarehouseOutName()); 
 | 
            list2.add(obj3); 
 | 
  
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("报废原因"); 
 | 
            obj3 .setValue(model.getContent()); 
 | 
            list2.add(obj3); 
 | 
  
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("报废工装清单"); 
 | 
            obj3 .setValue(temp); 
 | 
            list2.add(obj3); 
 | 
  
 | 
        }else{ 
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("申请类型"); 
 | 
            obj3 .setValue(Constants.BACKORDER_TYPE.getTitleByType(model.getType())); 
 | 
            list2.add(obj3); 
 | 
  
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("返工返修工序"); 
 | 
            obj3 .setValue(model.getBackProcedureName()); 
 | 
            list2.add(obj3); 
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("预计生产日期"); 
 | 
            obj3 .setValue(DateUtil.getShortTime(model.getPlanDate())); 
 | 
            list2.add(obj3); 
 | 
  
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("返工返修原因"); 
 | 
            obj3 .setValue(model.getContent()); 
 | 
            list2.add(obj3); 
 | 
  
 | 
            obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
            obj3 .setName("返工工装清单"); 
 | 
            obj3 .setValue(temp); 
 | 
            list2.add(obj3); 
 | 
  
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
        obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
        obj3 .setName("当前工厂"); 
 | 
        obj3 .setValue(model.getOrgName()); 
 | 
        list2.add(obj3); 
 | 
  
 | 
        obj3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); 
 | 
        obj3 .setName("申请人"); 
 | 
        obj3 .setValue(model.getCreateUserName()); 
 | 
        list2.add(obj3); 
 | 
  
 | 
        req.setFormComponentValues(list2); 
 | 
        OapiProcessinstanceCreateResponse rsp = client.execute(req, token); 
 | 
        if(rsp.getErrcode() == 0){ 
 | 
            return rsp.getProcessInstanceId(); 
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
        return null; 
 | 
  
 | 
  
 | 
    } 
 | 
    /** 
 | 
     * 官方OA发起审批实例 
 | 
     * @param token 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public static String startProcessInstanceOld(String token, String userid, String processCode, Backorder  model) throws Exception { 
 | 
        Config config = new Config(); 
 | 
        config.protocol = "https"; 
 | 
        config.regionId = "central"; 
 | 
        com.aliyun.dingtalkworkflow_1_0.Client client = new com.aliyun.dingtalkworkflow_1_0.Client(config); 
 | 
        StartProcessInstanceHeaders startProcessInstanceHeaders = new StartProcessInstanceHeaders(); 
 | 
        startProcessInstanceHeaders.xAcsDingtalkAccessToken = token; 
 | 
        List<StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues > formList = new ArrayList<>(); 
 | 
  
 | 
        StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails details = 
 | 
                new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                        .setName("申请编码") 
 | 
                        .setValue(model.getCode()); 
 | 
        StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                .setName("申请编码") 
 | 
                .setValue(model.getCode()) 
 | 
                .setDetails(Arrays.asList(details)); 
 | 
        formList.add(formComponentValues0); 
 | 
  
 | 
        String temp = ""; 
 | 
        if(model.getDetailList()!=null){ 
 | 
            for(BackOrderDetail d : model.getDetailList()){ 
 | 
                temp+=d.getApplianceCode() +"  "+d.getNum()+d.getUnitName()+"\n"; 
 | 
                temp+="物料信息:"+d.getMaterialName() +" | "+d.getNum()+d.getUnitName()+"\n"; 
 | 
                temp+="批 次 号:"+d.getBatch() +"\n"; 
 | 
                temp+="生产工序:"+d.getProcedureName() +"\n\n"; 
 | 
            } 
 | 
        } 
 | 
        if(Constants.equalsInteger(model.getType(),Constants.BACKORDER_TYPE.scrap)){ 
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("出库仓库") 
 | 
                            .setValue(model.getWarehouseOutName()); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("出库仓库") 
 | 
                    .setValue(model.getWarehouseOutName()) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("入库仓库") 
 | 
                            .setValue(model.getWarehouseName()); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("入库仓库") 
 | 
                    .setValue(model.getWarehouseName()) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("报废原因") 
 | 
                            .setValue(model.getContent()); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("报废原因") 
 | 
                    .setValue(model.getContent()) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("报废工装清单") 
 | 
                            .setValue(temp); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("报废工装清单") 
 | 
                    .setValue(temp) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
        }else{ 
 | 
        /*    details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("申请日期") 
 | 
                            .setValue(DateUtil.getShortTime(model.getCreateTime())); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("申请日期") 
 | 
                    .setValue(DateUtil.getShortTime(model.getCreateTime())) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0);*/ 
 | 
  
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("申请类型") 
 | 
                            .setValue(Constants.BACKORDER_TYPE.getTitleByType(model.getType())); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("申请类型") 
 | 
                    .setValue(Constants.BACKORDER_TYPE.getTitleByType(model.getType())) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("返工返修工序") 
 | 
                            .setValue(model.getBackProcedureName()); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("返工返修工序") 
 | 
                    .setValue(model.getBackProcedureName()) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("预计生产日期") 
 | 
                            .setValue(DateUtil.getShortTime(model.getPlanDate())); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("预计生产日期") 
 | 
                    .setValue(DateUtil.getShortTime(model.getPlanDate())) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("返工返修原因") 
 | 
                            .setValue(model.getContent()); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("返工返修原因") 
 | 
                    .setValue(model.getContent()) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
            details = 
 | 
                    new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                            .setName("返工工装清单") 
 | 
                            .setValue(temp); 
 | 
            formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                    .setName("返工工装清单") 
 | 
                    .setValue(temp) 
 | 
                    .setDetails(Arrays.asList(details)); 
 | 
            formList.add(formComponentValues0); 
 | 
  
 | 
        } 
 | 
  
 | 
  
 | 
  
 | 
        details = 
 | 
                new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                        .setName("当前工厂") 
 | 
                        .setValue(model.getOrgName()); 
 | 
        formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                .setName("当前工厂") 
 | 
                .setValue(model.getOrgName()) 
 | 
                .setDetails(Arrays.asList(details)); 
 | 
        formList.add(formComponentValues0); 
 | 
  
 | 
        details = 
 | 
                new  StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValuesDetails() 
 | 
                        .setName("申请人") 
 | 
                        .setValue(model.getCreateUserName()); 
 | 
        formComponentValues0 = new StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues() 
 | 
                .setName("申请人") 
 | 
                .setValue(model.getCreateUserName()) 
 | 
                .setDetails(Arrays.asList(details)); 
 | 
        formList.add(formComponentValues0); 
 | 
  
 | 
        StartProcessInstanceRequest.StartProcessInstanceRequestApprovers approvers0 = new StartProcessInstanceRequest.StartProcessInstanceRequestApprovers() 
 | 
                .setActionType("NONE") 
 | 
                .setUserIds(java.util.Arrays.asList( 
 | 
                        userid 
 | 
                )); 
 | 
        StartProcessInstanceRequest startProcessInstanceRequest = new StartProcessInstanceRequest() 
 | 
                .setOriginatorUserId(userid) 
 | 
                .setProcessCode(processCode) 
 | 
                .setFormComponentValues(formList); 
 | 
//                .setApprovers(Arrays.asList(approvers0)); 
 | 
  
 | 
  
 | 
        try { 
 | 
            StartProcessInstanceResponse response = client.startProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions()); 
 | 
           return  response.getBody().getInstanceId(); 
 | 
        } catch (TeaException err) { 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
        } catch (Exception _err) { 
 | 
            TeaException err = new TeaException(_err.getMessage(), _err); 
 | 
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) { 
 | 
                // err 中含有 code 和 message 属性,可帮助开发定位问题 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 官方OA发起审批实例 
 | 
     * @param token 
 | 
     * @throws Exception 
 | 
     * @return 
 | 
     */ 
 | 
    public static List<OapiProcessinstanceGetResponse.OperationRecordsVo> getProcessInstance(String token, String instanceid ) throws Exception { 
 | 
        try { 
 | 
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/get"); 
 | 
            OapiProcessinstanceGetRequest req = new OapiProcessinstanceGetRequest(); 
 | 
            req.setProcessInstanceId(instanceid); 
 | 
            OapiProcessinstanceGetResponse rsp = client.execute(req, token); 
 | 
            System.out.println(rsp.getBody()); 
 | 
            if(rsp.getErrcode().compareTo(0l) ==0 && rsp.getProcessInstance()!=null){ 
 | 
                return rsp.getProcessInstance().getOperationRecords(); 
 | 
            } 
 | 
        } catch (ApiException e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
} 
 |