package psdi.app.iface.oa;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.webclient.beans.udbudgetTask.udBudgetAppbean;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;
import psdi.app.iface.comm.UrlConstants;
import psdi.app.iface.comm.httpUtils.HttpClientUtil;
import psdi.app.iface.udIFLogHandler;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXException;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.rmi.RemoteException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;

/**
 * 数据方向 OA-->EAM
 * 接口调用方向：EAM-->ESB-->OA
 * 1)EAM系统传流程待办任务到OA系统，OA通过URL地址单点登录，跳转到EAM系统应用详情页，进行审批.
 * 2)EAM拉取OA系统项目立项预算申请
 */
public class OA2EamHandler {
    //OA接收待办测试地址
//    final String restUrl = "http://oatest2.sunda.com:9002/rest/ofs/ReceiveRequestInfoByJson";

    public static void main (String[] args) throws Exception {
//        new OA2EamHandler().OA_EAM_WORKFLOW_IDLE(null);
    }

    public void OA_EAM_WORKFLOW_IDLE(List<Map<String, Object>> orderWerksInfo) throws IOException, MXException {
        System.out.println("OA_EAM_WORKFLOW_IDLE--->调用模拟数据===============================");
        //模拟数据
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = new HashMap<String, Object>();
        MboSetRemote mobSet = MXServer.getMXServer().getMboSet("WFASSIGNMENT",MXServer.getMXServer().getSystemUserInfo());
        mobSet.setWhere("APP='UDQXGL' AND wfid =(select wfid from WFINSTANCE where OWNERTABLE ='WORKORDER' AND OWNERID in (SELECT WORKORDERID FROM WORKORDER WHERE WONUM='2155')) and assignstatus in (select value from synonymdomain where domainid='WFASGNSTATUS' and maxvalue='ACTIVE')");
        mobSet.reset();
        MboRemote wfMbo=mobSet.getMbo(0);
        SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if(null!=wfMbo){
            JSONObject json = new JSONObject();
            json.put("flowid", wfMbo.getInt("WFASSIGNMENTID")+"");//流程实例id
            json.put("requestname", wfMbo.getString("DESCRIPTION"));//工作流任务描述
            json.put("workflowname", wfMbo.getString("APP"));//流程类型名称
            json.put("nodename", wfMbo.getString("DESCRIPTION"));//节点名称 待根据主表获取流程图节点
            json.put("isremark", "0"); //流程状态，默认传0，待办
            json.put("viewtype", "0"); //流程查看状态，默认传0，待办
            json.put("creator", wfMbo.getString("ASSIGNCODE"));//单据创建人 待根据主表获取
            json.put("createdatetime", sf.format(wfMbo.getDate("STARTDATE"))+"");//单据创建时间 待根据主表获取
            json.put("receiver", "0113992");//流程接收人
            json.put("receivedatetime", sf.format(wfMbo.getDate("STARTDATE"))+"");//接收时间
            json.put("requestlevel", "0");//流程紧急程度
            json.put("pcurl", "http://10.86.109.20:7001?event=loadapp&value=UDQXGL&additionalevent=inboxwf&uniqueid="+wfMbo.getInt("OWNERID")+"");//跳转的URL地址
            json.put("receivets",String.valueOf(System.currentTimeMillis()));
            json.put("syscode","eam");//异构系统标识：规定小写
            dataList.add(map);
            // 发送请求数据格式化
            JSONObject alldata = formatDataSend(dataList);
            // 调用接口
            JSONObject result = HttpUtilOa.post(UrlConstants.restUrl, json);
        }
    }

    /**
     * 先进行数据格式化
     */
    public JSONObject formatDataSend(List<Map<String, Object>> dataList) {
        JSONObject WORKFLOWINFO_DATA = new JSONObject();
        //传送的数据
        WORKFLOWINFO_DATA.put("syscode","eam");//异构系统标识：规定小写
        WORKFLOWINFO_DATA.put("receivets",String.valueOf(System.currentTimeMillis()));//当前时间的时间戳
        WORKFLOWINFO_DATA.put("flowid",dataList.get(0).get("flowid"));//流程实例id
        WORKFLOWINFO_DATA.put("requestname",dataList.get(0).get("requestname"));//工作流任务描述
        WORKFLOWINFO_DATA.put("workflowname",dataList.get(0).get("workflowname"));//流程类型名称
        WORKFLOWINFO_DATA.put("nodename",dataList.get(0).get("nodename"));//节点名称
        WORKFLOWINFO_DATA.put("isremark",dataList.get(0).get("isremark"));//流程状态，默认传0，待办
        WORKFLOWINFO_DATA.put("viewtype",dataList.get(0).get("viewtype"));//流程查看状态，默认传0，未读
        WORKFLOWINFO_DATA.put("creator",dataList.get(0).get("creator"));//单据创建人
        WORKFLOWINFO_DATA.put("createdatetime",dataList.get(0).get("createdatetime"));//单据创建时间
        WORKFLOWINFO_DATA.put("receiver",dataList.get(0).get("receiver"));//流程接收人
        WORKFLOWINFO_DATA.put("receivedatetime",dataList.get(0).get("receivedatetime"));//接收时间
        WORKFLOWINFO_DATA.put("requestlevel",dataList.get(0).get("requestlevel"));//流程紧急程度
        WORKFLOWINFO_DATA.put("pcurl",dataList.get(0).get("pcurl"));//跳转EAM的URL
        return WORKFLOWINFO_DATA;
    }

    //--EAM 拉取 OA 项目立项预算支出申请接口------------------直连方式-----------------start----------------------
    // OA联调负责人：刘大港
/*    public void EAM_TO_OA_BUDGET() throws IOException, MXException {
        //2024-4-1 OA 测试环境地址进行修改
//        String postURL = "http://oa.sit.sunda.top/api/cube/restful/interface/getDataByPK/xmsj_oa";
        CloseableHttpResponse response;// 响应类,
        System.out.println("---项目立项1---");
        CloseableHttpClient httpClient = createUnsafeCloseableHttpClient();
        System.out.println("---项目立项2---");
        //2024-4-1 OA生产环境地址，改为了https，同时地址发生了变化，需要跳过证书验证
        //20240807 特福测试地址 https://oatest.twyfordtile.top/
        String postURL = UrlConstants.postURL;
        System.out.println("---项目立项3---");
        HttpPost httpPost = new HttpPost(postURL);
        System.out.println("---项目立项4---");
        //当前日期
        String currentDate = getCurrentDate();
        //当前时间
        String currentTime = getCurrentTime();
        //获取时间戳
        String currentTimeTamp = getTimestamp();
        //装填参数
        HashMap<String, String> operator = new HashMap<>();
//        HashMap<String, String> mainTable = new HashMap<>();
        JSONObject mainTable = new JSONObject();
        HashMap<String, String> header = new HashMap<>();
//        HashMap<String, String> pageInfo = new HashMap<>();
        JSONObject pageInfo = new JSONObject();
        Map<String,Object> params = new HashMap<>();
        Map paramDatajson = new HashMap<>();
        String systemid = "eam";//系统标识
        String d_password = "Sd123456";//密码
        //封装header里的参数
        header.put("systemid",systemid);
        header.put("currentDateTime",currentTimeTamp);
        String md5Source = systemid+d_password+currentTimeTamp;
        String md5OfStr = getMD5Str(md5Source).toLowerCase();
        header.put("Md5",md5OfStr);//Md5是：系统标识+密码+时间戳 并且md5加密的结果
//        header.put("feedbackLanguage","7");//7：中文 8：英文 9：繁体中文
//        params.put("header",header);
        paramDatajson.put("header",header);
        //封装mainTable参数
        // mainTable.put("id", "1");
        paramDatajson.put("mainTable",mainTable);
        //封装operationinfo参数
        JSONObject operationinfo = new JSONObject();
        operationinfo.put("operator", "0113541");
        paramDatajson.put("operationinfo",operationinfo);
        try {
            boolean flag = true;
            int n = 1;
            while (flag) {
                //封装pageinfo
                int pageNo = 1 * n;
                int pageSize = 200;
                pageInfo.put("pageNo", pageNo);
                pageInfo.put("pageSize", pageSize);
                paramDatajson.put("pageInfo", pageInfo);
                System.out.println("---------------request datajson=" + paramDatajson);
                params.put("datajson", paramDatajson);
                //装填参数
                List nvps = new ArrayList();
                if (params != null) {
                    for (Map.Entry entry : params.entrySet()) {
                        nvps.add(new BasicNameValuePair(null2String(entry.getKey()), JSONObject.toJSONString(entry.getValue())));
                    }
                }
                httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
                httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
                response = httpClient.execute(httpPost);
                System.out.println("---项目立项5--response--"+response);
                if (response != null && response.getEntity() != null) {
                    //返回信息
                    String result = EntityUtils.toString(response.getEntity());
                    System.out.println("--项目立项信息OA返回信息--"+result);
                    //todo这里处理返回信息
                    JSONObject reultObj = JSONObject.parseObject(result);
                    JSONArray res = reultObj.getJSONArray("result");
                    if (reultObj==null || reultObj.isEmpty() || res==null || res.isEmpty()){
                        break;
                    }else {
                        JSONObject resultJson = EAM_TO_OA_BUDGET_RECEVICEJSON(result);
                        n=n+1;
                    }
                } else {
                    System.out.println("获取数据失败，请查看日志" + currentDate + " " + currentTime);
                }
            }
            }catch(Exception e){
                System.out.println("oa返回错误信息，请联系oa" + currentDate + " " + currentTime + "====errormsg:" + e.getMessage());
            }
    }*/

    public static CloseableHttpClient createUnsafeCloseableHttpClient() {
        try {
            // 创建SSLContext
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                @Override
                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    // 信任所有
                    return true;
                }
            }).build();

            // 设置SSLContext到SSLConnectionSocketFactory
            SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                    sslContext,
                    SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            CloseableHttpClient httpClient = HttpClients.custom()
                    .setSSLSocketFactory(sslConnectionSocketFactory)
                    .build();

            return httpClient;
        } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
            throw new RuntimeException(e);
        }
    }
    public String getMD5Str(String plainText){
        //定义一个字节数组
        byte[] secretBytes = null;
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            //对字符串进行加密
            md.update(plainText.getBytes());
            //获得加密后的数据
            secretBytes = md.digest();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有md5这个算法！");
        }
        //将加密后的数据转换为16进制数字
        String md5code = new BigInteger(1, secretBytes).toString(16);
        // 如果生成数字未满32位，需要前面补0
        // 不能把变量放到循环条件，值改变之后会导致条件变化。如果生成30位 只能生成31位md5
        int tempIndex = 32 - md5code.length();
        for (int i = 0; i < tempIndex; i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }
    public static String getCurrentTime() {
        Date newdate = new Date();
        long datetime = newdate.getTime();
        Timestamp timestamp = new Timestamp(datetime);
        String currenttime = (timestamp.toString()).substring(11, 13) + ":" + (timestamp.toString()).substring(14, 16) + ":"
                + (timestamp.toString()).substring(17, 19);
        return currenttime;
    }
    public static String getCurrentDate() {
        Date newdate = new Date();
        long datetime = newdate.getTime();
        Timestamp timestamp = new Timestamp(datetime);
        String currentdate = (timestamp.toString()).substring(0, 4) + "-" + (timestamp.toString()).substring(5, 7) + "-"
                + (timestamp.toString()).substring(8, 10);
        return currentdate;
    }
    /**
     * 获取当前日期时间。 YYYY-MM-DD HH:MM:SS
     * @return		当前日期时间
     */
    public static String getCurDateTime() {
        Date newdate = new Date();
        long datetime = newdate.getTime();
        Timestamp timestamp = new Timestamp(datetime);
        return (timestamp.toString()).substring(0, 19);
    }
    /**
     * 获取时间戳   格式如：19990101235959
     * @return
     */
    public static String getTimestamp(){
        return getCurDateTime().replace("-", "").replace(":", "").replace(" ", "");
    }
    public static int getIntValue(String v, int def) {
        try {
            return Integer.parseInt(v);
        } catch (Exception ex) {
            return def;
        }
    }
    public static String null2String(Object s) {
        return s == null ? "" : s.toString();
    }
    //---EAM 拉取 OA 项目立项预算支出申请接口------------------------直连方式-----end-----------------------------------

    //---EAM 拉取 OA 项目立项预算支出申请接口------------------------经esb-----start-----------------------------------
    public void Z_OA_XMDATAGET() throws IOException, MXException, ParseException {
        Date faqDate = new Date();
        boolean flag = true;
        int n = 1;
        while (flag){
            int pageNo = 1*n;
            int pageSize = 200;
            String pageNoStr = String.valueOf(pageNo);
            String pageSizeStr = String.valueOf(pageSize);
            JSONObject alldata = formatDataSend("",pageNoStr,pageSizeStr);//调用esb对象
            JSONObject result = HttpUtilOa.post(UrlConstants.getMDMPersonUrl, alldata);//全量对象
            JSONArray jSONArray = formatDataReceived(JSON.toJSONString(result));//解析返回值
            if (result==null || result.isEmpty() || jSONArray==null || jSONArray.isEmpty()) {
                System.out.println("-----------qllq finish--------------------");
                break;
            }else {
                if(EAM_TO_OA_BUDGET_RECEVICEJSON(jSONArray)){
                    n=n+1;
                    System.out.println("----------进行中------------------n="+n);
                }else{
                    break;
                }
            }
        }
    }

    public boolean EAM_TO_OA_BUDGET_RECEVICEJSON(JSONArray resultArray)  {
        boolean issuccess = true;
        try{
            if(resultArray!=null && !resultArray.isEmpty()){
                //主表删除
//                MboSetRemote mobSet = MXServer.getMXServer().getMboSet("UDBUDGET",MXServer.getMXServer().getSystemUserInfo());
//                mobSet.deleteAll();
//                mobSet.save();
                //子表删除
//                MboSetRemote LineMobSet = MXServer.getMXServer().getMboSet("UDBUDGETLINE",MXServer.getMXServer().getSystemUserInfo());
//                LineMobSet.deleteAll();
//                LineMobSet.save();
                //地点
                MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE",MXServer.getMXServer().getSystemUserInfo());
                for(int i=0;i<resultArray.size();i++){
                    JSONObject jsObject = resultArray.getJSONObject(i);//循环对象
                    if(jsObject!=null){
                        //获取主表
                        JSONObject mainTableJsOBJ = jsObject.getJSONObject("mainTable");
                        Integer UDBUDGETID = null; //父级
                        Integer deleteUDBUDGETID = null;//要删除的ID
                        String PROJECTNUM = "";
                        if(mainTableJsOBJ!=null){
                            String OAID = mainTableJsOBJ.getString("id");//OA表主键 --
                            //先删除
                            MboSetRemote mobSet = MXServer.getMXServer().getMboSet("UDBUDGET",MXServer.getMXServer().getSystemUserInfo());
                            if(mobSet!=null && !mobSet.isEmpty()){
                                mobSet.setWhere("ISFLAG='N' and OAID='"+OAID+"'");
                                mobSet.reset();
                                if(mobSet!=null && !mobSet.isEmpty()){
                                    deleteUDBUDGETID = mobSet.getMbo(0).getInt("UDBUDGETID");
                                    mobSet.getMbo(0).delete(11L);
                                    mobSet.save();
                                }
                            }
                            //主表-再新增
                            MboRemote mbo = mobSet.add();//主表新增
                            UDBUDGETID = mbo.getInt("UDBUDGETID");//表ID --
                            mbo.setValue("ISFLAG","N",11L);//标识 --
                            mbo.setValue("OAID",OAID,11L);
                            String PJDUTY = mainTableJsOBJ.getString("xmfzr");//项目负责人 --
                            mbo.setValue("PJDUTY",PJDUTY,11L);
                            PROJECTNUM = mainTableJsOBJ.getString("lcbh");//流程编号-项目编号 --
                            mbo.setValue("PROJECTNUM",PROJECTNUM,11L);
                            String PROJECTID = mainTableJsOBJ.getString("xmid");//项目ID --
                            mbo.setValue("PROJECTID",PROJECTID,11L);
                            String APPLYPEO = mainTableJsOBJ.getString("sqr");//申请人 --
                            mbo.setValue("APPLYPEO",APPLYPEO,11L);
                            String PROJECTNAME = mainTableJsOBJ.getString("xmmc");//项目名称 --
                            mbo.setValue("PROJECTNAME",PROJECTNAME,11L);
                            String DEPTNUM = mainTableJsOBJ.getString("xmbm");//项目部门 --
                            mbo.setValue("DEPTNUM",DEPTNUM,11L);
                            String PLSTARTDATE = mainTableJsOBJ.getString("yjkssj");//预计开始时间 --
                            mbo.setValue("PLSTARTDATE",PLSTARTDATE,11L);
                            String PLENDDATE = mainTableJsOBJ.getString("yjjssj");//预计结束时间 --
                            mbo.setValue("PLENDDATE",PLENDDATE,11L);
                            String PJTYPE = mainTableJsOBJ.getString("xmlx");//项目类型 --
                            mbo.setValue("PJTYPE",PJTYPE,11L);
                            String BGTOTAL = mainTableJsOBJ.getString("jhztz");//计划总投资 --
                            mbo.setValue("BGTOTAL",BGTOTAL,11L);
                            String STATUS = mainTableJsOBJ.getString("xmzt");//项目状态 --
                            mbo.setValue("STATUS",STATUS,11L);
                            String SAPBH = mainTableJsOBJ.getString("xmsapbh");//项目SAP内部订单组 --
                            mbo.setValue("SAPBH",SAPBH,11L);
                            String xmgsdm = mainTableJsOBJ.getString("xmgsdm");//公司代码 --
                            String SITEID = mainTableJsOBJ.getString("gc");//工厂-----沟通后，OA需要新增这个字段，同时郭小丹维护 --
                            String ORGID = "";
                            if(SITEID!=null && !"".equals(SITEID)){
                                SITESet.setWhere("SITEID='"+SITEID+"'");
                                SITESet.reset();
                                if(SITESet!=null && !SITESet.isEmpty()){
                                    MboRemote siteMbo = SITESet.getMbo(0);
                                    ORGID = siteMbo.getString("ORGID");
                                    mbo.setValue("ORGID",ORGID,11L);
                                }
                            }
                            mbo.setValue("SITEID",SITEID,11L);
                            String PROJECTNAMEEN = mainTableJsOBJ.getString("xmywm");//项目英文名 --
                            mbo.setValue("PROJECTNAMEEN",PROJECTNAMEEN,11L);
                            String ZGLCH = mainTableJsOBJ.getString("zglch");//转固流程号，--
                            mbo.setValue("ZGLCH",ZGLCH,11L);
                            String COMPANYTYPE = mainTableJsOBJ.getString("gslx");//公司类型 --
                            mbo.setValue("COMPANYTYPE",COMPANYTYPE,11L);
                            String COMPANY = mainTableJsOBJ.getString("ssgs");//所属公司 --
                            mbo.setValue("COMPANY",COMPANY,11L);
                            String APPLYTYPE = mainTableJsOBJ.getString("sqlx");//申请类型 --
                            mbo.setValue("APPLYTYPE",APPLYTYPE,11L);
                            String YWX = mainTableJsOBJ.getString("ywx");//业务线
                            mbo.setValue("YWX",YWX,11L);
                            String sfqy = mainTableJsOBJ.getString("sfqy");//sfqy：是否启用  0代表是，1代表否
                            mbo.setValue("SFQY",sfqy,11L);
                            mbo.getThisMboSet().save();
                        }
                        //获取子表
                        JSONArray detail1ArrayJSON = JSONArray.parseArray(jsObject.getString("detail1"));
                        if(detail1ArrayJSON!=null && !detail1ArrayJSON.isEmpty()){
                            for(int m=0;m<detail1ArrayJSON.size();m++){
                                JSONObject lineJsObj = detail1ArrayJSON.getJSONObject(m);
                                if(lineJsObj!=null){
                                    //先删除
                                    MboSetRemote LineMobSet = MXServer.getMXServer().getMboSet("UDBUDGETLINE",MXServer.getMXServer().getSystemUserInfo());
                                    if(LineMobSet!=null && !LineMobSet.isEmpty()){
                                        LineMobSet.setWhere("UDBUDGETID="+deleteUDBUDGETID+"");
                                        LineMobSet.reset();
                                        LineMobSet.deleteAll(11L);
                                        LineMobSet.save();
                                    }
                                    //子表-再新增
                                    MboRemote lienMbo = LineMobSet.add();//子表新增
                                    String EXPCATE = lineJsObj.getString("zclb");//支出类别---
                                    lienMbo.setValue("EXPCATE",EXPCATE,11L);
                                    String EXPDEF = lineJsObj.getString("kmmc");//支出类别定义---
                                    lienMbo.setValue("EXPDEF",EXPDEF,11L);
                                    String EXPTOTAL = lineJsObj.getString("zcys");//支出预算---
                                    lienMbo.setValue("EXPTOTAL",EXPTOTAL,11L);
                                    String PLSTARTDATE1 = lineJsObj.getString("jhkssj");//计划开始时间---
                                    lienMbo.setValue("PLSTARTDATE",PLSTARTDATE1,11L);
                                    String PLENDDATE1 = lineJsObj.getString("jhjssj");//计划结束时间---
                                    lienMbo.setValue("PLENDDATE",PLENDDATE1,11L);
                                    String YY = lineJsObj.getString("yy");//已用---
                                    lienMbo.setValue("YY",YY,11L);
                                    String KY = lineJsObj.getString("ky");//可用---
                                    lienMbo.setValue("KY",KY,11L);
                                    String DS = lineJsObj.getString("ds");//待审---
                                    lienMbo.setValue("DS",DS,11L);
                                    String ZCLXBM = lineJsObj.getString("zclxbm");//内部订单组---
                                    lienMbo.setValue("ZCLXBM",ZCLXBM,11L);
                                    String XMMXID = lineJsObj.getString("xmmxid");//项目明细ID---
                                    lienMbo.setValue("XMMXID",XMMXID,11L);
                                    String ZT = lineJsObj.getString("zt");//状态---
                                    lienMbo.setValue("ZT",ZT,11L);
                                    String DZYSJECNY = lineJsObj.getString("dzysjecny");//调整预算金额（CNY）---
                                    lienMbo.setValue("DZYSJECNY",DZYSJECNY,11L);
                                    String DZHYSJECNY = lineJsObj.getString("dzhysjecny");//调整后预算金额（CNY）---
                                    lienMbo.setValue("DZHYSJECNY",DZHYSJECNY,11L);
                                    String ZCLBMC = lineJsObj.getString("zclbmc");//支出类别名称---
                                    lienMbo.setValue("ZCLBMC",ZCLBMC,11L);
                                    String id = lineJsObj.getString("id");//ID
                                    lienMbo.setValue("ID",id,11L);
                                    lienMbo.setValue("UDBUDGETID",UDBUDGETID,11L);//
                                    lienMbo.setValue("PROJECTNUM",PROJECTNUM,11L);//主子级关联
                                    lienMbo.getThisMboSet().save();
                                }
                            }
                        }
                    }
                }
            }
        }catch (Exception e){
            System.out.println("----------message="+e.getMessage());
            issuccess = false;
        }finally {
            return  issuccess;
        }
    }

    /**
     * 发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatDataSend(String type,String pageNoStr,String pageSizeStr) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject SendData = new JSONObject();
        JSONObject SendHead = new JSONObject();
        JSONObject operator = new JSONObject();
        JSONObject pageInfo = new JSONObject();
        JSONObject datajson = new JSONObject();
        //请求头
        // 获取当前日期的年份、‌月份和日期
        // 获取当前的日期和时间
        LocalDateTime now = LocalDateTime.now();
        // 提取年、月、日、时、分、秒
        String year = String.format("%04d", now.getYear());//年是4位，
        String month = String.format("%02d", now.getMonthValue());//月是2位
        String day = String.format("%02d", now.getDayOfMonth());
        String hour = String.format("%02d", now.getHour());
        String minute = String.format("%02d", now.getMinute());
        String second = String.format("%02d", now.getSecond());
        String currentTimeTamp = year+""+month+""+day+""+hour+""+minute+""+second;//年月日时分秒 20240812155203
        String systemid = "eam";//系统标识
        String d_password = "Sd123456";//密码
        String md5Source = systemid+d_password+currentTimeTamp;
        String md5OfStr = getMD5Str(md5Source).toLowerCase();
        //ESB_ATTRS
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", "OA"); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生
        //SendHead
        SendHead.put("systemid",systemid);
        SendHead.put("currentDateTime",currentTimeTamp);//当前时间：年月日时分秒 20240812155203
        SendHead.put("Md5",md5OfStr);//Md5是：系统标识+密码+时间戳 并且md5加密的结果
        SendHead.put("feedbackLanguage","7");//7：中文 8：英文 9：繁体中文
        //SendData
        operator.put("operator", "0113541");//只传操作人工号----配置文件
        pageInfo.put("pageNo",pageNoStr);
        pageInfo.put("pageSize",pageSizeStr);
        datajson.put("header", SendHead);
        datajson.put("operationinfo", operator);
        datajson.put("pageInfo",pageInfo);
        datajson.put("mainTable",new JSONObject());
        //REQUEST_DATA
//        REQUEST_DATA.put("SendHead", "");
        SendData.put("datajson",datajson);
        REQUEST_DATA.put("SendData", SendData);
        REQUEST_DATA.put("Operation", "Z_OA_XMDATAGET");
        REQUEST_DATA.put("Type", "Z_OA_XMDATAGET");
        //REQUEST
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        //大对象
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
        JSONObject Return_data_obj = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA");//返回值
        if (Return_data_obj != null) {
            jsonArray = Return_data_obj.getJSONArray("result");
            return jsonArray;
        }
        return jsonArray;
    }
    //---EAM 拉取 OA 项目立项预算支出申请接口------------------------经esb-----end-----------------------------------
}
