package psdi.app.iface.mdm;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import psdi.app.iface.comm.DownloadsFile;
import com.coolservlets.beans.method.CheckMethod;
import psdi.app.iface.comm.UrlConstants;
import psdi.app.iface.mdm.mq.SendMqUtil;
import psdi.app.iface.oa.HttpUtilOa;
import psdi.app.iface.udIFLogHandler;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXException;

import java.io.*;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
import java.rmi.RemoteException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;

/**
 * 数据方向 MDM ---> EAM
 */
public class Mdm2EamHandler {

    public Mdm2EamHandler() throws Exception {
        super();
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH24:mm:ss");
    public static void main(String[] args) {
        try {
            Mdm2EamHandler mdm2eamhandler = new Mdm2EamHandler();
//            mdm2eamhandler.Z_MDM_COMMON_ORG("0");//部门
//            mdm2eamhandler.Z_MDM_COMMON_POST("0");//岗位
//              mdm2eamhandler.Z_MDM_COMMON_EMP("0");//员工
//            mdm2eamhandler.Z_MDM_COMMON_SUPPLY("20210701");
//            mdm2eamhandler.Z_MDM_COMMON_S UPPLY("");//不指定时间，就获取全量
//            mdm2eamhandler.Z_MDM_MATER_PUSH("20230601");//物料主数据20230601
//            mdm2eamhandler.Z_SPMS_GET_MBEW("20230701");
//            mdm2eamhandler.Z_SPMS_GETSKUDATA("");
//            mdm2eamhandler.Z_SPMS_GETWAREHOUSE("");
            mdm2eamhandler.Z_MDM_GET_DATA_FILE("2023-07-01","2023-09-20");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    //EAM拉取MDM物料主数据，新方式2023-9-11-start-----------------------------------------------------------------------------------------------
    public void Z_MDM_GET_DATA_FILE(String startDate,String endDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String ERSDAStr = sdf.format(new Date());//更新字段，从中间表取数
        Date ERSDA = sdf.parse(ERSDAStr);
        //拼接ESB传参
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject SendData = new JSONObject();
        //ESB
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", "MDM"); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        //SendData
        SendData.put("type", "1"); //固定值
        SendData.put("startDate", startDate); //开始时间
        SendData.put("endDate", endDate); //结束时间
        REQUEST_DATA.put("SendData",SendData);
        REQUEST_DATA.put("SendHead",new JSONObject());
        REQUEST_DATA.put("SendURL",new JSONObject());
        REQUEST_DATA.put("Operation","Z_MDM_GET_DATA_FILE");
        REQUEST_DATA.put("Type","Z_MDM_GET_DATA_FILE");
        //REQUEST
        REQUEST.put("ESB_ATTRS",ESB_ATTRS);
        REQUEST.put("REQUEST_DATA",REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
//      System.out.println("alldata="+ALLDATA.toJSONString());//输出看下格式
        try {
            //地点
            MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE",MXServer.getMXServer().getSystemUserInfo());
            SITESet.setWhere(" ORGID in('TILE','HHMC','FMCG','NFMCG') and ACTIVE=1");
            SITESet.reset();
            System.out.println("site TOTAL="+SITESet.count());
            JSONObject resultObj = HttpUtilOa.post(UrlConstants.restEsbUrl, ALLDATA);//请求esb，返回数据
            JSONArray resResultJsonArray = formatDataReturn(resultObj.toString());//解析后的数据
//          System.out.println("resResultJsonArray="+resResultJsonArray.toString());
            if(resResultJsonArray!=null && !resResultJsonArray.isEmpty()){
                for(int i=0;i<resResultJsonArray.size();i++){
                    String resResultURL = (String) resResultJsonArray.get(i);//url地址，每个对应一个下载的压缩包
                    if(resResultURL.startsWith("https")){
                        resResultURL = resResultURL.replace("https:", "http:"); //替换协议 25-01-15
                    }
                    System.out.println("------>resResultJsonArray.TOTAL="+resResultJsonArray.size()+" di"+i+"ge URL="+resResultURL);
                    //下载zip文件到指定位置
                    File file = new DownloadsFile().downloadByUrl(resResultURL, "/opt/mdmFile/");//下载linux
//                    File file = new DownloadsFile().downloadByUrl(resResultURL, "F:\\mdmFile\\");//下载到本地
                    String zipPath = file.getPath();
                    //解压zip文件到指定位置
                    Boolean flag = new DownloadsFile().decompressZip(zipPath, "/opt/mdmFile/");//解析到linux
//                    Boolean flag = new DownloadsFile().decompressZip(zipPath, "F:\\mdmFile\\");//解压到本地
                    //解析解压后的txt文件数据
                    File jsonFile = new File("/opt/mdmFile/fileName.txt");//压缩到linux
//                    File jsonFile = new File("F:\\mdmFile\\fileName.txt");//本地解析
                    String dataJsonStr = new DownloadsFile().readJsonFile(jsonFile);
                    //转成json对象
                    JSONObject jsonObj = JSONObject.parseObject(dataJsonStr);
                    //拉取主数据的基础视图
                    JSONArray dataArrBase = jsonObj.getJSONArray("MATER_BASE");
                    //拉取主数据的单位转换视图
                    JSONArray dataConArr = jsonObj.getJSONArray("MATER_CONVERSION");
                    if(dataArrBase!=null && !dataArrBase.isEmpty()){
                        //["SYSDATAID-1", "SYSID-2", "VERSION-3", "VERSIONSTATUS-4", "ISUSEDCODE-5", "CREATEUSER-6", "MODIFYUSER-7",
                        // "CREATETIME-8", "MODIFYTIME-9", "SECRETLEVEL-10", "SOURCEAPPCODE-11", "CREATEDEPT-12", "GROUPS-13", "SMALL_GROUPS-14",
                        // "MATNR-15", "BISMT-16", "WLMX-17", "WLMS_UNIQ-18", "WLMX_EN-19", "MAKTX-20", "MAKTX01-21",
                        // "MAKTX02-22", "MAKTX03-23", "PRDHA-24", "WORKFLOW_DIRECTIN-25", "PRODUCT_TYPE-26", "MATKL-27", "MEINS-28",
                        // "VOLEH-29", "VOLUM-30", "GEWEI-31", "NTGEW-32", "BRGEW-33", "MTART-34", "SPART-35",
                        // "WERKS-36", "EXTWG-37", "PRODUCT_PAC_SPEC-38", "GROES-39", "PRODUCT_PACKAGING-40", "PRODUCT_MATERIAL-41",
                        // "PRODUCT_ORIGIN-42", "PRODUCT_STYLE-43", "PRODUCT_CONTENT-44", "PRODUCT_PROCESS-45", "PRODUCT_TOLERANCE-46",
                        // "PRODUCT_FUNCTION-47", "PRODUCT_SUPPLIER-48", "PRODUCT_FRAGRANCE-49", "SALES_PLACE-50", "PRODUCT_MODEL-51",
                        // "PRODUCT_COLOR-52", "PRODUCT_STANDARD-53", "RATED_VOLTAGE-54", "ZCDDJ-55", "RATED_POWER-56", "MBRSH-57",
                        // "XCHPF-58", "XGCHP-59", "SC_WERKS-60", "PRODUCT_NAME-61", "LVORM-62", "MSTAE-63", "BIG_CATEGORY-64", "MIDDLE_CATEGORY-65",
                        // "SMALL_CATEGORY-66", "CONTROL_DEPT-67", "CONTROL_POST-68", "DATA_OWNER-69", "PURCHASE_ID-70", "MRP_ID-71",
                        // "CUSTOMS_ID-72", "FINANCE_ID-73", "SALE_ID-74", "CPFR_ID-75", "CONVERSION_ID-76", "FACSTORAGE_ID-77",
                        //"ATTACH_FILE-78", "Z_SPMSFLAG-79", "Z_MAKTX-80", "Z_GGCC-81", "Z_CZ-82", "Z_TH-83", "Z_TECH-84", "Z_TEXT-85", "Z_BRAND-86",
                        // "Z_STANDARD-87", "Z_SPMSSC-88", "ZMOVTYP-89", "Z_REMARK-90", "ZMOQ-91", "Z_RECEIVEFLAG-92"],
                        //循环每个物料，获取该物料的基本信息
                        MboSetRemote EAM_MARASet = MXServer.getMXServer().getMboSet("EAM_MARA",MXServer.getMXServer().getSystemUserInfo());
                        //库存数据
//                        MboSetRemote UDKCSet = MXServer.getMXServer().getMboSet("UDKC",MXServer.getMXServer().getSystemUserInfo());

                        String GROUPS = "";//物料分类组
                        String SMALL_GROUPS = "";//物料分类小组
                        String MATNR = "";//物料号
                        String BISMT = "";//旧物料号
                        String WLMX = "";//标准化物料名称
                        String WLMX_EN = "";//标准化物料英文名称
                        String MAKTX = "";//SAP物料中文描述
                        String MAKTX01 = "";////物料英文名称(短)
                        String MAKTX02 = "";////物料法文名称(短)
                        String MAKTX03 = "";//物料西班牙名称(短)
                        String PRDHA = "";//产品层次
                        String MATKL = "";//物料组
                        String MEINS = "";//基本计量单位
                        String WERKS = "";//适配工厂
                        String LVORM = "";//删除状态
                        String MSTAE = "";//冻结状态
                        String BIG_CATEGORY = "";//物料大类
                        String MIDDLE_CATEGORY = "";//物料中类
                        String SMALL_CATEGORY = "";//物料小类
                        String Z_GGCC = "";//规格型号
                        String ATTACH_FILE = "";//物料图片
                        JSONArray fildArr = (JSONArray) dataArrBase.get(0);//第一个数组是字段名
                        for (int m=1; m<dataArrBase.size();m++) {//从1开始，代表的是数据
                            JSONArray dataArr = (JSONArray) dataArrBase.get(m);//第二个数组是数据
                            for(int f=0;f<fildArr.size();f++){
                                if("GROUPS".equalsIgnoreCase(fildArr.get(f).toString())){
                                    GROUPS = (String) dataArr.get(f);
                                }
                                if("SMALL_GROUPS".equalsIgnoreCase(fildArr.get(f).toString())){
                                    SMALL_GROUPS = (String) dataArr.get(f);
                                }
                                if("MATNR".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MATNR = (String) dataArr.get(f);
                                }
                                if("BISMT".equalsIgnoreCase(fildArr.get(f).toString())){
                                    BISMT = (String) dataArr.get(f);
                                }
                                if("WLMX".equalsIgnoreCase(fildArr.get(f).toString())){
                                    WLMX = (String) dataArr.get(f);
                                }
                                if("WLMX_EN".equalsIgnoreCase(fildArr.get(f).toString())){
                                    WLMX_EN = (String) dataArr.get(f);
                                }
                                if("MAKTX".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MAKTX = (String) dataArr.get(f);
                                }
                                if("MAKTX01".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MAKTX01 = (String) dataArr.get(f);
                                }
                                if("MAKTX02".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MAKTX02 = (String) dataArr.get(f);
                                }
                                if("MAKTX03".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MAKTX03 = (String) dataArr.get(f);
                                }
                                if("PRDHA".equalsIgnoreCase(fildArr.get(f).toString())){
                                    PRDHA = (String) dataArr.get(f);
                                }
                                if("MATKL".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MATKL = (String) dataArr.get(f);
                                }
                                if("MEINS".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MEINS = (String) dataArr.get(f);
                                }
                                if("WERKS".equalsIgnoreCase(fildArr.get(f).toString())){
                                    WERKS = (String) dataArr.get(f);
                                }
                                if("LVORM".equalsIgnoreCase(fildArr.get(f).toString())){
                                    LVORM = (String) dataArr.get(f);
                                }
                                if("MSTAE".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MSTAE = (String) dataArr.get(f);
                                }
                                if("BIG_CATEGORY".equalsIgnoreCase(fildArr.get(f).toString())){
                                    BIG_CATEGORY = (String) dataArr.get(f);
                                }
                                if("MIDDLE_CATEGORY".equalsIgnoreCase(fildArr.get(f).toString())){
                                    MIDDLE_CATEGORY = (String) dataArr.get(f);
                                }
                                if("SMALL_CATEGORY".equalsIgnoreCase(fildArr.get(f).toString())){
                                    SMALL_CATEGORY = (String) dataArr.get(f);
                                }
                                if("Z_GGCC".equalsIgnoreCase(fildArr.get(f).toString())){
                                    Z_GGCC = (String) dataArr.get(f);
                                }
                                if("ATTACH_FILE".equalsIgnoreCase(fildArr.get(f).toString())){
                                    ATTACH_FILE = (String) dataArr.get(f);
                                }
                            }
                            /*String GROUPS = (String) dataArr.get(12);//物料分类组
                            String SMALL_GROUPS = (String) dataArr.get(13);//物料分类小组
                            String MATNR = (String) dataArr.get(14);//物料号
                            String BISMT = (String) dataArr.get(15);//旧物料号
                            String WLMX = (String) dataArr.get(16);//标准化物料名称
                            String WLMS_UNIQ = (String) dataArr.get(17);//
                            String WLMX_EN = (String) dataArr.get(18);  //标准化物料英文名称
                            String MAKTX = (String) dataArr.get(19);//SAP物料中文描述
                            String MAKTX01 = (String) dataArr.get(20);//物料英文名称(短)
                            String MAKTX02 = (String) dataArr.get(21);//物料法文名称(短)
                            String MAKTX03 = (String) dataArr.get(22);//物料西班牙名称(短)
                            String PRDHA = (String) dataArr.get(23);//产品层次
                            String WORKFLOW_DIRECTIN = (String) dataArr.get(24);//
                            String PRODUCT_TYPE = (String) dataArr.get(25);//产品类型
                            String MATKL = (String) dataArr.get(26);//物料组
                            String MEINS = (String) dataArr.get(27);//基本计量单位
                            String VOLEH = (String) dataArr.get(28);//基本体积单位
                            String VOLUMStr = dataArr.get(29).toString();//基本体积
                            Double VOLUM = Double.parseDouble(VOLUMStr);
                            String GEWEI = (String) dataArr.get(30);//基本重量单位
                            String NTGEWStr = dataArr.get(31).toString();//基本净重
                            Double NTGEW = Double.parseDouble(NTGEWStr);
                            String BRGEWStr = dataArr.get(32).toString();//基本毛重
                            Double BRGEW = Double.parseDouble(BRGEWStr);
                            String MTART = (String) dataArr.get(33);//物料类型
                            String SPART = (String) dataArr.get(34);//产品线
                            String WERKS = (String) dataArr.get(35);//工厂
                            String EXTWG = (String) dataArr.get(36);//产品品牌
                            String PRODUCT_PAC_SPEC = (String) dataArr.get(37);//产品装箱规格
                            String GROES = (String) dataArr.get(38);//大小/量纲
                            String PRODUCT_PACKAGING = (String) dataArr.get(39); //产品包装
                            String PRODUCT_MATERIAL = (String) dataArr.get(40); //产品材质
                            String PRODUCT_ORIGIN = (String) dataArr.get(41); //产品产地
                            String PRODUCT_STYLE = (String) dataArr.get(42); //产品风格
                            String PRODUCT_CONTENT = (String) dataArr.get(43); //产品辅料含量
                            String PRODUCT_PROCESS = (String) dataArr.get(44);  //产品工艺
                            String PRODUCT_TOLERANCE = (String) dataArr.get(45); //产品公差
                            String PRODUCT_FUNCTION = (String) dataArr.get(46); //产品功能
                            String PRODUCT_SUPPLIER = (String) dataArr.get(47); //产品供应商
                            String PRODUCT_FRAGRANCE = (String) dataArr.get(48); //产品香味
                            String SALES_PLACE = (String) dataArr.get(49); //产品销售地标识
                            String PRODUCT_MODEL = (String) dataArr.get(50); //产品型号
                            String PRODUCT_COLOR = (String) dataArr.get(51); //产品颜色
                            String PRODUCT_STANDARD = (String) dataArr.get(52); //产品执行标准
                            String RATED_VOLTAGE = (String) dataArr.get(53);  //额定电压
                            String ZCDDJ = (String) dataArr.get(54);  //
                            String RATED_POWER = (String) dataArr.get(55);  //额定功率
                            String MBRSH = (String) dataArr.get(56); //行业领域
                            String XCHPF = (String) dataArr.get(57); //批次管理
                            String XGCHP = (String) dataArr.get(58); //需要批量记录
                            String SC_WERKS = (String) dataArr.get(59); //生产工厂
                            String PRODUCT_NAME = (String) dataArr.get(60); //产品品名
                            String LVORM = (String) dataArr.get(61);//删除状态
                            String MSTAE = (String) dataArr.get(62);//冻结状态
                            String BIG_CATEGORY = (String) dataArr.get(63);//物料大类
                            String MIDDLE_CATEGORY = (String) dataArr.get(64);//物料中类
                            String SMALL_CATEGORY = (String) dataArr.get(65);//物料小类
                            String CONTROL_DEPT = (String) dataArr.get(66);//管控部门
                            String CONTROL_POST = (String) dataArr.get(67);//管控岗位
                            String DATA_OWNER = (String) dataArr.get(68);//数据owner
                            String PURCHASE_ID = (String) dataArr.get(69);//
                            String MRP_ID = (String) dataArr.get(69);//
                            String Z_SPMSFLAG = (String) dataArr.get(78);//SPMS标识
                            String Z_MAKTX = (String) dataArr.get(79);//名称
                            String Z_GGCC = (String) dataArr.get(80);//规格型号尺寸
                            String Z_CZ = (String) dataArr.get(81);//材质
                            String Z_TH = (String) dataArr.get(82);//图号
                            String Z_TECH = (String) dataArr.get(83);//其他技术补充参数
                            String Z_TEXT = (String) dataArr.get(84);//配套设备
                            String Z_BRAND = (String) dataArr.get(85);//品牌/厂商
                            String Z_STANDARD = (String) dataArr.get(86);//参考标准
                            String Z_SPMSSC = (String) dataArr.get(87);//是否上商城
                            String ZMOVTYP = (String) dataArr.get(88);//默认移动类型
                            String Z_REMARK = (String) dataArr.get(89);//备注
                            String ZMOQ = (String) dataArr.get(90);//最小包装量
                            String Z_RECEIVEFLAG = (String) dataArr.get(91);//是否SPMS收货*/
                            //进行插入或者更新
                            EAM_MARASet.setWhere(" MATNR='"+MATNR+"'");
                            EAM_MARASet.reset();
                            MboRemote mbo = null;
                            if(EAM_MARASet!=null && !EAM_MARASet.isEmpty()){
                                //更新
                                mbo = EAM_MARASet.getMbo(0);
                                mbo.setValue("GROUPS",GROUPS,2L);
                                mbo.setValue("SMALL_GROUPS",SMALL_GROUPS,2L);
                                mbo.setValue("WLMX",WLMX,2L);
                                mbo.setValue("WLMX_EN",WLMX_EN,2L);
                                mbo.setValue("MAKTX",MAKTX,2L);
                                mbo.setValue("MAKTX01",MAKTX01,2L);
                                mbo.setValue("MAKTX02",MAKTX02,2L);
                                mbo.setValue("MAKTX03",MAKTX03,2L);
                                mbo.setValue("PRDHA",PRDHA,2L);
                                mbo.setValue("MATKL",MATKL,2L);
                                mbo.setValue("MEINS",MEINS,2L);
                                mbo.setValue("WERKS",WERKS,2L);
                                mbo.setValue("LVORM",LVORM,2L);
                                mbo.setValue("MSTAE",MSTAE,2L);
                                mbo.setValue("BIG_CATEGORY",BIG_CATEGORY,2L);
                                mbo.setValue("MIDDLE_CATEGORY",MIDDLE_CATEGORY,2L);
                                mbo.setValue("SMALL_CATEGORY",SMALL_CATEGORY,2L);
                                mbo.setValue("Z_GGCC",Z_GGCC,2L);
                                mbo.setValue("ATTACH_FILE",ATTACH_FILE,2L);
                                mbo.setValue("ERSDA",ERSDA,2L);
                                mbo.getThisMboSet().save(2L);
                            }else{
                                //插入
                                mbo = EAM_MARASet.add();
                                mbo.setValue("GROUPS",GROUPS,2L);
                                mbo.setValue("SMALL_GROUPS",SMALL_GROUPS,2L);
                                mbo.setValue("MATNR",MATNR,2L);
                                mbo.setValue("BISMT",BISMT,2L);
                                mbo.setValue("WLMX",WLMX,2L);
                                mbo.setValue("WLMX_EN",WLMX_EN,2L);
                                mbo.setValue("MAKTX",MAKTX,2L);
                                mbo.setValue("MAKTX01",MAKTX01,2L);
                                mbo.setValue("MAKTX02",MAKTX02,2L);
                                mbo.setValue("MAKTX03",MAKTX03,2L);
                                mbo.setValue("PRDHA",PRDHA,2L);
                                mbo.setValue("MATKL",MATKL,2L);
                                mbo.setValue("MEINS",MEINS,2L);
                                mbo.setValue("WERKS",WERKS,2L);
                                mbo.setValue("LVORM",LVORM,2L);
                                mbo.setValue("MSTAE",MSTAE,2L);
                                mbo.setValue("BIG_CATEGORY",BIG_CATEGORY,2L);
                                mbo.setValue("MIDDLE_CATEGORY",MIDDLE_CATEGORY,2L);
                                mbo.setValue("SMALL_CATEGORY",SMALL_CATEGORY,2L);
                                mbo.setValue("Z_GGCC",Z_GGCC,2L);
                                mbo.setValue("ATTACH_FILE",ATTACH_FILE,2L);
                                mbo.setValue("ERSDA",ERSDA,2L);
                                mbo.getThisMboSet().save(2L);
                            }
                            //库存数据的新增
         /*                   if(SITESet!=null && !SITESet.isEmpty()){
                                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.getThisMboSet().save();
                                    }
                                }
                            }*/
                           // ATTACH_FILE = "https://lmg.jj20.com/up/allimg/1111/04131Q42551/1P413142551-4-1200.jpg,https://lmg.jj20.com/up/allimg/1114/0406210Z024/2104060Z024-5-1200.jpg";
                            //------------不管新增还是更新---start-------------------------
                                MboSetRemote doclinksSet = MXServer.getMXServer().getMboSet("DOCLINKS",MXServer.getMXServer().getSystemUserInfo());
                                MboSetRemote docinfoSet = MXServer.getMXServer().getMboSet("DOCINFO",MXServer.getMXServer().getSystemUserInfo());
                                //通过物料编码存储，这样库存和物料主数据都能获取图片
//                                doclinksSet.setWhere("ownertable='EAM_MARA' and ownerid='"+mbo.getInt("EAM_MARAID")+"'");
                                doclinksSet.setWhere("ownertable='EAM_MARA' and ownerid='"+mbo.getString("MATNR")+"'");
                                doclinksSet.reset();
                                //1.先将该物料下的图片删除，
                                if(doclinksSet!=null && !doclinksSet.isEmpty()){
                                    for(int a=0;a<doclinksSet.count();a++){
                                        MboRemote doclinkMbo = doclinksSet.getMbo(a);
                                        int docinfoID = doclinkMbo.getInt("DOCINFOID");
                                        deleteFile(docinfoID);//删除对应的附件表数据
                                    }
                                }
                                //2.拆分attach_file字段，插入附件表
                                if(!"".equals(ATTACH_FILE)){
                                    //包含多张图片
                                    if(ATTACH_FILE.contains(",")){
                                        String[] parts = ATTACH_FILE.split(",");
                                        for (String part : parts) {
                                            System.out.println("ATTACH_FILE_URL="+part);
//                                            int EAM_MARAID = mbo.getInt("EAM_MARAID");
                                            int MATNRInt = Integer.valueOf(mbo.getString("MATNR"));
                                            String ownerTable = "EAM_MARA";
                                            String CreateBy = "MAXADMIN";
                                            String url = part;
                                            setFileDoclink(MATNRInt,ownerTable,url,CreateBy);//插入对应的附件表数据
                                        }
                                    }
                                    //只有单张图片
                                    else{
                                        int MATNRInt = Integer.valueOf(mbo.getString("MATNR"));
                                        String ownerTable = "EAM_MARA";
                                        String CreateBy = "MAXADMIN";
                                        String url = ATTACH_FILE;
                                        setFileDoclink(MATNRInt,ownerTable,url,CreateBy);//插入对应的附件表数据
                                    }
                                }
                            //-------------不管新增还是更新---end-------------------------
                        }
                    }
                    //单位转换
                    if(dataConArr!=null && !dataConArr.isEmpty()){
                        //["SYSDATAID-1", "SYSID-2", "VERSION-3", "VERSIONSTATUS-4", "ISUSEDCODE-5", "CREATEUSER-6", "MODIFYUSER-7", "CREATETIME-8", "MODIFYTIME-9", "SECRETLEVEL-10", "SOURCEAPPCODE-11", "CREATEDEPT-12",
                        // "MEINS-13", "BSTME-14", "UMREZ-15", "UMREN-16", "CONTROL_DEPT-17", "CONTROL_POST-18", "DATA_OWNER-19", "MATNR-20"],
                        MboSetRemote EAM_CONVERSIONSet = MXServer.getMXServer().getMboSet("EAM_CONVERSION",MXServer.getMXServer().getSystemUserInfo());
                        JSONArray fildConArr = (JSONArray) dataConArr.get(0);//第一个数组是字段名
                        String MATNR = "";//物料编号
                        String BSTME = "";//扩展单位
                        String UMREN = "";//扩展单位分母
                        String UMREZ = "";//扩展单位计数器
                        String MEINS = "";//单位
                        for (int K = 1; K < dataConArr.size();K++) {
                            JSONArray dataArrs = (JSONArray) dataConArr.get(K);
                            for(int f=0;f<fildConArr.size();f++) {
                                if ("MATNR".equalsIgnoreCase(fildConArr.get(f).toString())) {
                                    MATNR = (String) dataArrs.get(f);
                                }
                                if ("BSTME".equalsIgnoreCase(fildConArr.get(f).toString())) {
                                    BSTME = (String) dataArrs.get(f);
                                }
                                if ("UMREN".equalsIgnoreCase(fildConArr.get(f).toString())) {
                                    UMREN =  String.valueOf(dataArrs.get(f));
                                }
                                if ("UMREZ".equalsIgnoreCase(fildConArr.get(f).toString())) {
                                    UMREZ =  String.valueOf(dataArrs.get(f));
                                }
                                if ("MEINS".equalsIgnoreCase(fildConArr.get(f).toString())) {
                                    MEINS = (String) dataArrs.get(f);
                                }
                            }
                            EAM_CONVERSIONSet.setWhere("MATNR='"+MATNR+"' and BSTME='"+BSTME+"'");
                            EAM_CONVERSIONSet.reset();
                            if(EAM_CONVERSIONSet!=null && !EAM_CONVERSIONSet.isEmpty()){
                                //更新
                                MboRemote mbo = EAM_CONVERSIONSet.getMbo(0);
                                mbo.setValue("UMREN",UMREN,2L);
                                mbo.setValue("UMREZ",UMREZ,2L);
                                mbo.getThisMboSet().save(2L);
                            }else{
                                //新增
                                MboRemote mbo = EAM_CONVERSIONSet.add();
                                mbo.setValue("MATNR",MATNR,2L);
                                mbo.setValue("BSTME",BSTME,2L);
                                mbo.setValue("MEINS",MEINS,2L);
                                mbo.setValue("UMREN",UMREN,2L);
                                mbo.setValue("UMREZ",UMREZ,2L);
                                mbo.getThisMboSet().save(2L);
                            }
                        }
                    }
                    //解析完成后，将压缩包和文件删除
                    Boolean isDel = new DownloadsFile().deleteFile(new File("/opt/mdmFile/"));
//                    Boolean isDel = new DownloadsFile().deleteFile(new File("F:\\mdmFile\\"));
                    System.out.println("========>delete status="+isDel);
                }
            }
        }catch (Exception e){
            e.getMessage();
            System.out.println("errorMsg="+e.getMessage());
        }
    }

    //向附件相关表插入数据
    public void setFileDoclink(int ownerid, String ownertable, String urlname, String CREATEBY)
    {
        try {
            if ((!ownertable.equalsIgnoreCase("")) && (ownerid > 1)) {
                SimpleDateFormat ftd = new SimpleDateFormat("yyyyMMddHHmmss");
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date UPLOADDATE = sdf.parse(sdf.format(new Date())); //系统生成上传日期
                MboSetRemote doclinksSet = MXServer.getMXServer().getMboSet("DOCLINKS",MXServer.getMXServer().getSystemUserInfo());
                MboSetRemote docinfoSet = MXServer.getMXServer().getMboSet("DOCINFO",MXServer.getMXServer().getSystemUserInfo());
                //-附件表插入start----------------------------------------------------------------------------------------------
                //docinfo
                MboRemote docinfoMbo = docinfoSet.add();
                Integer DOCINFOID = docinfoMbo.getInt("DOCINFOID");//表ID
                String CONTENTUID= String.valueOf(DOCINFOID);
                String LANGCODE = "ZH";
                int SHOW = 0;
                int USEDEFAULTFILEPATH = 0;
                int PRINTTHRULINKDFLT = 0;
                String DOCUMENT = CONTENTUID;//暂时这样设置
//                String DESCRIPTION = fileName;//文件名,若URLTYPE=URL，则文件名为null，
                String CHANGEBY = CREATEBY;
                String DOCTYPE = "Attachments";//固定值
//                String URLTYPE = "FILE";//如果是图片需要传到服务，则是URLTYPE=FILE
                String URLTYPE = "URL";//如果是图片是个链接，则是URLTYPE=URL
                String URLNAME = urlname;//如果是图片是个链接，则是URLNAME就是图片的url地址:https://lmg.jj20.com/up/allimg/1114/0406210Z024/2104060Z024-5-1200.jpg
                docinfoMbo.setValue("CONTENTUID",CONTENTUID,11L);
                docinfoMbo.setValue("LANGCODE",LANGCODE,11L);
                docinfoMbo.setValue("SHOW",SHOW,11L);
                docinfoMbo.setValue("USEDEFAULTFILEPATH",USEDEFAULTFILEPATH,11L);
                docinfoMbo.setValue("PRINTTHRULINKDFLT",PRINTTHRULINKDFLT,11L);
                docinfoMbo.setValue("DOCUMENT",DOCUMENT,11L);
                docinfoMbo.setValue("CREATEDATE",UPLOADDATE,11L);
                docinfoMbo.setValue("CHANGEDATE",UPLOADDATE,11L);
                docinfoMbo.setValue("CHANGEBY",CREATEBY,11L);
                docinfoMbo.setValue("CREATEBY",CREATEBY,11L);
                docinfoMbo.setValue("DOCTYPE",DOCTYPE,11L);
                docinfoMbo.setValue("URLTYPE",URLTYPE,11L);
                docinfoMbo.setValue("URLNAME",URLNAME,11L);
                docinfoMbo.getThisMboSet().save(11L);
                docinfoSet.close();
                //doclinks
                MboRemote doclinksMbo = doclinksSet.add();
                doclinksMbo.setValue("DOCUMENT",DOCUMENT,11L);
                doclinksMbo.setValue("OWNERTABLE",ownertable,11L);
                doclinksMbo.setValue("OWNERID",ownerid,11L);
                doclinksMbo.setValue("DOCTYPE",DOCTYPE,11L);
                doclinksMbo.setValue("GETLATESTVERSION",1,11L);
                doclinksMbo.setValue("CREATEDATE",UPLOADDATE,11L);
                doclinksMbo.setValue("CHANGEDATE",UPLOADDATE,11L);
                doclinksMbo.setValue("CHANGEBY",CREATEBY,11L);
                doclinksMbo.setValue("CREATEBY",CREATEBY,11L);
                doclinksMbo.setValue("PRINTTHRULINK",0,11L);
                doclinksMbo.setValue("COPYLINKTOWO",0,11L);
                doclinksMbo.setValue("DOCINFOID",DOCINFOID,11L);
                doclinksMbo.getThisMboSet().save(11L);
                doclinksSet.close();
                //-附件表插入end----------------------------------------------------------------------------------------------
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (MXException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    //删除附件表数据
    private void deleteFile(int docinfoid) {
        try {
            MboSetRemote doclinksSet = MXServer.getMXServer().getMboSet("DOCLINKS", MXServer.getMXServer().getSystemUserInfo());
            doclinksSet.setWhere(" docinfoid="+docinfoid+"");
            doclinksSet.reset();
            if (!doclinksSet.isEmpty()) {
                doclinksSet.getMbo(0).delete();
                doclinksSet.save();
                doclinksSet.close();
            }
            MboSetRemote docinfoSet = MXServer.getMXServer().getMboSet("DOCINFO", MXServer.getMXServer().getSystemUserInfo());
            docinfoSet.setWhere("   docinfoid='" + docinfoid + "'  ");
            docinfoSet.reset();
            if (!docinfoSet.isEmpty()) {
                docinfoSet.getMbo(0).delete();
                docinfoSet.save();
                docinfoSet.close();
            }
        }
        catch (RemoteException e) {
            e.printStackTrace();
        } catch (MXException e) {
            e.printStackTrace();
        }
    }
    //EAM拉取MDM物料主数据，新方式2023-9-11-end------------------------------------------------------------------------------------------------

    //从MDM导出带图片的物料数据，通过按钮生成到附件表中------------
    public void getFilesFromMara() throws ParseException, RemoteException, MXException {
        MboSetRemote EAM_MARASet = MXServer.getMXServer().getMboSet("EAM_MARA",MXServer.getMXServer().getSystemUserInfo());//主数据表
        MboSetRemote doclinksSet = MXServer.getMXServer().getMboSet("DOCLINKS",MXServer.getMXServer().getSystemUserInfo());
        MboSetRemote docinfoSet = MXServer.getMXServer().getMboSet("DOCINFO",MXServer.getMXServer().getSystemUserInfo());
        EAM_MARASet.setWhere("ATTACH_FILE is not null");
        EAM_MARASet.reset();
        if(EAM_MARASet!=null && !EAM_MARASet.isEmpty()){
            for(int i=0;i<EAM_MARASet.count();i++){
                MboRemote mbo = EAM_MARASet.getMbo(i);//物料
                String MATNR = mbo.getString("MATNR");//物料编码
                String ATTACH_FILE = mbo.getString("ATTACH_FILE");//附件字段
                //通过物料编码存储，这样库存和物料主数据都能获取图片
                doclinksSet.setWhere("ownertable='EAM_MARA' and ownerid='"+MATNR+"'");
                doclinksSet.reset();
                //1.先将该物料下的图片删除，
                if(doclinksSet!=null && !doclinksSet.isEmpty()){
                    for(int a=0;a<doclinksSet.count();a++){
                        MboRemote doclinkMbo = doclinksSet.getMbo(a);
                        int docinfoID = doclinkMbo.getInt("DOCINFOID");
                        deleteFile(docinfoID);//删除对应的附件表数据
                    }
                }
                //2.拆分attach_file字段，插入附件表
                if(!"".equals(ATTACH_FILE)){
                    //包含多张图片
                    if(ATTACH_FILE.contains(",")){
                        String[] parts = ATTACH_FILE.split(",");
                        for (String part : parts) {
                            System.out.println("ATTACH_FILE_URL="+part);
//                                            int EAM_MARAID = mbo.getInt("EAM_MARAID");
                            int MATNRInt = Integer.valueOf(mbo.getString("MATNR"));
                            String ownerTable = "EAM_MARA";
                            String CreateBy = "MAXADMIN";
                            String url = part;
                            setFileDoclink(MATNRInt,ownerTable,url,CreateBy);//插入对应的附件表数据
                        }
                    }
                    //只有单张图片
                    else{
                        int MATNRInt = Integer.valueOf(mbo.getString("MATNR"));
                        String ownerTable = "EAM_MARA";
                        String CreateBy = "MAXADMIN";
                        String url = ATTACH_FILE;
                        setFileDoclink(MATNRInt,ownerTable,url,CreateBy);//插入对应的附件表数据
                    }
                }
            }
        }
    }


    /**
     * 获取部门 org------------------------------
     * @param taskType: "0" :全量；“1” 增量
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：Restful
     */
    public void Z_MDM_COMMON_ORG(String taskType) throws IOException, MXException {
        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        String dateStr = sdf1.format(new Date());//更新时间
        JSONObject alldataJson = formatDataSend(taskType, "org");
        System.out.println("--------requestJson="+alldataJson.toString());
        String result = HttpUtil.post(UrlConstants.restEsbUrl, JSON.toJSONString(alldataJson), 600000);
        System.out.println("--------responseJson="+result);
        String resResultURL = formatDataReceived(result);
        try{
            if (!"".equals(resResultURL)) {
                if(resResultURL.startsWith("https")){
                    resResultURL = resResultURL.replace("https:", "http:"); //替换协议 25-01-15
                }
                //下载zip文件到指定位置
                File file = new DownloadsFile().downloadByUrl(resResultURL, "/opt/org/");//下载到服务器
                //File file = new DownloadsFile().downloadByUrl(resResultURL, "G://");//下载到本地
                String zipPath = file.getPath();
                //解压zip文件到指定位置
                Boolean flag = new DownloadsFile().decompressZip(zipPath, "/opt/org/");//解压到服务器
                //Boolean flag = new DownloadsFile().decompressZip(zipPath, "G://");//解压到本地
                //解析解压后的txt文件数据
                File jsonFile = new File("/opt/org/data.txt");//服务器上解析
                //File jsonFile = new File("G://data.txt");//本地解析
                String dataJsonStr = new DownloadsFile().readJsonFile(jsonFile);
                JSONArray dataArray = JSONArray.parseArray(dataJsonStr);
                //FileWriter fileWriter=new FileWriter("G://部门.txt");
                MboSetRemote mobSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());//部门表-英文
                MboSetRemote mboLangSet = MXServer.getMXServer().getMboSet("L_DEPT",MXServer.getMXServer().getSystemUserInfo());//部门表-多语言表
                MboSetRemote siteSet = MXServer.getMXServer().getMboSet("SITE",MXServer.getMXServer().getSystemUserInfo());//地点表
                MboSetRemote udPsSiteSet = MXServer.getMXServer().getMboSet("UDPSSITE",MXServer.getMXServer().getSystemUserInfo());//PS工厂信息表
                for (int i = 0; i < dataArray.size(); i++) {
                    //获取组织、地点
                    String ORGID = "";
                    String SITEID = "";
                    Map<String, Object> map = new HashMap<String, Object>();
                    JSONObject jobj = (JSONObject) dataArray.get(i);//获取每个json对象
                    String LOCATION = (String) jobj.get("LOCATION"); //关键字段-----存到映射表（PS工厂信息表）
                    siteSet.setWhere("ACTIVE=1 AND SITELOC='"+LOCATION+"'");
                    siteSet.reset();
                    if(siteSet!=null && !siteSet.isEmpty()){
                        MboRemote siteMbo = siteSet.getMbo(0);
                        if(siteMbo!=null){
                            ORGID = siteMbo.getString("ORGID");
                            SITEID = siteMbo.getString("SITEID");
                        }
                    }else{
                        continue;
                    }
                    String DC_INF_DT_STATUS = (String) jobj.get("DC_INF_DT_STATUS"); //数据状态:A-新增，U-更新，D-删除
                    String EFF_STATUS = (String) jobj.get("EFF_STATUS"); //是否有效，A-有效、I-无效
//                    String EFFDT = (String) jobj.get("EFFDT"); //生效日期
//                    String LOCATION_SAP = (String) jobj.get("LOCATION_SAP"); //-----用不上了
                    String PART_DEPTID_CHN = (String) jobj.get("PART_DEPTID_CHN"); //上级部门编号
                    String DEPTNUM = (String) jobj.get("DEPTID"); //部门
                    //部门
                    String DEPTID_DESC_ZH = "";//中
                    String DEPTID_DESC_EN = "";//英
                    String DEPTID_DESC_FR = "";//法
                    if (jobj.getJSONObject("ATTRS").getJSONArray("DEPTID").size() > 0) {
                        JSONArray deptArr = jobj.getJSONObject("ATTRS").getJSONArray("DEPTID");
                        if(deptArr!=null && !deptArr.isEmpty()){
                            for(int d=0;d<deptArr.size();d++){
                                JSONObject deptJs = deptArr.getJSONObject(d);//部门对象
                                String LANG = deptJs.getString("LANG");
                                if("ZH".equals(LANG)){
                                    DEPTID_DESC_ZH = deptJs.getString("VALUE");
                                }else if("EN".equals(LANG)){
                                    DEPTID_DESC_EN = deptJs.getString("VALUE");
                                }else if("FR".equals(LANG)){
                                    DEPTID_DESC_FR = deptJs.getString("VALUE");
                                }
                            }
                        }
                    }
                    //国家
                    String COUNTRY = (String) jobj.get("COUNTRY"); //国家
                    String MANAGER_ID = (String) jobj.get("MANAGER_ID"); //部门负责人id
                    String DC_OLD_DEPTID = (String) jobj.get("DC_OLD_DEPTID"); //原部门编号
                    //查询部门表
                    mobSet.setWhere(" DEPTNUM='"+DEPTNUM+"' and siteid='"+SITEID+"'");
                    mobSet.reset();
                    MboRemote mbo = null;
                    if(mobSet!=null && !mobSet.isEmpty()){
                        mbo = mobSet.getMbo(0);
                    }else{
                        mbo = mobSet.add();//创建对象
                        mbo.setValue("ORGID",ORGID);
                        mbo.setValue("SITEID",SITEID);
                        mbo.setValue("DEPTNUM",DEPTNUM);//部门编号
                        mbo.setValue("LANGCODE","EN");//英文表
                    }
                    Integer DEPTID = mbo.getInt("DEPTID");//部门表ID
                    mbo.setValue("DESCRIPTION",DEPTID_DESC_EN,11L);//部门名称
                    mbo.setValue("SUPNUM",PART_DEPTID_CHN,11L);//上级部门
                    mbo.setValue("DIRECTOR",MANAGER_ID,11L);//部门主管
                    mbo.setValue("DEPT1",DC_INF_DT_STATUS,11L);//部门状态
                    mbo.setValue("DEPT2",EFF_STATUS,11L);//是否有效
                    mbo.setValue("DEPT3",COUNTRY,11L);//国家
                    mbo.setValue("DEPT5",0,11L);//固定值
//                    mbo.setValue("DEPT4",DC_OLD_DEPTID);//原部门编号  DEPT4是date类型
                    mbo.getThisMboSet().save();
                    mbo.getThisMboSet().close();
                    //多语言表--中文
                    mboLangSet.setWhere("OWNERID="+DEPTID+" and langcode='ZH'");
                    mboLangSet.reset();
                    MboRemote langMbo = null;
                    if(mboLangSet!=null && !mboLangSet.isEmpty()){
                        langMbo = mboLangSet.getMbo(0);
                    }else{
                        langMbo = mboLangSet.add();//创建对象
                        langMbo.setValue("OWNERID",DEPTID,11L);
                        langMbo.setValue("LANGCODE","ZH",11L);//中文数据
                    }
                    langMbo.setValue("DESCRIPTION",DEPTID_DESC_ZH,11L);
                    langMbo.getThisMboSet().save();
                    langMbo.getThisMboSet().close();
                }
            }
        }catch (Exception e){
            e.getMessage();
            System.out.println("------------------filure message="+e.getMessage());
        }finally {
            //业务处理完，再把该路径下的下载的zip和解压后的文件删除掉
            Boolean isDel = new DownloadsFile().deleteFile(new File("/opt/org/"));
        }
    }

    /**
     * 从MDM部门全量拉取过程中获取PS对应的LOCATION 编码，存放到UDPSSITE表 ------------------------------
     * @param taskType: "0" :全量；“1” 增量
     */
    public void Z_MDM_COMMON_ORG_PSSITE(String taskType) throws IOException, MXException {
        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        String dateStr = sdf1.format(new Date());//更新时间
        JSONObject alldataJson = formatDataSend(taskType, "org");
        System.out.println("--------requestJson="+alldataJson.toString());
        String result = HttpUtil.post(UrlConstants.restEsbUrl, JSON.toJSONString(alldataJson), 600000);
        System.out.println("--------responseJson="+result);
        String resResultURL = formatDataReceived(result);
        try{
            if (!"".equals(resResultURL)) {
                if(resResultURL.startsWith("https")){
                    resResultURL = resResultURL.replace("https:", "http:"); //替换协议 25-01-15
                }
                //下载zip文件到指定位置
                File file = new DownloadsFile().downloadByUrl(resResultURL, "/opt/org/");//下载到服务器
                String zipPath = file.getPath();
                //解压zip文件到指定位置
                Boolean flag = new DownloadsFile().decompressZip(zipPath, "/opt/org/");//解压到服务器
                //解析解压后的txt文件数据
                File jsonFile = new File("/opt/org/data.txt");//服务器上解析
                String dataJsonStr = new DownloadsFile().readJsonFile(jsonFile);
                JSONArray dataArray = JSONArray.parseArray(dataJsonStr);
                MboSetRemote udPsSiteSet = MXServer.getMXServer().getMboSet("UDPSSITE",MXServer.getMXServer().getSystemUserInfo());//PS工厂信息表
                for (int i = 0; i < dataArray.size(); i++) {
                    //获取组织、地点
                    String ORGID = "";
                    String SITEID = "";
                    Map<String, Object> map = new HashMap<String, Object>();
                    JSONObject jobj = (JSONObject) dataArray.get(i);//获取每个json对象
                    String LOCATION = (String) jobj.get("LOCATION"); //关键字段-----存到映射表（PS工厂信息表）
                    //location
                    String LOCATION_DESC_ZH = "";//中
                    String LOCATION_DESC_EN = "";//英
                    String LOCATION_DESC_FR = "";//法
                    if (jobj.getJSONObject("ATTRS").getJSONArray("LOCATION").size() > 0) {
                        JSONArray locationArr = jobj.getJSONObject("ATTRS").getJSONArray("LOCATION");
                        if(locationArr!=null && !locationArr.isEmpty()){
                            for(int d=0;d<locationArr.size();d++){
                                JSONObject locationJs = locationArr.getJSONObject(d);//location对象
                                String LANG = locationJs.getString("LANG");
                                if("ZH".equals(LANG)){
                                    LOCATION_DESC_ZH = locationJs.getString("VALUE");
                                }else if("EN".equals(LANG)){
                                    LOCATION_DESC_EN = locationJs.getString("VALUE");
                                }else if("FR".equals(LANG)){
                                    LOCATION_DESC_FR = locationJs.getString("VALUE");
                                }
                            }
                        }
                        udPsSiteSet.setWhere("LOCATION='"+LOCATION+"'");
                        udPsSiteSet.reset();
                        MboRemote udPsSiteMbo = null;//对象
                        if(udPsSiteSet!=null && !udPsSiteSet.isEmpty()){
                            udPsSiteMbo = udPsSiteSet.getMbo(0);
                        }else {
                            udPsSiteMbo = udPsSiteSet.add();
                        }
                        udPsSiteMbo.setValue("LOCATION",LOCATION,2L);
                        udPsSiteMbo.setValue("LOCATIONDESCZH",LOCATION_DESC_ZH,2L);
                        udPsSiteMbo.setValue("LOCATIONDESCEN",LOCATION_DESC_EN,2L);
                        udPsSiteMbo.setValue("LOCATIONDESCFR",LOCATION_DESC_FR,2L);
//                        udPsSiteMbo.setValue("CREATEDATE",dateStr,2L);
                        udPsSiteMbo.getThisMboSet().save();
                    }
                }
            }
        }catch (Exception e){
            e.getMessage();
            System.out.println("------------------filure message="+e.getMessage());
        }finally {
            //业务处理完，再把该路径下的下载的zip和解压后的文件删除掉
            Boolean isDel = new DownloadsFile().deleteFile(new File("/opt/org/"));
        }
    }

    /**
     * 获取岗位 post------------------------------此接口用不到，作废------------------------------------------------------
     * @param taskType: "0" :全量；“1” 增量
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：Restful
     */
    public void Z_MDM_COMMON_POST(String taskType) {
        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        JSONObject alldataJson = formatDataSend(taskType, "post");
        String result = HttpUtil.post(UrlConstants.restEsbUrl, JSON.toJSONString(alldataJson), 600000);
        String resResultURL = formatDataReceived(result);
        if (!"".equals(resResultURL)) {
            //下载zip文件到指定位置
            File file = new DownloadsFile().downloadByUrl(resResultURL, "/opt/post/");
            String zipPath = file.getPath();
            //解压zip文件到指定位置
            Boolean flag = new DownloadsFile().decompressZip(zipPath, "/opt/post/");
            //解析解压后的txt文件数据
            File jsonFile = new File("/opt/post/data.txt");
            String dataJsonStr = new DownloadsFile().readJsonFile(jsonFile);
            JSONArray dataArray = JSONArray.parseArray(dataJsonStr);
            for (int i = 0; i < dataArray.size(); i++) {
                Map<String, Object> map = new HashMap<String, Object>();
                JSONObject jobj = (JSONObject) dataArray.get(i);//获取每个json对象
                String DC_INF_DT_STATUS = (String) jobj.get("DC_INF_DT_STATUS"); //数据状态:A-新增，U-更新，D-删除
                String POSITION_NBR = (String) jobj.get("POSITION_NBR");//岗位编码
                if (jobj.getJSONObject("ATTRS").getJSONArray("POSITION_NBR").size() > 0) {
                    String POSITION_NBR_DESC = jobj.getJSONObject("ATTRS").getJSONArray("POSITION_NBR").getJSONObject(1).getString("VALUE");
                }
                String EFFDT = (String) jobj.get("EFFDT");//生效日期
                String DEPTID = (String) jobj.get("DEPTID"); //岗位所属部门编码
                String DEPTID_DESC = "";
                if (jobj.getJSONObject("ATTRS").getJSONArray("DEPTID").size() > 0) {
                    DEPTID_DESC = jobj.getJSONObject("ATTRS").getJSONArray("DEPTID").getJSONObject(1).getString("VALUE");
                }
                String JOBCODE = (String) jobj.get("JOBCODE");//职务代码
                String JOBCODE_DESC = "";
                if (jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE").size() > 0) {
                    JOBCODE_DESC = jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE").getJSONObject(1).getString("VALUE");
                }
                String EFF_STATUS = (String) jobj.get("EFF_STATUS");//岗位状态，A-有效、I-无效
                if (jobj.getJSONObject("ATTRS").getJSONArray("EFF_STATUS").size() > 0) {
                    String EFF_STATUS_DESC = jobj.getJSONObject("ATTRS").getJSONArray("EFF_STATUS").getJSONObject(1).getString("VALUE");
                }
                String LOCATION_DESCR = (String) jobj.get("LOCATION_DESCR");//岗位所在工作地点
                String COUNTRY = (String) jobj.get("COUNTRY");//岗位所在国家编码
                String DC_POSN_SCT = (String) jobj.get("DC_POSN_SCT");//编制管控类型
                if (jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_SCT").size() > 0) {
                    String DC_POSN_SCT_DESC = jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_SCT").getJSONObject(1).getString("VALUE");
                }
                String DC_POSN_INOUT_KNT = (String) jobj.get("DC_POSN_INOUT_KNT");//岗位编制类型：海外编/国内编
                if (jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_INOUT_KNT").size() > 0) {
                    String DC_POSN_INOUT_KNT_DESC = jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_INOUT_KNT").getJSONObject(1).getString("VALUE");
                }
                String DC_POSN_PTN = (String) jobj.get("DC_POSN_PTN");//编制人数
                String CURR_BUDGET_COUNT = (String) jobj.get("CURR_BUDGET_COUNT");//在编人数
                String DC_KEY_POSITION = (String) jobj.get("DC_KEY_POSITION");//是否关键岗位
                String DC_IS_MANAGER = (String) jobj.get("DC_IS_MANAGER");//是否部门负责人岗位
                String DC_GUAR_YN = (String) jobj.get("DC_GUAR_YN");//岗位是否需要担保人
                String JOB_FUNCTION = (String) jobj.get("JOB_FUNCTION");//岗位对应序列
                if (jobj.getJSONObject("ATTRS").getJSONArray("JOB_FUNCTION").size() > 0) {
                    String JOB_FUNCTION_DESC = jobj.getJSONObject("ATTRS").getJSONArray("JOB_FUNCTION").getJSONObject(1).getString("VALUE");
                }
                String REPORTS_TO = (String) jobj.get("REPORTS_TO");//直接上级岗位编码
                if (jobj.getJSONObject("ATTRS").getJSONArray("REPORTS_TO").size() > 0) {
                    String REPORTS_TO_DESC = jobj.getJSONObject("ATTRS").getJSONArray("REPORTS_TO").getJSONObject(1).getString("VALUE");
                }
                String DC_POSTLVL = (String) jobj.get("DC_POSTLVL");//岗位职级
                String DC_POSN_PROET = (String) jobj.get("DC_POSN_PROET");//岗位属性
                if (jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_PROET").size() > 0) {
                    String DC_POSN_PROET_DESC = jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_PROET").getJSONObject(1).getString("VALUE");
                }
                String DC_POSN_PTT = (String) jobj.get("DC_POSN_PTT");//编制类型
                if (jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_PTT").size() > 0) {
                    String DC_POSN_PTT_DESC = jobj.getJSONObject("ATTRS").getJSONArray("DC_POSN_PTT").getJSONObject(1).getString("VALUE");
                }
                String DC_POSN_BRACNG = (String) jobj.get("DC_POSN_BRACNG");//岗位分线
                String DC_OLD_POSN_NBR = (String) jobj.get("DC_OLD_POSN_NBR");//原岗位编码

                map.put("DC_INF_DT_STATUS", DC_INF_DT_STATUS);
                if (CheckMethod.isHanZi(DEPTID_DESC)) {
//                    System.out.println(DEPTID + "," + DEPTID_DESC + "," + JOBCODE_DESC + "," + COUNTRY + "," + JOBCODE);
                }
                mapList.add(map);
            }
            //业务处理完，再把该路径下的下载的zip和解压后的文件删除掉
            if (mapList.size() > 0) {
                //Boolean isDel = new DownloadsFile().deleteFile(new File("/opt/post/"));
            }
        }
    }

    /**
     * 获取员工 emp--------------------------------------与MDM进行人员同步-------------增量-------------
     * @param taskType: "0" :全量；“1” 增量
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：Restful
     * 读取压缩包的形式，将压缩包解压进行数据解析，全量会报内存溢出
     */
    public void Z_MDM_COMMON_EMP(String taskType) throws IOException, MXException {
        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        //地点
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE",MXServer.getMXServer().getSystemUserInfo());
        //---------------------------------------------------------------------------
        JSONObject alldataJson = formatDataSend(taskType, "emp");
        JSONObject resultObj = HttpUtilOa.post(UrlConstants.restEsbUrl, alldataJson);
        String resResultURL = formatDataReceived(resultObj.toString());
        //Date faqDate = new Date();
       try{
           if (!"".equals(resResultURL)) {
               //下载zip文件到指定位置
               resResultURL = resResultURL.replace("https:", "http:");
               File file = new DownloadsFile().downloadByUrl(resResultURL, "/opt/emp/");
//             File file = new DownloadsFile().downloadByUrl(resResultURL, "G://");//下载到本地
               String zipPath = file.getPath();
               //解压zip文件到指定位置
               Boolean flag = new DownloadsFile().decompressZip(zipPath, "/opt/emp/");
//               Boolean flag = new DownloadsFile().decompressZip(zipPath, "G://");//解压到本地
               //解析解压后的txt文件数据
               File jsonFile = new File("/opt/emp/data.txt");
               String dataJsonStr = "";
//               File jsonFile = new File("G://data.txt");//本地解析
               //方式一：数据量太大，导致内存溢出
              dataJsonStr = new DownloadsFile().readJsonFile(jsonFile);
              //------------------将解压后的文件，读到内存---------------start------------------
       /*        //方式二：数据量太大，导致内存溢出
               List<String> lines = Files.readAllLines(Paths.get("/opt/emp/data.txt"), StandardCharsets.UTF_8);
               String dataJsonStr = lines.stream().collect(Collectors.joining(System.lineSeparator()));
               //方式三：如果文件过大，一次性将整个文件读入内存可能会导致内存溢出。为了避免这种情况，可使用逐行读取的方式，而不是一次性将整个文件读入内存
               try (BufferedReader reader = new BufferedReader(new FileReader("/opt/emp/data.txt"))) {
                   StringBuilder content = new StringBuilder();
                   String line;
                   while ((line = reader.readLine()) != null) {
                       content.append(line).append(System.lineSeparator());
                   }
                   dataJsonStr = content.toString();
               } catch (IOException e) {
                   e.printStackTrace();
               }
               //方式四：如果逐行读取文件仍然导致内存溢出，这可能意味着文件太大，即使逐行读取也无法处理。在这种情况下，你可以考虑使用更高级的流处理方法，例如Java 8的Stream API。你可以使用Files.lines()方法来创建一个流，从而逐行读取文件，而不必将整个文件内容加载到内存中
               try {
                   dataJsonStr = Files.lines(Paths.get("/opt/emp/data.txt"), StandardCharsets.UTF_8)
                           .collect(Collectors.joining(System.lineSeparator()));
               } catch (IOException e) {
                   e.printStackTrace();
               }
               //方式五--数据量太大，还是不行
               try (RandomAccessFile file1 = new RandomAccessFile("/opt/emp/data.txt", "r");
                    FileChannel channel = file1.getChannel()) {
                    long fileSize = channel.size();
                    MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize);
                    dataJsonStr = StandardCharsets.UTF_8.decode(buffer).toString();
               } catch (IOException e) {
                   e.printStackTrace();
               }*/
               //-------------------将解压后的文件，读到内存---------------end------------------
               JSONArray dataArray = JSONArray.parseArray(dataJsonStr);
               MboSetRemote mobSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());//人员表
               MboSetRemote oldMboSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());//人员表
               MboSetRemote userSet = MXServer.getMXServer().getMboSet("MAXUSER",MXServer.getMXServer().getSystemUserInfo());//用户表
               MboSetRemote oldUserSet = MXServer.getMXServer().getMboSet("MAXUSER",MXServer.getMXServer().getSystemUserInfo());//用户表
//             MboSetRemote personTeamSet = MXServer.getMXServer().getMboSet("PERSONGROUPTEAM",MXServer.getMXServer().getSystemUserInfo());//人员组
               MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());//部门表
               //记录接口日志----------------start------------------------
//               String AppId = "person";//应用id
//               String AppName = "人员";//应用名称
//               String OPNum = "";//单据号
//               String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
////               Integer LqTotal = dataArray.size();//拉取的压缩包数量
//               String Source = "EAM";//源系统
//               String Target = "MDM";//目标系统
//               String IFName = "Z_MDM_COMMON_EMP";//接口名
//               String IFStatus = "";//接口状态
//               String Createby = "MAXADMIN";//操作人
//               String Orgid = "";//组织
//               String Siteid = "";//地点
//               Date SendDate = faqDate;//发起时间
//               String SendJs = "";//发起报文
//               if(alldataJson.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
//                   SendJs = UrlConstants.restEsbUrl+alldataJson.toString();
//               }else{
//                   SendJs = UrlConstants.restEsbUrl+alldataJson.toString().substring(0,1333);
//               }
               Date AcceptDate = new Date();//接收时间
               String AcceptJs = "";//接收报文
               if(dataJsonStr.getBytes(StandardCharsets.UTF_8).length<=4000){
                   AcceptJs = UrlConstants.restEsbUrl+dataJsonStr;
               }else{
                   AcceptJs = UrlConstants.restEsbUrl+dataJsonStr.substring(0,3600);
               }
//              new udIFLogHandler().insertIFLog(AppId,AppName,OPNum,OPType,LqTotal,Source,Target,IFName,IFStatus,Createby,Orgid,Siteid,SendDate,AcceptDate,SendJs,AcceptJs);
               //记录接口日志----------------end---------------------------
               for (int i = 0; i < dataArray.size(); i++) {
                   JSONObject jobj = (JSONObject) dataArray.get(i);//获取每个json对象
                   String EMPLID = (String) jobj.get("EMPLID"); //员工工号
                   String ALTER_EMPLID = (String) jobj.get("ALTER_EMPLID"); //员工旧工号
                   String LAST_NAME = (String) jobj.get("LAST_NAME"); //姓氏
                   String MIDDLE_NAME = (String) jobj.get("MIDDLE_NAME"); //中间名
                   String LOCATION = (String) jobj.get("LOCATION"); //判断属于那个工厂的
                   if(MIDDLE_NAME==null || "".equals(MIDDLE_NAME)){
                       MIDDLE_NAME = "";
                   }
                   String status = "";
                   String HR_STATUS = (String) jobj.get("HR_STATUS"); //A表示有效，I表示无效。通俗来讲也就是在职和离职状态
                   String DC_INF_DT_STATUS = (String) jobj.get("DC_INF_DT_STATUS"); //数据状态：为 D 表示无效数据
                   if("I".equalsIgnoreCase(HR_STATUS) || "D".equalsIgnoreCase(DC_INF_DT_STATUS)){
                       status = "INACTIVE";
                     /*  //需要在人员组，将该人员删除掉
                       personTeamSet.setWhere("RESPPARTYGROUP='"+EMPLID+"'");
                       personTeamSet.reset();
                       if(personTeamSet!=null && !personTeamSet.isEmpty()){
                           MboRemote persontMbo = personTeamSet.getMbo(0);
                           persontMbo.delete();
                           persontMbo.getThisMboSet().save();
                       }*/
                   }else{
                       status = "ACTIVE";
                   }
                   String FIRST_NAME = (String) jobj.get("FIRST_NAME"); //名字
                   String NAME_AC = (String) jobj.get("NAME_AC"); //员工英文名
                   String LOCATION_SAP = (String) jobj.get("LOCATION_SAP"); //地点
//                 String PHONE = (String) jobj.get("PHONE"); //联系电话
                   String EMAIL_ADDR = (String) jobj.get("EMAIL_ADDR"); //电子邮箱地址
                   String DEPTID = (String) jobj.get("DEPTID"); //所在部门
                   String TIMEZONE = "Universal";//时区  默认全球时区
                   //------判断--------------
                   String ORGID = "";//组织
                   String SITEID = ""; //地点
                   deptSet.setWhere("DEPTNUM='"+DEPTID+"'");
                   deptSet.reset();
                   if(deptSet!=null && !deptSet.isEmpty()){
                       MboRemote deptMbo = deptSet.getMbo(0);
                       ORGID = deptMbo.getString("ORGID");
                       SITEID = deptMbo.getString("SITEID");
                       //根据地点，判断时区
                       if(SITEID!=null && !"".equals(SITEID)){
                           if("GF03".equalsIgnoreCase(SITEID) || "GF51".equalsIgnoreCase(SITEID) || "GF02".equalsIgnoreCase(SITEID) || "GF08".equalsIgnoreCase(SITEID)){
                               //加纳
                               TIMEZONE = "Universal"; //UTC/GMT O小时 (标准区)
                           }else if("KF61".equalsIgnoreCase(SITEID) || "KF51".equalsIgnoreCase(SITEID)){
                              // 肯尼亚
                               TIMEZONE = "Africa/Nairobi"; //内罗毕时区 UTC/CMT +3小时(东三区)
                           }else if("KF61".equalsIgnoreCase(SITEID) || "KF51".equalsIgnoreCase(SITEID)){
                               // 坦桑
                               TIMEZONE = "Africa/Nairobi"; //内罗毕时区 UTC/CMT +3小时(东三区)
                           }else if("KF61".equalsIgnoreCase(SITEID) || "KF51".equalsIgnoreCase(SITEID)){
                               // 喀麦隆
                               TIMEZONE = "Africa/Algiers"; //UTC/CMT +1小时(东一区)
                           }
                       }
                   }else{
                       //若该员工没有在上线的工厂，则对应的部门肯定也没有组织地点，从而找不到组织地点，则默认给LOCATION字段作为组织地点。后面同一刷新
                       ORGID = LOCATION;
                       SITEID = LOCATION;
                       //continue;
                   }
                   //获取岗位
                   String JOBCODE = (String) jobj.get("JOBCODE"); //岗位编号
                   String JOBCODE_DESC_ZH = "";//中
                   String JOBCODE_DESC_EN = "";//英
                   String JOBCODE_DESC_FR = "";//法
                   if (jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE").size() > 0) {
                       JSONArray deptArr = jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE");
                       if(deptArr!=null && !deptArr.isEmpty()){
                           for(int d=0;d<deptArr.size();d++){
                               JSONObject deptJs = deptArr.getJSONObject(d);//岗位对象
                               String LANG = deptJs.getString("LANG");
                               if("ZH".equals(LANG)){
                                   JOBCODE_DESC_ZH = deptJs.getString("VALUE");
                               }else if("EN".equals(LANG)){
                                   JOBCODE_DESC_EN = deptJs.getString("VALUE");
                               }else if("FR".equals(LANG)){
                                   JOBCODE_DESC_FR = deptJs.getString("VALUE");
                               }
                           }
                       }
                   }
                   String JOBStr = JOBCODE+"-"+JOBCODE_DESC_ZH;
                  /* String COUNTRY = (String) jobj.get("COUNTRY"); //部门所在国家
                   String LOCATION = (String) jobj.get("LOCATION"); //工作地点
                   String SUPERVISOR_ID = (String) jobj.get("SUPERVISOR_ID"); //直接上级
                   String DC_POSTLVL = (String) jobj.get("DC_POSTLVL"); //岗位职级
                   String LAST_HIRE_DT = (String) jobj.get("LAST_HIRE_DT"); //入职日期
                   String SEX = (String) jobj.get("SEX"); //性别
                   String BIRTHDATE = (String) jobj.get("BIRTHDATE"); //出生日期
                   String DC_EDUCATION = (String) jobj.get("DC_EDUCATION"); //第一学历
                   String DC_PER_POST_LVL = (String) jobj.get("DC_PER_POST_LVL"); //个人职级
                   String ALTER_EMPLID = (String) jobj.get("ALTER_EMPLID"); //原工号
                   String JOBCODE = (String) jobj.get("JOBCODE"); //职务代码
                   String HR_STATUS = (String) jobj.get("HR_STATUS"); //记录员工的状态，A-在职、I-离职
                   String ACTION = (String) jobj.get("ACTION"); //记录员工最新的人事活动类型，例如入职/转正/调动/离职
                   String POSITION_NBR = (String) jobj.get("POSITION_NBR"); //岗位编号
                   String BUKRS2 = (String) jobj.get("BUKRS2"); //薪酬成本中心对应的公司代码*/
                   //新工号----更新
                   mobSet.setWhere(" PERSONID='"+EMPLID+"'");
                   mobSet.reset();
                   MboRemote mbo = null;
                   if(mobSet!=null && !mobSet.isEmpty()){
                       mbo = mobSet.getMbo(0);
                   }else{
                       mbo = mobSet.add();//创建对象
                       mbo.setValue("LOCATIONORG",ORGID,11L);//组织 ---首次更新组织地点
                       mbo.setValue("LOCATIONSITE",SITEID,11L);//地点---首次更新组织地点
                       mbo.setValue("UDAUTGRADE","Level 3",11L);//默认访问数据等级
                       mbo.setValue("PERSONID",EMPLID,11L);//工号
                   }
                   mbo.setValue("DEPARTMENT",DEPTID,11L);//部门编号
                   mbo.setValue("FIRSTNAME",FIRST_NAME,11L);//名
                   mbo.setValue("LASTNAME",LAST_NAME,11L);//姓氏
                   mbo.setValue("DISPLAYNAME",LAST_NAME+MIDDLE_NAME+FIRST_NAME,11L);//全名
                   mbo.setValue("TIMEZONE",TIMEZONE,11L);//设置时区
//                   mbo.setValue("PRIMARYEMAIL",EMAIL_ADDR,2L);//邮件
//                   mbo.setValue("PRIMARYPHONE",PHONE,11L);//电话
                   mbo.setValue("STATUS",status,11L);//状态
                   mbo.setValue("TITLE",JOBStr,11L);//岗位（系统的头衔）
                   mobSet.save();//保存
                   //新用户更新
                   userSet.setWhere(" PERSONID='"+EMPLID+"'");
                   userSet.reset();
                   if(userSet!=null && !userSet.isEmpty()){
                       MboRemote userMbo = userSet.getMbo(0);
                       userMbo.setValue("STATUS",status,11L); //11L跳过验证
//                     userMbo.setValue("DEFSITE",SITEID,11L); //11L跳过验证 ---非首次不更新组织地点
                       userSet.save();
                   }
                   System.out.println("--new person-----siteid="+SITEID+"----,id ="+EMPLID+"----,TIMEZONE="+TIMEZONE+"----,status="+status+"-----------");
                   //老工号更新
                   if(EMPLID!=null && ALTER_EMPLID!=null && !EMPLID.equalsIgnoreCase(ALTER_EMPLID)){
                       oldMboSet.setWhere(" PERSONID='"+ALTER_EMPLID+"'");
                       oldMboSet.reset();
                       MboRemote oldMbo = null;
                       if(oldMboSet!=null && !oldMboSet.isEmpty()){
                           oldMbo = oldMboSet.getMbo(0);
                       }else{
                           oldMbo = oldMboSet.add();//创建对象
                           oldMbo.setValue("LOCATIONORG",ORGID,11L);//组织 ---首次更新组织地点
                           oldMbo.setValue("LOCATIONSITE",SITEID,11L);//地点---首次更新组织地点
                           oldMbo.setValue("UDAUTGRADE","Level 3",11L);//默认访问数据等级
                           oldMbo.setValue("PERSONID",ALTER_EMPLID,11L);//工号
                       }

                       oldMbo.setValue("DEPARTMENT",DEPTID,11L);//部门编号
                       oldMbo.setValue("FIRSTNAME",FIRST_NAME,11L);//名
                       oldMbo.setValue("LASTNAME",LAST_NAME,11L);//姓氏
                       oldMbo.setValue("DISPLAYNAME",LAST_NAME+MIDDLE_NAME+FIRST_NAME,11L);//全名
                       oldMbo.setValue("TIMEZONE",TIMEZONE,11L);//设置时区
                       oldMbo.setValue("STATUS",status,11L);//状态
                       oldMbo.setValue("TITLE",JOBStr,11L);//岗位（系统的头衔）
                       oldMboSet.save();//保存
                       //老用户更新
                       oldUserSet.setWhere(" PERSONID='"+ALTER_EMPLID+"'");
                       oldUserSet.reset();
                       if(oldUserSet!=null && !oldUserSet.isEmpty()){
                           MboRemote olduserMbo = oldUserSet.getMbo(0);
                           olduserMbo.setValue("STATUS",status,11L); //11L跳过验证
//                       userMbo.setValue("DEFSITE",SITEID,11L); //11L跳过验证 ---非首次不更新组织地点
                           oldUserSet.save();
                       }
                       System.out.println("--old person-----siteid="+SITEID+"----,id ="+ALTER_EMPLID+"----,TIMEZONE="+TIMEZONE+"----,status="+status+"-----------");
                   }
               }
           }
       }catch (Exception e){
           String errorMessage = e.getMessage();
           if (errorMessage == null) {
               errorMessage = "发生异常，但没有提供具体错误信息";
           }
           // 提示错误信息
           System.out.println("-----filure message="+errorMessage);
           // 打印堆栈跟踪
           e.printStackTrace();
           e.getCause();
       }finally {
           //业务处理完，再把该路径下的下载的zip和解压后的文件删除掉
           Boolean isDel = new DownloadsFile().deleteFile(new File("/opt/emp/"));
           System.out.println("-----la qu person finish------------");
       }
    }

    /**
     * 获取员工 emp--------------------------------------与MDM进行人员同步-----------全量----------start-----
     * @param Type: 类型（1：部门，2：岗位，3：员工）
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：Restful
     * 读取压缩包的形式，将压缩包解压进行数据解析，全量会报内存溢出，因此采用分页形式
     */
    public void Z_MDM_QUERY_POST_ORG_LIST(String Type) throws IOException, MXException, ParseException {;
        Date faqDate = new Date();
        //地点
        MboSetRemote SITESet = MXServer.getMXServer().getMboSet("SITE",MXServer.getMXServer().getSystemUserInfo());
        for (int n = 1; n <201; n++) {//防止死循环，最多100000条数据，实际只有2500条左右
            int pageNo = 1*n;//页数
            int pageSize = 500;//每页条数
            System.out.println("--------Person by Page="+pageNo+"----pageSize="+pageSize+"----------------");
            JSONObject alldata = formatDataSendByPage(Type,String.valueOf(pageNo),String.valueOf(pageSize));//调用esb对象
            try {
                JSONObject result = HttpUtilOa.post(UrlConstants.getMDMPersonUrl, alldata);//全量对象
                JSONArray jSONArray = formatDataReceivedByPage(JSON.toJSONString(result));//解析返回值
                //记录接口日志----------------end---------------------------
                if (result==null || result.isEmpty() || jSONArray==null || jSONArray.isEmpty()) {
                    System.out.println("-----------person qllq finish--------------------");
                    break;
                }else {
                    for(int i=0;i<jSONArray.size();i++){
                        JSONObject jobj = jSONArray.getJSONObject(i);//对象
                        if(null!=jobj){
                            MboSetRemote mobSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());//人员表
                            MboSetRemote oldMboSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());//人员表
                            MboSetRemote userSet = MXServer.getMXServer().getMboSet("MAXUSER",MXServer.getMXServer().getSystemUserInfo());//用户表
                            MboSetRemote oldUserSet = MXServer.getMXServer().getMboSet("MAXUSER",MXServer.getMXServer().getSystemUserInfo());//用户表
                            //MboSetRemote personTeamSet = MXServer.getMXServer().getMboSet("PERSONGROUPTEAM",MXServer.getMXServer().getSystemUserInfo());//人员组
                            MboSetRemote deptSet = MXServer.getMXServer().getMboSet("DEPT",MXServer.getMXServer().getSystemUserInfo());//部门表
                            String EMPLID = (String) jobj.get("EMPLID"); //员工工号
                            String ALTER_EMPLID = (String) jobj.get("ALTER_EMPLID"); //员工旧工号
                            String LAST_NAME = (String) jobj.get("LAST_NAME"); //姓氏
                            String MIDDLE_NAME = (String) jobj.get("MIDDLE_NAME"); //中间名
                            String LOCATION = (String) jobj.get("LOCATION"); //判断属于那个工厂的
                            if(MIDDLE_NAME==null || "".equals(MIDDLE_NAME)){
                                MIDDLE_NAME = "";
                            }
                            String status = "";
                            String HR_STATUS = (String) jobj.get("HR_STATUS"); //A表示有效，I表示无效。通俗来讲也就是在职和离职状态
                            String DC_INF_DT_STATUS = (String) jobj.get("DC_INF_DT_STATUS"); //数据状态：为 D 表示无效数据
                            String FIRST_NAME = (String) jobj.get("FIRST_NAME"); //名字
                            String NAME_AC = (String) jobj.get("NAME_AC"); //员工英文名
                            String LOCATION_SAP = (String) jobj.get("LOCATION_SAP"); //地点
                            //String PHONE = (String) jobj.get("PHONE"); //联系电话
                            String EMAIL_ADDR = (String) jobj.get("EMAIL_ADDR"); //电子邮箱地址
                            String DEPTID = (String) jobj.get("DEPTID"); //所在部门
                            String TIMEZONE = "Universal";//时区  默认全球时区
                            if("I".equalsIgnoreCase(HR_STATUS) || "D".equalsIgnoreCase(DC_INF_DT_STATUS)){
                                status = "INACTIVE";
                            }else{
                                status = "ACTIVE";
                            }
                            //------判断--------------
                            String ORGID = "";//组织
                            String SITEID = ""; //地点
                            deptSet.setWhere("DEPTNUM='"+DEPTID+"'");
                            deptSet.reset();
                            if(deptSet!=null && !deptSet.isEmpty()){
                                MboRemote deptMbo = deptSet.getMbo(0);
                                ORGID = deptMbo.getString("ORGID");
                                SITEID = deptMbo.getString("SITEID");
                                //根据地点，判断时区
                                if(SITEID!=null && !"".equals(SITEID)){
                                    if("GF03".equalsIgnoreCase(SITEID) || "GF51".equalsIgnoreCase(SITEID) || "GF02".equalsIgnoreCase(SITEID) || "GF08".equalsIgnoreCase(SITEID)){
                                        //加纳
                                        TIMEZONE = "Universal"; //UTC/GMT O小时 (标准区)
                                    }else if("KF61".equalsIgnoreCase(SITEID) || "KF51".equalsIgnoreCase(SITEID)){
                                        // 肯尼亚
                                        TIMEZONE = "Africa/Nairobi"; //内罗毕时区 UTC/CMT +3小时(东三区)
                                    }else if("KF61".equalsIgnoreCase(SITEID) || "KF51".equalsIgnoreCase(SITEID)){
                                        // 坦桑
                                        TIMEZONE = "Africa/Nairobi"; //内罗毕时区 UTC/CMT +3小时(东三区)
                                    }else if("KF61".equalsIgnoreCase(SITEID) || "KF51".equalsIgnoreCase(SITEID)){
                                        // 喀麦隆
                                        TIMEZONE = "Africa/Algiers"; //UTC/CMT +1小时(东一区)
                                    }
                                }
                            }else{
                                continue;
                            }
                            //获取岗位
                            String JOBCODE = (String) jobj.get("JOBCODE"); //岗位编号
                            String JOBCODE_DESC_ZH = "";//中
                            String JOBCODE_DESC_EN = "";//英
                            String JOBCODE_DESC_FR = "";//法

                            if(null!=jobj.getJSONObject("ATTRS") && null!=jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE")){
                                if (jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE").size() > 0) {
                                    JSONArray deptArr = jobj.getJSONObject("ATTRS").getJSONArray("JOBCODE");
                                    if(deptArr!=null && !deptArr.isEmpty()){
                                        for(int d=0;d<deptArr.size();d++){
                                            JSONObject deptJs = deptArr.getJSONObject(d);//岗位对象
                                            String LANG = deptJs.getString("LANG");
                                            if("ZH".equals(LANG)){
                                                JOBCODE_DESC_ZH = deptJs.getString("VALUE");
                                            }else if("EN".equals(LANG)){
                                                JOBCODE_DESC_EN = deptJs.getString("VALUE");
                                            }else if("FR".equals(LANG)){
                                                JOBCODE_DESC_FR = deptJs.getString("VALUE");
                                            }
                                        }
                                    }
                                }
                            }

                            String JOBStr = JOBCODE+"-"+JOBCODE_DESC_ZH;
                            //新工号更新
                            mobSet.setWhere(" PERSONID='"+EMPLID+"'");
                            mobSet.reset();
                            MboRemote mbo = null;
                            if(mobSet!=null && !mobSet.isEmpty()){
                                mbo = mobSet.getMbo(0);
                            }else{
                                mbo = mobSet.add();//创建对象
                                mbo.setValue("LOCATIONORG",ORGID,11L);//组织 ---首次更新组织地点
                                mbo.setValue("LOCATIONSITE",SITEID,11L);//地点---首次更新组织地点
                                mbo.setValue("UDAUTGRADE","Level 3",11L);//默认访问数据等级
                                mbo.setValue("PERSONID",EMPLID,11L);//工号
                            }

                            mbo.setValue("DEPARTMENT",DEPTID,11L);//部门编号
                            mbo.setValue("FIRSTNAME",FIRST_NAME,11L);//名
                            mbo.setValue("LASTNAME",LAST_NAME,11L);//姓氏
                            mbo.setValue("DISPLAYNAME",LAST_NAME+MIDDLE_NAME+FIRST_NAME,11L);//全名

                            mbo.setValue("TIMEZONE",TIMEZONE,11L);//设置时区
                            mbo.setValue("STATUS",status,11L);//状态
                            mbo.setValue("TITLE",JOBStr,11L);//岗位（系统的头衔）
                            mobSet.save();//保存
                            //新用户更新
                            userSet.setWhere(" PERSONID='"+EMPLID+"'");
                            userSet.reset();
                            if(userSet!=null && !userSet.isEmpty()){
                                MboRemote userMbo = userSet.getMbo(0);
                                userMbo.setValue("STATUS",status,11L); //11L跳过验证
//                       userMbo.setValue("DEFSITE",SITEID,11L); //11L跳过验证 ---非首次不更新组织地点
                                userSet.save();
                            }
                            System.out.println("--new person-----siteid="+SITEID+"----,id ="+EMPLID+"----,TIMEZONE="+TIMEZONE+"----,status="+status+"-----------");
                            //老工号更新
                            if(EMPLID!=null && ALTER_EMPLID!=null && !EMPLID.equalsIgnoreCase(ALTER_EMPLID)){
                                oldMboSet.setWhere(" PERSONID='"+ALTER_EMPLID+"'");
                                oldMboSet.reset();
                                MboRemote oldMbo = null;
                                if(oldMboSet!=null && !oldMboSet.isEmpty()){
                                    oldMbo = oldMboSet.getMbo(0);
                                }else{
                                    oldMbo = oldMboSet.add();//创建对象
                                    oldMbo.setValue("LOCATIONORG",ORGID,11L);//组织 ---首次更新组织地点
                                    oldMbo.setValue("LOCATIONSITE",SITEID,11L);//地点---首次更新组织地点
                                    oldMbo.setValue("UDAUTGRADE","Level 3",11L);//默认访问数据等级
                                    oldMbo.setValue("PERSONID",ALTER_EMPLID,11L);//工号
                                }

                                oldMbo.setValue("DEPARTMENT",DEPTID,11L);//部门编号
                                oldMbo.setValue("FIRSTNAME",FIRST_NAME,11L);//名
                                oldMbo.setValue("LASTNAME",LAST_NAME,11L);//姓氏
                                oldMbo.setValue("DISPLAYNAME",LAST_NAME+MIDDLE_NAME+FIRST_NAME,11L);//全名

                                oldMbo.setValue("TIMEZONE",TIMEZONE,11L);//设置时区
                                oldMbo.setValue("STATUS",status,11L);//状态
                                oldMbo.setValue("TITLE",JOBStr,11L);//岗位（系统的头衔）
                                oldMboSet.save();//保存
                                //老用户更新
                                oldUserSet.setWhere(" PERSONID='"+ALTER_EMPLID+"'");
                                oldUserSet.reset();
                                if(oldUserSet!=null && !oldUserSet.isEmpty()){
                                    MboRemote olduserMbo = oldUserSet.getMbo(0);
                                    olduserMbo.setValue("STATUS",status,11L); //11L跳过验证
//                       userMbo.setValue("DEFSITE",SITEID,11L); //11L跳过验证 ---非首次不更新组织地点
                                    oldUserSet.save();
                                }
                                System.out.println("--old person-----siteid="+SITEID+"----,id="+ALTER_EMPLID+"----,TIMEZONE="+TIMEZONE+"----,status="+status+"-----------");
                            }
                        }

                    }
//                    n=n+1;//继续循环
                }
            }catch (Exception e){
                e.printStackTrace();
                e.getMessage();
                e.getCause();
            }




            //记录接口日志----------------start------------------------
//            String AppId = "person";//应用id
//            String AppName = "人员全量";//应用名称
//            String OPNum = "";//单据号
//            String OPType = "SD";//操作类型 SD:手动触发   CRON 定时任务触发
////            Integer LqTotal = jSONArray.size();//拉取的压缩包数量
//            String Source = "EAM";//源系统
//            String Target = "MDM";//目标系统
//            String IFName = "Z_MDM_COMMON_EMP";//接口名
//            String IFStatus = "";//接口状态
//            String Createby = "MAXADMIN";//操作人
//            String Orgid = "";//组织
//            String Siteid = "";//地点
//            Date SendDate = faqDate;//发起时间
//            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);

        }
    }
    /**
     * 发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatDataSendByPage(String type,String currentPage,String queryNum) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject SendData = new JSONObject();
        JSONObject queryMap = new JSONObject();
        //ESB_ATTRS
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", "MDM"); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生
        //queryMap
        queryMap.put("START_TIME","");//不必填   开始时间
        queryMap.put("END_TIME","");//不必填     结束时间
        queryMap.put("currentPage",currentPage);//必填  查询当前页码
        queryMap.put("queryNum",queryNum);//必填  查询的行数
        //SendData
        SendData.put("type", type);//必填   3：员工
        SendData.put("queryMap",queryMap);
        //REQUEST_DATA
        REQUEST_DATA.put("SendHead", "");
        REQUEST_DATA.put("SendData", SendData);
        REQUEST_DATA.put("Operation", "Z_MDM_QUERY_POST_ORG_LIST");
        REQUEST_DATA.put("Type", "Z_MDM_QUERY_POST_ORG_LIST");
        //REQUEST
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        //大对象
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
    public JSONArray formatDataReceivedByPage(String received) {JSONArray jsonArray = new JSONArray();
        JSONObject jsonObject = JSONObject.parseObject(received);
        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
        if ("S".equals(codeStr)) {
            jsonArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONObject("RESULT").getJSONArray("list");
            return jsonArray;
        }
        return jsonArray;
    }
    //获取员工 emp--------------------------------------与MDM进行人员同步-----------全量---------end------

    /**
     * 生产者：推送数据即可
     * 获取供应商---------------------------------------------此接口作废，用不到---------------------------------
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：MQ
     * 有一个时间字段，如果指定时间只拉取这个时间到当前时间内的更新记录，如果不指定时间就是全量
     */
    public void Z_MDM_COMMON_SUPPLY(String date){
        //date = "20210124";
        //报文格式
        String msg = "{\"REQUEST\":{\"ESB_ATTRS\":{\"Application_ID\":\"00020000000004\"," +
                "\"Transaction_ID\":" + "\"" + UUID.randomUUID() + "\"" +
                "},\"REQUEST_DATA\":{\"reqAppId\":\"TMS\",\"functionId\":\"Z_MDM_SUPPLIER_PUSH\"," +
                "\"date\":\"" + date + "\"}}}";
        String qName = "IBM.SERVICE.POSUPDATA.REQUESTER.IN";
        new SendMqUtil().convertAndSend(qName,msg);
    }

    /**
     * -----------------------------------------此接口采用MQ方式，后面改为rest解析文件方式，所以此接口作废---------------------
     * 生产者：推送数据即可
     * 获取物料主数据------------mdm主数据(非备件)---------------
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：MQ
     * 有一个时间字段，如果指定时间只拉取这个时间到当前时间内的更新记录，如果不指定时间就是全量
     */
    public void Z_MDM_MATER_PUSH(String date){
        //date = "20210124";
        //报文格式
        //String msg = "{\"REQUEST\":{\"ESB_ATTRS\":{\"Application_ID\":\"00020000000004\",\"Transaction_ID\":\"27d21233-b937-463a-98b4-38fc06996b22\"},\"REQUEST_DATA\":{\"reqAppId\":\"EAM\",\"FunctionId\":\"Z_MDM_MATER_PUSH\",\"date\":\"" + date + "\"}}}";
        String msg = "{\"REQUEST\":{\"ESB_ATTRS\":{\"Application_ID\":\"00020000000004\",\"Transaction_ID\":\""+UUID.randomUUID()+"\"},\"REQUEST_DATA\":{\"reqAppId\":\"EAM\",\"functionId\":\"Z_MDM_MATER_PUSH\",\"date\":\"" + date + "\"}}}";
        String qName = "IBM.SERVICE.REQUEST.SYNCDATA";
        new SendMqUtil().convertAndSend(qName,msg);
    }

    /**
     * 生产者：推送数据即可---------------------------------手工维护，不进行同步，此接口作废-----------------------------
     * 获取仓库信息（从sap中获取仓库信息）
     * 数据方向：MDM-->ESB-->EAM
     * 接口方向：EAM-->ESB-->MDM
     * 接口方式：MQ
     * 有一个时间字段，如果指定时间只拉取这个时间到当前时间内的更新记录，如果不指定时间就是全量
     */
    public void Z_SPMS_GETWAREHOUSE(String date){
        //date = "20210124";
        //报文格式
        String msg = "{\"REQUEST\":{\"ESB_ATTRS\":{\"Application_ID\":\"00020000000004\"," +
                "\"Transaction_ID\":" + "\"" + UUID.randomUUID() + "\"" +
                "},\"REQUEST_DATA\":{\"reqAppId\":\"EAM\",\"rfcName\":\"Z_SPMS_GETWAREHOUSE\"," +
                "\"date\":\"\",\"tableName\":\"\",\"isSyn\":\"0\"}}}";
        String qName = "IBM.SERVICE.POSUPDATA.REQUESTER.IN";
        new SendMqUtil().convertAndSend(qName,msg);
    }

    /**
     * --------------------------------------------SAP升级后，采用rest方式，此接口作废-----------------------------
     * 生产者：推送数据即可
     * 获取国内仓物料数据单价（从sap中获取）
     * 数据方向：SAP-->ESB-->EAM
     * 接口方向：EAM-->ESB-->SAP
     * 接口方式：MQ
     * 有一个时间字段，如果指定时间只拉取这个时间到当前时间内的更新记录，如果不指定时间就是全量
     */
    public void Z_SPMS_GET_MBEW(String date){
        //date = "20210124";
        //报文格式
        String msg = "{ \"REQUEST\": { \"ESB_ATTRS\": { \"Application_ID\": \"00020000000004\", \"Transaction_ID\": \""+UUID.randomUUID()+"\" }, \"REQUEST_DATA\": { \"functionId\": \"Z_SPMS_GET_MBEW\", \"rfcName\": \"Z_SPMS_GET_MBEW\", \"isSyn\": \"0\", \"date\": \"" + date +"\", \"tableName\": \"ET_MBEW\", \"reqAppId\": \"EAM\" } } }";
        String qName = "IBM.SERVICE.POSUPDATA.REQUESTER.IN";
        new SendMqUtil().convertAndSend(qName,msg);
    }

    /**
     *
     * ------------------------------------------------------此接口作废------------------------------
     * 生产者：推送数据即可
     * 获取物料主数据（从sap中获取）
     * 数据方向：SAP-->ESB-->EAM
     * 接口方向：EAM-->ESB-->SAP
     * 接口方式：MQ
     * 有一个时间字段，如果指定时间只拉取这个时间到当前时间内的更新记录，如果不指定时间就是全量
     */
    public void Z_SPMS_GETSKUDATA(String date){
        //date = "20210124";
        date = sdf.format(new Date());
        //报文格式
        //String msg = "{\"REQUEST\":{\"ESB_ATTRS\":{\"Application_ID\":\"00020000000004\",\"Transaction_ID\":\"3a84f926-8b95-4f06-8022-3b58540ff524\"},\"REQUEST_DATA\":{\"reqAppId\":\"EAM\",\"rfcName\":\"Z_SPMS_GETSKUDATA\",\"date\":\"2023-04-10\",\"tableName\":\"\",\"isSyn\":\"0\"}}}";
          String msg = "{\"REQUEST\":{\"ESB_ATTRS\":{\"Application_ID\":\"00020000000004\",\"Transaction_ID\":\""+UUID.randomUUID()+"\"},\"REQUEST_DATA\":{\"reqAppId\":\"EAM\",\"rfcName\":\"Z_SPMS_GETSKUDATA\",\"date\":\"20220101\",\"tableName\":\"\",\"isSyn\":\"0\"}}}";
        String qName = "IBM.SERVICE.POSUPDATA.REQUESTER.IN";
        new SendMqUtil().convertAndSend(qName,msg);
    }




    /**
     * 发送REST请求到ESB，先进行数据格式化
     */
    public JSONObject formatDataSend(String taskType, String type) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject SendData = new JSONObject();

        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", "MDM"); //目标系统
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生

        SendData.put("taskType", taskType); //0 代表全量，1代表增量
        REQUEST_DATA.put("SendData", SendData);
        if ("org".equals(type)) {
            REQUEST_DATA.put("Operation", "Z_MDM_COMMON_ORG");
            REQUEST_DATA.put("Type", "MDM_COMMON_ORG");
        } else if ("post".equals(type)) {
            REQUEST_DATA.put("Operation", "Z_MDM_COMMON_POST");
            REQUEST_DATA.put("Type", "MDM_COMMON_POST");
        } else if ("emp".equals(type)) {
            REQUEST_DATA.put("Operation", "Z_MDM_COMMON_EMP");
            REQUEST_DATA.put("Type", "MDM_COMMON_EMP");
        }
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    /**
     * 解析接口返回数据
     **/
    public String formatDataReceived(String received) {
        JSONObject jsonObject = JSONObject.parseObject(received);
        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
        if ("S".equals(codeStr)) {
            String resResult = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("RESULT");
            return resResult;
        } else {
            return "";
        }
    }

    /**
     * 物料主数据解析接口返回数据
     **/
    public JSONArray formatDataReturn(String received) {
        JSONObject jsonObject = JSONObject.parseObject(received);
        String codeStr = String.valueOf(jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("EX_TYPE"));//返回值
        if ("S".equals(codeStr)) {
//            JSONArray jSONArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getString("RESULT");
            JSONArray jSONArray = jsonObject.getJSONObject("RESPONSE").getJSONObject("RETURN_DATA").getJSONArray("RESULT");
            return jSONArray;
        } else {
            return null;
        }
    }
}
