package psdi.app.iface.sap;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import psdi.app.iface.comm.UrlConstants;
import psdi.app.iface.oa.EAM2OaAtfacHandler;
import psdi.app.iface.oa.HttpUtilOa;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXApplicationException;
import psdi.util.MXException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.rmi.RemoteException;
import java.time.LocalDate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.YearMonth;
import java.util.*;

/**
 * 数据方向 Sap-->EAM
 * 接口方向 EAM-->SAP
 *
 */
public class Sap2EamHandler {

    public static void main(String[] args) {
        try {
            Sap2EamHandler Sap2EamHandler = new Sap2EamHandler();
//            Sap2EamHandler.Z_SRM_PROJECT_OANO(null);
//            Sap2EamHandler.Z_SPMS_GETSKUDATA("20230906");
            Sap2EamHandler.Z_POS_READ_COST();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 该接口用在哪里？-------------------------------暂不用
     * 项目立项编号获取接口 SAP--->ESB--->EAM
     **/
    public void Z_SRM_PROJECT_OANO(List<Map<String, Object>> orderWerksInfo) throws IOException, MXException {
        MboSetRemote UDXMLXHGLSet = MXServer.getMXServer().getMboSet("UDXMLXHGL", MXServer.getMXServer().getSystemUserInfo());
        // 发送请求数据格式化
        JSONObject alldata = formatDataSend();
        // 调用接口
//        String result = HttpUtil.post(restUrl, JSON.toJSONString(alldata), 600000);//方式1 可行
//        String result = HttpUtils2.sendPostDataByJson(restUrl, JSON.toJSONString(alldata));//方式2 可行
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        // 解析接口返回数据
        JSONArray jSONArray = formatDataReceived(JSON.toJSONString(result));
        for (int i = 0; i < jSONArray.size(); i++) {
            String siteid = "";
            String orgid = "";
            String MANDT = jSONArray.getJSONObject(i).getString("MANDT");
            String XMOA = jSONArray.getJSONObject(i).getString("XMOA");//项目立项编号
            String XMMC = jSONArray.getJSONObject(i).getString("XMMC");//项目名称
            String GJ = jSONArray.getJSONObject(i).getString("GJ");//国家
            String WERKS = jSONArray.getJSONObject(i).getString("WERKS");//工厂
            String BUKRS = jSONArray.getJSONObject(i).getString("BUKRS");//公司
            String STATUS = jSONArray.getJSONObject(i).getString("STATUS");//状态 项目状态(0:进行中,1:已完成,2:已取消)，获取到2状态进行剔除不显示
            UDXMLXHGLSet.setWhere("XMOA='"+XMOA+"'");
            UDXMLXHGLSet.reset();
            MboRemote mbo = null;
            if (UDXMLXHGLSet != null && !UDXMLXHGLSet.isEmpty()) {
                mbo = UDXMLXHGLSet.getMbo(0);
            } else {
                mbo = UDXMLXHGLSet.add();//创建对象
                mbo.setValue("XMOA",XMOA);
            }
            mbo.setValue("MANDT", MANDT);
            mbo.setValue("XMMC", XMMC);
            mbo.setValue("GJ", GJ);
            mbo.setValue("WERKS", WERKS);
            mbo.setValue("BUKRS", BUKRS);
            mbo.setValue("STATUS", STATUS);
            UDXMLXHGLSet.save();
        }

    }
    /**
     * 发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatDataSend() {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        REQUEST_DATA.put("Head", HEAD_DATA);
        REQUEST_DATA.put("Operation", "Z_SRM_PROJECT_OANO");
        REQUEST_DATA.put("Type", "PROJECT_OANO");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    //-----成本中心-移动类型映射接口---------------------start-----------------------------------------------------

    /**
     * EAM-->ESB-->SAPl
     * 获取成本中心和移动类型映射关系
     * 2024-5-11：该接口用的是全量覆盖的方式（SAP有个字段标注冻结，冻结的就不会传给其它系统，前期传了，需要各系统清空，重新拉取）
     *
     * @throws IOException
     * @throws MXException
     */
    public void Z_POS_READ_COST() throws IOException, MXException, ParseException {
        //组织
        MboSetRemote OrgSet = MXServer.getMXServer().getMboSet("ORGANIZATION", MXServer.getMXServer().getSystemUserInfo());
//        OrgSet.setWhere(" ORGID NOT in('SUNDA') and ACTIVE=1");
        OrgSet.setWhere(" ACTIVE=1");
        OrgSet.reset();
        //---开始调用
        if (OrgSet != null && !OrgSet.isEmpty()) {
            for (int s = 0; s < OrgSet.count(); s++) {
                MboRemote orgMbo = OrgSet.getMbo(s);
                String ORGID = orgMbo.getString("ORGID");
                //地点
                List siteList = new ArrayList();//把siteid放到list中，用于后面判断
                MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
                SITESet.setWhere(" ACTIVE=1 and ORGID='"+ORGID+"'");
                SITESet.reset();
                if(SITESet!=null && !SITESet.isEmpty()){
                    for(int i=0;i<SITESet.count();i++){
                        String SiteID = SITESet.getMbo(i).getString("SITEID");
                        siteList.add(SiteID);
                    }
                }
                // 发送请求数据格式化
                JSONObject alldata = formatCBZXYDLXDataSend("", ORGID);
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
                // 解析接口返回数据
                JSONArray jSONArray = formatCBZXYDLXDataReceived(JSON.toJSONString(result));
           /*     //记录接口日志----------------start------------------------
                String AppId = "udcostmove";//应用id
                String AppName = "成本中心移动类型映射";//应用名称
                String OPNum = "";//单据号
                String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                Integer LqTotal = jSONArray.size();//拉取的数量
                String Source = "EAM";//源系统
                String Target = "SAP";//目标系统
                String IFName = "Z_POS_READ_COST";//接口名
                String IFStatus = "";//接口状态
                String Createby = "MAXADMIN";//操作人
                String Orgid = ORGID;//组织
                String Siteid = "";//地点
                Date SendDate = new Date();//发起时间
                String SendJs = "";//发起报文
                if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    SendJs = UrlConstants.restEsbUrl+alldata.toString();
                }else{
                    SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                }
                Date AcceptDate = new Date();//接收时间
                String AcceptJs = "";//接收报文
                if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    AcceptJs = UrlConstants.restEsbUrl+result;
                }else{
                    AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,1000);
                }
                new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
                //记录接口日志----------------end---------------------------*/
                if (jSONArray != null && !jSONArray.isEmpty()) {
                    for (int i = 0; i < jSONArray.size(); i++) {
                        MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("UDCOSTMOVE", MXServer.getMXServer().getSystemUserInfo());//成本中心映射移动类型
                        String WERKS = jSONArray.getJSONObject(i).getString("WERKS");//工厂
                        String KOSTL = jSONArray.getJSONObject(i).getString("KOSTL");//成本中心编号
                        String LTEXT = jSONArray.getJSONObject(i).getString("LTEXT");//移动类型描述
                        String BWART = jSONArray.getJSONObject(i).getString("BWART");//移动类型
                        String SPART = jSONArray.getJSONObject(i).getString("SPART");//产品线
                        String Z_SPMSBK = jSONArray.getJSONObject(i).getString("Z_SPMSBK");//备件标识
                        //sap升级新增的字段--sap的测试环境没有升级
                        String BUKRS = jSONArray.getJSONObject(i).getString("BUKRS");//公司
                        String ZKLEXT_ZH = jSONArray.getJSONObject(i).getString("ZKLEXT_ZH");//成本中心中文描述
                        String ZKLEXT_EN = jSONArray.getJSONObject(i).getString("ZKLEXT_EN");//成本中心英文描述
                        String MANDT = jSONArray.getJSONObject(i).getString("MANDT");//客户端
                        //----------判断---属于系统范围的进行存储-----
                        if (!siteList.contains(WERKS)) {
                            continue;
                        }
                        UDCOSTMOVESet.setWhere("ORGID='" + ORGID + "' and SITEID ='" + WERKS + "' and KOSTL='" + KOSTL + "' and BWART='" + BWART + "'");
                        UDCOSTMOVESet.reset();
                        MboRemote costMvMbo = null;
                        if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                            costMvMbo = UDCOSTMOVESet.getMbo(0);
                        } else {
                            costMvMbo = UDCOSTMOVESet.add();//创建对象
                        }
                        costMvMbo.setValue("WERKS", WERKS);
                        costMvMbo.setValue("KOSTL", KOSTL);
                        costMvMbo.setValue("LTEXT", LTEXT);
                        costMvMbo.setValue("BWART", BWART);
                        costMvMbo.setValue("SPART", SPART);
                        costMvMbo.setValue("Z_SPMSBK", Z_SPMSBK);
                        costMvMbo.setValue("BUKRS", BUKRS);
                        costMvMbo.setValue("ZKLEXT_ZH", ZKLEXT_ZH);
                        costMvMbo.setValue("ZKLEXT_EN", ZKLEXT_EN);
                        costMvMbo.setValue("MANDT", MANDT);
                        costMvMbo.setValue("ORGID", ORGID);
                        costMvMbo.setValue("SITEID", WERKS);
                        costMvMbo.setValue("LQDATE",new Date());//拉取日期
                        UDCOSTMOVESet.save();//保存
                        UDCOSTMOVESet.close();
                    }
                }
            }
        }
    }
    /**
     * 成本中心-移动类型  发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatCBZXYDLXDataSend(String SITEID, String ORGID) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //森大陶瓷---SAP-830
            //陶瓷--特福测试  600
            Target_ID = UrlConstants.SAPClient3;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-830";
            Target_ID = UrlConstants.SAPClient3;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-830";
            Target_ID = UrlConstants.SAPClient3;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-830";
            Target_ID = UrlConstants.SAPClient3;
        } else{
//            Target_ID = "SAP-830";
            Target_ID = UrlConstants.SAPClient3;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
//        HEAD_DATA.put("I_SPMSBK","X");
//        REQUEST_DATA.put("Head", HEAD_DATA);
        REQUEST_DATA.put("Operation", "Z_POS_READ_COST");
        REQUEST_DATA.put("Type", "Z_POS_READ_COST");
//        REQUEST_DATA.put("HeadType", "0");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    public JSONArray formatCBZXYDLXDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------成本中心-移动类型映射接口---------------------end-----------------------------------------------------

    //-------SAP的固定资产接口-----------------------start-----------------------------------------------------
    /**
     * EAM-->ESB-->SAP
     * sap固定资产
     *
     * @throws IOException
     * @throws MXException
     */
    public void Z_OA_SAP_ASSETS_DETAILS() throws IOException, MXException, ParseException {
        // 获取当前日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        LocalDate currentDate = LocalDate.now();
        int year = currentDate.getYear();
        String yearStr = String.valueOf(year);//年份
        int month = currentDate.getMonthValue();
        String monthStr = String.valueOf(month);//月份
        int day = currentDate.getDayOfMonth();
        //地点
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
        SITESet.setWhere(" ACTIVE=1");
        SITESet.reset();
        if (SITESet != null && !SITESet.isEmpty()) {
            for (int s = 0; s < SITESet.count(); s++) {
                MboRemote siteMbo = SITESet.getMbo(s);
                String SITEID = siteMbo.getString("SITEID");
                String ORGID = siteMbo.getString("ORGID");
                String COMNUM = siteMbo.getString("COMPANY");//公司代码
                // 发送请求数据格式化
                JSONObject alldata = formatSAPAssetDataSend(SITEID, ORGID, yearStr, monthStr, COMNUM);
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
                // 解析接口返回数据
                JSONArray jSONArray = formatSAPAssetDataReceived(JSON.toJSONString(result));
                //记录接口日志----------------start------------------------
                String AppId = "udgdzc";//应用id
                String AppName = "固定资产信息";//应用名称
                String OPNum = "";//单据号
                String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                Integer LqTotal = jSONArray.size();//拉取的压缩包数量
                String Source = "EAM";//源系统
                String Target = "SAP";//目标系统
                String IFName = "Z_OA_SAP_ASSETS_DETAILS";//接口名
                String IFStatus = "";//接口状态
                String Createby = "MAXADMIN";//操作人
                String Orgid = ORGID;//组织
                String Siteid = SITEID;//地点
                Date SendDate = new Date();//发起时间
                String SendJs = "";//发起报文
                if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    SendJs = UrlConstants.restEsbUrl+alldata.toString();
                }else{
                    SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                }
                Date AcceptDate = new Date();//接收时间
                String AcceptJs = "";//接收报文
                if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    AcceptJs = UrlConstants.restEsbUrl+result;
                }else{
                    AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
                }
            //    new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
                //记录接口日志----------------end---------------------------
                if (jSONArray != null && !jSONArray.isEmpty()) {
                    for (int i = 0; i < jSONArray.size(); i++) {
                        MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("UDGDZC", MXServer.getMXServer().getSystemUserInfo());//固定资产
                        String AFENDStr = jSONArray.getJSONObject(i).getString("AFEND");//折旧计算开始日期
                        String AFEND = "";
                        if(AFENDStr!=null && !"".equalsIgnoreCase(AFENDStr)){
                            Date AFENDDate = new Date(new Long(AFENDStr));
                            AFEND = sdf.format(AFENDDate);
                        }
                        String ZIVAL = jSONArray.getJSONObject(i).getString("ZJVAL");//最盘新折旧金额
                        String MENGE = jSONArray.getJSONObject(i).getString("MENGE");//数量 Y
                        String VMNTH = jSONArray.getJSONObject(i).getString("VMNTH");//暂无该字段
                        String KANSWUSD = jSONArray.getJSONObject(i).getString("KANSWUSD");//累计购置和生产费用
                        String GSBER = jSONArray.getJSONObject(i).getString("GSBER");//业务范围----工厂
                        String KNAFAUSD = jSONArray.getJSONObject(i).getString("KNAFAUSD");//累计正常折旧
                        String BUKRS = jSONArray.getJSONObject(i).getString("BUKRS");//公司代码   Y
                        String ZIAMTCNY = jSONArray.getJSONObject(i).getString("ZJAMTCNY");////累计折旧金额   （资产已折旧金额(本币)） Y
                        String RESMONS = jSONArray.getJSONObject(i).getString("RESMONS");//剩余月份
                        String WAERS = jSONArray.getJSONObject(i).getString("WAERS");//货币码
                        String ANLK = jSONArray.getJSONObject(i).getString("ANLKL");//资产类
                        String ANLN1 = jSONArray.getJSONObject(i).getString("ANLN1");//固定资产主编号----- Y
                        String SUBNUMBER = jSONArray.getJSONObject(i).getString("SUBNUMBER");//固定资产子编号----- Y
                        String ZIVALUSD = jSONArray.getJSONObject(i).getString("ZJVALUSD");//最盘新折旧金额
                        String ZFLTXT50 = jSONArray.getJSONObject(i).getString("ZFLTXT50");//名称
                        String ZJMONS = jSONArray.getJSONObject(i).getString("ZJMONS");//暂无该字段
                        String AKTIVStr = jSONArray.getJSONObject(i).getString("AKTIV");//资产本金化日期
                        String ANLN2 = jSONArray.getJSONObject(i).getString("ANLN2");//子资产编号
                        String XSTIL = jSONArray.getJSONObject(i).getString("XSTIL");//资产停用
                        String AKTIV = "";
                        if(AKTIVStr!=null && !"".equalsIgnoreCase(AKTIVStr)){
                            Date AKTIVDate = new Date(new Long(AKTIVStr));
                            AKTIV = sdf.format(AKTIVDate);
                        }
                        String JZMON = jSONArray.getJSONObject(i).getString("JZMON");//暂无该字段
                        String AFASL = jSONArray.getJSONObject(i).getString("AFASL");//折旧码
                        String KOSTL = jSONArray.getJSONObject(i).getString("KOSTL");//成本中心   Y
                        String TXT50 = jSONArray.getJSONObject(i).getString("TXT50");//固定资产名称 Y
                        String KANSW = jSONArray.getJSONObject(i).getString("KANSW");//累积购置和生产费用（资产原值（本币）） Y
                        String ZUGDTStr = jSONArray.getJSONObject(i).getString("ZUGDT");//第一次记帐资产的资产起用日
                        String ZUGDT = "";
                        if(ZUGDTStr!=null && !"".equalsIgnoreCase(ZUGDTStr)){
                            Date ZUGDTDate = new Date(new Long(ZUGDTStr));
                            ZUGDT = sdf.format(ZUGDTDate);
                        }
                        String ZIAMTUSD = jSONArray.getJSONObject(i).getString("ZJAMTUSD");//暂无该字段
                        String EMNTH = jSONArray.getJSONObject(i).getString("EMNTH");//折旧结束月份
                        String MEINS = jSONArray.getJSONObject(i).getString("MEINS");//基本计量单位
                        String TZAMT = jSONArray.getJSONObject(i).getString("TZAMT");//调账金额
                        String NDPER = jSONArray.getJSONObject(i).getString("NDPER");//计划使用期间
                        String NDIAR = jSONArray.getJSONObject(i).getString("NDJAR");//暂无该字段--使用年限
                        String ZIAMT = jSONArray.getJSONObject(i).getString("ZJAMT");//累计折旧金额   （资产已折旧金额(本币)）  Y
                        String KTEXT = jSONArray.getJSONObject(i).getString("KTEXT");//一般姓名
                        String ZIVALCNY = jSONArray.getJSONObject(i).getString("ZJVALCNY");//最盘新折旧金额
                        String KANSWCNY = jSONArray.getJSONObject(i).getString("KANSWCNY");//累积购置和生产费用（资产原值（人名币）） Y
                        String AFABGStr = jSONArray.getJSONObject(i).getString("AFABG");//折旧计算开始日期（实际开始使用时间） Y
                        String AFABG = "";
                        if(AFABGStr!=null && !"".equalsIgnoreCase(AFABGStr)){
                            Date AFABGDate = new Date(new Long(AFABGStr));
                            AFABG = sdf.format(AFABGDate);
                        }
                        String VYEAR = jSONArray.getJSONObject(i).getString("VYEAR");//资产的购置年度(可手工更改)
                        String JHVAL = jSONArray.getJSONObject(i).getString("JHVAL");//暂无该字段
                        String EYEAR = jSONArray.getJSONObject(i).getString("EYEAR");//折旧结束年度
                        String KNAFACNY = jSONArray.getJSONObject(i).getString("KNAFACNY");//累计正常折旧  （资产净值（人名币）） Y
                        String LETXT = jSONArray.getJSONObject(i).getString("LETXT");//租凭数据文本
                        String KNAFA = jSONArray.getJSONObject(i).getString("KNAFA");//累计正常折旧 （资产净值（本币））Y
                        UDCOSTMOVESet.setWhere("BUKRS='" + BUKRS + "' and ANLN1='" + ANLN1 + "'");
                        UDCOSTMOVESet.reset();
                        MboRemote costMvMbo = null;
                        if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                            costMvMbo = UDCOSTMOVESet.getMbo(0);
                        } else {
                            costMvMbo = UDCOSTMOVESet.add();//创建对象
                        }
                        costMvMbo.setValue("AFEND", AFEND);
                        costMvMbo.setValue("ZIVAL", ZIVAL);
                        costMvMbo.setValue("MENGE", MENGE);
                        costMvMbo.setValue("KANSWUSD", KANSWUSD);
                        costMvMbo.setValue("GSBER", GSBER);
                        costMvMbo.setValue("BUKRS", BUKRS);
                        costMvMbo.setValue("ZIAMTCNY", ZIAMTCNY);
                        costMvMbo.setValue("RESMONS", RESMONS);
                        costMvMbo.setValue("WAERS", WAERS);
                        costMvMbo.setValue("ANLK", ANLK);
                        costMvMbo.setValue("ANLN1", ANLN1);
                        costMvMbo.setValue("SUBNUMBER", SUBNUMBER);
                        costMvMbo.setValue("ZFLTXT50", ZFLTXT50);
                        costMvMbo.setValue("AKTIV", AKTIV);
                        costMvMbo.setValue("AFASL", AFASL);
                        costMvMbo.setValue("KOSTL", KOSTL);
                        costMvMbo.setValue("TXT50", TXT50);
                        costMvMbo.setValue("KANSW", KANSW);
                        costMvMbo.setValue("ZUGDT", ZUGDT);
                        costMvMbo.setValue("EMNTH", EMNTH);
                        costMvMbo.setValue("MEINS", MEINS);
                        costMvMbo.setValue("NDIAR", NDIAR);
                        costMvMbo.setValue("TZAMT", TZAMT);
                        costMvMbo.setValue("NDPER", NDPER);
                        costMvMbo.setValue("ZIAMT", ZIAMT);
                        costMvMbo.setValue("KTEXT", KTEXT);
                        costMvMbo.setValue("ZIVALCNY", ZIVALCNY);
                        costMvMbo.setValue("KANSWCNY", KANSWCNY);
                        costMvMbo.setValue("AFABG", AFABG);
                        costMvMbo.setValue("VYEAR", VYEAR);
                        costMvMbo.setValue("EYEAR", EYEAR);
                        costMvMbo.setValue("KNAFACNY", KNAFACNY);
                        costMvMbo.setValue("LETXT", LETXT);
                        costMvMbo.setValue("KNAFA", KNAFA);
                        costMvMbo.setValue("LQDATE",new Date());
                        costMvMbo.setValue("ANLN2",ANLN2);
                        costMvMbo.setValue("XSTIL",XSTIL);
                        UDCOSTMOVESet.save();//保存
                        UDCOSTMOVESet.close();
                    }
                }
            }
        }
    }

    /**
     * sap固定资产 发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatSAPAssetDataSend(String SITEID, String ORGID, String year, String month, String BUKRS) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject fileds = new JSONObject();
        String Target_ID = "";
        String Client = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷---森大 820
            //陶瓷---特福测试600
            Target_ID = UrlConstants.SAPClient2;
            Client = UrlConstants.Client2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-810";
//            Client = "810";
            Target_ID = UrlConstants.SAPClient1;
            Client = UrlConstants.Client1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";
//            Client = "800";
            Target_ID = UrlConstants.SAPClient;
            Client = UrlConstants.Client;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";
//            Client = "800";
            Target_ID = UrlConstants.SAPClient;
            Client = UrlConstants.Client;
        }else{
//            Target_ID = "SAP-800";
//            Client = "800";
            Target_ID = UrlConstants.SAPClient;
            Client = UrlConstants.Client;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        fileds.put("IM_MONTH", month);//月份
        fileds.put("IM_YEAR", year);//年份
        fileds.put("IM_BUKRS", BUKRS);//公司代码
        fileds.put("CLIENT", Client);//客户端
        REQUEST_DATA.put("fileds", fileds);
        REQUEST_DATA.put("Operation", "Z_OA_SAP_ASSETS_DETAILS");
        REQUEST_DATA.put("Type", "Z_OA_SAP_ASSETS_DETAILS");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    public JSONArray formatSAPAssetDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------SAP的固定资产接口----------------end-----------------------------------------------------

    //-----物料单价（包含国内仓，海外仓价格）--------------------start-----------------------------------------------------
    /* EAM-->ESB-->SAP
     * SAP修改接口，入参需要加上：工厂  按照工厂进行拉取，这样数据量可以小一点
     */
    public void Z_SPMS_GET_MBEW(String OrgID,String SiteId) throws IOException, MXException, ParseException {
        //单个工厂拉取
        if(OrgID!=null && !"".equalsIgnoreCase(OrgID) && SiteId!=null && !"".equalsIgnoreCase(SiteId)){
            //发送请求数据格式化
            JSONObject alldata = formatGNCDJDataSend(SiteId, OrgID);
            JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl2, alldata);
            // 解析接口返回数据
            JSONArray jSONArray = formatGNCDJDataReceived(JSON.toJSONString(result));
            MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("UDGNCJG", MXServer.getMXServer().getSystemUserInfo());//国内仓单价
            //记录接口日志----------------start------------------------
            String AppId = "udgncjg";//应用id
            String AppName = "物资单价(国内/海外)";//应用名称
            String OPNum = "";//单据号
            String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
            Integer LqTotal = jSONArray.size();//拉取的压缩包数量
            String Source = "EAM";//源系统
            String Target = "SAP";//目标系统
            String IFName = "Z_SPMS_GET_MBEW";//接口名
            String IFStatus = "";//接口状态
            String Createby = "MAXADMIN";//操作人
            Date SendDate = new Date();//发起时间
            String SendJs = "";//发起报文
            if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                SendJs = UrlConstants.restEsbUrl+alldata.toString();
            }else{
                SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
            }
            Date AcceptDate = new Date();//接收时间
            String AcceptJs = "";//接收报文
            if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                AcceptJs = UrlConstants.restEsbUrl+result;
            }else{
                AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
            }
      //      new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,OrgID,SiteId,SendDate,AcceptDate,SendJs,AcceptJs);
            //记录接口日志----------------end---------------------------
            if (jSONArray != null && !jSONArray.isEmpty()) {
                for (int i = 0; i < jSONArray.size(); i++) {
                    JSONObject jsObj = jSONArray.getJSONObject(i);
                    String MATNR = jsObj.getString("MATNR");//物料编号
                    String VERPR = jsObj.getString("VERPR");//移动平均价格/周期单价
                    String PEINH = jsObj.getString("PEINH");//汇率
                    String WAERS = jsObj.getString("WAERS");//货币
                    String BWKEY = jsObj.getString("BWKEY");//工厂
                    //判断
                    UDCOSTMOVESet.setWhere("MATNR='" + MATNR + "' and BWKEY='" + BWKEY + "'");
                    UDCOSTMOVESet.reset();
                    MboRemote costMvMbo = null;
                    if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                        costMvMbo = UDCOSTMOVESet.getMbo(0);
                    } else {
                        costMvMbo = UDCOSTMOVESet.add();//创建对象
                    }
                    costMvMbo.setValue("MATNR", MATNR);
                    costMvMbo.setValue("VERPR", VERPR);
                    costMvMbo.setValue("PEINH", PEINH);
                    costMvMbo.setValue("WAERS", WAERS);
                    costMvMbo.setValue("BWKEY", BWKEY);
                    costMvMbo.setValue("ORGID", OrgID);
                    costMvMbo.setValue("SITEID", SiteId);
                    costMvMbo.setValue("LQDATE",new Date());//拉取日期
                    UDCOSTMOVESet.save();//保存
                }
            }
        }else{
            //全量拉取
            MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
            SITESet.setWhere(" ACTIVE=1");
            SITESet.reset();
            if (SITESet != null && !SITESet.isEmpty()) {
                for (int s = 0; s < SITESet.count(); s++) {
                    MboRemote siteMbo = SITESet.getMbo(s);
                    String ORGID = siteMbo.getString("ORGID");
                    String SITEID = siteMbo.getString("SITEID");
                    //发送请求数据格式化
                    JSONObject alldata = formatGNCDJDataSend(SITEID, ORGID);
                    JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl2, alldata);
                    // 解析接口返回数据
                    JSONArray jSONArray = formatGNCDJDataReceived(JSON.toJSONString(result));
                    MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("UDGNCJG", MXServer.getMXServer().getSystemUserInfo());//国内仓单价
                    //记录接口日志----------------start------------------------
                    String AppId = "udgncjg";//应用id
                    String AppName = "物资单价(国内/海外)";//应用名称
                    String OPNum = "";//单据号
                    String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                    Integer LqTotal = jSONArray.size();//拉取的压缩包数量
                    String Source = "EAM";//源系统
                    String Target = "SAP";//目标系统
                    String IFName = "Z_SPMS_GET_MBEW";//接口名
                    String IFStatus = "";//接口状态
                    String Createby = "MAXADMIN";//操作人
                    String Orgid = ORGID;//组织
                    String Siteid = SITEID;//地点
                    Date SendDate = new Date();//发起时间
                    String SendJs = "";//发起报文
                    if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                        SendJs = UrlConstants.restEsbUrl+alldata.toString();
                    }else{
                        SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                    }
                    Date AcceptDate = new Date();//接收时间
                    String AcceptJs = "";//接收报文
                    if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                        AcceptJs = UrlConstants.restEsbUrl+result;
                    }else{
                        AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
                    }
             //       new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
                    //记录接口日志----------------end---------------------------
                    if (jSONArray != null && !jSONArray.isEmpty()) {
                        for (int i = 0; i < jSONArray.size(); i++) {
                            JSONObject jsObj = jSONArray.getJSONObject(i);
                            String MATNR = jsObj.getString("MATNR");//物料编号
                            String VERPR = jsObj.getString("VERPR");//移动平均价格/周期单价
                            String PEINH = jsObj.getString("PEINH");//汇率
                            String WAERS = jsObj.getString("WAERS");//货币
                            String BWKEY = jsObj.getString("BWKEY");//工厂
                            //判断
                            UDCOSTMOVESet.setWhere("MATNR='" + MATNR + "' and BWKEY='" + BWKEY + "'");
                            UDCOSTMOVESet.reset();
                            MboRemote costMvMbo = null;
                            if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                                costMvMbo = UDCOSTMOVESet.getMbo(0);
                            } else {
                                costMvMbo = UDCOSTMOVESet.add();//创建对象
                            }
                            costMvMbo.setValue("MATNR", MATNR);
                            costMvMbo.setValue("VERPR", VERPR);
                            costMvMbo.setValue("PEINH", PEINH);
                            costMvMbo.setValue("WAERS", WAERS);
                            costMvMbo.setValue("BWKEY", BWKEY);
                            costMvMbo.setValue("ORGID", ORGID);
                            costMvMbo.setValue("SITEID", SITEID);
                            costMvMbo.setValue("LQDATE",new Date());//拉取日期
                            UDCOSTMOVESet.save();//保存
                        }
                    }
                }
            }
        }
    }

    //物料单价（国内仓/海外仓）  发送REST请求到ESB，先进行数据格式化
    public JSONObject formatGNCDJDataSend(String SITEID, String ORGID) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        JSONObject FILEDS = new JSONObject();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷
//            Target_ID = "SAP-820";//生产
            Target_ID = UrlConstants.SAPClient2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-810";//生产
//            Target_ID = "SAP-510";//测试
            Target_ID = UrlConstants.SAPClient1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";//生产
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";//生产
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        }else{
//            Target_ID = "SAP-800";//生产
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
//        HEAD_DATA.put("I_SPMSBK","X");
//        REQUEST_DATA.put("Head", HEAD_DATA);
        REQUEST_DATA.put("Operation", "Z_SPMS_GET_MBEW");
        REQUEST_DATA.put("Type", "Z_SPMS_GET_MBEW");
        FILEDS.put("IM_SYSTEM", "EAM");
        if(SITEID!=null &&!"".equals(SITEID)){
            FILEDS.put("IM_BWKEY", SITEID);//根据工厂去拉取，只能一个一个工厂去拉
        }
        REQUEST_DATA.put("fileds", FILEDS);
//        REQUEST_DATA.put("HeadType", "0");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    //物料价格返回
    public JSONArray formatGNCDJDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("ET_MBEW");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------物料单价（包含国内仓，海外仓价格）------------------end-----------------------------------------------------

    //-----内部订单号---------------------start-----------------------------------------------------
    /**
     * EAM-->ESB-->SAP
     * 内部订单号
     *
     * @throws IOException
     * @throws MXException
     */
    public void Z_NBDD_GET_NBDD_DATA() throws IOException, MXException, ParseException {
        //地点
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
        SITESet.setWhere(" ACTIVE=1");
        SITESet.reset();
        if (SITESet != null && !SITESet.isEmpty()) {
            for (int s = 0; s < SITESet.count(); s++) {
                MboRemote siteMbo = SITESet.getMbo(s);
                String SITEID = siteMbo.getString("SITEID");
                String ORGID = siteMbo.getString("ORGID");
                // 发送请求数据格式化
                JSONObject alldata = formatNBDDDataSend(SITEID, ORGID);
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
                // 解析接口返回数据
                JSONArray jSONArray = formatNBDDReceived(JSON.toJSONString(result));
                //记录接口日志----------------start------------------------
                String AppId = "udnbddh";//应用id
                String AppName = "内部订单号";//应用名称
                String OPNum = "";//单据号
                String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                Integer LqTotal = jSONArray.size();//拉取的压缩包数量
                String Source = "EAM";//源系统
                String Target = "SAP";//目标系统
                String IFName = "Z_NBDD_GET_NBDD_DATA";//接口名
                String IFStatus = "";//接口状态
                String Createby = "MAXADMIN";//操作人
                String Orgid = ORGID;//组织
                String Siteid = SITEID;//地点
                Date SendDate = new Date();//发起时间
                String SendJs = "";//发起报文
                if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    SendJs = UrlConstants.restEsbUrl+alldata.toString();
                }else{
                    SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                }
                Date AcceptDate = new Date();//接收时间
                String AcceptJs = "";//接收报文
                if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    AcceptJs = UrlConstants.restEsbUrl+result;
                }else{
                    AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,1333);
                }
//                try{
//                   new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
//                }catch (Exception e){
//
//                }
                //记录接口日志----------------end---------------------------
                if (jSONArray != null && !jSONArray.isEmpty()) {
                    for (int i = 0; i < jSONArray.size(); i++) {
                        MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("UDNBDDH", MXServer.getMXServer().getSystemUserInfo());//内部订单号
                        String AUFNR = jSONArray.getJSONObject(i).getString("AUFNR");//内部订单号
                        String AUART = jSONArray.getJSONObject(i).getString("AUART");//订单类型
                        String KTEXT = jSONArray.getJSONObject(i).getString("KTEXT");//内部订单描述
                        String LTEXT = jSONArray.getJSONObject(i).getString("LTEXT");//内部订单英文描述
                        String BUKRS = jSONArray.getJSONObject(i).getString("BUKRS");//公司代码
                        String WERKS = jSONArray.getJSONObject(i).getString("WERKS");//工厂代码
                        String GSBER = jSONArray.getJSONObject(i).getString("GSBER");//业务范围
                        String KOKRS = jSONArray.getJSONObject(i).getString("KOKRS");//成本控制范围
                        String WAERS = jSONArray.getJSONObject(i).getString("WAERS");//订单货币
                        String SCOPE = jSONArray.getJSONObject(i).getString("SCOPE");//对象类
                        String PRCTR = jSONArray.getJSONObject(i).getString("PRCTR");//利润中心
                        String PHAS0 = jSONArray.getJSONObject(i).getString("PHAS0");//状态“订单建立” ---使用
                        String PHAS1 = jSONArray.getJSONObject(i).getString("PHAS1");//状态“订单启用” ---使用
                        String PHAS2 = jSONArray.getJSONObject(i).getString("PHAS2");//状态“订单完成” 有X ---排除使用
                        String PHAS3 = jSONArray.getJSONObject(i).getString("PHAS3");//状态“订单关闭” 有X ---排除使用
                        String PHAS4 = jSONArray.getJSONObject(i).getString("PHAS4");//物料领用相关
                        //----------判断---属于系统范围的进行存储-----
                        if (!SITEID.equalsIgnoreCase(WERKS)) {
                            continue;
                        }
                        UDCOSTMOVESet.setWhere("ORGID='" + ORGID + "' and WERKS='" + WERKS + "' and AUFNR='" + AUFNR + "' ");
                        UDCOSTMOVESet.reset();
                        MboRemote costMvMbo = null;
                        if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                            costMvMbo = UDCOSTMOVESet.getMbo(0);
                        } else {
                            costMvMbo = UDCOSTMOVESet.add();//创建对象
                        }
                        costMvMbo.setValue("AUFNR", AUFNR);
                        costMvMbo.setValue("AUART", AUART);
                        costMvMbo.setValue("KTEXT", KTEXT);
                        costMvMbo.setValue("LTEXT", LTEXT);
                        costMvMbo.setValue("BUKRS", BUKRS);
                        costMvMbo.setValue("WERKS", WERKS);
                        costMvMbo.setValue("GSBER", GSBER);
                        costMvMbo.setValue("KOKRS", KOKRS);
                        costMvMbo.setValue("WAERS", WAERS);
                        costMvMbo.setValue("SCOPE", SCOPE);
                        costMvMbo.setValue("PRCTR", PRCTR);
                        costMvMbo.setValue("PHAS0", PHAS0);
                        costMvMbo.setValue("PHAS1", PHAS1);
                        costMvMbo.setValue("PHAS2", PHAS2);
                        costMvMbo.setValue("PHAS3", PHAS3);
                        costMvMbo.setValue("PHAS4", PHAS4);
                        costMvMbo.setValue("ORGID", ORGID);
                        costMvMbo.setValue("SITEID", SITEID);
                        costMvMbo.setValue("LQDATE",new Date());//拉取日期
                        UDCOSTMOVESet.save();//保存
                        UDCOSTMOVESet.close();
                    }
                }
            }
        }
    }
    /**
     * 内部订单号 -发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatNBDDDataSend(String SITEID, String ORGID) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷 --非IPO
//            Target_ID = "SAP-820";
            //Target_ID = UrlConstants.SAPClient2; --测试 2024-12-25
            Target_ID=UrlConstants.SAPClient2; //正式 2024-12-25
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-810";
            //Target_ID = UrlConstants.SAPClient1; --测试 2024-12-25
            Target_ID=UrlConstants.SAPClient1; //正式 2024-12-25
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";
            //Target_ID = UrlConstants.SAPClient; --测试 2024-12-25
            Target_ID=UrlConstants.SAPClient; //正式 2024-12-25
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";
            //Target_ID = UrlConstants.SAPClient; --测试 2024-12-25
            Target_ID=UrlConstants.SAPClient; //正式 2024-12-25
        }else{
//            Target_ID = "SAP-800";
            //Target_ID = UrlConstants.SAPClient; --测试 2024-12-25
            Target_ID=UrlConstants.SAPClient; //正式 2024-12-25
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成

//        HEAD_DATA.put("I_SPMSBK","X");
//        REQUEST_DATA.put("Head", HEAD_DATA);
        REQUEST_DATA.put("Operation", "Z_NBDD_GET_NBDD_DATA");
        REQUEST_DATA.put("Type", "Z_NBDD_GET_NBDD_DATA");
//        REQUEST_DATA.put("HeadType", "0");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatNBDDReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("PT_AUFK");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------内部订单号---------------------end-----------------------------------------------------

    //-----汇率--------------------start-----------------------------------------------------
    /**
     * EAM-->ESB-->SAP
     * 汇率
     */
    public void Z_OSAP_GET_CURRCODE() throws IOException, MXException, ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String dateStr = sdf.format(new Date());
        // 发送请求数据格式化
        List<Map<String,String>> list = new ArrayList<Map<String,String>>();
        MboSetRemote rateSet = MXServer.getMXServer().getMboSet("ALNDOMAIN", MXServer.getMXServer().getSystemUserInfo());//域表
        rateSet.setWhere("DOMAINID='COUNTRYRATE'");//国家代码
        rateSet.reset();
        for(int i=0;i<rateSet.count();i++){
            Map<String,String> map = new HashMap<String,String>();
            MboRemote rateMbo = rateSet.getMbo(i);
            map.put("CTCODE",rateMbo.getString("VALUE"));
            list.add(map);
        }
        JSONObject alldata = formatHLDataSend("", "",list);
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        // 解析接口返回数据
        JSONArray jSONArray = formatHLReceived(JSON.toJSONString(result));
        //记录接口日志----------------start------------------------
        String AppId = "coinrate";//应用id
        String AppName = "货币汇率";//应用名称
        String OPNum = "";//单据号
        String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
        Integer LqTotal = jSONArray.size();//拉取的压缩包数量
        String Source = "EAM";//源系统
        String Target = "SAP";//目标系统
        String IFName = "Z_EAM_EXCH_RATE";//接口名
        String IFStatus = "";//接口状态
        String Createby = "MAXADMIN";//操作人
        String Orgid = "";//组织
        String Siteid = "";//地点
        Date SendDate = new Date();//发起时间
        String SendJs = "";//发起报文
        if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
            SendJs = UrlConstants.restEsbUrl+alldata.toString();
        }else{
            SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
        }
        Date AcceptDate = new Date();//接收时间
        String AcceptJs = "";//接收报文
        if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
            AcceptJs = UrlConstants.restEsbUrl+result;
        }else{
            AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
        }
//        new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
        //记录接口日志----------------end---------------------------
        MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("COINRATE", MXServer.getMXServer().getSystemUserInfo());//汇率
        if (jSONArray != null && !jSONArray.isEmpty()) {
            for (int i = 0; i < jSONArray.size(); i++) {
                JSONObject jsObj = jSONArray.getJSONObject(i);
      /*          String SPRAS = jSONArray.getJSONObject(i).getString("SPRAS");//
                String WAERS = jSONArray.getJSONObject(i).getString("WAERS");//货币编码
                String KTEXT = jSONArray.getJSONObject(i).getString("KTEXT");//货币名称
                String LTEXT = jSONArray.getJSONObject(i).getString("LTEXT");//货币名称-长描述
                String UKURS1000 = jSONArray.getJSONObject(i).getString("UKURS1000");//汇率*1000的值
                String UKURS = jSONArray.getJSONObject(i).getString("UKURS");//汇率*/
                //获取对应字段信息

                String DHDMLX = jsObj.getString("EXCH_TYPE");//兑换码类型
                String DESCRIPTION = jsObj.getString("EXCH_DESC");//兑换码类型描述
                String GJDM = jsObj.getString("LAND1");//国家代码
                String GJDMDESC = jsObj.getString("LANDX");//国家描述
                String COINNUM = jsObj.getString("FCURR");//货币代码
                String COINNAME = jsObj.getString("LTEXT");//货币名称
                Integer NF = Integer.parseInt(jsObj.getString("GJAHR"));//年份
                Integer YF = Integer.parseInt(jsObj.getString("MONAT"));//月份
                String RATEStr = String.valueOf(jsObj.getBigDecimal("RATE_V"));//月末汇率
                Double RATE = Double.parseDouble(RATEStr);
                String AVGRATEStr = String.valueOf(jsObj.getBigDecimal("RATE_AVG"));//月度平均汇率
                Double AVGRATE = Double.parseDouble(AVGRATEStr);
                Date GXDATE = new Date();//更新日期
                UDCOSTMOVESet.setWhere("DHDMLX='"+DHDMLX+"' and GJDM='"+GJDM+"' and COINNUM='"+COINNUM+"' and NF="+NF+" and YF="+YF+"");
                UDCOSTMOVESet.reset();
                MboRemote costMvMbo = null;
                if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                    costMvMbo = UDCOSTMOVESet.getMbo(0);
                } else {
                    costMvMbo = UDCOSTMOVESet.add();//创建对象
                }
                costMvMbo.setValue("DHDMLX", DHDMLX);
                costMvMbo.setValue("DESCRIPTION", DESCRIPTION);
                costMvMbo.setValue("GJDM", GJDM);
                costMvMbo.setValue("GJDMDESC", GJDMDESC);
                costMvMbo.setValue("COINNUM", COINNUM);
                costMvMbo.setValue("COINNAME", COINNAME);
                costMvMbo.setValue("NF", NF);
                costMvMbo.setValue("YF", YF);
                costMvMbo.setValue("RATE",RATE);
                costMvMbo.setValue("AVGRATE",AVGRATE);
                costMvMbo.setValue("GXDATE", GXDATE);
                UDCOSTMOVESet.save();//保存
                UDCOSTMOVESet.close();
            }
        }
    }

    /**
     * 汇率 -发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatHLDataSend(String SITEID, String ORGID,List<Map<String,String>> list) {
        LocalDate currentDate = LocalDate.now();// 获取当前日期
        // 获取年份
        int year = currentDate.getYear();
        String yearStr = String.valueOf(year);
        // 获取当前月份，含2位
        String currentMonth = String.format("%02d", currentDate.getMonthValue());
        // 获取上一个月份 含2位
        YearMonth yearMonth = YearMonth.now().minusMonths(1);
        String previousMonth = String.format("%02d", yearMonth.getMonthValue());
        //对象
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject fileds = new JSONObject();
        JSONObject structures = new JSONObject();
        JSONObject tables = new JSONObject();
        JSONArray IT_LAND1 = new JSONArray();
        String Target_ID = UrlConstants.SAPClient;
//        String Target_ID = "SAP-800"; //生产环境
//        String Target_ID = "SAP-500"; //测试环境
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        //fileds
        fileds.put("IM_GJAHR",yearStr);
        fileds.put("IM_MONAT",previousMonth);
        //IT_LAND1 数组
        for (Map<String,String> map : list) {
            JSONObject LAND1 = new JSONObject();
            LAND1.put("LAND1",map.get("CTCODE"));//国家代码
            IT_LAND1.add(LAND1);
        }
        //tables
        tables.put("IT_LAND1",IT_LAND1);
        REQUEST_DATA.put("fileds",fileds);
        REQUEST_DATA.put("structures",structures);
        REQUEST_DATA.put("tables",tables);
        REQUEST_DATA.put("Operation", "Z_EAM_EXCH_RATE1");//原来是 Z_OSAP_GET_CURRCODE
        REQUEST_DATA.put("Type", "Z_EAM_EXCH_RATE1");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatHLReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("ET_EXCHRATE");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------汇率--------------------end-----------------------------------------------------

    //从SAP获取物料主数据的业务表数据-start----------------------------------------------------------------------------------------------
    /**
     * datastr 日期，是物料的修改日期，每天都需要跑定时任务拉起，否则，今天修改了，不拉取，明天就拉取不到了
     */
    public void Z_SPMS_GETSKUDATA(String dataStr) throws IOException, MXException, ParseException {
        // 发送请求数据格式化
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String updateDate = sdf.format(new Date());
        JSONObject alldata = formatSAPITEMDataSend(dataStr);
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        // 解析接口返回数据
        JSONArray jSONArray = formatSAPReceived(JSON.toJSONString(result));
        System.out.println("-------jSONArray="+jSONArray.size());//总共返回多少条
        //记录接口日志----------------start------------------------
        String AppId = "eamitemsap";//应用id
        String AppName = "SAP物资主数据";//应用名称
        String OPNum = "";//单据号
        String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
        Integer LqTotal = jSONArray.size();//拉取的压缩包数量
        String Source = "EAM";//源系统
        String Target = "SAP";//目标系统
        String IFName = "Z_SPMS_GETSKUDATA";//接口名
        String IFStatus = "";//接口状态
        String Createby = "MAXADMIN";//操作人
        String Orgid = "";//组织
        String Siteid = "";//地点
        Date SendDate = new Date();//发起时间
        String SendJs = "";//发起报文
        if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
            SendJs = UrlConstants.restEsbUrl+alldata.toString();
        }else{
            SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
        }
        Date AcceptDate = new Date();//接收时间
        String AcceptJs = "";//接收报文
        if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
            AcceptJs = UrlConstants.restEsbUrl+result;
        }else{
            AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
        }
      //  new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
        //记录接口日志----------------end---------------------------
        MboSetRemote EAMITEMSAPSet = MXServer.getMXServer().getMboSet("EAMITEMSAP", MXServer.getMXServer().getSystemUserInfo());
        //库存数据
        MboSetRemote UDKCSet = MXServer.getMXServer().getMboSet("UDKC", MXServer.getMXServer().getSystemUserInfo());
        //地点数据
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
        SITESet.setWhere(" ORGID NOT in('SUNDA') and ACTIVE=1");
        SITESet.reset();
        if (jSONArray != null && !jSONArray.isEmpty()) {
            for (int i = 0; i < jSONArray.size(); i++) {
                JSONObject jsobj = jSONArray.getJSONObject(i);//每个对象
                String MATNR = jsobj.getString("MATNR");//物料编号
                String ZMOVTYP = jsobj.getString("ZMOVTYP");//移动类型
                String Z_SPMSSC = jsobj.getString("Z_SPMSSC");//是否上商城
                String ZMOQ = jsobj.getString("ZMOQ");//最小包装量
                String Z_PROLOC = jsobj.getString("Z_PROLOC");//采购地点
                String MANDT = jsobj.getString("MANDT");//客户号
                String ZPURPLATFORM = jsobj.getString("ZPURPLATFORM");//第三方平台
                String Z_BRAND = jsobj.getString("Z_BRAND");//品牌厂商
                String Z_CZ = jsobj.getString("Z_CZ");//材质
                String Z_MAKTX = jsobj.getString("Z_MAKTX");//名称
                String Z_STANDARD = jsobj.getString("Z_STANDARD");//参考标准
                String Z_TECH = jsobj.getString("Z_TECH");//其他技术补充参数
                String Z_TEXT = jsobj.getString("Z_TEXT");//配套设备
                String Z_TH = jsobj.getString("Z_TH");//图号
                String PRODH01 = jsobj.getString("PRODH01");//
                String PRODH02 = jsobj.getString("PRODH02");//
                String PRODH03 = jsobj.getString("PRODH03");//
                String PRODH04 = jsobj.getString("PRODH04");//
                String VTEXT01 = jsobj.getString("VTEXT01");//
                String VTEXT02 = jsobj.getString("VTEXT02");//
                String VTEXT03 = jsobj.getString("VTEXT03");//
                String VTEXT04 = jsobj.getString("VTEXT04");//
                //查询
                EAMITEMSAPSet.setWhere("MATNR='" + MATNR + "'");
                EAMITEMSAPSet.reset();
                MboRemote mbo = null;
                if (EAMITEMSAPSet != null && !EAMITEMSAPSet.isEmpty()) {
                    //更新
                    mbo = EAMITEMSAPSet.getMbo(0);
                } else {
                    //新增
                    mbo = EAMITEMSAPSet.add();
                    mbo.setValue("MATNR", MATNR, 2L);
                }
                mbo.setValue("ZMOVTYP", ZMOVTYP, 2L);
                mbo.setValue("Z_SPMSSC", Z_SPMSSC, 2L);
                mbo.setValue("ZMOQ", ZMOQ, 2L);
                mbo.setValue("Z_PROLOC", Z_PROLOC, 2L);
                mbo.setValue("MANDT", MANDT, 2L);
                mbo.setValue("ZDATE", sdf.parse(updateDate), 2L);//拉取日期
                mbo.setValue("ZPURPLATFORM", ZPURPLATFORM, 2L);
                mbo.setValue("Z_BRAND", Z_BRAND, 2L);
                mbo.setValue("Z_CZ", Z_CZ, 2L);
                mbo.setValue("Z_MAKTX", Z_MAKTX, 2L);
                mbo.setValue("Z_STANDARD", Z_STANDARD, 2L);
                mbo.setValue("Z_TECH", Z_TECH, 2L);
                mbo.setValue("Z_TH", Z_TH, 2L);
                mbo.setValue("PRODH01", PRODH01, 2L);
                mbo.setValue("PRODH02", PRODH02, 2L);
                mbo.setValue("PRODH03", PRODH03, 2L);
                mbo.setValue("PRODH04", PRODH04, 2L);
                mbo.setValue("VTEXT01", VTEXT01, 2L);
                mbo.setValue("VTEXT02", VTEXT02, 2L);
                mbo.setValue("VTEXT03", VTEXT03, 2L);
                mbo.setValue("VTEXT04", VTEXT04, 2L);
                mbo.getThisMboSet().save();
                //查询每个地点下的库存,只向库存同步上商城的物料数据
                if (SITESet != null && !SITESet.isEmpty() && "X".equalsIgnoreCase(Z_SPMSSC)) {
                    for (int n = 0; n < SITESet.count(); n++) {
                        MboRemote siteMbo = SITESet.getMbo(n);
                        String SITEID = siteMbo.getString("SITEID");//地点
                        String ORGID = siteMbo.getString("ORGID");//组织
                        UDKCSet.setWhere("ITEMNUM='" + MATNR + "' and siteid='" + SITEID + "' and orgid='" + ORGID + "'");
                        UDKCSet.reset();
                        if (UDKCSet == null || UDKCSet.isEmpty()) {
                            MboRemote udkcMbo = UDKCSet.add();
                            udkcMbo.setValue("ITEMNUM", MATNR, 2L);//物料编号
                            udkcMbo.setValue("ORGID", ORGID, 2L);
                            udkcMbo.setValue("SITEID", SITEID, 2L);
//                            udkcMbo.setValue("ISSUEUNIT",MEINS,2L);
                            udkcMbo.setValue("CURBALTOTAL", 0, 2L);
                            udkcMbo.setValue("MODIFTIME",new Date(),2L);//更新插入库存的时间
                            udkcMbo.setValue("RECEIVED","该数据由SAP物资主数据生成",2L);//更新插入库存的时间
                            udkcMbo.getThisMboSet().save();
                        }
                    }
                }
            }
        }
    }
    public JSONObject formatSAPITEMDataSend(String dateStr) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject FILEDS = new JSONObject();
        ESB_ATTRS.put("App_ID", "EAM"); //源系统,改为EAM
        ESB_ATTRS.put("Target_ID", UrlConstants.SAPClient3); //目标系统 测试：SAP-530  生产：SAP-830
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        FILEDS.put("I_DATE", dateStr);//格式20230906
        REQUEST_DATA.put("Operation", "Z_SPMS_GETSKUDATA");
        REQUEST_DATA.put("Type", "Z_SPMS_GETSKUDATA");
        REQUEST_DATA.put("fileds", FILEDS);
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatSAPReceived(String received) {
        JSONObject jsonObject = JSONObject.parseObject(received);
        JSONArray jsonArray = new JSONArray();
        String O_TYPE = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("O_TYPE");
        if ("S".equals(O_TYPE)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_MARA");
        }
        return jsonArray;
    }
    //从SAP获取物料主数据的业务表数据-end-----------------------------------------------------------------------------------------------
    /**
     * 解析接口返回数据
     **/
    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"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("T_DATA");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }

    // 设备转固定资产接口-Verson2-单个进行转固----------------------------start----------------------------------------------------
    public void Z_EAM_ASSET_ZG(MboRemote mbo) throws Exception {
        //任务管理主表
        Map zmap = new HashMap();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String APPNAME = mbo.getThisMboSet().getApp();//获取应用名
        Integer UDBUDGETTASKID = mbo.getInt("UDBUDGETTASKID");
        String ORGID = mbo.getString("ORGID");//组织
        String SITEID = mbo.getString("SITEID");//工厂/地点
        String AUFNR = mbo.getString("AUFNR");//内部订单号
        String PROJECTNUM = mbo.getString("UDBUDGET.PROJECTNUM");//获取主表的项目编号
        String BUKRS = "";//公司代码
//      MboSetRemote UDNBDDHSet = MXServer.getMXServer().getMboSet("UDNBDDH", MXServer.getMXServer().getSystemUserInfo());//从内部订单号中获取公司代码
        MboSetRemote lAsset = MXServer.getMXServer().getMboSet("L_ASSET", MXServer.getMXServer().getSystemUserInfo()); //语言表 --2025-01-09
        MboSetRemote UDNBDDHSet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());//从地点表中获取公司代码
        UDNBDDHSet.setWhere("ORGID='"+ORGID+"' AND SITEID='"+SITEID+"'");
        UDNBDDHSet.reset();
        if(UDNBDDHSet!=null && !UDNBDDHSet.isEmpty()){
            MboRemote nbddhMbo = UDNBDDHSet.getMbo(0);
//            BUKRS = nbddhMbo.getString("BUKRS");//公司代码
            BUKRS = nbddhMbo.getString("COMPANY");//公司代码
        }
        String ORD41 = mbo.getString("ORD41");//新增/修改原因
        //----------------------------------------------------------------------
        //项目编号有，则内部订单号和公司代码必须有，否则可以为空
        if(PROJECTNUM!=null && !"".equalsIgnoreCase(PROJECTNUM)){
            if(AUFNR==null || BUKRS==null){
                throw new MXApplicationException("AUBU","AUBUYZ",new String[0]);//弹出框提示（[内部订单号和公司代码]必须有值）
            }
        }
        zmap.put("SITEID", SITEID);
        zmap.put("AUFNR", AUFNR);//内部订单号
        zmap.put("BUKRS", BUKRS);//公司代码
        //任务管理下设备作为子表
        MboSetRemote ASSETSet = MXServer.getMXServer().getMboSet("ASSET", MXServer.getMXServer().getSystemUserInfo());//设备台账
        MboSetRemote assetSet2 = MXServer.getMXServer().getMboSet("ASSET", MXServer.getMXServer().getSystemUserInfo());//设备台账
        MboSetRemote udbudgetTaskSet = MXServer.getMXServer().getMboSet("UDBUDGETTASK", MXServer.getMXServer().getSystemUserInfo());//任务管理
        assetSet2.setWhere("UDBUDGETTASKID='"+UDBUDGETTASKID+"'");
        assetSet2.reset();
        int size = assetSet2.count();
        for (int i = 0; i < size; i++) {
            MboSetRemote udclsszjSet = MXServer.getMXServer().getMboSet("UDCLSSZJ", MXServer.getMXServer().getSystemUserInfo());//资产分类说明
            List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
            Map<String, Object> map = new HashMap<String, Object>();
            MboRemote lineMbo = assetSet2.getMbo(i);
            String ASSETNUM = lineMbo.getString("ASSETNUM");//资产编号
            String SDGDZCBM = lineMbo.getString("SDGDZCBM");//固定资产主编号
            String SUBNUMBER = lineMbo.getString("SUBNUMBER");//固定资产子编号
            String ANLKL = lineMbo.getString("ANLKL");//资产分类
            udclsszjSet.setWhere("CLASSNUM='"+ANLKL+"'");
            udclsszjSet.reset();
            lAsset.setWhere("OWNERID='"+lineMbo.getInt("ASSETUID")+"' and LANGCODE='ZH'"); //中文描述
            lAsset.reset();
            String ZJMNUM = "";//折旧码
            String ZJTXNX = "";//折旧年限
            if(udclsszjSet!=null && !udclsszjSet.isEmpty()){
                MboRemote udclssMbo = udclsszjSet.getMbo(0);
                ZJMNUM = udclssMbo.getString("ZJMNUM");
                ZJTXNX = udclssMbo.getString("ZJTXNX");
            }
            if("Z1060".equalsIgnoreCase(ANLKL)){
                //固定资产_机电设备:  固定资产_机电设备折旧年限5/8是指贸易公司及全资工厂按5年，合资工厂按8年
                if("udbudgettasktf".equalsIgnoreCase(APPNAME)){
                    ZJTXNX = "8";//TF合资工厂默认是8年
                }else{
                    ZJTXNX = "5";//其它是5年
                }
            }
            String AFASL = ZJMNUM;//折旧码
            Integer NDJAR = Integer.parseInt(ZJTXNX);//折旧年限
            //String DESCRIPTION = lineMbo.getString("DESCRIPTION");//资产描述
            String description="";
            if(lAsset.count()>0){
                description = lAsset.getMbo(0).getString("DESCRIPTION"); //2025-01-09 aw
            }
            String SDUNITTYPE = lineMbo.getString("SDUNITTYPE");//规格型号
            String SDZZS = lineMbo.getString("SDZZS");//制造商
            String fullName = description+" "+SDZZS+"_"+SDUNITTYPE+"_"+ASSETNUM;//财务要求传这种格式
            String MEINS1 = lineMbo.getString("MEINS");//计量单位
            String MEINS = "";
            if("0".equals(MEINS1)){
                MEINS = "PCS";
            }else if("1".equals(MEINS1)){
                MEINS = "PKG";
            }else if("2".equals(MEINS1)){
                MEINS = "SET";
            }
            String COSTCENTER = lineMbo.getString("COSTCENTER");//成本中心
            Double PROZS = lineMbo.getDouble("PROZS");//结算百分比
//          PROZS = PROZS/100;//百分比转为小数 ---SAP不需要除100
            Double PURCHASEPRICE = lineMbo.getDouble("PURCHASEPRICE");//金额-存在资产按金额结转情况
            String USEDFROM = lineMbo.getString("USEDFROM");//期间/年度
//          String AFASL = lineMbo.getString("AFASL");//折旧码
//          Integer NDJAR = lineMbo.getInt("NDJAR");//计划年使用期/折旧年限
            Integer NDPER = lineMbo.getInt("NDPER");//计划使用期间/折旧期间（月份)
            Date AFABG = lineMbo.getDate("AFABG");//折旧计算开始日期
            map.put("ASSETNUM",ASSETNUM);
            map.put("SDGDZCBM",SDGDZCBM);
            map.put("SUBNUMBER",SUBNUMBER);
            map.put("ANLKL",ANLKL);
            map.put("DESCRIPTION",fullName);//DESCRIPTION
            map.put("TXA50",fullName);//DESCRIPTION
            map.put("ANLHTXT",fullName);//DESCRIPTION
            map.put("SERNR","");//序列号
            map.put("MENGE",1);//数量
            map.put("MEINS",MEINS);
            map.put("COSTCENTER",COSTCENTER);
            map.put("SITEID",SITEID);//工厂
            map.put("STORT","");//资产地点
            map.put("ORD41",ORD41);
            map.put("VENDORNO","");//供应商科目编号
            map.put("TEXTWB","");//租赁数据文本
            map.put("PROZS",PROZS);
            map.put("PURCHASEPRICE",PURCHASEPRICE);
            map.put("USEDFROM",USEDFROM);
            map.put("INTERNORD",AUFNR);//内部订单号
            map.put("AFABE","1");//实际折旧范围
            map.put("AFASL",AFASL);
            map.put("NDJAR",NDJAR);
            map.put("NDPER",NDPER);
            map.put("AFABG",sdf.format(AFABG));
            dataList.add(map);
            try{
                //1-调用创建资产接口
                JSONObject alldata = CreateFormatDataAsset(SITEID,ORGID,zmap, dataList);
                //1-创建固定资产经ESB格式化
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
                //写入日志
          /*      if(alldata!=null && !alldata.isEmpty()){
                    if (alldata.toString().getBytes(StandardCharsets.UTF_8).length <= 4000) {
                        mbo.setValue("SENDJS", UrlConstants.restEsbUrl + alldata.toString(), 2L);
                        mbo.setValue("ACCEPTJS", UrlConstants.restEsbUrl + result.toString(), 2L);
                    } else {
                        mbo.setValue("SENDJS", (UrlConstants.restEsbUrl + alldata.toString()).substring(0, 1333), 2L);
                        mbo.setValue("ACCEPTJS", UrlConstants.restEsbUrl + result.toString().substring(0, 1333), 2L);
                    }
                }*/
                JSONObject resObj = result.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA");
                String codeStr = resObj.getString("EV_MSGTY");//是否成功的状态
                String EV_MSGTX = resObj.getString("EV_MSGTX");//消息描述
//              mbo.setValue("DESCRIPTION",EV_MSGTX,2L);////sap返回的消息提示
                if ("S".equalsIgnoreCase(codeStr)) {
                    JSONArray ET_RETURNArray = resObj.getJSONArray("ET_RETURN");//数组
                    JSONObject ET_RETURNObj = ET_RETURNArray.getJSONObject(0);//取其中一个对象
                    String BUKRS1 = ET_RETURNObj.getString("BUKRS");//公司代码
                    String MSGTY = ET_RETURNObj.getString("MSGTY");//消息代码
                    String MSGTX = ET_RETURNObj.getString("MSGTX");//消息描述
                    String AUFNR1 = ET_RETURNObj.getString("AUFNR");//内部订单号
                    String ANLN1 = ET_RETURNObj.getString("ANLN1");//固定资产主编号
                    String SUBNUMBER1 = ET_RETURNObj.getString("SUBNUMBER");//固定资产子编号
                    String ZASSET = ET_RETURNObj.getString("ZASSET");//EAM资产设备号
                    ASSETSet.setWhere("ASSETNUM='"+ZASSET+"'");
                    ASSETSet.reset();
                    if(ASSETSet!=null && !ASSETSet.isEmpty()){
                        MboRemote assetMbo = ASSETSet.getMbo(0);
                        assetMbo.setValue("SDGDZCBM",ANLN1,2L);//固定资产编码
                        assetMbo.setValue("SUBNUMBER",SUBNUMBER1,2L);//固定资产编码
                        assetMbo.getThisMboSet().save();//EAM保存SAP回传的固定资产编码
                        assetMbo.getThisMboSet().close();
                    }
                }
            }catch (Exception e){
                System.out.println("-------------------e="+e.getMessage());
            }finally {
//                mbo.getThisMboSet().save(2L);
            }
        }
        //判断：若本次所有的设备都已经转固完成（每台设备都有了固定资产编码）
        // 1-如果没有立项（没有项目编号），则不调用结算业务（结算业务由财务手动处理）;
        // 2-有立项（项目编号），则自动调用结算规则接口(批量调用)
        ASSETSet.setWhere("UDBUDGETTASKID='"+UDBUDGETTASKID+"' and SDGDZCBM is null");//判断固定资产编号是否有null的情况
        ASSETSet.reset();
        //mbo保存不上，重新获取
        udbudgetTaskSet.setWhere("UDBUDGETTASKID='"+UDBUDGETTASKID+"'");
        udbudgetTaskSet.reset();
        MboRemote udbugetTaskMbo = null;
        if(udbudgetTaskSet!=null && !udbudgetTaskSet.isEmpty()){
            udbugetTaskMbo = udbudgetTaskSet.getMbo(0);
        }
        //说明此次设备全部转固成功
        if(ASSETSet==null || ASSETSet.isEmpty()){
//            mbo.setValue("STATUS","TOZG",2L);//SAP转固成功状态
            //在调用OA，将固定资产编号推送给OA系统-------start--------------------------------------------
            try{
                JSONObject result = new EAM2OaAtfacHandler().Z_EAM_RETURN_ASSETNO(mbo);
                JSONObject RESPONSE = result.getJSONObject("RESPONSE");//
                if(null!=RESPONSE) {
                    JSONObject RETURN_DATA = RESPONSE.getJSONObject("RETURN_DATA");
                    String code = RETURN_DATA.getString("code");
                    String msg = RETURN_DATA.getString("msg");
                    if(code!=null && !"".equals(code) && "200".equals(code)){
                        //推送OA固定资产编号成功
                        udbugetTaskMbo.setValue("ATTR5","TOOASUS",2L);//推送OA固定资产编号成功
                        //udbugetTaskMbo.getThisMboSet().save(2L);//保存
                    }else{
                        //推送OA固定资产编号失败
                        udbugetTaskMbo.setValue("ATTR5","TOOAFAIL",2L);//推送OA固定资产编号失败
                       // udbugetTaskMbo.getThisMboSet().save(2L);//保存
                    }
                }
                //在调用OA，将固定资产编号推送给OA系统-------end--------------------------------------------
            }catch (Exception e){
                System.out.println("eeeeeeeeee="+e.getMessage());
            }finally {
                if(PROJECTNUM!=null && !"".equalsIgnoreCase(PROJECTNUM)){
                    //2-再次调用内部订单结算规则维护接口
                    JSONObject alldata2 =Z_EAM_SETTLE_RULE_MAINT(mbo);
                    // 调用接口
                    JSONObject result2 = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata2);
                    //写入日志
                    if (alldata2.toString().getBytes(StandardCharsets.UTF_8).length <= 4000) {
                        udbugetTaskMbo.setValue("SENDJS", UrlConstants.restEsbUrl + alldata2.toString(), 2L);
                        udbugetTaskMbo.setValue("ACCEPTJS", UrlConstants.restEsbUrl + result2.toString(), 2L);
                    } else {
                        udbugetTaskMbo.setValue("SENDJS", (UrlConstants.restEsbUrl + alldata2.toString()).substring(0, 1333), 2L);
                        udbugetTaskMbo.setValue("ACCEPTJS", UrlConstants.restEsbUrl + result2.toString().substring(0, 1333), 2L);
                    }
                    JSONObject resObj2 = result2.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA");
                    String codeStr2 = resObj2.getString("EV_MSGTY");//是否成功的状态  EV_MSGTY
                    String EV_MSGTX2 = resObj2.getString("EV_MSGTX");//消息描述
                    udbugetTaskMbo.setValue("DESCRIPTION",EV_MSGTX2,2L);//sap返回的消息提示
                    if("S".equalsIgnoreCase(codeStr2)){
                        udbugetTaskMbo.setValue("STATUS","COMP",2L);//状态变为 完成
                    }
                    udbugetTaskMbo.getThisMboSet().save(2L);
                }else{
                    udbugetTaskMbo.setValue("STATUS","TOZG",2L);//状态变为 完成
                    udbugetTaskMbo.getThisMboSet().save(2L);
                    throw new MXApplicationException("CREATECARD","CARDSUCCESS",new String[0]);//弹出框提示（无项目编号，设备创建资产卡片成功）
                }
            }
        }else{
            //有设备转固失败
            udbugetTaskMbo.setValue("STATUS","TOFAILZG",2L);//SAP转固失败状态
            udbugetTaskMbo.getThisMboSet().save(2L);//保存
        }
        ASSETSet.close();
        assetSet2.close();
        udbudgetTaskSet.close();
        lAsset.close();
        UDNBDDHSet.close();
    }
    //第一次调用----固定资产创建，经ESB转固格式化
    public JSONObject CreateFormatDataAsset(String SITEID, String ORGID,Map<String, Object> zMap, List<Map<String, Object>> orderWerksInfo) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject tables = new JSONObject();
        JSONObject structures = new JSONObject();
        JSONObject IS_HEADER = new JSONObject();
        JSONArray IT_ITEM = new JSONArray();
        JSONArray IT_AREAS = new JSONArray();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷 --非IPO
//            Target_ID = "SAP-820";//生产
//            Target_ID = "SAP-520";//测试
            Target_ID = UrlConstants.SAPClient2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //卫品 IPO
//            Target_ID = "SAP-810";
//            Target_ID = "SAP-510";//测试
            Target_ID = UrlConstants.SAPClient1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        } else{
           // --非IPO
//            Target_ID = "SAP-800";
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        //主数据
//        IS_HEADER.put("SITEID", zMap.get("SITEID"));
        IS_HEADER.put("AUFNR", zMap.get("AUFNR"));
        IS_HEADER.put("BUKRS", zMap.get("BUKRS"));
        //设备数据
        for (Map<String, Object> map : orderWerksInfo) {
            JSONObject jsonObject = new JSONObject();
            JSONObject jsonObject_AREAS = new JSONObject();
            jsonObject.put("ZASSET", String.valueOf(map.get("ASSETNUM")));//资产编号
            jsonObject.put("ANLN1", String.valueOf(map.get("SDGDZCBM")));//固定资产主编号
            jsonObject.put("SUBNUMBER", String.valueOf(map.get("SUBNUMBER")));//固定资产子编号
            jsonObject.put("ANLKL", String.valueOf(map.get("ANLKL")));
            jsonObject.put("TXT50", String.valueOf(map.get("DESCRIPTION")));
            jsonObject.put("TXA50", String.valueOf(map.get("TXA50")));
            jsonObject.put("ANLHTXT", String.valueOf(map.get("ANLHTXT")));
            jsonObject.put("SERNR", String.valueOf(map.get("SERNR")));
            jsonObject.put("MENGE", String.valueOf(map.get("MENGE")));
            jsonObject.put("MEINS", String.valueOf(map.get("MEINS")));
            jsonObject.put("KOSTL", String.valueOf(map.get("COSTCENTER")));
            jsonObject.put("WERKS", String.valueOf(map.get("SITEID")));
            jsonObject.put("STORT", String.valueOf(map.get("STORT")));
            jsonObject.put("ORD41", String.valueOf(map.get("ORD41")));
            jsonObject.put("VENDOR_NO", String.valueOf(map.get("VENDORNO")));//供应商科目
            jsonObject.put("TEXT", String.valueOf(map.get("TEXTWB")));
            jsonObject.put("PROZS", String.valueOf(map.get("PROZS")));
            jsonObject.put("BETRR", String.valueOf(map.get("PURCHASEPRICE")));
//            jsonObject.put("USED_FROM", String.valueOf(map.get("USEDFROM")));//期间/年度
            jsonObject.put("INTERN_ORD", String.valueOf(map.get("INTERNORD")));//内部订单号
//            jsonObject.put("AFABE", String.valueOf(map.get("AFABE")));
//            jsonObject.put("AFASL", String.valueOf(map.get("AFASL")));
//            jsonObject.put("NDJAR", String.valueOf(map.get("NDJAR")));
//            jsonObject.put("NDPER", String.valueOf(map.get("NDPER")));
//            jsonObject.put("AFABG", String.valueOf(map.get("AFABG")));
            IT_ITEM.add(jsonObject);
            //IT_AREAS
            jsonObject_AREAS.put("AFASL",String.valueOf(map.get("AFASL")));
            jsonObject_AREAS.put("AFABG",String.valueOf(map.get("AFABG")));
            jsonObject_AREAS.put("AFABE",String.valueOf(map.get("AFABE")));
            jsonObject_AREAS.put("ZASSET",String.valueOf(map.get("ASSETNUM")));
            jsonObject_AREAS.put("NDPER",String.valueOf(map.get("NDPER")));
            jsonObject_AREAS.put("NDJAR",String.valueOf(map.get("NDJAR")));
            IT_AREAS.add(jsonObject_AREAS);
        }
        structures.put("IS_HEADER", IS_HEADER);
        REQUEST_DATA.put("structures", structures);
        tables.put("IT_ITEM", IT_ITEM);
        tables.put("IT_AREAS", IT_AREAS);
        REQUEST_DATA.put("tables", tables);
        REQUEST_DATA.put("Operation", "Z_EAM_ASSET_CREATE");//esb定义----固定资产创建
        REQUEST_DATA.put("Type", "Z_EAM_ASSET_CREATE");//esb定义-----固定资产创建
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    //第二次调用--结算规则维护
    public JSONObject Z_EAM_SETTLE_RULE_MAINT(MboRemote mbo) throws RemoteException, MXException {
        //任务管理主表
        Map zmap = new HashMap();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Integer UDBUDGETTASKID = mbo.getInt("UDBUDGETTASKID");
        String ORGID = mbo.getString("ORGID");//组织
        String SITEID = mbo.getString("SITEID");//工厂/地点
        String AUFNR = mbo.getString("AUFNR");//内部订单号
        String BUKRS = "";//公司代码
       /* MboSetRemote UDNBDDHSet = MXServer.getMXServer().getMboSet("UDNBDDH", MXServer.getMXServer().getSystemUserInfo());
        UDNBDDHSet.setWhere("ORGID='"+ORGID+"' AND SITEID='"+SITEID+"' AND AUFNR='"+AUFNR+"'");
        UDNBDDHSet.reset();
        if(UDNBDDHSet!=null && !UDNBDDHSet.isEmpty()){
            MboRemote nbddhMbo = UDNBDDHSet.getMbo(0);
            BUKRS = nbddhMbo.getString("BUKRS");//公司代码
        }*/
        MboSetRemote UDNBDDHSet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());//从地点表中获取公司代码
        UDNBDDHSet.setWhere("ORGID='"+ORGID+"' AND SITEID='"+SITEID+"'");
        UDNBDDHSet.reset();
        if(UDNBDDHSet!=null && !UDNBDDHSet.isEmpty()){
            MboRemote nbddhMbo = UDNBDDHSet.getMbo(0);
//          BUKRS = nbddhMbo.getString("BUKRS");//公司代码
            BUKRS = nbddhMbo.getString("COMPANY");//公司代码
        }
        UDNBDDHSet.close();
        String ORD41 = mbo.getString("ORD41");//新增/修改原因
        //----------------------------------------------------------------------
        zmap.put("SITEID", SITEID);
        zmap.put("AUFNR", AUFNR);
        zmap.put("BUKRS", BUKRS);
        //任务管理下设备作为子表
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
//        MboSetRemote assetSet = mbo.getMboSet("ASSET");//设备台账
        MboSetRemote assetSet = MXServer.getMXServer().getMboSet("ASSET", MXServer.getMXServer().getSystemUserInfo());//设备台账
        assetSet.setWhere("UDBUDGETTASKID='"+UDBUDGETTASKID+"'");
        assetSet.reset();
        MboSetRemote lAsset = MXServer.getMXServer().getMboSet("L_ASSET", MXServer.getMXServer().getSystemUserInfo());
        for (int i = 0; i < assetSet.count(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            MboRemote lineMbo = assetSet.getMbo(i);
            String ASSETNUM = lineMbo.getString("ASSETNUM");//资产编号
            String SDGDZCBM = lineMbo.getString("SDGDZCBM");//固定资产编号
            String SUBNUMBER = lineMbo.getString("SUBNUMBER");//次级编号
            String ANLKL = lineMbo.getString("ANLKL");//资产分类
            lAsset.setWhere("OWNERID='"+lineMbo.getInt("ASSETUID")+"' and LANGCODE='ZH'"); //中文描述
            lAsset.reset();
            //String DESCRIPTION = lineMbo.getString("DESCRIPTION");//资产描述
            String description="";
            if(lAsset.count()>0){
                description = lAsset.getMbo(0).getString("DESCRIPTION"); //中文描述
            }
            String SDUNITTYPE = lineMbo.getString("SDUNITTYPE");//规格型号
            String SDZZS = lineMbo.getString("SDZZS");//制造商
            String fullName = description+" "+SDZZS+"_"+SDUNITTYPE+"_"+ASSETNUM;//财务要求传这种格式
            String MEINS = lineMbo.getString("MEINS");//计量单位
            String COSTCENTER = lineMbo.getString("COSTCENTER");//成本中心
            Double PROZS = lineMbo.getDouble("PROZS");//结算百分比
//            PROZS = PROZS/100;---SAP不需要除100
            Double PURCHASEPRICE = lineMbo.getDouble("PURCHASEPRICE");//金额-存在资产按金额结转情况
            String USEDFROM = lineMbo.getString("USEDFROM");//期间/年度
            String AFASL = lineMbo.getString("AFASL");//折旧码
            Integer NDJAR = lineMbo.getInt("NDJAR");//计划年使用期/折旧年限
            Integer NDPER = lineMbo.getInt("NDPER");//计划使用期间/折旧期间（月份)
            Date AFABG = lineMbo.getDate("AFABG");//折旧计算开始日期
            map.put("ASSETNUM",ASSETNUM);
            map.put("SDGDZCBM",SDGDZCBM);
            map.put("SUBNUMBER",SUBNUMBER);
            map.put("ANLKL",ANLKL);
            map.put("DESCRIPTION",fullName);
            map.put("TXA50",fullName);
            map.put("ANLHTXT",fullName);
            map.put("SERNR","");//序列号
            map.put("MENGE",1);//数量
            map.put("MEINS",MEINS);
            map.put("COSTCENTER",COSTCENTER);
            map.put("SITEID",SITEID);//工厂
            map.put("STORT","");//资产地点
            map.put("ORD41",ORD41);
            map.put("VENDORNO","");//供应商科目编号
            map.put("TEXTWB","");//租赁数据文本
            map.put("PROZS",PROZS);
            map.put("PURCHASEPRICE",PURCHASEPRICE);
            map.put("USEDFROM",USEDFROM);
            map.put("INTERNORD",AUFNR);//内部订单号
            map.put("AFABE","1");//实际折旧范围
            map.put("AFASL",AFASL);
            map.put("NDJAR",NDJAR);
            map.put("NDPER",NDPER);
            map.put("AFABG",AFABG);
            dataList.add(map);
        }
        lAsset.close();
        assetSet.close();
        JSONObject alldata = RuleFormatDataAsset(SITEID,ORGID,zmap, dataList);
        return alldata;
    }
    //第二次调用--结算规则维护
    public JSONObject RuleFormatDataAsset(String SITEID,String ORGID,Map<String, Object> zMap, List<Map<String, Object>> orderWerksInfo) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject tables = new JSONObject();
        JSONObject structures = new JSONObject();
        JSONObject IS_HEADER = new JSONObject();
        JSONArray IT_ITEM = new JSONArray();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷 --非IPO
//            Target_ID = "SAP-820";//生产
//            Target_ID = "SAP-520";//测试
            Target_ID = UrlConstants.SAPClient2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //卫品 IPO
//            Target_ID = "SAP-810";
//            Target_ID = "SAP-510";//测试
            Target_ID = UrlConstants.SAPClient1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        } else{
            // --非IPO
//            Target_ID = "SAP-800";
//            Target_ID = "SAP-500";//测试
            Target_ID = UrlConstants.SAPClient;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        //主数据
//        IS_HEADER.put("SITEID", zMap.get("SITEID"));
        IS_HEADER.put("AUFNR", zMap.get("AUFNR"));
        IS_HEADER.put("BUKRS", zMap.get("BUKRS"));
        //设备数据
        for (Map<String, Object> map : orderWerksInfo) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("USED_FROM", String.valueOf(map.get("USEDFROM")));//期间/年度
            jsonObject.put("SUBNUMBER", String.valueOf(map.get("SUBNUMBER")));//次级编号
            //结算百分比（拆分百分比）和 拆分金额不能同时存在
            String PROZS = String.valueOf(map.get("PROZS"));
            Double PROZSD = Double.parseDouble(PROZS);
            if(PROZS!=null && !"".equals(PROZS) && PROZSD>0){
                jsonObject.put("PROZS", PROZS);//拆分百分比
            }else{
                jsonObject.put("BETRR", String.valueOf(map.get("PURCHASEPRICE")));//拆分金额
            }
            jsonObject.put("ZASSET", String.valueOf(map.get("ASSETNUM")));//设备编号
            jsonObject.put("ANLN1", String.valueOf(map.get("SDGDZCBM")));//固定资产主编号
            jsonObject.put("SUBNUMBER", String.valueOf(map.get("SUBNUMBER")));//固定资产子编号
            IT_ITEM.add(jsonObject);
        }
        structures.put("IS_HEADER", IS_HEADER);
        REQUEST_DATA.put("structures", structures);
        tables.put("IT_ITEM", IT_ITEM);
        REQUEST_DATA.put("tables", tables);
        REQUEST_DATA.put("Operation", "Z_EAM_SETTLE_RULE_MAINT");//esb定义-----结算规则维护
        REQUEST_DATA.put("Type", "Z_EAM_SETTLE_RULE_MAINT");//esb定义-----结算规则维护
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    // 设备转固定资产接口-Verson2-批量转固-------------------------------END-----------------------

    //---从SAP获取物料的层次结构（前三层）----------------------------START---------------------------------------
    /**
     * EAM-->ESB-->SAP
     * 物料的层次结构
     */
    public void Z_EAM_GET_PRODH() throws IOException, MXException, ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH24:mm:ss");
        String dateStr = sdf.format(new Date());
        // 发送请求数据格式化
        JSONObject alldata = formatPRODHDataSend();
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        // 解析接口返回数据
        JSONArray jSONArray = formatPRODHReceived(JSON.toJSONString(result));
        //记录接口日志----------------start------------------------
        String AppId = "udcate";//应用id
        String AppName = "物资大中小类";//应用名称
        String OPNum = "";//单据号
        String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
        Integer LqTotal = jSONArray.size();//拉取的压缩包数量
        String Source = "EAM";//源系统
        String Target = "SAP";//目标系统
        String IFName = "Z_EAM_GET_PRODH";//接口名
        String IFStatus = "";//接口状态
        String Createby = "MAXADMIN";//操作人
        String Orgid = "";//组织
        String Siteid = "";//地点
        Date SendDate = new Date();//发起时间
        String SendJs = "";//发起报文
        if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
            SendJs = UrlConstants.restEsbUrl+alldata.toString();
        }else{
            SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
        }
        Date AcceptDate = new Date();//接收时间
        String AcceptJs = "";//接收报文
        if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
            AcceptJs = UrlConstants.restEsbUrl+result;
        }else{
            AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
        }
     //   new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
        //记录接口日志----------------end---------------------------
        MboSetRemote UDCOSTMOVESet = MXServer.getMXServer().getMboSet("UDCATE", MXServer.getMXServer().getSystemUserInfo());//物资的产品层次结构
        if (jSONArray != null && !jSONArray.isEmpty()) {
            for (int i = 0; i < jSONArray.size(); i++) {
                String PRODH_1 = jSONArray.getJSONObject(i).getString("PRODH_1");//产品层次1编号
                String VTEXT_1 = jSONArray.getJSONObject(i).getString("VTEXT_1");//产品层次1描述
                String PRODH_2 = jSONArray.getJSONObject(i).getString("PRODH_2");//产品层次2编号
                String VTEXT_2 = jSONArray.getJSONObject(i).getString("VTEXT_2");//产品层次2描述
                String PRODH_3 = jSONArray.getJSONObject(i).getString("PRODH_3");//产品层次3编号
                String VTEXT_3 = jSONArray.getJSONObject(i).getString("VTEXT_3");//产品层次3描述
                UDCOSTMOVESet.setWhere("BIGCATE='"+PRODH_1+"' AND MIDCATE='"+PRODH_2+"' AND SMALLCATE='"+PRODH_3+"'");
                UDCOSTMOVESet.reset();
                MboRemote costMvMbo = null;
                if (UDCOSTMOVESet != null && !UDCOSTMOVESet.isEmpty()) {
                    costMvMbo = UDCOSTMOVESet.getMbo(0);//更新
                } else {
                    costMvMbo = UDCOSTMOVESet.add();//创建对象
                }
                costMvMbo.setValue("BIGCATE",PRODH_1,2L);
                costMvMbo.setValue("BIGCATEDESC",VTEXT_1,2L);
                costMvMbo.setValue("MIDCATE",PRODH_2,2L);
                costMvMbo.setValue("MIDCATEDESC",VTEXT_2,2L);
                costMvMbo.setValue("SMALLCATE",PRODH_3,2L);
                costMvMbo.setValue("SMALLCATEDESC",VTEXT_3,2L);
                costMvMbo.setValue("DESCRIPTION",dateStr,2L);
                costMvMbo.setValue("LQDATE",new Date(),2L);//拉取日期
                UDCOSTMOVESet.save();//保存
            }
        }
    }
    //请求数据--格式化
    public JSONObject formatPRODHDataSend() {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
//        String Target_ID = "SAP-800";
        String Target_ID = UrlConstants.SAPClient;
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        REQUEST_DATA.put("Operation", "Z_EAM_GET_PRODH");
        REQUEST_DATA.put("Type", "Z_EAM_GET_PRODH");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatPRODHReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("O_TYPE");
        if ("S".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------从SAP获取物料的层次结构（前三层）----------------------END---------------------------------------

    //-----物料库龄接口（库存呆滞有关）--------------------start-----------------------------------------------------
    /* EAM-->ESB-->SAP
     */
    public void Z_SPMS_GET_KULING(String OrgId) throws IOException, MXException, ParseException {
        //地点
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
        if("".equals(OrgId)){
        //非陶瓷
            SITESet.setWhere(" ORGID not in('TILE') and ACTIVE=1");
        }else if("TILE".equalsIgnoreCase(OrgId)){
        //陶瓷
            SITESet.setWhere(" ORGID='TILE' and ACTIVE=1");
        }else{
        //所有-手动拉取
            SITESet.setWhere(" ACTIVE=1");
        }
        SITESet.reset();
        if (SITESet != null && !SITESet.isEmpty()) {
            for (int s = 0; s < SITESet.count(); s++) {
                MboRemote siteMbo = SITESet.getMbo(s);
                String SITEID = siteMbo.getString("SITEID");
                String ORGID = siteMbo.getString("ORGID");
                //发送请求数据格式化
                JSONObject alldata = formatKULINGDataSend(SITEID, ORGID);
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl2, alldata);
//                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
//                System.out.println("=======gnc=price========result="+result.toString());
                // 解析接口返回数据
                JSONArray jSONArray = formatKULINGDataReceived(JSON.toJSONString(result));
                System.out.println("=======kuling==="+SITEID+"===JSONARRAY="+jSONArray.size());
                //记录接口日志----------------start------------------------
                String AppId = "udkl";//应用id
                String AppName = "物资库龄";//应用名称
                String OPNum = "";//单据号
                String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                Integer LqTotal = jSONArray.size();//拉取的压缩包数量
                String Source = "EAM";//源系统
                String Target = "SAP";//目标系统
                String IFName = "Z_SPMS_GET_KULING";//接口名
                String IFStatus = "";//接口状态
                String Createby = "MAXADMIN";//操作人
                String Orgid = ORGID;//组织
                String Siteid = SITEID;//地点
                Date SendDate = new Date();//发起时间
                String SendJs = "";//发起报文
                if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    SendJs = UrlConstants.restEsbUrl+alldata.toString();
                }else{
                    SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                }
                Date AcceptDate = new Date();//接收时间
                String AcceptJs = "";//接收报文
                if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    AcceptJs = UrlConstants.restEsbUrl+result;
                }else{
                    AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
                }
         //       new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
                //记录接口日志----------------end---------------------------
                MboSetRemote UDKLSET = MXServer.getMXServer().getMboSet("UDKL", MXServer.getMXServer().getSystemUserInfo());//库龄表
                if (jSONArray != null && !jSONArray.isEmpty()) {
                    for (int i = 0; i < jSONArray.size(); i++) {
                        JSONObject obj = jSONArray.getJSONObject(i);//对象
                        String MATNR = obj.getString("MATNR");//物料编码
                        String MAKTX = obj.getString("MAKTX");//物料描述
                        String MEINS = obj.getString("MEINS");//基本单位
                        String LGORT = obj.getString("LGORT");//仓库地点
                        String WERKS = obj.getString("WERKS");//工厂
                        String WAERS = obj.getString("WAERS");//币种
                        String ERFME = obj.getString("ERFME");//件数单位
                        String PRDHA = obj.getString("PRDHA");//物料层次
                        String VTEXT = obj.getString("ERFME");//物料层次名称-中文
                        Double HSL = obj.getDouble("HSL");//换算率
                        String PRODH_1 = obj.getString("PRODH_1");//产品层次1编码
                        String VTEXT_1 = obj.getString("VTEXT_1");//产品层次1描述
                        String PRODH_2 = obj.getString("PRODH_2");//产品层次2编码
                        String VTEXT_2 = obj.getString("VTEXT_2");//产品层次2描述
                        String PRODH_3 = obj.getString("PRODH_3");//产品层次3编码
                        String VTEXT_3 = obj.getString("VTEXT_3");//产品层次3描述
                        String PRODH_4 = obj.getString("PRODH_4");//产品层次4编码
                        String VTEXT_4 = obj.getString("VTEXT_4");//产品层次4描述
                        String PRODH_5 = obj.getString("PRODH_5");//产品层次5编码
                        String VTEXT_5 = obj.getString("VTEXT_5");//产品层次5描述
                        String PRODH_6 = obj.getString("PRODH_6");//产品层次6编码
                        String VTEXT_6 = obj.getString("VTEXT_6");//产品层次6描述
                        Double ERFMG = obj.getDouble("ERFMG");//库存总件数
                        Double ERFMG30 = obj.getDouble("ERFMG30");
                        Double ERFMG60 = obj.getDouble("ERFMG60");
                        Double ERFMG90 = obj.getDouble("ERFMG90");
                        Double ERFMG120 = obj.getDouble("ERFMG120");
                        Double ERFMG150 = obj.getDouble("ERFMG150");
                        Double ERFMG180 = obj.getDouble("ERFMG180");
                        Double ERFMG210 = obj.getDouble("ERFMG210");
                        Double ERFMG240 = obj.getDouble("ERFMG240");
                        Double ERFMG270 = obj.getDouble("ERFMG270");
                        Double ERFMG300 = obj.getDouble("ERFMG300");
                        Double ERFMG330 = obj.getDouble("ERFMG330");
                        Double ERFMG365 = obj.getDouble("ERFMG365");
                        Double ERFMG366 = obj.getDouble("ERFMG366");
                        Double LABST = obj.getDouble("LABST");//库存总数量
                        Double LABST30 = obj.getDouble("LABST30");
                        Double LABST60 = obj.getDouble("LABST60");
                        Double LABST90 = obj.getDouble("LABST90");
                        Double LABST120 = obj.getDouble("LABST120");
                        Double LABST150 = obj.getDouble("LABST150");
                        Double LABST180 = obj.getDouble("LABST180");
                        Double LABST210 = obj.getDouble("LABST210");
                        Double LABST240 = obj.getDouble("LABST240");
                        Double LABST270 = obj.getDouble("LABST270");
                        Double LABST300 = obj.getDouble("LABST300");
                        Double LABST330 = obj.getDouble("LABST330");
                        Double LABST365 = obj.getDouble("LABST365");
                        Double LABST366 = obj.getDouble("LABST366");
                        Double DMBTR = obj.getDouble("DMBTR");//库存总金额
                        Double DMBTR30 = obj.getDouble("DMBTR30");
                        Double DMBTR60 = obj.getDouble("DMBTR60");
                        Double DMBTR90 = obj.getDouble("DMBTR90");
                        Double DMBTR120 = obj.getDouble("DMBTR120");
                        Double DMBTR150 = obj.getDouble("DMBTR150");
                        Double DMBTR180 = obj.getDouble("DMBTR180");
                        Double DMBTR210 = obj.getDouble("DMBTR210");
                        Double DMBTR240 = obj.getDouble("DMBTR240");
                        Double DMBTR270 = obj.getDouble("DMBTR270");
                        Double DMBTR300 = obj.getDouble("DMBTR300");
                        Double DMBTR330 = obj.getDouble("DMBTR330");
                        Double DMBTR365 = obj.getDouble("DMBTR365");
                        Double DMBTR366 = obj.getDouble("DMBTR366");
                        //是否存在
                        UDKLSET.setWhere("MATNR='" + MATNR + "' and SITEID ='"+ WERKS+"'");
                        UDKLSET.reset();
                        MboRemote KLMbo = null;
                        if (UDKLSET != null && !UDKLSET.isEmpty()) {
                            KLMbo = UDKLSET.getMbo(0);
                        } else {
                            KLMbo = UDKLSET.add();//创建对象
                        }
                        KLMbo.setValue("MATNR", MATNR);
                        KLMbo.setValue("MAKTX", MAKTX);
                        KLMbo.setValue("MEINS", MEINS);
                        KLMbo.setValue("LGORT", LGORT);
//                        KLMbo.setValue("WERKS", WERKS);
                        KLMbo.setValue("WAERS", WAERS);
                        KLMbo.setValue("ERFME", ERFME);
                        KLMbo.setValue("PRDHA", PRDHA);
                        KLMbo.setValue("VTEXT", VTEXT);
                        KLMbo.setValue("HSL", HSL);
                        KLMbo.setValue("PRODH_1", PRODH_1);
                        KLMbo.setValue("VTEXT_1", VTEXT_1);
                        KLMbo.setValue("PRODH_2", PRODH_2);
                        KLMbo.setValue("VTEXT_2", VTEXT_2);
                        KLMbo.setValue("PRODH_3", PRODH_3);
                        KLMbo.setValue("VTEXT_3", VTEXT_3);
                        KLMbo.setValue("PRODH_4", PRODH_4);
                        KLMbo.setValue("VTEXT_4", VTEXT_4);
                        KLMbo.setValue("PRODH_5", PRODH_5);
                        KLMbo.setValue("VTEXT_5", VTEXT_5);
                        KLMbo.setValue("PRODH_6", PRODH_6);
                        KLMbo.setValue("VTEXT_6", VTEXT_6);
                        KLMbo.setValue("ERFMG", ERFMG);
                        KLMbo.setValue("ERFMG30", ERFMG30);
                        KLMbo.setValue("ERFMG60", ERFMG60);
                        KLMbo.setValue("ERFMG90", ERFMG90);
                        KLMbo.setValue("ERFMG120", ERFMG120);
                        KLMbo.setValue("ERFMG150", ERFMG150);
                        KLMbo.setValue("ERFMG180", ERFMG180);
                        KLMbo.setValue("ERFMG210", ERFMG210);
                        KLMbo.setValue("ERFMG240", ERFMG240);
                        KLMbo.setValue("ERFMG270", ERFMG270);
                        KLMbo.setValue("ERFMG300", ERFMG300);
                        KLMbo.setValue("ERFMG330", ERFMG330);
                        KLMbo.setValue("ERFMG365", ERFMG365);
                        KLMbo.setValue("ERFMG366", ERFMG366);
                        KLMbo.setValue("LABST", LABST);
                        KLMbo.setValue("LABST30", LABST30);
                        KLMbo.setValue("LABST60", LABST60);
                        KLMbo.setValue("LABST90", LABST90);
                        KLMbo.setValue("LABST120", LABST120);
                        KLMbo.setValue("LABST150", LABST150);
                        KLMbo.setValue("LABST180", LABST180);
                        KLMbo.setValue("LABST210", LABST210);
                        KLMbo.setValue("LABST240", LABST240);
                        KLMbo.setValue("LABST270", LABST270);
                        KLMbo.setValue("LABST300", LABST300);
                        KLMbo.setValue("LABST330", LABST330);
                        KLMbo.setValue("LABST365", LABST365);
                        KLMbo.setValue("LABST366", LABST366);
                        KLMbo.setValue("DMBTR", DMBTR);
                        KLMbo.setValue("DMBTR30", DMBTR30);
                        KLMbo.setValue("DMBTR60", DMBTR60);
                        KLMbo.setValue("DMBTR90", DMBTR90);
                        KLMbo.setValue("DMBTR120", DMBTR120);
                        KLMbo.setValue("DMBTR150", DMBTR150);
                        KLMbo.setValue("DMBTR180", DMBTR180);
                        KLMbo.setValue("DMBTR210", DMBTR210);
                        KLMbo.setValue("DMBTR240", DMBTR240);
                        KLMbo.setValue("DMBTR270", DMBTR270);
                        KLMbo.setValue("DMBTR300", DMBTR300);
                        KLMbo.setValue("DMBTR330", DMBTR330);
                        KLMbo.setValue("DMBTR365", DMBTR365);
                        KLMbo.setValue("DMBTR366", DMBTR366);
                        KLMbo.setValue("SITEID", SITEID);
                        KLMbo.setValue("ORGID", ORGID);
                        KLMbo.setValue("LQDATE",new Date());//拉取日期
                        UDKLSET.save();//保存
                        UDKLSET.close();
                    }
                }
            }
        }
    }

    //物料库龄 发送REST请求到ESB，先进行数据格式化
    public JSONObject formatKULINGDataSend(String SITEID, String ORGID) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        JSONObject FILEDS = new JSONObject();
        String Target_ID = "";
        String Client = "";//客户端
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷 --非IPO
//            Target_ID = "SAP-820";
//            Client = "820";
            Target_ID = UrlConstants.SAPClient2;
            Client = UrlConstants.Client2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-810";
//            Client = "810";
            Target_ID = UrlConstants.SAPClient1;
            Client = UrlConstants.Client1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";
//            Client = "800";
            Target_ID = UrlConstants.SAPClient;
            Client = UrlConstants.Client;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";
//            Client = "800";
            Target_ID = UrlConstants.SAPClient;
            Client = UrlConstants.Client;
        }else{
//            Target_ID = "SAP-800";
//            Client = "800";
            Target_ID = UrlConstants.SAPClient;
            Client = UrlConstants.Client;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        REQUEST_DATA.put("Operation", "Z_SPMS_GET_KULING");
        REQUEST_DATA.put("Type", "Z_SPMS_GET_KULING");
        FILEDS.put("IV_MANDT", Client);//客户端
        FILEDS.put("IV_MATNR", "");//物料编号
        FILEDS.put("IV_BUDAT_MKPF", sdf.format(new Date()));//凭证中的过账日期,获取的是小于等于这个日期的数据  2023-11-21
        FILEDS.put("IV_DAYS", "");//根据库龄天数，如: 30 Days则查询30 Days.
        FILEDS.put("IV_WERKS",SITEID);//工厂
        REQUEST_DATA.put("fileds", FILEDS);
//        REQUEST_DATA.put("HeadType", "0");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    //物料库龄返回
    public JSONArray formatKULINGDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("ET_LIST");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------物料库龄接口（库存呆滞有关）------------------end-----------------------------------------------------

    //-----物料在途接口--------------------start-----------------------------------------------------
    /* EAM-->ESB-->SAP
     */
    public void Z_FR_ZHUANGCHU_ZAITU() throws IOException, MXException, ParseException {
        //每次拉取先全量删除，在进行同步
        MboSetRemote UDZTDel = MXServer.getMXServer().getMboSet("UDZT", MXServer.getMXServer().getSystemUserInfo());//在途表
        UDZTDel.deleteAll();;
        UDZTDel.save();
        //地点
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
        SITESet.setWhere(" ACTIVE=1");
        SITESet.reset();
        if (SITESet != null && !SITESet.isEmpty()) {
            for (int s = 0; s < SITESet.count(); s++) {
                MboRemote siteMbo = SITESet.getMbo(s);
                String SITEID = siteMbo.getString("SITEID");
                String ORGID = siteMbo.getString("ORGID");
                //发送请求数据格式化
                JSONObject alldata = formatZTDataSend("","",SITEID, ORGID);
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
                // 解析接口返回数据
                JSONArray jSONArray = formatZTDataReceived(JSON.toJSONString(result));
                System.out.println("=======zaitu==="+SITEID+"===JSONARRAY="+jSONArray.size());
                //记录接口日志----------------start------------------------
                String AppId = "udzt";//应用id
                String AppName = "物资在途";//应用名称
                String OPNum = "";//单据号
                String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                Integer LqTotal = jSONArray.size();//拉取的压缩包数量
                String Source = "EAM";//源系统
                String Target = "SAP";//目标系统
                String IFName = "Z_SPMS_ZAITU";//接口名
                String IFStatus = "";//接口状态
                String Createby = "MAXADMIN";//操作人
                String Orgid = ORGID;//组织
                String Siteid = SITEID;//地点
                Date SendDate = new Date();//发起时间
                String SendJs = "";//发起报文
                if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    SendJs = UrlConstants.restEsbUrl+alldata.toString();
                }else{
                    SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                }
                Date AcceptDate = new Date();//接收时间
                String AcceptJs = "";//接收报文
                if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    AcceptJs = UrlConstants.restEsbUrl+result;
                }else{
                    AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
                }
        //        new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
                //记录接口日志----------------end---------------------------
                MboSetRemote UDZTSET = MXServer.getMXServer().getMboSet("UDZT", MXServer.getMXServer().getSystemUserInfo());//在途表
                if (jSONArray != null && !jSONArray.isEmpty()) {
                    for (int i = 0; i < jSONArray.size(); i++) {
                        JSONObject obj = jSONArray.getJSONObject(i);//对象
                        String FHWERKS = obj.getString("FHWERKS");//发货工厂
                        String SHWERKS = obj.getString("SHWERKS");//收货工厂
                        Date BEDAT = obj.getDate("BEDAT");//采购订单日期
                        String EBELN = obj.getString("EBELN");//采购订单
                        Integer EBELP = obj.getInteger("EBELP");//采购订单行号
                        Date DGDAT = obj.getDate("ZDEDGDAT");//预计到港日期
                        String BOLNR = obj.getString("BOLNR");//装箱单号
                        String ZCABNO = obj.getString("ZCABNO");//柜号
                        String ZSPMS = obj.getString("ZSPMS");//收货系统
                        String VBELN = obj.getString("VBELN");//交货单号
                        Integer POSNR = obj.getInteger("POSNR");//交货单行号
                        String PACKAGE_CODE = obj.getString("PACKAGE_CODE");//箱码
                        String MATNR = obj.getString("MATNR");//物料编码
                        String MAKTX = obj.getString("MAKTX");//物料描述
                        Double WAMNG = obj.getDouble("WAMNG");//发货数量
                        Double WEMNG = obj.getDouble("WEMNG");//收货数量
                        String MEINS = obj.getString("MEINS");//基本单位
                        Double ZWAMNG_XS = obj.getDouble("ZWAMNG_XS");//发货件数
                        Double ZWEMNG_XS = obj.getDouble("ZWEMNG_XS");//收货件数
                        String ZVRKME_XS = obj.getString("ZVRKME_XS");//销售单位
                        //箱码为空时的判断
                        if(PACKAGE_CODE!=null && !"".equalsIgnoreCase(PACKAGE_CODE)){
                            //箱码为空时的判断
                            UDZTSET.setWhere("MATNR='"+MATNR+"' and VBELN ='"+VBELN+"' and POSNR="+POSNR+" and PACKAGE_CODE='"+PACKAGE_CODE+"' and SHWERKS='"+SHWERKS+"'");
                        }else {
                            //是否存在(交货单、交货单行号、箱码、物料编码)这四个能唯一确定
                            UDZTSET.setWhere("MATNR='"+MATNR+"' and VBELN ='"+VBELN+"' and POSNR="+POSNR+" and SHWERKS='"+SHWERKS+"'");
                        }
                        UDZTSET.reset();
                        MboRemote KLMbo = null;
                        if (UDZTSET != null && !UDZTSET.isEmpty()) {
                            KLMbo = UDZTSET.getMbo(0);
                        } else {
                            KLMbo = UDZTSET.add();//创建对象
                        }
                        KLMbo.setValue("FHWERKS", FHWERKS);
                        KLMbo.setValue("SHWERKS", SHWERKS);
                        KLMbo.setValue("BEDAT", BEDAT);
                        KLMbo.setValue("EBELN", EBELN);
                        KLMbo.setValue("EBELP", EBELP);
                        KLMbo.setValue("DGDAT", DGDAT);
                        KLMbo.setValue("BOLNR", BOLNR);
                        KLMbo.setValue("CABNO", ZCABNO);
                        KLMbo.setValue("ZSPMS", ZSPMS);
                        KLMbo.setValue("VBELN", VBELN);
                        KLMbo.setValue("POSNR", POSNR);
                        KLMbo.setValue("MATNR", MATNR);
                        KLMbo.setValue("MAKTX", MAKTX);
                        KLMbo.setValue("WAMNG", WAMNG);
                        KLMbo.setValue("WEMNG", WEMNG);
                        KLMbo.setValue("PACKAGE_CODE",PACKAGE_CODE);//箱码
                        KLMbo.setValue("MEINS", MEINS);
                        KLMbo.setValue("ZWAMNG_XS", ZWAMNG_XS);
                        KLMbo.setValue("ZWEMNG_XS", ZWEMNG_XS);
                        KLMbo.setValue("ZVRKME_XS", ZVRKME_XS);
                        KLMbo.setValue("LQDATE",new Date());//拉取日期
                        UDZTSET.save();//保存
                        UDZTSET.close();
                    }
                }
            }
        }
    }

    //物料在途 发送REST请求到ESB，先进行数据格式化
    public JSONObject formatZTDataSend(String startDate,String endDate,String SITEID, String ORGID) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        JSONObject FILEDS = new JSONObject();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷 --非IPO
//            Target_ID = "SAP-820";
            Target_ID = UrlConstants.SAPClient2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-810";
            Target_ID = UrlConstants.SAPClient1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-800";
            Target_ID = UrlConstants.SAPClient;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-800";
            Target_ID = UrlConstants.SAPClient;
        }else{
//            Target_ID = "SAP-800";
            Target_ID = UrlConstants.SAPClient;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        REQUEST_DATA.put("Operation", "Z_SPMS_ZAITU");// 这个函数是POS系统：Z_FR_ZHUANGCHU_ZAITU_NEW
        REQUEST_DATA.put("Type", "Z_SPMS_ZAITU");
        FILEDS.put("S_BEDATF", startDate);//SAP凭证日期开始
        FILEDS.put("S_BEDATE", endDate);//SAP凭证日期结束
        FILEDS.put("S_FHWERKS","");//发货工厂
        FILEDS.put("S_SHWERKS",SITEID);//收货工厂
        FILEDS.put("S_EBELN","");//采购订单
        FILEDS.put("S_VBELN","");//交货单
        FILEDS.put("S_MATNR","");//物料编码
        FILEDS.put("S_PACKAGE_CODE","");//箱码
        REQUEST_DATA.put("fileds", FILEDS);
//        REQUEST_DATA.put("HeadType", "0");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    //物料在途返回
    public JSONArray formatZTDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------物料在途接口------------------end-----------------------------------------------------

    //------全流程跟踪获取部分信息口------------------start-----------------------------------------------------
    /*  EAM-->ESB-->SAP
    **  获取SAP需求提报相关数据，包括国内仓收货、计划拼柜、海运、清关、海外仓收货
    *   当前这个接口没有工厂和公司字段。无法通过公司和工厂进行区分，只能全量拉取。唯一做过滤的就是时间
    *   Create：2024-4-15   liuxq
    */
    public void Z_EAM_GET_TRANSPORT_INFO(String startDate,String endDate) throws IOException, MXException, ParseException {
        //组织
        MboSetRemote orgSet = MXServer.getMXServer().getMboSet("ORGANIZATION", MXServer.getMXServer().getSystemUserInfo());
        orgSet.setWhere(" ACTIVE=1");
        orgSet.reset();
        if (orgSet != null && !orgSet.isEmpty()) {
            for (int s = 0; s < orgSet.count(); s++) {
                MboRemote orgMbo = orgSet.getMbo(s);
                String ORGID = orgMbo.getString("ORGID");//组织
                //发送请求数据格式化
                JSONObject alldata = formatTRANSPORTDataSend(startDate,endDate,"", ORGID);
                JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl2, alldata);
                // 解析接口返回数据
                JSONArray jSONArray = formatTRANSPORTDataReceived(JSON.toJSONString(result));
                System.out.println("=======Z_EAM_GET_TRANSPORT_INFO--->ORGID="+ORGID+"---->JSONARRAY="+jSONArray.size());//数据量
                //记录接口日志----------------start------------------------
                String AppId = "udqlc";//应用id
                String AppName = "物资采购全流程跟踪";//应用名称
                String OPNum = "";//单据号
                String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
                Integer LqTotal = jSONArray.size();//拉取的压缩包数量
                String Source = "EAM";//源系统
                String Target = "SAP";//目标系统
                String IFName = "Z_EAM_GET_TRANSPORT_INFO";//接口名
                String IFStatus = "";//接口状态
                String Createby = "MAXADMIN";//操作人
                String Orgid = ORGID;//组织
                String Siteid = "";//地点
                Date SendDate = new Date();//发起时间
                String SendJs = "";//发起报文
                if(alldata.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    SendJs = UrlConstants.restEsbUrl+alldata.toString();
                }else{
                    SendJs = UrlConstants.restEsbUrl+alldata.toString().substring(0,1333);
                }
                Date AcceptDate = new Date();//接收时间
                String AcceptJs = "";//接收报文
                if(result.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                    AcceptJs = UrlConstants.restEsbUrl+result;
                }else{
                    AcceptJs = UrlConstants.restEsbUrl+result.toString().substring(0,3600);
                }
         //       new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
                //记录接口日志----------------end---------------------------
                MboSetRemote udQLCSet = MXServer.getMXServer().getMboSet("UDQLC", MXServer.getMXServer().getSystemUserInfo());//全流程部分信息表
                if (jSONArray != null && !jSONArray.isEmpty()) {
                    for (int i = 0; i < jSONArray.size(); i++) {
                        JSONObject obj = jSONArray.getJSONObject(i);//对象
                        String FACTORYPR = obj.getString("DEMAND_NO");//工厂请购单号
                        String FACTORYLINEPR = obj.getString("DEMAND_POSNR");//工厂请购单行号
                        FACTORYLINEPR = FACTORYLINEPR.replaceFirst("^0+(?!$)", "");//去掉字符串前面的所有0
                        String PONUM = obj.getString("EBELN");//国内采购订单号
                        String POLINENUM = obj.getString("EBELP");//国内采购订单行号
                        POLINENUM = POLINENUM.replaceFirst("^0+(?!$)", "");//去掉字符串前面的所有0
                        String ITEMNUM = obj.getString("MATNR");//物料编码
                        ITEMNUM = ITEMNUM.replaceFirst("^0+(?!$)", "");//去掉字符串前面的所有0
                        String DELIVERYNUM = obj.getString("VBELN");//国内交货单号
                        String RECEPTTOTAL = obj.getString("MENGE");//国内收货数量
                        String GNSJSL = obj.getString("GNSJSL");//国内拆箱数量
                        String BOXCODE = obj.getString("PACKAGE_CODE");//箱码
                        String BOXLINENUM = obj.getString("PACKAGE_POSNR");//箱码明细行号
                        BOXLINENUM = BOXLINENUM.replaceFirst("^0+(?!$)", "");//去掉字符串前面的所有0
                        String PACKLISTSTATUS = obj.getString("STATSU_PKCODE");//箱码状态
                        String PGTYPE = obj.getString("CODE_TYPE");//拼柜方式
                        String PACKLISTNUM = obj.getString("XDNUM");//装箱单号
                        String ZPOSNR = obj.getString("ZPOSNR");//装箱单行号
                        ZPOSNR = ZPOSNR.replaceFirst("^0+(?!$)", "");//去掉字符串前面的所有0
                        String GNCKSL = obj.getString("GNCKSL");//国内出库数量
                        String EBELNZC = obj.getString("EBELN_ZC");//海外采购订单号
                        String EBELPZC = obj.getString("EBELP_ZC");//海外采购订单行号
                        EBELPZC = EBELPZC.replaceFirst("^0+(?!$)", "");//去掉字符串前面的所有0
                        String VBELNZC = obj.getString("VBELN_ZC");//海外交货单号
                        String SEANUM = obj.getString("HWSHSL");//海外仓收货数量
                        String RECEPTWAREHOUSEDATEstr = obj.getString("INBOUND_TIME");//国内仓收货日期
                        Date RECEPTWAREHOUSEDATE = null;
                        if(RECEPTWAREHOUSEDATEstr!=null && !"".equalsIgnoreCase(RECEPTWAREHOUSEDATEstr)){
                            RECEPTWAREHOUSEDATE = new Date(Long.parseLong(RECEPTWAREHOUSEDATEstr));
                        }
                        String OUTBOUNDTIMEstr = obj.getString("OUTBOUND_TIME");//国内仓出库日期
                        Date OUTBOUNDTIME = null;
                        if(OUTBOUNDTIMEstr!=null && !"".equalsIgnoreCase(OUTBOUNDTIMEstr)){
                            OUTBOUNDTIME = new Date(Long.parseLong(OUTBOUNDTIMEstr));
                        }
                        String OVERSEADATEstr = obj.getString("OVERSEAS_TIME");//海外仓收货日期
                        Date OVERSEADATE = null;
                        if(OVERSEADATEstr!=null && !"".equalsIgnoreCase(OVERSEADATEstr)){
                            OVERSEADATE = new Date(Long.parseLong(OVERSEADATEstr));
                        }
                        //判断唯一性：工厂请购单号，工厂请购单行号，箱码，箱码明细号
                        udQLCSet.setWhere("FACTORYPR='"+FACTORYPR+"' and FACTORYLINEPR='"+FACTORYLINEPR+"' and BOXCODE='"+BOXCODE+"' and BOXLINENUM='"+BOXLINENUM+"'");
                        udQLCSet.reset();
                        MboRemote udQlcMbo = null;
                        if (udQLCSet != null && !udQLCSet.isEmpty()) {
                            udQlcMbo = udQLCSet.getMbo(0);
                        } else {
                            udQlcMbo = udQLCSet.add();//创建对象
                        }
                        udQlcMbo.setValue("FACTORYPR", FACTORYPR);
                        udQlcMbo.setValue("FACTORYLINEPR", FACTORYLINEPR);
                        udQlcMbo.setValue("PONUM", PONUM);
                        udQlcMbo.setValue("POLINENUM", POLINENUM);
                        udQlcMbo.setValue("ITEMNUM", ITEMNUM);
                        udQlcMbo.setValue("DELIVERYNUM", DELIVERYNUM);
                        udQlcMbo.setValue("RECEPTTOTAL", RECEPTTOTAL);
                        udQlcMbo.setValue("GNSJSL", GNSJSL);
                        udQlcMbo.setValue("BOXCODE", BOXCODE);
                        udQlcMbo.setValue("BOXLINENUM", BOXLINENUM);
                        udQlcMbo.setValue("PACKLISTSTATUS", PACKLISTSTATUS);
                        udQlcMbo.setValue("PGTYPE", PGTYPE);
                        udQlcMbo.setValue("PACKLISTNUM", PACKLISTNUM);
                        udQlcMbo.setValue("ZPOSNR", ZPOSNR);
                        udQlcMbo.setValue("GNCKSL", GNCKSL);
                        udQlcMbo.setValue("EBELNZC", EBELNZC);
                        udQlcMbo.setValue("EBELPZC", EBELPZC);
                        udQlcMbo.setValue("VBELNZC", VBELNZC);
                        udQlcMbo.setValue("SEANUM", SEANUM);
                        udQlcMbo.setValue("LQDATE", new Date());
                        if(RECEPTWAREHOUSEDATE!=null){
                            udQlcMbo.setValue("RECEPTWAREHOUSEDATE", RECEPTWAREHOUSEDATE);
                        }
                        if(OUTBOUNDTIME!=null){
                            udQlcMbo.setValue("OUTBOUNDTIME", OUTBOUNDTIME);
                        }
                        if(OVERSEADATE!=null){
                            udQlcMbo.setValue("OVERSEADATE", OVERSEADATE);
                        }
                        udQlcMbo.getThisMboSet().save();//保存
                    }
                }
            }
        }
    }

    //全流程跟踪部分信息 发送REST请求到ESB，先进行数据格式化
    public JSONObject formatTRANSPORTDataSend(String startDate,String endDate,String SITEID, String ORGID) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        JSONObject FILEDS = new JSONObject();
        String Target_ID = "";
        if ("TILE".equalsIgnoreCase(ORGID)) {
            //陶瓷 --非IPO
//            Target_ID = "SAP-520";//测试
//            Target_ID = "SAP-820";
            Target_ID = UrlConstants.SAPClient2;
        } else if ("FMCG".equalsIgnoreCase(ORGID)) {
            //快消---IPO
//            Target_ID = "SAP-510";//测试
//            Target_ID = "SAP-810";
            Target_ID = UrlConstants.SAPClient1;
        } else if ("NFMCG".equalsIgnoreCase(ORGID)) {
            //快消非IPO
//            Target_ID = "SAP-500";//测试
//            Target_ID = "SAP-800";
            Target_ID = UrlConstants.SAPClient;
        } else if ("HHMC".equalsIgnoreCase(ORGID)) {
            //五金 --非IPO
//            Target_ID = "SAP-500";//测试
//            Target_ID = "SAP-800";//生产
            Target_ID = UrlConstants.SAPClient;
        }else{
//            Target_ID = "SAP-800";//生产
            Target_ID = UrlConstants.SAPClient;
        }
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", Target_ID); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        REQUEST_DATA.put("Operation", "Z_EAM_GET_TRANSPORT_INFO");// 这个函数是POS系统：Z_FR_ZHUANGCHU_ZAITU_NEW
        REQUEST_DATA.put("Type", "Z_EAM_GET_TRANSPORT_INFO");
        FILEDS.put("CREATE_DATE_B", startDate);//请购单创建日期起始日期
        FILEDS.put("CREATE_DATE_E", endDate);//请购单创建日期结束日期
        REQUEST_DATA.put("fileds", FILEDS);
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    //全流程跟踪部分信息 解析返回
    public JSONArray formatTRANSPORTDataReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
//        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
//        jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_LIST");
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("ET_TANSPORT_INFO");
            return jsonArray;
        } else {

        }
        return jsonArray;
    }
    //------全流程跟踪获取部分信息口-----------------end-----------------------------------------------------

    //------SAP Client获取----------------start-----------------------------------------------------
    /**
     * EAM-->ESB-->SAP
     * 获取 SAP 客户端
     */
    public void Z_SAP_ORG_CLIENT() throws IOException, MXException, ParseException {
        // 发送请求数据格式化
        JSONObject alldata = formatSapClientSend();
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        // 解析接口返回数据
        JSONArray jSONArray = formatSAPClientReceived(JSON.toJSONString(result));
        MboSetRemote UDSAPCLIENTSet = MXServer.getMXServer().getMboSet("UDSAPCLIENT", MXServer.getMXServer().getSystemUserInfo());//汇率
        if (jSONArray != null && !jSONArray.isEmpty()) {
            for (int i = 0; i < jSONArray.size(); i++) {
                JSONObject jsObj = jSONArray.getJSONObject(i);
                String SYSID = jsObj.getString("SYSID");//SAP系统
                String ZMANDT = jsObj.getString("ZMANDT");//客户端
                String ZMTXT = jsObj.getString("ZMTXT");//客户端描述
                String BUKRS = jsObj.getString("BUKRS");//公司代码
                String WERKS = jsObj.getString("WERKS");//工厂
                String EKORG = jsObj.getString("EKORG");//采购组织
                Date LQDATE = new Date();//更新日期
                UDSAPCLIENTSet.setWhere("SYSID='"+SYSID+"' and ZMANDT='"+ZMANDT+"' and BUKRS='"+BUKRS+"' and WERKS='"+WERKS+"' and EKORG='"+EKORG+"'");
                UDSAPCLIENTSet.reset();
                MboRemote sapClientMbo = null;
                if (UDSAPCLIENTSet != null && !UDSAPCLIENTSet.isEmpty()) {
                    sapClientMbo = UDSAPCLIENTSet.getMbo(0);
                } else {
                    sapClientMbo = UDSAPCLIENTSet.add();//创建对象
                }
                sapClientMbo.setValue("SYSID", SYSID);
                sapClientMbo.setValue("ZMANDT", ZMANDT);
                sapClientMbo.setValue("ZMTXT", ZMTXT);
                sapClientMbo.setValue("BUKRS", BUKRS);
                sapClientMbo.setValue("WERKS", WERKS);
                sapClientMbo.setValue("EKORG", EKORG);
                sapClientMbo.setValue("LQDATE", LQDATE);
                UDSAPCLIENTSet.save();//保存
            }
        }
    }
    /**
     * SAP 客户端 -发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatSapClientSend() {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject fileds = new JSONObject();
        JSONObject structures = new JSONObject();
        JSONObject tables = new JSONObject();
        JSONArray IT_LAND1 = new JSONArray();
        //ESB_ATTRS
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", UrlConstants.SAPClient3); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        //REQUEST_DATA
        REQUEST_DATA.put("Operation", "Z_SAP_ORG_CLIENT");
        REQUEST_DATA.put("Type", "Z_SAP_ORG_CLIENT");
        //REQUEST
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        //ALLDATA
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatSAPClientReceived(String received) {
        JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
        String codeStr = jsonObject.getJSONObject("RESPONSE").getJSONObject("ESB_ATTRS").getString("RETURN_CODE");
        if ("00000000".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("ET_FIMM_CLIENT");
            return jsonArray;
        }
        return jsonArray;
    }
    //------SAP Client获取----------------end-----------------------------------------------------


    /**
     * SAP成本中心获取接口
     * @return
     * @throws IOException
     * @throws MXException
     */
    public JSONObject Z_PS_GET_COSTCENTER() throws IOException, MXException {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        HEAD_DATA.put("KEYDATE", "");
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", UrlConstants.SAPClient3); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        JSONArray IT_REQUEST = new JSONArray();

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("KEYDATE", "");
        IT_REQUEST.add(jsonObject);
        REQUEST_DATA.put("fileds",HEAD_DATA);
        REQUEST_DATA.put("Operation", "Z_PS_GET_COSTCENTER");
        REQUEST_DATA.put("Type", "Z_PS_GET_COSTCENTER");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, ALLDATA);
//        System.out.println("result:    "+result.toString());
//        String O_TYPE = result.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("O_TYPE");//返回值
//        System.out.println("---O_MSG---  "+O_TYPE);
//
//        JSONArray IT_COSTCENTER = result.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("IT_COSTCENTER");
//        System.out.println("---IT_COSTCENTER---  "+IT_COSTCENTER.size());
        return result;
    }


}
