package psdi.app.iface.gfss;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import psdi.app.iface.comm.UrlConstants;
import psdi.app.iface.oa.HttpUtilOa;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXException;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.rmi.RemoteException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 数据方向 FSSC-->EAM
 * 接口方向 EAM-->FSSC
 */
public class Gfss2EamHandler {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    public JSONObject Z_EAM_FSSC(MboRemote mbo,String Type) throws IOException, MXException {
        //1-调用创建固定资产卡片(FA)  2-调用在建工程转固(FB)  3-资产修改（FC）
        JSONObject alldata = null;
        if("FA".equalsIgnoreCase(Type) || "FB".equalsIgnoreCase(Type)){
            alldata = Z_EAM_ASSET_FSSC(mbo,Type);
        }else if("FC".equalsIgnoreCase(Type)){
            alldata = Z_EAM_ASSET_MODIF_FSSC(mbo,Type);
        }
        // 调用接口
        JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        return result;
    }
    /**
     * 共用
     * 1、调用固定资产卡片创建
     * 2、调用结算规则维护(在建工程转固)
     * 3、参数说明：
     *       mbo：主表对象
     *       Type：单据类型： 创建固定资产卡片=FA，在建工程转固（结算业务）=FB
     */
    public JSONObject Z_EAM_ASSET_FSSC(MboRemote mbo,String Type) throws RemoteException, MXException {
        //任务管理主表
        Map zmap = new HashMap();
        String APPNAME = mbo.getThisMboSet().getApp();//获取应用名
        String ORGID = mbo.getString("ORGID");//组织
        String SITEID = mbo.getString("SITEID");//工厂/地点
        String AUFNR = mbo.getString("AUFNR");//内部订单号
        String BUKRS = "";//公司代码
        MboSetRemote UDNBDDHSet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());//从地点表中获取公司代码
        UDNBDDHSet.setWhere("ORGID='"+ORGID+"' AND SITEID='"+SITEID+"'");
        UDNBDDHSet.reset();
        if(UDNBDDHSet!=null && !UDNBDDHSet.isEmpty()){
            MboRemote nbddhMbo = UDNBDDHSet.getMbo(0);
            BUKRS = nbddhMbo.getString("COMPANY");//公司代码
        }
        String ORD41 = mbo.getString("ORD41");//新增/修改原因
        String SOURCE_DOC_NUMBER = mbo.getString("TASKNUM");//来源系统单号
        String CREATE_BY = mbo.getString("CREATEBY");//创建人
        String BUSINESS_TYPE_1 = mbo.getString("BUSTYPE1");//业务大类
        String BUSINESS_TYPE_2 = mbo.getString("BUSTYPE2");//业务小类（业务事项）
        int ATTACH_NUMBER = mbo.getInt("ATTACHNUMBER");//附件张数
        String CONTRACT_NUMBER = mbo.getString("CONTRACTNUMBER");//合同编号
        String CONTRACT_NAME = mbo.getString("CONTRACTNAME");//合同名称
        String REASON = mbo.getString("REASON");//申请原因
        String STATUS = mbo.getString("STATUS");//状态
        //OA立项流程编号和ID
        String PROJECTNUM = mbo.getString("UDBUDGET.PROJECTNUM");//OA立项流程编号
        String OAID = mbo.getString("UDBUDGET.UDBUDGETZS.OAID");//OA立项流程ID
        String SAPBH = mbo.getString("UDBUDGET.UDBUDGETZS.SAPBH");//SAP内部订单组
        //主表数据----传FSSC
        zmap.put("SOURCE_SYSTEM","EAM");//来源系统
        zmap.put("SOURCE_DOC_NUMBER", SOURCE_DOC_NUMBER);//来源系统单号
        zmap.put("CREATE_BY", CREATE_BY);//创建人
        zmap.put("APPLY_EMPLOYEE", CREATE_BY);//报账人
        zmap.put("DOC_TYPE",Type);//单据类型 固定值 FA  FB
        zmap.put("DOC_COMPANY", BUKRS);//公司代码
        zmap.put("DOC_COST_CENTER","");//成本中心  不传，默认空
        zmap.put("BUSINESS_TYPE_1","AA001");//业务大类  默认值：长期资产卡片创建 AA001
        zmap.put("BUSINESS_TYPE_2","AA00101");//业务小类（业务事项）  默认值：固定资产 AA00101
        zmap.put("ATTACH_NUMBER",ATTACH_NUMBER);//附件张数
        zmap.put("CONTRACT_NUMBER",CONTRACT_NUMBER);//合同编号
        zmap.put("CONTRACT_NAME",CONTRACT_NAME);//合同名称
        zmap.put("DESCRIPTION",REASON);//申请原因
        if("FB".equalsIgnoreCase(Type)){
            zmap.put("IS_CREATE_CARD","Y");//是否新建资产卡片, 默认是=“Y”
            zmap.put("TRANSFERRDE_AST_STATE",STATUS);//状态
            zmap.put("ATTR1",PROJECTNUM);//OA立项流程编号
            zmap.put("ATTR2",OAID);//OA立项流程ID
            zmap.put("IOGRP1",SAPBH);//SAP内部订单组
            zmap.put("BUSINESS_TYPE_1","AA002");//业务大类  默认值：AA002 在建工程转固
            zmap.put("BUSINESS_TYPE_2","AA00201");//业务小类（业务事项）  默认值：AA00201 固定资产
        }
        //任务管理下设备作为子表数据
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        MboSetRemote assetSet = mbo.getMboSet("ASSET");//设备台账（关联关系）
        for (int i = 0; i < assetSet.count(); i++) {
            MboSetRemote udclsszjSet = MXServer.getMXServer().getMboSet("UDCLSSZJ", MXServer.getMXServer().getSystemUserInfo());//资产分类说明
            Map<String, Object> lineMap = new HashMap<String, Object>();
            MboRemote lineMbo = assetSet.getMbo(i);
            int LINENUM = i+1; //行号
            String ASSETNUM = lineMbo.getString("ASSETNUM");//设备编号
            String SDGDZCBM = lineMbo.getString("SDGDZCBM");//固定资产主编号
            String SUBNUMBER = lineMbo.getString("SUBNUMBER");//固定资产子编号
            String ANLKL = lineMbo.getString("ANLKL");//资产分类
            udclsszjSet.setWhere("CLASSNUM='"+ANLKL+"'");
            udclsszjSet.reset();
            String ZJMNUM = "";//折旧码
            String ZJTXNX = "";//折旧年限
            if(udclsszjSet!=null && !udclsszjSet.isEmpty()){
                MboRemote udclssMbo = udclsszjSet.getMbo(0);
                ZJMNUM = udclssMbo.getString("ZJMNUM");
                ZJTXNX = udclssMbo.getString("ZJTXNX");
            }
            if("Z1060".equalsIgnoreCase(ANLKL)){
                //固定资产_机电设备:  固定资产_机电设备折旧年限5/8是指贸易公司及全资工厂按5年，合资工厂按8年
                if("udbudgettasktf".equalsIgnoreCase(APPNAME)){
                    ZJTXNX = "8";//TF合资工厂默认是8年
                }else{
                    ZJTXNX = "5";//其它是5年
                }
            }
            String AFASL = ZJMNUM;//折旧码
            Integer NDJAR = Integer.parseInt(ZJTXNX);//折旧年限
            String DESCRIPTION = lineMbo.getString("DESCRIPTION");//设备描述
            String SDUNITTYPE = lineMbo.getString("SDUNITTYPE");//规格型号
            String SDZZS = lineMbo.getString("SDZZS");//制造商
            String fullName = DESCRIPTION+" "+SDZZS+"_"+SDUNITTYPE+"_"+ASSETNUM;//财务要求传这种格式
            String MEINS1 = lineMbo.getString("MEINS");//计量单位
            String MEINS = "";
            if("0".equals(MEINS1)){
                MEINS = "PCS";
            }else if("1".equals(MEINS1)){
                MEINS = "PKG";
            }else if("2".equals(MEINS1)){
                MEINS = "SET";
            }
            String COSTCENTER = lineMbo.getString("COSTCENTER");//成本中心
            Double PROZS = lineMbo.getDouble("PROZS");//结算百分比
            Double PURCHASEPRICE = lineMbo.getDouble("PURCHASEPRICE");//金额-存在资产按金额结转情况
            String USEDFROM = lineMbo.getString("USEDFROM");//期间/年度
//            String AFASL = "Z001";//lineMbo.getString("AFASL");//折旧码--固定值
//            Integer NDJAR = lineMbo.getInt("NDJAR");//计划年使用期/折旧年限
            Integer NDPER = lineMbo.getInt("NDPER");//计划使用期间/折旧期间（月份)
            Date AFABG = lineMbo.getDate("AFABG");//折旧计算开始日期
            //子表数据--传FSSC
            lineMap.put("ITEM_NO",LINENUM);//行号
            lineMap.put("EQU_NO",ASSETNUM);//设备编号
            lineMap.put("AST_CODE_SUB",SUBNUMBER);//固定资产子编号
            lineMap.put("AST_CODE",SDGDZCBM);//固定资产主编号
            lineMap.put("AST_TYPE",ANLKL);//资产分类
            lineMap.put("ASSET_NO_TXT",fullName);//设备描述
            lineMap.put("EXTEND_FIELD7",fullName);//资产主号文本
            lineMap.put("TXA50",SDUNITTYPE);//规格型号
            lineMap.put("SERNR","");//序列号-传空
            lineMap.put("MENGE",1);//数量
            lineMap.put("MENGE_UNIT",MEINS);//单位
            lineMap.put("VERAK","");//责任人-传空
            lineMap.put("BUS_COST_CENTER",COSTCENTER);//成本中心
            lineMap.put("INTERNAL_ORDER",AUFNR);//内部订单号
            lineMap.put("WERKS",SITEID);//工厂地点
            lineMap.put("STORT","");//资产地点--传空
            lineMap.put("ORD41",ORD41);//新增修改原因-同sap（需要从主表获取到，然后传到sap）
            lineMap.put("OBJECT_CODE","");//供应商科目编号--传空
            lineMap.put("TEXT","");//租赁数据文本--传空
            lineMap.put("AFABE","");//实际折旧范围--传空
            lineMap.put("AFASL",AFASL);//折旧码
            lineMap.put("NDJAR",NDJAR);//计划年使用期/折旧年限   只写年 2024
            lineMap.put("NDPER",NDPER);//计划使用期间/折旧期间（月份)  只写月 5
            lineMap.put("AFABG",sdf.format(AFABG));//折旧开始日期
            lineMap.put("SCHRW","");//指定固定残值金额 --传空
            lineMap.put("SCHRW_PROZ","");//指定固定残值率%  --传空
            if("FB".equalsIgnoreCase(Type)){
                lineMap.put("PROZS",PROZS);//结算百分比
                //金额结算百分比不能同时存在
                if(PROZS==null || PROZS==0){
                    lineMap.put("BETRR",PURCHASEPRICE);//金额-存在资产按金额结转情况
                }else{
                    lineMap.put("BETRR","");//
                }
                lineMap.put("USED_FROM",USEDFROM);//期间/年度 六位：  202404
                lineMap.put("MESSAGE","");//文本--传空
            }
            dataList.add(lineMap);
        }
        //调用固定资产卡片创建，经ESB格式化
        JSONObject alldata = CreateFormatDataAsset(zmap,Type,dataList);
        return alldata;
    }
    //经ESB转固格式化
    public JSONObject CreateFormatDataAsset(Map<String, Object> zMap,String Type,List<Map<String, Object>> dataList) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject Z_DATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", "GFSS"); //目标系统--和财务共享对接
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        JSONArray IT_REQUEST = new JSONArray();
        //主数据
        Z_DATA.put("SOURCE_SYSTEM",zMap.get("SOURCE_SYSTEM"));//来源系统
        Z_DATA.put("SOURCE_DOC_NUMBER", zMap.get("SOURCE_DOC_NUMBER"));//来源系统单号
        Z_DATA.put("CREATE_BY", zMap.get("CREATE_BY"));//创建人
        Z_DATA.put("APPLY_EMPLOYEE", zMap.get("APPLY_EMPLOYEE"));//报账人
        Z_DATA.put("DOC_TYPE", zMap.get("DOC_TYPE"));//单据类型
        Z_DATA.put("DOC_COMPANY", zMap.get("DOC_COMPANY"));//公司代码
        Z_DATA.put("DOC_COST_CENTER",zMap.get("DOC_COST_CENTER"));//成本中心  不传，默认空
        Z_DATA.put("BUSINESS_TYPE_1",zMap.get("BUSINESS_TYPE_1"));//业务大类
        Z_DATA.put("BUSINESS_TYPE_2",zMap.get("BUSINESS_TYPE_2"));//业务小类（业务事项）
        Z_DATA.put("ATTACH_NUMBER",zMap.get("ATTACH_NUMBER"));//附件张数
        Z_DATA.put("CONTRACT_NUMBER",zMap.get("CONTRACT_NUMBER"));//合同编号
        Z_DATA.put("CONTRACT_NAME",zMap.get("CONTRACT_NAME"));//合同名称
        Z_DATA.put("DESCRIPTION",zMap.get("DESCRIPTION"));//申请原因
        if("FB".equalsIgnoreCase(Type)){
            Z_DATA.put("IS_CREATE_CARD",zMap.get("IS_CREATE_CARD"));//是否新建资产卡片, 默认是=“Y”
            Z_DATA.put("TRANSFERRDE_AST_STATE",zMap.get("TRANSFERRDE_AST_STATE"));//状态
            Z_DATA.put("ATTR1",zMap.get("ATTR1"));//OA立项流程编号
            Z_DATA.put("ATTR2",zMap.get("ATTR2"));//OA立项流程ID
            Z_DATA.put("IOGRP1",zMap.get("IOGRP1"));//SAP内部订单组
        }
        //设备数据
        for (Map<String, Object> map : dataList) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("ITEM_NO",String.valueOf(map.get("ITEM_NO")));//行号
            jsonObject.put("EQU_NO",String.valueOf(map.get("EQU_NO")));//设备编号
            jsonObject.put("AST_CODE_SUB",String.valueOf(map.get("AST_CODE_SUB")));//固定资产子编号
            jsonObject.put("AST_CODE",String.valueOf(map.get("AST_CODE")));//固定资产主编号
            jsonObject.put("AST_TYPE",String.valueOf(map.get("AST_TYPE")));//资产分类
            jsonObject.put("ASSET_NO_TXT",String.valueOf(map.get("ASSET_NO_TXT")));//设备描述
            jsonObject.put("EXTEND_FIELD7",String.valueOf(map.get("EXTEND_FIELD7")));//资产主号文本
            jsonObject.put("TXA50",String.valueOf(map.get("TXA50")));//规格型号
            jsonObject.put("SERNR",String.valueOf(map.get("SERNR")));//序列号-传空
            jsonObject.put("MENGE",String.valueOf(map.get("MENGE")));//数量
            jsonObject.put("MENGE_UNIT",String.valueOf(map.get("MENGE_UNIT")));//单位
            jsonObject.put("VERAK",String.valueOf(map.get("VERAK")));//责任人-传空
            jsonObject.put("BUS_COST_CENTER",String.valueOf(map.get("BUS_COST_CENTER")));//成本中心
            jsonObject.put("INTERNAL_ORDER",String.valueOf(map.get("INTERNAL_ORDER")));//内部订单号
            jsonObject.put("WERKS",String.valueOf(map.get("WERKS")));//工厂地点
            jsonObject.put("STORT",String.valueOf(map.get("STORT")));//资产地点--传空
            jsonObject.put("ORD",String.valueOf(map.get("ORD41")));//新增修改原因-同sap（需要从主表获取到，然后传到sap）
            jsonObject.put("OBJECT_CODE",String.valueOf(map.get("OBJECT_CODE")));//供应商科目编号--传空
            jsonObject.put("TEXT",String.valueOf(map.get("TEXT")));//租赁数据文本--传空
            jsonObject.put("AFABE",String.valueOf(map.get("AFABE")));//实际折旧范围--传空
            jsonObject.put("AFASL",String.valueOf(map.get("AFASL")));//折旧码
            jsonObject.put("NDJAR",String.valueOf(map.get("NDJAR")));//计划年使用期/折旧年限   只写年 2024
            jsonObject.put("NDPER",String.valueOf(map.get("NDPER")));//计划使用期间/折旧期间（月份)  只写月 5
            jsonObject.put("AFABG",String.valueOf(map.get("AFABG")));//折旧开始日期
            jsonObject.put("SCHRW",String.valueOf(map.get("SCHRW")));//指定固定残值金额 --传空
            jsonObject.put("SCHRW_PROZ",String.valueOf(map.get("SCHRW_PROZ")));//指定固定残值率%  --传空
            if("FB".equalsIgnoreCase(Type)){
                jsonObject.put("PROZS",String.valueOf(map.get("PROZS")));//结算百分比
                jsonObject.put("BETRR",String.valueOf(map.get("BETRR")));//金额-存在资产按金额结转情况
                jsonObject.put("USED_FROM",String.valueOf(map.get("USED_FROM")));//期间/年度 六位：  202404
                jsonObject.put("MESSAGE",String.valueOf(map.get("MESSAGE")));//文本--传空
            }
            IT_REQUEST.add(jsonObject);
        }
        HEAD_DATA.put("head", Z_DATA);
        HEAD_DATA.put("lineList", IT_REQUEST);
        REQUEST_DATA.put("SendData", HEAD_DATA);
        if("FA".equalsIgnoreCase(Type)){
            REQUEST_DATA.put("Operation", "Z_GFSS_PUSH_ASSET_DOC");//esb定义----固定资产创建资产卡片
            REQUEST_DATA.put("Type", "Z_GFSS_PUSH_ASSET_DOC");//esb定义-----固定资产创建资产卡片
        }else if("FB".equalsIgnoreCase(Type)){
            REQUEST_DATA.put("Operation", "Z_GFSS_PUSH_ASSET_DOC");//esb定义----在建工程转固  和上面调用同一个
            REQUEST_DATA.put("Type", "Z_GFSS_PUSH_ASSET_DOC");//esb定义-----在建工程转固
        }
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    /**
     * 资产修改
     * 1、调用固定资产卡片创建
     * 2、参数说明：
     *       mbo：主表对象
     *       Type：单据类型： FC:资产修改
     */
    public JSONObject Z_EAM_ASSET_MODIF_FSSC(MboRemote mbo,String Type) throws RemoteException, MXException {
        Map zmap = new HashMap();
        String APPNAME = mbo.getThisMboSet().getApp();//获取应用名
        String ORGID = mbo.getString("ORGID");//组织
        String SITEID = mbo.getString("SITEID");//工厂/地点
        String BUKRS = "";//公司代码
        MboSetRemote UDNBDDHSet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());//从地点表中获取公司代码
        UDNBDDHSet.setWhere("ORGID='"+ORGID+"' AND SITEID='"+SITEID+"'");
        UDNBDDHSet.reset();
        if(UDNBDDHSet!=null && !UDNBDDHSet.isEmpty()){
            MboRemote nbddhMbo = UDNBDDHSet.getMbo(0);
            BUKRS = nbddhMbo.getString("COMPANY");//公司代码
        }
        String SOURCE_DOC_NUMBER = mbo.getString("TRANSFERNUM");//来源系统单号
        String CREATE_BY = mbo.getString("CREATEBY");//创建人
        String BUSINESS_TYPE_1 = "";//业务大类
        String BUSINESS_TYPE_2 = mbo.getString("BUSTYPE2");//业务小类（业务事项）
        if(BUSINESS_TYPE_2!=null && !"".equalsIgnoreCase(BUSINESS_TYPE_2)){
            BUSINESS_TYPE_1 = BUSINESS_TYPE_2.substring(0,5);
        }
        String REASON = mbo.getString("REASON");//申请原因(事由)
        String STATUS = mbo.getString("STATUS");//状态
        //主表数据----传FSSC
        zmap.put("SOURCE_SYSTEM","EAM");//来源系统
        zmap.put("SOURCE_DOC_NUMBER", SOURCE_DOC_NUMBER);//来源系统单号
        zmap.put("CREATE_BY", CREATE_BY);//创建人
        zmap.put("APPLY_EMPLOYEE", CREATE_BY);//报账人
        zmap.put("DOC_TYPE",Type);//单据类型 固定值 FA  FB  FC
        zmap.put("DOC_COMPANY", BUKRS);//公司代码
        zmap.put("DOC_COST_CENTER","");//成本中心  不传，默认空
        zmap.put("BUSINESS_TYPE_1",BUSINESS_TYPE_1);//业务大类 1
        zmap.put("BUSINESS_TYPE_2",BUSINESS_TYPE_2);//业务小类（业务事项）
        zmap.put("ATTACH_NUMBER","0");//附件张数
        zmap.put("DESCRIPTION",REASON);//申请原因
        //子表数据
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        MboSetRemote assetSet = mbo.getMboSet("UDTRANSFERLINEGX");//资产修改子表（关联关系）
        for (int i = 0; i < assetSet.count(); i++) {
            Map<String, Object> lineMap = new HashMap<String, Object>();
            MboRemote lineMbo = assetSet.getMbo(i);
            //存表
            String LINENUM = lineMbo.getString("ITEM_NO");//行号
            String ANLN1 = lineMbo.getString("ANLN1");//固定资产主编号
            String ASSETNUM = lineMbo.getString("ASSETNUM");//设备编号
            String RESPONSI_COST_CENTER = lineMbo.getString("RESPONSI_COST_CENTER");//调入成本中心
            String COST_CENTER_NAME = lineMbo.getString("KOSTL.COST_CENTER_NAME");//调入成本中心描述
            Date YXDATE1 = lineMbo.getDate("YXDATE");//有效期起始日期
            String YXDATE = "";
            if(YXDATE1!=null){
                YXDATE = sdf.format(YXDATE1);
            }
            String EXTEND_FIELD6 = lineMbo.getString("EXTEND_FIELD6");//备注
            //关联查询
            String TXT50 = lineMbo.getString("UDGDZC.TXT50");//固定资产名称
            String SUBNUMBER = lineMbo.getString("UDGDZC.SUBNUMBER");//固定资产子编号
            String ANLK = lineMbo.getString("UDGDZC.ANLK");//资产分类
            String ZFLTXT50 = lineMbo.getString("UDGDZC.ZFLTXT50");//资产分类名称
            String MENGE = lineMbo.getString("UDGDZC.MENGE");//数量
            String MEINS = lineMbo.getString("UDGDZC.MEINS");//计量单位
            String KOSTL = lineMbo.getString("UDGDZC.KOSTL");//原成本中心
            String KTEXT = lineMbo.getString("UDGDZC.KTEXT");//原成本中心描述
            String KANSWCNY = lineMbo.getString("UDGDZC.KANSWCNY");//资产原值CNY
            String ZIAMTCNY = lineMbo.getString("UDGDZC.ZIAMTCNY");//资产已折旧金额CNY
            String KNAFACNY = lineMbo.getString("UDGDZC.KNAFACNY");//资产净值CNY
            String RESMONS = lineMbo.getString("UDGDZC.RESMONS");//剩余折旧月数
            String AFABG = lineMbo.getString("UDGDZC.AFABG");//折旧计算开始日期
            //判断
            String IS_DEACTIVATED = "";//资产停用
            String ORD41 = ""; //新增修改原因
            if("AA00501".equalsIgnoreCase(BUSINESS_TYPE_2)){
                IS_DEACTIVATED="Y";
                ORD41 = "";
            }else if("AA00502".equalsIgnoreCase(BUSINESS_TYPE_2)){
                IS_DEACTIVATED="N";
                ORD41 = "";
            }else if("AA00801".equalsIgnoreCase(BUSINESS_TYPE_2)){
                IS_DEACTIVATED="";
                ORD41 = "4"; //4公司内部转入
            }
            //子表数据--传FSSC
            lineMap.put("ITEM_NO",LINENUM);//行号
            lineMap.put("EQU_NO",ASSETNUM);//设备编号
            lineMap.put("AST_CODE",ANLN1);//固定资产主编号
            lineMap.put("ASSET_NO_TXT",TXT50);//主资产描述
            lineMap.put("AST_CODE_SUB",SUBNUMBER);//固定资产子编号
            lineMap.put("AST_TYPE",ANLK);//资产分类
            lineMap.put("AST_TYPE_TXT",ZFLTXT50);//资产分类描述
            lineMap.put("EXTEND_FIELD7",TXT50);//资产主号文本
            lineMap.put("SERNR","");//序列号-传空
            lineMap.put("MENGE",MENGE);//数量
            lineMap.put("MENGE_UNIT",MEINS);//单位
            lineMap.put("EXTEND_FIELD1",KOSTL);//原成本中心编号
            lineMap.put("EXTEND_FIELD2",KTEXT);//原成本中心描述
            lineMap.put("RESPONSI_COST_CENTER",RESPONSI_COST_CENTER);//调入成本中心编号
            lineMap.put("RESPONSI_COST_CENTER_TXT",COST_CENTER_NAME);//调入成本中心描述
            lineMap.put("EXTEND_FIELD6",EXTEND_FIELD6);//备注
            lineMap.put("IS_DEACTIVATED",IS_DEACTIVATED);//资产停用
            lineMap.put("INTERNAL_ORDER","");//内部订单 --传空
            lineMap.put("WERKS",SITEID);//工厂地点
            lineMap.put("STORT","");//资产地点--传空
            lineMap.put("ORD41",ORD41);//新增修改原因
            lineMap.put("URWRT",KANSWCNY);//资产原值CNY
            lineMap.put("ZJAMTCNY",ZIAMTCNY);//资产已折旧金额CNY
            lineMap.put("LBARW",KNAFACNY);//资产净值CNY
            lineMap.put("ZJMONS","");//折旧月数
            lineMap.put("HADSMONS","");//已计提折旧月数
            lineMap.put("RESMONS",RESMONS);//剩余折旧月数
            lineMap.put("AFABG",AFABG);//折旧计算开始日期
            lineMap.put("EXTEND_FIELD10",YXDATE);//有效期起始日期
            dataList.add(lineMap);
        }
        //经ESB格式化
        JSONObject alldata = CreateFormatFCDataAsset(zmap,Type,dataList);
        return alldata;
    }
    //经ESB转固格式化
    public JSONObject CreateFormatFCDataAsset(Map<String, Object> zMap,String Type,List<Map<String, Object>> dataList) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject Z_DATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject HEAD_DATA = new JSONObject();
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        ESB_ATTRS.put("Target_ID", "GFSS"); //目标系统--和财务共享对接
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        JSONArray IT_REQUEST = new JSONArray();
        //主数据
        Z_DATA.put("SOURCE_SYSTEM",zMap.get("SOURCE_SYSTEM"));//来源系统
        Z_DATA.put("SOURCE_DOC_NUMBER", zMap.get("SOURCE_DOC_NUMBER"));//来源系统单号
        Z_DATA.put("CREATE_BY", zMap.get("CREATE_BY"));//创建人
        Z_DATA.put("APPLY_EMPLOYEE", zMap.get("APPLY_EMPLOYEE"));//报账人
        Z_DATA.put("DOC_TYPE", zMap.get("DOC_TYPE"));//单据类型
        Z_DATA.put("DOC_COMPANY", zMap.get("DOC_COMPANY"));//公司代码
        Z_DATA.put("DOC_COST_CENTER",zMap.get("DOC_COST_CENTER"));//成本中心  不传，默认空
        Z_DATA.put("BUSINESS_TYPE_1",zMap.get("BUSINESS_TYPE_1"));//业务大类
        Z_DATA.put("BUSINESS_TYPE_2",zMap.get("BUSINESS_TYPE_2"));//业务小类（业务事项）
        Z_DATA.put("ATTACH_NUMBER",zMap.get("ATTACH_NUMBER"));//附件张数
        Z_DATA.put("DESCRIPTION",zMap.get("DESCRIPTION"));//申请原因
        //子表数据
        for (Map<String, Object> map : dataList) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("ITEM_NO",String.valueOf(map.get("ITEM_NO")));//行号
            jsonObject.put("EQU_NO",String.valueOf(map.get("EQU_NO")));//设备编号
            jsonObject.put("AST_CODE_SUB",String.valueOf(map.get("AST_CODE_SUB")));//固定资产子编号
            jsonObject.put("AST_CODE",String.valueOf(map.get("AST_CODE")));//固定资产主编号
            jsonObject.put("AST_TYPE",String.valueOf(map.get("AST_TYPE")));//资产分类编号
            jsonObject.put("AST_TYPE_TXT",String.valueOf(map.get("AST_TYPE_TXT")));//资产分类描述
            jsonObject.put("ASSET_NO_TXT",String.valueOf(map.get("ASSET_NO_TXT")));//设备描述
            jsonObject.put("EXTEND_FIELD7",String.valueOf(map.get("EXTEND_FIELD7")));//资产主号文本
            jsonObject.put("SERNR",String.valueOf(map.get("SERNR")));//序列号-传空
            jsonObject.put("MENGE",String.valueOf(map.get("MENGE")));//数量
            jsonObject.put("MENGE_UNIT",String.valueOf(map.get("MENGE_UNIT")));//单位
            jsonObject.put("EXTEND_FIELD1",String.valueOf(map.get("EXTEND_FIELD1")));//原来成本中心编号
            jsonObject.put("EXTEND_FIELD2",String.valueOf(map.get("EXTEND_FIELD2")));//原来成本中心描述
            jsonObject.put("RESPONSI_COST_CENTER",String.valueOf(map.get("RESPONSI_COST_CENTER")));//调入成本中心编号
            jsonObject.put("RESPONSI_COST_CENTER_TXT",String.valueOf(map.get("RESPONSI_COST_CENTER_TXT")));//调入成本中心描述
            jsonObject.put("EXTEND_FIELD6",String.valueOf(map.get("EXTEND_FIELD6")));//备注
            jsonObject.put("IS_DEACTIVATED",String.valueOf(map.get("IS_DEACTIVATED")));//资产停用
            jsonObject.put("INTERNAL_ORDER",String.valueOf(map.get("INTERNAL_ORDER")));//内部订单号
            jsonObject.put("WERKS",String.valueOf(map.get("WERKS")));//工厂地点
            jsonObject.put("STORT",String.valueOf(map.get("STORT")));//资产地点--传空
            jsonObject.put("ORD",String.valueOf(map.get("ORD41")));//新增修改原因
            jsonObject.put("URWRT",String.valueOf(map.get("URWRT")));//资产原值CNY
            jsonObject.put("ZJAMTCNY",String.valueOf(map.get("ZJAMTCNY")));//资产已折旧金额CNY
            jsonObject.put("LBARW",String.valueOf(map.get("LBARW")));//资产净值CNY
            jsonObject.put("ZJMONS",String.valueOf(map.get("ZJMONS")));//折旧月数
            jsonObject.put("HADSMONS",String.valueOf(map.get("HADSMONS")));//已计提折旧月数
            jsonObject.put("RESMONS",String.valueOf(map.get("RESMONS")));//剩余折旧月数
            jsonObject.put("AFABG",String.valueOf(map.get("AFABG")));//折旧计算开始日期
            jsonObject.put("EXTEND_FIELD10",String.valueOf(map.get("EXTEND_FIELD10")));//有效期起始日期
            IT_REQUEST.add(jsonObject);
        }
        HEAD_DATA.put("head", Z_DATA);
        HEAD_DATA.put("lineList", IT_REQUEST);
        REQUEST_DATA.put("SendData", HEAD_DATA);
        REQUEST_DATA.put("Operation", "Z_GFSS_PUSH_ASSET_DOC");//资产修改
        REQUEST_DATA.put("Type", "Z_GFSS_PUSH_ASSET_DOC");//资产修改
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }
}
