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 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 list2 = new ArrayList(); 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 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 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; } }