package net.chenlin.dp.modules.api.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.OapiGettokenRequest; import com.dingtalk.api.request.OapiProcessinstanceCreateRequest; import com.dingtalk.api.response.OapiGettokenResponse; import com.dingtalk.api.response.OapiProcessinstanceCreateResponse; import com.mysql.cj.util.StringUtils; import com.taobao.api.ApiException; import net.chenlin.dp.common.openapi4j.examples.voucher.VoucherAdd; import net.chenlin.dp.common.openapi4j.exception.OpenAPIException; import net.chenlin.dp.common.openapi4j.service.PersonService; import net.chenlin.dp.common.openapi4j.util.PropUtil; import net.chenlin.dp.common.utils.JSONUtils; import net.chenlin.dp.common.utils.SpringContextUtils; import net.chenlin.dp.modules.api.controller.DingdingOpenInterface; import net.chenlin.dp.modules.sys.entity.SyViewEntity; import net.chenlin.dp.modules.sys.service.testU8Service; import net.sf.json.JSONArray; import org.springframework.boot.configurationprocessor.json.JSONException; import java.math.BigDecimal; import java.util.*; public class ReimbursementService { private testU8Service u8Service= SpringContextUtils.getBean("testU8Service",testU8Service.class); public static String gettoken = ""; /** * (不再使用) * @throws Exception */ public static void autoReimbursement() throws Exception { DingdingOpenInterface dingdingOpenInterface = new DingdingOpenInterface(); Properties prop = PropUtil.getProperties("/config.properties"); String PROC = prop.getProperty("bx_process_code"); List<String> list = dingdingOpenInterface.getOrderIdList(PROC); String job_number = "";//工号 String work_place = "";//办公地(潍坊对03账套 昆山对01账套) String dept_code = ""; //部门编码 String account_code = ""; //科目编码 String type = ""; //数据源账套 1昆山,3潍坊 // List<SyViewEntity> listId = u8Service.selectView("报销单"); if(list.size() > 0){ outCycle:for(String o:list){ // if(listId.size() > 0){ // for(SyViewEntity en:listId){ // if(!StringUtils.isNullOrEmpty(en.getOaId()) && en.getOaId().equals(o)){ // continue outCycle; // } // } // } Map<String,Object> map = dingdingOpenInterface.getOrderDetails("01dc1264-85ab-41a5-8e15-a0905268e1b3"); // Map<String,Object> map = dingdingOpenInterface.getOrderDetails("435bfa21-2366-43e3-b71a-041485d51a31"); // Map<String,Object> map = dingdingOpenInterface.getOrderDetails(o); if(StringUtils.isNullOrEmpty(map.get("result").toString()) || !map.get("result").toString().equals("agree")){ continue; } // System.out.println(map); Map<String,Object> map1 = tableToMap2(map); // System.out.println(map1); Map<String,Object> mapPerson = dingdingOpenInterface.getViewByUserId(map.get("originator_userid").toString()); if(mapPerson !=null ){ job_number = mapPerson.get("job_number").toString(); work_place = mapPerson.get("work_place").toString(); if(StringUtils.isNullOrEmpty(work_place)){ continue; } if (work_place.equals("昆山")){ dept_code = getPerson(job_number,"1"); type = "1"; // System.out.println(dept_code); System.out.println(dept_code); }else if(work_place.equals("潍坊")){ dept_code = getPerson(job_number,"3"); type = "3"; }else{ continue; } }else{ continue; } if(map.get("originator_dept_name") == null){ continue; } String mess = null; SyViewEntity entity = new SyViewEntity(); if(map.get("originator_dept_name").toString().equals("营销设计中心-设计部") || map.get("originator_dept_name").toString().equals("营销设计中心-项目部") || map.get("originator_dept_name").toString().equals("营销设计中心-市场部")){ map1.put("item_class","00");//项目大类 --研发项目 map1.put("item_id","YFYYYY00001");//项目名称 --项目研发-公共 } if(map1.containsKey("差旅报销") && map1.get("差旅报销")!=null && Double.valueOf(map1.get("差旅报销").toString()) > 0){ account_code = getDeptCode(map.get("originator_dept_name").toString(),"差旅报销"); if(StringUtils.isNullOrEmpty(account_code) || account_code == null || account_code.equals("null")){ continue; } map1.put("abstract","差旅报销"); map1.put("naturalCurrency",map1.get("差旅报销")); map1.put("account_code",account_code);//科目编码 map1.put("dept_code",dept_code);//部门编码 map1.put("job_number",job_number);//人员编码 entity.setParType("差旅报销"); // System.out.println("============================差旅报销"+account_code); // System.out.println(map1); try { // mess = VoucherAdd.addVoucher(map1,map.get("business_id").toString()+"差旅",type); }catch (Exception e){ mess = e.getMessage(); } } if(map1.containsKey("私车公用报销") && map1.get("私车公用报销")!=null && Double.valueOf(map1.get("私车公用报销").toString()) > 0){ account_code = getDeptCode(map.get("originator_dept_name").toString(),"私车公用报销"); if(StringUtils.isNullOrEmpty(account_code) || account_code == null || account_code.equals("null")){ continue; } map1.put("abstract","私车公用报销"); map1.put("naturalCurrency",map1.get("私车公用报销")); map1.put("account_code",account_code);//科目编码 map1.put("dept_code",dept_code);//部门编码 map1.put("job_number",job_number);//人员编码 entity.setParType("私车公用报销"); // System.out.println("============================"); // System.out.println(map1); // System.out.println("============================私车公用报销"+account_code); try { // mess = VoucherAdd.addVoucher(map1,map.get("business_id").toString()+"私车公用",type); }catch (Exception e){ mess = e.getMessage(); } } if(map1.containsKey("其他报销科目") && map1.get("其他报销科目")!=null && Double.valueOf(map1.get("其他报销科目").toString()) > 0){ account_code = getDeptCode(map.get("originator_dept_name").toString(),"其他报销科目"); if(StringUtils.isNullOrEmpty(account_code) || account_code == null || account_code.equals("null")){ continue; } map1.put("abstract","其他报销科目"); map1.put("naturalCurrency",map1.get("其他报销科目")); map1.put("account_code",account_code);//科目编码 map1.put("dept_code",dept_code);//部门编码 map1.put("job_number",job_number);//人员编码 entity.setParType("其他报销科目"); // System.out.println("============================其他报销科目"+account_code+"===="+map.get("originator_dept_name").toString()); // System.out.println("============================"); // System.out.println(map1); try { mess = VoucherAdd.addVoucher(map1,map.get("business_id").toString()+"其他",type,""); }catch (Exception e){ mess = e.getMessage(); } } entity.setOaId(o); entity.setDeptName(map.get("originator_dept_name").toString()); entity.setDeptCode(dept_code); entity.setAccountCode(account_code); entity.setJobNumber(job_number); entity.setTableType("报销单"); entity.setSyMessage(mess); try { // u8Service.saveSyView(entity); }catch (Exception e){ System.out.println("异常1"); } } } } /** * 同步银行回单至u8凭证 * @throws Exception * @param st js:江苏,sd:山东 */ public void autoReimbursementNew(String st,String upTime) throws Exception { DingdingOpenInterface dingdingOpenInterface = new DingdingOpenInterface(); Properties prop = PropUtil.getProperties("/config.properties"); String PROC = prop.getProperty("yhhd_process_code"); if(st.equals("sd")){ PROC = prop.getProperty("yhhdsd_process_code"); } // List<String> list = dingdingOpenInterface.getOrderIdList(PROC); // List<String> list = dingdingOpenInterface.getOrderIdList2("PROC-C1EBBC4A-AA0D-4101-BEE8-8BFA5FEFABD8",-5); List<String> list = dingdingOpenInterface.getOrderIdList2(PROC,-31); // System.out.println(list); String job_number = "";//工号 String work_place = "";//办公地(潍坊对03账套 昆山对01账套) String dept_code = ""; //部门编码 String type = ""; //数据源账套 1昆山,3潍坊 List<SyViewEntity> listId = u8Service.selectViewBy31("银行凭证至U8"); if(list.size() > 0){ outCycle:for(String o:list){ if(listId.size() > 0){ for(SyViewEntity en:listId){ if(!StringUtils.isNullOrEmpty(en.getOaId()) && en.getOaId().equals(o)){ continue outCycle; } } } // Map<String,Object> map = dingdingOpenInterface.getOrderDetails("57942341-3589-43d3-9984-9a786dc9f97d");// Map<String,Object> map = dingdingOpenInterface.getOrderDetails(o);// if(StringUtils.isNullOrEmpty(map.get("result").toString()) || !map.get("result").toString().equals("agree")){ continue; } Map<String,Object> map1 = tableToMap4(map); Map<String,Object> mapPerson = dingdingOpenInterface.getViewByUserId((String) map1.get("申请人编码")); if(mapPerson !=null ){ job_number = mapPerson.get("job_number").toString();//"CHK2019002"; work_place = mapPerson.get("work_place").toString(); if(StringUtils.isNullOrEmpty(work_place)){ continue; } if (work_place.equals("昆山")){ dept_code = getPerson(job_number,"1"); type = "1"; }else if(work_place.equals("潍坊")){ dept_code = getPerson(job_number,"3"); type = "3"; }else{ continue; } }else{ continue; } if(map1.get("申请人所属部门") == null){ continue; } //如果是以下部门,则需要填写项目大类和项目名称 if(map1.get("申请人所属部门").toString().equals("营销设计中心-设计部") || map1.get("申请人所属部门").toString().equals("营销设计中心-项目部") || map1.get("申请人所属部门").toString().equals("营销设计中心-市场部")){ map1.put("item_class","00");//项目大类 --研发项目 map1.put("item_id","YFYYYY00001");//项目名称 --项目研发-公共 } if(map1.get("单据类型") == null){//备用金申请、报销申请 continue; } String mess = null; map1.put("dept_code",dept_code);//部门编码 map1.put("job_number",job_number);//人员编码 SyViewEntity entity = new SyViewEntity(); entity.setOaId(o); entity.setDeptName(map1.get("申请人所属部门").toString()); entity.setJobNumber(job_number); entity.setTableType("银行凭证至U8"); if(map1.get("单据类型").toString().equals("备用金申请")){ entity.setParType("备用金至U8凭证"); map1.put("account_code_jf","122102");//科目编码(借方) map1.put("account_code_df","10020101");//科目编码(贷方) JSONArray jsonArray2 = JSONArray.fromObject(map1.get("备用金申请").toString()); if(jsonArray2.size() == 0){ continue ; } net.sf.json.JSONObject object1 = jsonArray2.getJSONObject(0); map1.put("abstract",object1.get("申请事由")); map1.put("naturalCurrency",object1.get("申请金额")); try { mess = VoucherAdd.addVoucher(map1,map.get("business_id").toString()+"备用金",type,upTime); }catch (Exception e){ mess = e.getMessage(); } }else if(map1.get("单据类型").toString().equals("报销申请")){ entity.setParType("报销申请至U8"); try { mess = VoucherAdd.addVoucherNew(map1,map.get("business_id").toString()+"报销申请",type,upTime); }catch (Exception e){ mess = e.getMessage(); } }else{ continue ; } entity.setSyMessage(mess); u8Service.saveSyView(entity); } } } /** * 同步报销单至银行凭证 * @throws Exception */ public void autoOABankReceipt() throws Exception { DingdingOpenInterface dingdingOpenInterface = new DingdingOpenInterface(); Properties prop = PropUtil.getProperties("/config.properties"); String PROC = prop.getProperty("bx_process_code");//报销单 String YHHD = prop.getProperty("yhhd_process_code");//银行回单(江苏) String YHHDSD = prop.getProperty("yhhdsd_process_code");//银行回单(山东) String agentid = prop.getProperty("agentid"); String deptid = prop.getProperty("deptid"); String userid = prop.getProperty("userid"); List<String> list = dingdingOpenInterface.getOrderIdList2(PROC,-20); // List<String> list = dingdingOpenInterface.getOrderIdList("PROC-DD8FF68E-B90E-4885-8C17-F69E53BE5C81"); System.out.println("报销申请:"+list); List<SyViewEntity> listIdError = u8Service.selectViewByError("报销单至银行凭证"); List<SyViewEntity> listIdTrue = u8Service.selectViewByTrue("报销单至银行凭证"); if(list.size() > 0){ getToken(); outCycle:for(String o:list){ //获取当日同步失败的单据,控制当日不再同步 if(listIdError.size() > 0){ for(SyViewEntity en:listIdError){ if(!StringUtils.isNullOrEmpty(en.getOaId()) && en.getOaId().equals(o)){ continue outCycle; } } } //获取10天内同步成功的数据,控制不再同步 if(listIdTrue.size() > 0){ for(SyViewEntity en:listIdTrue){ if(!StringUtils.isNullOrEmpty(en.getOaId()) && en.getOaId().equals(o)){ continue outCycle; } } } // Map<String,Object> map = dingdingOpenInterface.getOrderDetails("e12ca8e8-e783-4652-b68e-e12648ed00c3"); Map<String,Object> map = dingdingOpenInterface.getOrderDetails(o); if(StringUtils.isNullOrEmpty(map.get("result").toString()) || !map.get("result").toString().equals("agree")){ continue; } SyViewEntity entity = new SyViewEntity(); Map<String,Object> newMap = tableToMap2(map); Map<String,Object> mapPerson = dingdingOpenInterface.getViewByUserId(map.get("originator_userid").toString()); String work_place = null; if(mapPerson !=null ){ work_place = mapPerson.get("work_place").toString(); if(StringUtils.isNullOrEmpty(work_place)){ continue; } if (!work_place.equals("昆山") && !work_place.equals("潍坊")){ continue; } }else{ continue; } DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create"); OapiProcessinstanceCreateRequest req = new OapiProcessinstanceCreateRequest(); req.setAgentId(Long.valueOf(agentid)); // req.setProcessCode("PROC-C1EBBC4A-AA0D-4101-BEE8-8BFA5FEFABD8");//银行回单TEST if (work_place.equals("昆山")){ req.setProcessCode(YHHD);//银行回单(江苏) }else{ req.setProcessCode(YHHDSD);//银行回单(山东) } req.setOriginatorUserId(userid); req.setDeptId(Long.valueOf(deptid)); List<OapiProcessinstanceCreateRequest.FormComponentValueVo> formComponentValueVoList = new ArrayList<OapiProcessinstanceCreateRequest.FormComponentValueVo>(); //申请人编码 OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueV5 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); formComponentValueV5.setName("申请人编码"); formComponentValueV5.setValue(map.get("originator_userid").toString()); formComponentValueVoList.add(formComponentValueV5); //申请人名称 OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueV6 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); formComponentValueV6.setName("申请人"); formComponentValueV6.setValue(map.get("title").toString()); formComponentValueVoList.add(formComponentValueV6); //所属部门 OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueV7 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); formComponentValueV7.setName("申请人所属部门"); formComponentValueV7.setValue(map.get("originator_dept_name").toString()); formComponentValueVoList.add(formComponentValueV7); //单据类型(报销申请、备用金申请) OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueV8 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); formComponentValueV8.setName("单据类型"); formComponentValueV8.setValue("报销申请"); formComponentValueVoList.add(formComponentValueV8); //申请时间 OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueV9 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); formComponentValueV9.setName("申请时间");//create_time formComponentValueV9.setValue(map.get("create_time").toString()); formComponentValueVoList.add(formComponentValueV9); //联系人明细 OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueVo1 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); OapiProcessinstanceCreateRequest.FormComponentValueVo Item1 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item1.setName("户名"); if(newMap.get("户名") == null){ continue ; } Item1.setValue(newMap.get("户名").toString()); OapiProcessinstanceCreateRequest.FormComponentValueVo Item2 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item2.setName("账号"); if(newMap.get("账号") != null){ Item2.setValue(newMap.get("账号").toString()); }else{ Item2.setValue("空"); } OapiProcessinstanceCreateRequest.FormComponentValueVo Item3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item3.setName("开户银行"); if(newMap.get("开户银行") != null){ Item3.setValue(newMap.get("开户银行").toString()); }else{ Item3.setValue("空"); } formComponentValueVo1.setName("收款人"); formComponentValueVo1.setValue(JSON.toJSONString(Arrays.asList(Arrays.asList(Item1, Item2, Item3)))); formComponentValueVoList.add(formComponentValueVo1); //差旅报销明细 if(newMap.get("差旅报销") != null && JSONArray.fromObject(newMap.get("差旅报销").toString()).size() > 0){ OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueVo2 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); List<List<OapiProcessinstanceCreateRequest.FormComponentValueVo>> viewList2 = new ArrayList<>(); JSONArray jsonArray1 = JSONArray.fromObject(newMap.get("差旅报销").toString()); for (int j = 0; j < jsonArray1.size(); j++) { List<OapiProcessinstanceCreateRequest.FormComponentValueVo> view = new ArrayList<>(); net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("发生日期") != null && object1.get("结束日期") != null && object1.get("发生日期") != "" && object1.get("结束日期") != ""){ OapiProcessinstanceCreateRequest.FormComponentValueVo Item21 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); JSONArray jsonArray = new JSONArray(); jsonArray.add(object1.get("发生日期").toString()); jsonArray.add(object1.get("结束日期").toString()); Item21.setName("[\"发生日期\",\"结束日期\"]"); Item21.setValue(jsonArray.toString()); // Item21.setValue("[\"2019-02-19\",\"2019-02-25\"]"); view.add(Item21); }else{ continue ; } if(object1.get("报销科目") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item22 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item22.setName("报销科目"); Item22.setValue(object1.get("报销科目").toString()); view.add(Item22); }else{ continue ; } if(object1.get("名称") != null && object1.get("名称") != "") { OapiProcessinstanceCreateRequest.FormComponentValueVo Item23 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item23.setName("名称"); Item23.setValue(object1.get("名称").toString()); view.add(Item23); } if(object1.get("次数") != null && object1.get("次数") != "") { OapiProcessinstanceCreateRequest.FormComponentValueVo Item24 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item24.setName("次数"); Item24.setValue(object1.get("次数").toString()); view.add(Item24); } if(object1.get("未税金额") != null && object1.get("未税金额") != "") { OapiProcessinstanceCreateRequest.FormComponentValueVo Item25 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item25.setName("未税金额"); Item25.setValue(object1.get("未税金额").toString()); view.add(Item25); }else{ continue ; } if(object1.get("税额") != null && object1.get("税额") != "") { OapiProcessinstanceCreateRequest.FormComponentValueVo Item26 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item26.setName("税额"); Item26.setValue(object1.get("税额").toString()); view.add(Item26); } if(object1.get("费用说明") != null && object1.get("费用说明") != "") { OapiProcessinstanceCreateRequest.FormComponentValueVo Item27 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item27.setName("费用说明"); Item27.setValue(object1.get("费用说明").toString()); view.add(Item27); } viewList2.add(view); } formComponentValueVo2.setName("差旅报销"); formComponentValueVo2.setValue(JSON.toJSONString(viewList2)); formComponentValueVoList.add(formComponentValueVo2); } //私车公用报销明细 if(newMap.get("私车公用报销") != null && JSONArray.fromObject(newMap.get("私车公用报销").toString()).size() > 0) { OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueVo3 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); List<List<OapiProcessinstanceCreateRequest.FormComponentValueVo>> viewList3 = new ArrayList<>(); JSONArray jsonArray1 = JSONArray.fromObject(newMap.get("私车公用报销").toString()); for (int j = 0; j < jsonArray1.size(); j++) { List<OapiProcessinstanceCreateRequest.FormComponentValueVo> view = new ArrayList<>(); net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("发生日期") != null && object1.get("结束日期") != null && object1.get("发生日期") != "" && object1.get("结束日期") != ""){ OapiProcessinstanceCreateRequest.FormComponentValueVo Item31 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); // Item31.setName("[\"发生日期\",\"结束日期\"]"); // Item31.setValue("[\"2019-02-19\",\"2019-02-25\"]"); // view.add(Item31); JSONArray jsonArray = new JSONArray(); jsonArray.add(object1.get("发生日期").toString()); jsonArray.add(object1.get("结束日期").toString()); Item31.setName("[\"发生日期\",\"结束日期\"]"); Item31.setValue(jsonArray.toString()); view.add(Item31); }else{ continue ; } if(object1.get("报销科目") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item32 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item32.setName("报销科目"); Item32.setValue(object1.get("报销科目").toString()); view.add(Item32); }else{ continue ; } if(object1.get("行程") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item33 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item33.setName("行程"); Item33.setValue(object1.get("行程").toString()); view.add(Item33); } if(object1.get("次数") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item34 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item34.setName("次数"); Item34.setValue(object1.get("次数").toString()); view.add(Item34); } if(object1.get("未税金额") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item35 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item35.setName("未税金额"); Item35.setValue(object1.get("未税金额").toString()); view.add(Item35); }else{ continue ; } if(object1.get("税额") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item36 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item36.setName("税额"); Item36.setValue(object1.get("税额").toString()); view.add(Item36); } if(object1.get("费用说明") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item37 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item37.setName("费用说明"); Item37.setValue(object1.get("费用说明").toString()); view.add(Item37); } // viewList3.add(Arrays.asList(Item31, Item32, Item33, Item34, Item35, Item36, Item37)); viewList3.add(view); } formComponentValueVo3.setName("私车公用报销"); formComponentValueVo3.setValue(JSON.toJSONString(viewList3)); formComponentValueVoList.add(formComponentValueVo3); } //其他报销科目明细 if(newMap.get("其他报销科目") != null && JSONArray.fromObject(newMap.get("其他报销科目").toString()).size() > 0) { OapiProcessinstanceCreateRequest.FormComponentValueVo formComponentValueVo4 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); List<List<OapiProcessinstanceCreateRequest.FormComponentValueVo>> viewList4 = new ArrayList<>(); JSONArray jsonArray1 = JSONArray.fromObject(newMap.get("其他报销科目").toString()); for (int j = 0; j < jsonArray1.size(); j++) { List<OapiProcessinstanceCreateRequest.FormComponentValueVo> view = new ArrayList<>(); net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("发生日期") != null && object1.get("结束日期") != null && object1.get("发生日期") != "" && object1.get("结束日期") != ""){ OapiProcessinstanceCreateRequest.FormComponentValueVo Item41 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); // Item41.setName("[\"发生日期\",\"结束日期\"]"); // Item41.setValue("[\"2019-02-19\""); // view.add(Item41); JSONArray jsonArray = new JSONArray(); jsonArray.add(object1.get("发生日期").toString()); jsonArray.add(object1.get("结束日期").toString()); Item41.setName("[\"发生日期\",\"结束日期\"]"); Item41.setValue(jsonArray.toString()); view.add(Item41); }else{ continue ; } if(object1.get("报销科目") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item42 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item42.setName("报销科目"); Item42.setValue(object1.get("报销科目").toString()); view.add(Item42); }else{ continue ; } if(object1.get("名称") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item43 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item43.setName("名称"); Item43.setValue(object1.get("名称").toString()); view.add(Item43); } if(object1.get("单位") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item44 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item44.setName("单位"); Item44.setValue(object1.get("单位").toString()); view.add(Item44); } if(object1.get("数量") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item48 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item48.setName("数量"); Item48.setValue(object1.get("数量").toString()); view.add(Item48); } if(object1.get("未税金额") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item45 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item45.setName("未税金额"); Item45.setValue(object1.get("未税金额").toString()); view.add(Item45); }else{ continue ; } if(object1.get("税额") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item46 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item46.setName("税额"); Item46.setValue(object1.get("税额").toString()); view.add(Item46); } if(object1.get("费用说明") != null) { OapiProcessinstanceCreateRequest.FormComponentValueVo Item47 = new OapiProcessinstanceCreateRequest.FormComponentValueVo(); Item47.setName("费用说明"); Item47.setValue(object1.get("费用说明").toString()); view.add(Item47); } // viewList4.add(Arrays.asList(Item41, Item42, Item43, Item44, Item48, Item45, Item46, Item47)); viewList4.add(view); } if(viewList4.size() > 0){ formComponentValueVo4.setName("其他报销科目"); formComponentValueVo4.setValue(JSON.toJSONString(viewList4)); formComponentValueVoList.add(formComponentValueVo4); } } req.setFormComponentValues(formComponentValueVoList); String useridshenh = prop.getProperty("shenhe_userid"); if (!useridshenh.equals("")){ List<OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo> processInstanceApproverVoList = new ArrayList<OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo>(); OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo processInstanceApproverVo = new OapiProcessinstanceCreateRequest.ProcessInstanceApproverVo(); processInstanceApproverVoList.add(processInstanceApproverVo); processInstanceApproverVo.setTaskActionType("NONE"); processInstanceApproverVo.setUserIds(Arrays.asList(useridshenh)); req.setApproversV2(processInstanceApproverVoList); } OapiProcessinstanceCreateResponse rsp = client.execute(req, gettoken); entity.setOaId(o); entity.setOaNid(rsp.getProcessInstanceId()); entity.setDeptName(map.get("originator_dept_name").toString()); entity.setJobNumber(map.get("title").toString()); entity.setTableType("报销单至银行凭证"); entity.setSyMessage(rsp.getErrmsg()); if(rsp.isSuccess()){ entity.setSyState("true"); }else{ entity.setSyState("false"); } try { u8Service.saveSyView(entity); }catch (Exception e){ System.out.println("异常2同步报销单至银行凭证"); } // System.out.println("============"+JSON.toJSONString(rsp)); // System.out.println("============"+JSON.toJSONString(rsp.getErrmsg())); // System.out.println("============"+JSON.toJSONString(rsp.isSuccess())); } } } public static Map<String,Object> tableToMap4(Map<String,Object> map1) throws Exception { List<Map<String,Object>> listMap = (List<Map<String, Object>>) map1.get("form_component_values"); Map<String,Object> newMap = new HashMap<String,Object>(); // System.out.println(map1); for(Map<String, Object> o:listMap){ if(o.get("name")==null || StringUtils.isNullOrEmpty(o.get("name").toString())){ continue; } if(o.get("name").equals("申请人编码") && o.get("value") != null){ newMap.put("申请人编码",o.get("value")); } if(o.get("name").equals("申请人所属部门") && o.get("value") != null){ newMap.put("申请人所属部门",o.get("value")); } if(o.get("name").equals("申请人") && o.get("value") != null){ newMap.put("申请人",o.get("value")); } if(o.get("name").equals("单据类型") && o.get("value") != null){ newMap.put("单据类型",o.get("value")); } if(o.get("name").equals("收款人") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); if(object.get("rowValue") == null || object.get("rowValue") == ""){ continue; } JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); map.put(object1.get("label").toString(),object1.get("value")); } listView.add(map); } } newMap.put("收款人",listView); } } if(o.get("name").equals("备用金申请") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); if(object.get("rowValue") == null || object.get("rowValue") == ""){ continue; } JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"使用日期\",\"归还日期\"]")){ JSONArray aa = JSONArray.fromObject(object1.get("value")); if(aa.size() > 1){ map.put("使用日期",aa.get(0)); map.put("归还日期",aa.get(1)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("备用金申请",listView); } } if(o.get("name").equals("差旅报销") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); if(object.get("rowValue") == null || object.get("rowValue") == ""){ continue; } JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"发生日期\",\"结束日期\"]")){ JSONArray aa = JSONArray.fromObject(object1.get("value")); if(aa.size() > 1){ map.put("发生日期",aa.get(0)); map.put("结束日期",aa.get(1)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("差旅报销",listView); } } if(o.get("name").equals("私车公用报销") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); if(object.get("rowValue") == null || object.get("rowValue") == ""){ continue; } JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"发生日期\",\"结束日期\"]")){ JSONArray aa = JSONArray.fromObject(object1.get("value")); if(aa.size() > 1){ map.put("发生日期",aa.get(0)); map.put("结束日期",aa.get(1)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("私车公用报销",listView); } } if(o.get("name").equals("其他报销科目") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); if(object.get("rowValue") == null || object.get("rowValue") == ""){ continue; } JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"发生日期\",\"结束日期\"]")){ JSONArray aa = JSONArray.fromObject(object1.get("value")); if(aa.size() > 1){ map.put("发生日期",aa.get(0)); map.put("结束日期",aa.get(1)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("其他报销科目",listView); } } } return newMap; } public static Map<String,Object> tableToMap2(Map<String,Object> map1) throws Exception { List<Map<String,Object>> listMap = (List<Map<String, Object>>) map1.get("form_component_values"); Map<String,Object> newMap = new HashMap<String,Object>(); for(Map<String, Object> o:listMap){ if(o.get("component_type").equals("RecipientAccountField")){ Map<String,Object> mapValue = JSONUtils.jsonToMap((String) o.get("ext_value")); newMap.put("户名",mapValue.get("name")); newMap.put("账号",mapValue.get("cardNo")); newMap.put("开户银行",mapValue.get("instName")); } if(o.get("name")==null || StringUtils.isNullOrEmpty(o.get("name").toString())){ continue; } if(o.get("name").equals("收款账号") && o.get("value") != null && newMap.get("账号") == null){ newMap.put("账号",o.get("value")); } if(o.get("name").equals("差旅报销") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); // Map<String,Object> map = new HashMap<>(); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"发生日期\",\"结束日期\"]")){ List<String> aa = (List<String>) object1.get("value"); if(aa.size() > 1){ map.put("发生日期",aa.get(0)); map.put("结束日期",aa.get(1)); } }else if(object1.get("label").toString().equals("报销科目")){ List<String> aa = (List<String>) object1.get("value"); if(aa.size() > 0){ map.put("报销科目",aa.get(0)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("差旅报销",listView); } } if(o.get("name").equals("私车公用报销") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); // Map<String,Object> map = new HashMap<>(); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"发生日期\",\"结束日期\"]")){ List<String> aa = (List<String>) object1.get("value"); if(aa.size() > 1){ map.put("发生日期",aa.get(0)); map.put("结束日期",aa.get(1)); } }else if(object1.get("label").toString().equals("报销科目")){ List<String> aa = (List<String>) object1.get("value"); if(aa.size() > 0){ map.put("报销科目",aa.get(0)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("私车公用报销",listView); } } if(o.get("name").equals("其他报销科目") && o.get("value") != null){ JSONArray jsonArray = JSONArray.fromObject(o.get("value").toString()); if(jsonArray.size() > 0){ List<Map<String,Object>> listView = new ArrayList<>(); for(int i=0;i<jsonArray.size();i++){ net.sf.json.JSONObject object = jsonArray.getJSONObject(i); JSONArray jsonArray1 = JSONArray.fromObject(object.get("rowValue").toString()); // Map<String,Object> map = new HashMap<>(); JSONObject map = new JSONObject(); if(jsonArray1.size() > 0){ for(int j=0;j<jsonArray1.size();j++){ net.sf.json.JSONObject object1 = jsonArray1.getJSONObject(j); if(object1.get("label").toString().equals("[\"发生日期\",\"结束日期\"]")){ List<String> aa = (List<String>) object1.get("value"); if(aa.size() > 1){ map.put("发生日期",aa.get(0)); map.put("结束日期",aa.get(1)); } }else if(object1.get("label").toString().equals("报销科目")){ List<String> aa = (List<String>) object1.get("value"); if(aa.size() > 0){ map.put("报销科目",aa.get(0)); } }else{ map.put(object1.get("label").toString(),object1.get("value")); } } listView.add(map); } } newMap.put("其他报销科目",listView); } } } // System.out.println("========================="); // System.out.println("========================="); return newMap; } public static Map<String,Object> tableToMap3(Map<String,Object> map1){ List<Map<String,Object>> listMap = (List<Map<String, Object>>) map1.get("form_component_values"); // System.out.println(listMap); Map<String,Object> newMap = new HashMap<>(); int st = 0; for(Map<String, Object> o:listMap){ // System.out.println(o); // System.out.println("========================="); if(o.get("name")==null || StringUtils.isNullOrEmpty(o.get("name").toString())){ continue; } if(o.get("name").equals("差旅报销")){ st = 1; } if(o.get("name").equals("私车公用报销")){ st = 2; } if(o.get("name").equals("其他报销科目")){ st = 3; } if(st == 1 && o.get("name").equals("合计")){ if(newMap.containsKey("差旅报销")){ newMap.put("差旅报销",Double.valueOf(o.get("value").toString())+Double.valueOf(newMap.get("差旅报销").toString()) ); }else { newMap.put("差旅报销",o.get("value")); } } if(st == 2 && o.get("name").equals("合计")){ if(newMap.containsKey("私车公用报销")){ newMap.put("私车公用报销",Double.valueOf(o.get("value").toString())+Double.valueOf(newMap.get("私车公用报销").toString()) ); }else { newMap.put("私车公用报销",o.get("value")); } } if(st == 3 && o.get("name").equals("合计")){ if(newMap.containsKey("其他报销科目")){ newMap.put("其他报销科目",Double.valueOf(o.get("value").toString())+Double.valueOf(newMap.get("其他报销科目").toString()) ); }else { newMap.put("其他报销科目",o.get("value")); } } } return newMap; } /** * 通过部门名称对应u8科目编码 * @param dept * @return */ public static String getDeptCode(String dept,String type){ if(dept.equals("营销设计中心-总经理室") || dept.equals("营销设计中心-采购部") || dept.equals("共享中心-财务部") || dept.equals("共享中心-人事行政部")){ if("差旅报销".equals(type)){ return "66020704"; }else if("私车公用报销".equals(type)){ return "66020702"; }else{ return "66020706"; } }else if(dept.equals("营销设计中心-销售部")){ if("差旅报销".equals(type)){ return "6601070104"; }else if("私车公用报销".equals(type)){ return "6601070102"; }else{ return "6601070106"; } }else if(dept.equals("营销设计中心-设计部")){ if("差旅报销".equals(type)){ return "66040704"; }else if("私车公用报销".equals(type)){ return "66040702"; }else{ return "66040706"; } }else if(dept.equals("营销设计中心-项目部") || dept.equals("营销设计中心-市场部")){ if("差旅报销".equals(type)){ return "6601070204"; }else if("私车公用报销".equals(type)){ return "6601070202"; }else{ return "6601070206"; } } return null; } /** * 根据人员编码查询u8人员信息 * @param id * @param ds */ public static String getPerson(String id,String ds){ Properties prop = PropUtil.getProperties("/config.properties"); String to_account = prop.getProperty("to_account"); PersonService par = new PersonService(); String code = ""; try { JSONObject record = par.get(id, to_account,ds); if(record.get("errcode").equals("0")){ JSONObject record1 = (JSONObject) record.get("person"); code = record1.get("cdept_num").toString(); } // System.out.println(record); } catch (OpenAPIException e) { return code; } return code; } /** * 获取钉钉企业内部应用的access_token */ public static void getToken(){ try { Properties prop = PropUtil.getProperties("/config.properties"); String appkey = prop.getProperty("ding_appkey"); String appsecret = prop.getProperty("ding_appsecret"); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); OapiGettokenRequest req = new OapiGettokenRequest(); req.setHttpMethod("GET"); req.setAppkey(appkey); req.setAppsecret(appsecret); OapiGettokenResponse rsp = client.execute(req); Map<String,String> map; map = toMap(rsp.getBody()); if(map.get("errcode").equals("0")){ gettoken = map.get("access_token"); }else{ gettoken = "error"; } } catch (ApiException | JSONException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static Map toMap(String jsonString) throws JSONException { org.springframework.boot.configurationprocessor.json.JSONObject jsonObject = new org.springframework.boot.configurationprocessor.json.JSONObject(jsonString); Map result = new HashMap(); Iterator iterator = jsonObject.keys(); String key = null; String value = null; while (iterator.hasNext()) { key = (String) iterator.next(); value = jsonObject.getString(key); result.put(key, value); } return result; } public static void main(String[] args) throws Exception { // autoOABankReceipt(); // autoReimbursement(); // autoReimbursementNew("js"); // String aa = ""; // if("12334".contains("1")){ // System.out.println("sssssssssss"); // } // BigDecimal aa = new BigDecimal("10"); // BigDecimal multiply = aa.multiply(BigDecimal.valueOf(0.09)).multiply(aa); // System.out.println(multiply); // DingdingOpenInterface dingdingOpenInterface = new DingdingOpenInterface(); // Properties prop = PropUtil.getProperties("/config.properties"); // String PROC = prop.getProperty("bx_process_code"); // String PROC1 = prop.getProperty("byj_process_code"); // List<String> list = dingdingOpenInterface.getOrderIdList2(PROC,-2); // List<String> list1 = dingdingOpenInterface.getOrderIdList2(PROC1,-7); // System.out.println(list); // System.out.println("========1======"); // Thread.currentThread().sleep(5000);//延迟5秒 // Thread.sleep(3000);//与上行代码无区别 // System.out.println("========2======"); // System.out.println(list1); } }