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


    }



}