| 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; | 
|     } | 
| } |