package psdi.app.iface.oa;

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

import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 1、eam推送资产转固到OA审批---对应OA流程是0352-资产主数据新增及修改申请单(EAM)， 和0339无关，0339与EAM无关
 * 2、eam将sap转固成功后返回给EAM的固定资产编号，再由EAM回传给OA
 */
public class EAM2OaAtfacHandler {
    /**
     * eam推送资产转固到OA进行审批
     */
    public JSONObject Z_EAM_ATFAC_REQUISITION(MboRemote mbo) throws IOException, MXException {
        JSONObject doCreReqJso=null;
        try {
            String CREATEBY=mbo.getString("CREATEBY");//创建人
            String requestedby=mbo.getString("DUTY");//申请人（负责人）
            String bdcwspr=mbo.getString("BDCW");//本地财务审批人   OA对应的字段是：bdcwspr
            String bt=mbo.getString("TASKNAME");//标题
            String orgid=mbo.getString("ORGID");//组织
            String siteid=mbo.getString("SITEID");//地点
            String appname = mbo.getThisMboSet().getApp();//获取应用名
            SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
            Date CAPDATE = mbo.getDate("CAPDATE");//资本化日期
            String ISPRO = mbo.getString("ISPRO");//是否进行了立项  0:是   1:否
            //SD和TF区别：1）资本化日期-----如果是特福系统，这个字段没有值；如果是森大系统，这个字段是必填项有值
            String zbhrq = "";
            if(CAPDATE!=null){
                zbhrq = sf.format(CAPDATE);
            }
            String plandate=sf.format(mbo.getDate("PLSTARTDATE"));//日期
            //地点表
            String COMPANY = "" ;//公司
            MboSetRemote siteSet = MXServer.getMXServer().getMboSet("SITE",MXServer.getMXServer().getSystemUserInfo());//地点表
            siteSet.setWhere("ORGID='"+orgid+"' and SITEID='"+siteid+"'");
            siteSet.reset();
            if(siteSet!=null && !siteSet.isEmpty()){
                MboRemote siteMbo = siteSet.getMbo(0);
                COMPANY = siteMbo.getString("COMPANY");//公司代码
            }
            //获取本地财务审批人-人员信息
            Map heads1 = new HashMap();
            String token1=EamToOaWorkflowUtils.getToken(orgid);
            String userid1=EamToOaWorkflowUtils.getUserid("1");//首次调用获取人员接口,id传1
            String appid1=UrlConstants.appid;
            heads1.put("appid", appid1);
            heads1.put("token", token1);
            heads1.put("userid",userid1);
            heads1.put("workcode",bdcwspr);
            JSONObject alldata1 = formatDataPerson(heads1,orgid);
            JSONObject result1 = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata1);
            JSONObject RESPONSE1 = (JSONObject) result1.get("RESPONSE");
            String user_id_bdcwspr = "";//本地财务审批人
            if(null!=RESPONSE1) {
                JSONObject RETURN_DATA = (JSONObject) RESPONSE1.get("RETURN_DATA");
                if (null != RETURN_DATA) {
                    String code = RETURN_DATA.getString("msgcode");
                    if ("1".equalsIgnoreCase(code)) {
                        String data2 = RETURN_DATA.getString("data");
                        JSONObject jsonObject2 = JSONObject.parseObject(data2);
                        user_id_bdcwspr = jsonObject2.getString("id");
                        String departmentid_bdcwspr = jsonObject2.getString("departmentid");
                        String jobtitleid_bdcwspr = jsonObject2.getString("jobtitleid");
                        String company_bdcwspr = jsonObject2.getString("company");
                        String point_bdcwspr = jsonObject2.getString("point");
                        String line_bdcwspr = jsonObject2.getString("line");
                    }
                }
            }

            //获取责任人-人员信息
            Map heads = new HashMap();
            String token=EamToOaWorkflowUtils.getToken(orgid);
            String userid=EamToOaWorkflowUtils.getUserid("1");//首次调用获取人员接口,id传1
            String appid=UrlConstants.appid;
            heads.put("appid", appid);
            heads.put("token", token);
            heads.put("userid",userid);
            heads.put("workcode",requestedby);
            JSONObject alldata = formatDataPerson(heads,orgid);
            JSONObject result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
            JSONObject RESPONSE = (JSONObject) result.get("RESPONSE");
            //判断
            if(null!=RESPONSE){
                JSONObject RETURN_DATA = (JSONObject) RESPONSE.get("RETURN_DATA");
                if(null!=RETURN_DATA ){
                    String code=RETURN_DATA.getString("msgcode");
                    if("1".equalsIgnoreCase(code) ){
                        String data2=RETURN_DATA.getString("data");
                        JSONObject jsonObject2 = JSONObject.parseObject(data2);
                        String user_id=jsonObject2.getString("id");
                        String departmentid=jsonObject2.getString("departmentid");
                        String jobtitleid=jsonObject2.getString("jobtitleid");
                        String company=jsonObject2.getString("company");
                        String point=jsonObject2.getString("point");
                        String line=jsonObject2.getString("line");
                        //调用OA创建流程接口
                        Map<String, String> heads2 = new HashMap<String, String>();
                        Map<String, String> mainMap=new HashMap<String, String>();
                        String userid2=EamToOaWorkflowUtils.getUserid(user_id);//传入当前登录人在OA人员信息接口中的id
                        String str1= "";
                        if("udbudgettask".equalsIgnoreCase(appname)){
                            //森大
                            str1="["+
                                    "{\"fieldName\":\"workcode\",\"fieldValue\":\""+requestedby+"\"}," +
                                    "{\"fieldName\":\"workflowdate\",\"fieldValue\":\""+plandate+"\"}," +
                                    "{\"fieldName\":\"requestuserid\",\"fieldValue\":\""+user_id+"\"}," +
                                    "{\"fieldName\":\"dep\",\"fieldValue\":\""+departmentid+"\"}," +
                                    "{\"fieldName\":\"jobtitle\",\"fieldValue\":\""+jobtitleid+"\"}," +
                                    "{\"fieldName\":\"sub\",\"fieldValue\":\""+company+"\"}," +
                                    "{\"fieldName\":\"fendian\",\"fieldValue\":\""+point+"\"}," +
                                    "{\"fieldName\":\"fenxian\",\"fieldValue\":\""+line+"\"}," +
                                    "{\"fieldName\": \"eamrwbh\",\"fieldValue\": \""+mbo.getString("TASKNUM")+"\"}," +  //任务编号
                                    "{\"fieldName\": \"sqlx\",\"fieldValue\": \""+mbo.getString("APPLYTYPE")+"\"}," +  //申请类型
                                    "{\"fieldName\": \"sdsjcd\",\"fieldValue\": \""+mbo.getString("NEWOLD")+"\"}," +  //新旧程度
                                    "{\"fieldName\": \"sflx\",\"fieldValue\": \""+mbo.getString("ISPRO")+"\"}," +  //是否已经立项
                                    "{\"fieldName\": \"xmlcbh\",\"fieldValue\": \""+mbo.getString("UDBUDGET.PROJECTNUM")+"\"}," + //项目编号
                                    "{\"fieldName\": \"xmid\",\"fieldValue\": \"\"}," +  //传空
                                    "{\"fieldName\": \"sdsqyy\",\"fieldValue\": \""+mbo.getString("REASON")+"\"}," + //申请原因说明
                                    "{\"fieldName\": \"xzxgyy\",\"fieldValue\": \""+mbo.getString("ORD41")+"\"}," + //新增/修改原因
                                    "{\"fieldName\": \"sdzbhrq\",\"fieldValue\": \""+zbhrq+"\"}]";  //资本化日期
                        }else if("udbudgettasktf".equalsIgnoreCase(appname)){
                            //特福
                            str1="["+
                                    "{\"fieldName\":\"workcode\",\"fieldValue\":\""+requestedby+"\"}," +
                                    "{\"fieldName\":\"workflowdate\",\"fieldValue\":\""+plandate+"\"}," +
                                    "{\"fieldName\":\"requestuserid\",\"fieldValue\":\""+user_id+"\"}," +
                                    "{\"fieldName\":\"bdcwspr\",\"fieldValue\":\""+user_id_bdcwspr+"\"}," +
                                    "{\"fieldName\":\"dep\",\"fieldValue\":\""+departmentid+"\"}," +
                                    "{\"fieldName\":\"jobtitle\",\"fieldValue\":\""+jobtitleid+"\"}," +
                                    "{\"fieldName\":\"sub\",\"fieldValue\":\""+company+"\"}," +
                                    "{\"fieldName\":\"fendian\",\"fieldValue\":\""+point+"\"}," +
                                    "{\"fieldName\":\"fenxian\",\"fieldValue\":\""+line+"\"}," +
                                    "{\"fieldName\": \"eamrwbh\",\"fieldValue\": \""+mbo.getString("TASKNUM")+"\"}," +  //任务编号
                                    "{\"fieldName\": \"sqlx\",\"fieldValue\": \""+mbo.getString("APPLYTYPE")+"\"}," +  //申请类型
                                    "{\"fieldName\": \"sdsjcd\",\"fieldValue\": \""+mbo.getString("NEWOLD")+"\"}," +  //新旧程度
                                    "{\"fieldName\": \"sflx\",\"fieldValue\": \""+mbo.getString("ISPRO")+"\"}," +  //是否已经立项
                                    "{\"fieldName\": \"xmlcbh\",\"fieldValue\": \""+mbo.getString("UDBUDGET.PROJECTNUM")+"\"}," + //项目编号
                                    "{\"fieldName\": \"xmid\",\"fieldValue\": \"\"}," +  //传空
                                    "{\"fieldName\": \"sdsqyy\",\"fieldValue\": \""+mbo.getString("REASON")+"\"}," + //申请原因说明
                                    "{\"fieldName\": \"xzxgyy\",\"fieldValue\": \""+mbo.getString("ORD41")+"\"}," + //新增/修改原因
                                    "{\"fieldName\": \"sdzbhrq\",\"fieldValue\": \""+zbhrq+"\"}]";  //资本化日期
                        }
                        if("FMCG".equalsIgnoreCase(orgid)){
                            //IPO
                            mainMap.put("workflowId",UrlConstants.zczglcid_ipo);
                        }else{
                            //非IPO
                            mainMap.put("workflowId",UrlConstants.zczglcid);
                        }
                        JSONArray jsonArray = JSONArray.parseArray(str1);
                        mainMap.put("mainData", jsonArray.toString());
                        //------------------新增的一段
                        String REQUESTID = mbo.getString("REQUESTID");
                        if(REQUESTID!=null && !REQUESTID.isEmpty()){
                            JSONObject otherParams = new JSONObject();
                            mainMap.put("requestId",REQUESTID);
                            otherParams.put("src","submit");//提交
                            mainMap.put("otherParams",otherParams.toString());
                        }
                        System.out.println("-------------------REQUESTID="+REQUESTID);
                        //------------------
                        MboSetRemote lineSet=mbo.getMboSet("ASSET");//ASSET是关系名-----------------获取子表信息
                        if(null!=lineSet && !lineSet.isEmpty()){
                            Map<String, String> detailMap=new HashMap<String, String>();
                            JSONArray workflowRequestTableRecords = new JSONArray();
                            for(int i=0;i<lineSet.count();i++){
                                MboSetRemote udclsszjSet = MXServer.getMXServer().getMboSet("UDCLSSZJ", MXServer.getMXServer().getSystemUserInfo());//资产分类说明
                                MboRemote lineMbo=lineSet.getMbo(i);
                                String dw="";
                                if(lineMbo.getString("MEINS.DESCRIPTION").equalsIgnoreCase("PCS")){
                                    dw="0";
                                }else if(lineMbo.getString("MEINS.DESCRIPTION").equalsIgnoreCase("PKG")){
                                    dw="1";
                                }else if(lineMbo.getString("MEINS.DESCRIPTION").equalsIgnoreCase("SET")){
                                    dw="2";
                                }
                                String ASSETNUM = lineMbo.getString("ASSETNUM");//设备编号
                                String ANLKL = lineMbo.getString("ANLKL");//资产分类
                                String assetName = lineMbo.getString("DESCRIPTION");
                                String SDUNITTYPE = lineMbo.getString("SDUNITTYPE");//规格型号
                                String SDZZS = lineMbo.getString("SDZZS");//制造商
                                String fullName = assetName+" "+SDZZS+"_"+SDUNITTYPE+"_"+ASSETNUM;//财务要求传这种格式
                                String lineStr1 = "";
                                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);//折旧年限
                                if("udbudgettasktf".equalsIgnoreCase(appname)){
                                    //TF的任务管理
                                    if("0".equalsIgnoreCase(ISPRO)){
                                        //0:是，代表已立项,需要给OA传结算百分比，不传金额
                                        lineStr1="[{\"fieldName\":\"zcbm\",\"fieldValue\":\""+lineMbo.getString("ASSETNUM")+"\"}," +  //设备编号
                                                "{\"fieldName\":\"zcms\",\"fieldValue\":\""+fullName+"\"}," +  // 设备名称--拼接起来
                                                "{\"fieldName\":\"zcfl\",\"fieldValue\":\""+ANLKL+"\"}," +   //资产分类
                                                "{\"fieldName\":\"zcflms\",\"fieldValue\":\""+lineMbo.getString("ANLKL.DESCRIPTION")+"\"}," +  //资产分类描述
                                                "{\"fieldName\":\"gdzcbh\",\"fieldValue\":\""+lineMbo.getString("SDGDZCBM")+"\"}," +  //固定资产主编号---新增字段
                                                "{\"fieldName\":\"subnumber\",\"fieldValue\":\""+lineMbo.getString("SUBNUMBER")+"\"}," +  //固定资产子编号---新增字段
                                                "{\"fieldName\":\"prozs\",\"fieldValue\":\""+lineMbo.getString("PROZS")+"\"}," +  //资产结算百分比
                                                //"{\"fieldName\":\"purchaseprice\",\"fieldValue\":\""+lineMbo.getString("PURCHASEPRICE")+"\"}," + //资产金额---新增字段
                                                "{\"fieldName\":\"zjm\",\"fieldValue\":\""+AFASL+"\"}," +  //折旧码 Z001
                                                "{\"fieldName\":\"gsdm\",\"fieldValue\":\""+COMPANY+"\"}," +  //公司代码
                                                "{\"fieldName\":\"sl\",\"fieldValue\":\"1\"}," + //数量
                                                "{\"fieldName\":\"dw\",\"fieldValue\":\""+dw+"\"}," +  //单位
                                                "{\"fieldName\": \"cbzx\",\"fieldValue\": \""+lineMbo.getString("COSTCENTER")+"\"}," +  //成本中心编号
                                                "{\"fieldName\": \"cbzxmc\",\"fieldValue\": \""+lineMbo.getString("KOSTL.COST_CENTER_NAME")+"\"}," +  //成本中心名称
                                                "{\"fieldName\": \"gysbm\",\"fieldValue\": \"\"}," +
                                                "{\"fieldName\": \"zjnx\",\"fieldValue\": \""+NDJAR+"\"}," +  //折旧年限
                                                "{\"fieldName\": \"qjyf\",\"fieldValue\": \""+lineMbo.getString("NDPER")+"\"}," +  //期间（月份）
                                                "{\"fieldName\": \"zjksrq\",\"fieldValue\": \""+sf.format(lineMbo.getDate("AFABG"))+"\"}]";//折旧开始日期
                                    }else{
                                        //1:否，代表未立项,需要给OA传金额，不传结算百分比
                                        lineStr1="[{\"fieldName\":\"zcbm\",\"fieldValue\":\""+lineMbo.getString("ASSETNUM")+"\"}," +  //设备编号
                                                "{\"fieldName\":\"zcms\",\"fieldValue\":\""+fullName+"\"}," +  // 设备名称--拼接起来
                                                "{\"fieldName\":\"zcfl\",\"fieldValue\":\""+ANLKL+"\"}," +   //资产分类
                                                "{\"fieldName\":\"zcflms\",\"fieldValue\":\""+lineMbo.getString("ANLKL.DESCRIPTION")+"\"}," +  //资产分类描述
                                                "{\"fieldName\":\"gdzcbh\",\"fieldValue\":\""+lineMbo.getString("SDGDZCBM")+"\"}," +  //固定资产主编号---新增字段
                                                "{\"fieldName\":\"subnumber\",\"fieldValue\":\""+lineMbo.getString("SUBNUMBER")+"\"}," +  //固定资产子编号---新增字段
                                                //"{\"fieldName\":\"prozs\",\"fieldValue\":\""+lineMbo.getString("PROZS")+"\"}," +  //资产结算百分比
                                                "{\"fieldName\":\"purchaseprice\",\"fieldValue\":\""+lineMbo.getString("PURCHASEPRICE")+"\"}," + //资产金额---新增字段
                                                "{\"fieldName\":\"zjm\",\"fieldValue\":\""+AFASL+"\"}," +  //折旧码 Z001
                                                "{\"fieldName\":\"gsdm\",\"fieldValue\":\""+COMPANY+"\"}," +  //公司代码
                                                "{\"fieldName\":\"sl\",\"fieldValue\":\"1\"}," + //数量
                                                "{\"fieldName\":\"dw\",\"fieldValue\":\""+dw+"\"}," +  //单位
                                                "{\"fieldName\": \"cbzx\",\"fieldValue\": \""+lineMbo.getString("COSTCENTER")+"\"}," +  //成本中心编号
                                                "{\"fieldName\": \"cbzxmc\",\"fieldValue\": \""+lineMbo.getString("KOSTL.COST_CENTER_NAME")+"\"}," +  //成本中心名称
                                                "{\"fieldName\": \"gysbm\",\"fieldValue\": \"\"}," +
                                                "{\"fieldName\": \"zjnx\",\"fieldValue\": \""+NDJAR+"\"}," +  //折旧年限
                                                "{\"fieldName\": \"qjyf\",\"fieldValue\": \""+lineMbo.getString("NDPER")+"\"}," +  //期间（月份）
                                                "{\"fieldName\": \"zjksrq\",\"fieldValue\": \""+sf.format(lineMbo.getDate("AFABG"))+"\"}]";//折旧开始日期
                                    }
                                }else{
                                    //SD的任务管理,森大没有启用子资产编号
                                    if("0".equalsIgnoreCase(ISPRO)){
                                        //0:是，代表已立项,需要给OA传结算百分比，不传金额
                                        lineStr1="[{\"fieldName\":\"zcbm\",\"fieldValue\":\""+lineMbo.getString("ASSETNUM")+"\"}," +  //设备编号
                                                "{\"fieldName\":\"zcms\",\"fieldValue\":\""+fullName+"\"}," +  // 设备名称--拼接起来
                                                "{\"fieldName\":\"zcfl\",\"fieldValue\":\""+ANLKL+"\"}," +   //资产分类
                                                "{\"fieldName\":\"zcflms\",\"fieldValue\":\""+lineMbo.getString("ANLKL.DESCRIPTION")+"\"}," +  //资产分类描述
                                                "{\"fieldName\":\"gdzcbh\",\"fieldValue\":\""+lineMbo.getString("SDGDZCBM")+"\"}," +  //固定资产主编号---新增字段
                                               // "{\"fieldName\":\"subnumber\",\"fieldValue\":\""+lineMbo.getString("SUBNUMBER")+"\"}," +  //固定资产子编号---新增字段
                                               // "{\"fieldName\":\"purchaseprice\",\"fieldValue\":\""+lineMbo.getString("PURCHASEPRICE")+"\"}," + //资产金额---新增字段
                                                "{\"fieldName\":\"prozs\",\"fieldValue\":\""+lineMbo.getString("PROZS")+"\"}," +  //资产结算百分比
                                                "{\"fieldName\":\"zjm\",\"fieldValue\":\""+AFASL+"\"}," +  //折旧码
                                                "{\"fieldName\":\"gsdm\",\"fieldValue\":\""+COMPANY+"\"}," +  //公司代码
                                                "{\"fieldName\":\"sl\",\"fieldValue\":\"1\"}," + //数量
                                                "{\"fieldName\":\"dw\",\"fieldValue\":\""+dw+"\"}," +  //单位
                                                "{\"fieldName\": \"cbzx\",\"fieldValue\": \""+lineMbo.getString("COSTCENTER")+"\"}," +  //成本中心编号
                                                "{\"fieldName\": \"cbzxmc\",\"fieldValue\": \""+lineMbo.getString("KOSTL.COST_CENTER_NAME")+"\"}," +  //成本中心名称
                                                "{\"fieldName\": \"gysbm\",\"fieldValue\": \"\"}," +
                                                "{\"fieldName\": \"zjnx\",\"fieldValue\": \""+NDJAR+"\"}," +  //折旧年限
                                                "{\"fieldName\": \"qjyf\",\"fieldValue\": \""+lineMbo.getString("NDPER")+"\"}," +  //期间（月份）
                                                "{\"fieldName\": \"zjksrq\",\"fieldValue\": \""+sf.format(lineMbo.getDate("AFABG"))+"\"}]";//折旧开始日期
                                    }else{
                                        //1:否，代表未立项,需要给OA传金额，不传结算百分比
                                        lineStr1="[{\"fieldName\":\"zcbm\",\"fieldValue\":\""+lineMbo.getString("ASSETNUM")+"\"}," +  //设备编号
                                                "{\"fieldName\":\"zcms\",\"fieldValue\":\""+fullName+"\"}," +  // 设备名称--拼接起来
                                                "{\"fieldName\":\"zcfl\",\"fieldValue\":\""+ANLKL+"\"}," +   //资产分类
                                                "{\"fieldName\":\"zcflms\",\"fieldValue\":\""+lineMbo.getString("ANLKL.DESCRIPTION")+"\"}," +  //资产分类描述
                                                "{\"fieldName\":\"gdzcbh\",\"fieldValue\":\""+lineMbo.getString("SDGDZCBM")+"\"}," +  //固定资产主编号---新增字段
                                               // "{\"fieldName\":\"subnumber\",\"fieldValue\":\""+lineMbo.getString("SUBNUMBER")+"\"}," +  //固定资产子编号---新增字段
                                                "{\"fieldName\":\"purchaseprice\",\"fieldValue\":\""+lineMbo.getString("PURCHASEPRICE")+"\"}," + //资产金额---新增字段
                                                //"{\"fieldName\":\"prozs\",\"fieldValue\":\""+lineMbo.getString("PROZS")+"\"}," +  //资产结算百分比
                                                "{\"fieldName\":\"zjm\",\"fieldValue\":\""+AFASL+"\"}," +  //折旧码
                                                "{\"fieldName\":\"gsdm\",\"fieldValue\":\""+COMPANY+"\"}," +  //公司代码
                                                "{\"fieldName\":\"sl\",\"fieldValue\":\"1\"}," + //数量
                                                "{\"fieldName\":\"dw\",\"fieldValue\":\""+dw+"\"}," +  //单位
                                                "{\"fieldName\": \"cbzx\",\"fieldValue\": \""+lineMbo.getString("COSTCENTER")+"\"}," +  //成本中心编号
                                                "{\"fieldName\": \"cbzxmc\",\"fieldValue\": \""+lineMbo.getString("KOSTL.COST_CENTER_NAME")+"\"}," +  //成本中心名称
                                                "{\"fieldName\": \"gysbm\",\"fieldValue\": \"\"}," +
                                                "{\"fieldName\": \"zjnx\",\"fieldValue\": \""+NDJAR+"\"}," +  //折旧年限
                                                "{\"fieldName\": \"qjyf\",\"fieldValue\": \""+lineMbo.getString("NDPER")+"\"}," +  //期间（月份）
                                                "{\"fieldName\": \"zjksrq\",\"fieldValue\": \""+sf.format(lineMbo.getDate("AFABG"))+"\"}]";//折旧开始日期
                                    }
                                }
                                JSONObject workflowRequestTableFields1 = new JSONObject();
                                workflowRequestTableFields1.put("recordOrder", 0);
                                workflowRequestTableFields1.put("workflowRequestTableFields", JSONArray.parseArray(lineStr1));
                                workflowRequestTableRecords.add(workflowRequestTableFields1);
                            }
                            JSONObject jsonObject = new JSONObject();
                            if("FMCG".equalsIgnoreCase(orgid)){
                                //IPO
                                jsonObject.put("tableDBName",UrlConstants.zczglctable);//转固推送OA表名
                            }else{
                                //非IPO
                                jsonObject.put("tableDBName",UrlConstants.zczglctable);
                            }
                            jsonObject.put("workflowRequestTableRecords", workflowRequestTableRecords);
                            JSONObject detailData = new JSONObject();
                            JSONArray lineJson= new JSONArray();
                            lineJson.add(jsonObject);
                            detailData.put("detailData",lineJson);
                            mainMap.put("detailData",detailData.get("detailData").toString());
                        }
//                        String reqstr="0339 资产主数据新增及修改申请单-"+mbo.getString("PERSON.DISPLAYNAME")+"("+requestedby+")"+"-"+plandate;
                        String reqstr="0352 资产主数据新增及修改申请单-"+mbo.getString("PERSON.DISPLAYNAME")+"("+requestedby+")";
                        mainMap.put("requestName",reqstr);
                        heads2.put("appid", appid);
                        heads2.put("token", token);
                        heads2.put("userid",userid2);
                        JSONObject alldata2 = new JSONObject();
                        if(REQUESTID!=null && !REQUESTID.isEmpty()){
                            alldata2 = submitFormatDataEsb(heads2,mainMap,orgid);
                        }else {
                            alldata2 = formatDataEsb(heads2,mainMap,orgid);
                        }
                        //返回值
                        JSONObject result2 = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata2);
                        if(alldata2.toString().getBytes(StandardCharsets.UTF_8).length<=4000){
                            mbo.setValue("OAREQUEST", UrlConstants.restEsbUrl+alldata2.toString(), 2L);
                        }else{
                            mbo.setValue("OAREQUEST", (UrlConstants.restEsbUrl+alldata2.toString()).substring(0,1333), 2L);
                        }
                        return result2;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            e.getCause();
            e.getMessage();
            return null;
        }
        return doCreReqJso;
    }
    /**
     * 创建接口进行格式化
     */
    public JSONObject formatDataEsb(Map<String, String> headMap,Map<String, String> mainMap,String orgid) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();//ESB报文
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject Main_DATA = new JSONObject();//主表数据
        JSONArray LINE_DATA = new JSONArray();//子表数据
        JSONObject HEAD = new JSONObject();//包含主、子表数据
        //esb接口平台报文
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        if("FMCG".equalsIgnoreCase(orgid)){
            ESB_ATTRS.put("Target_ID", "OA-IPO"); //目标系统
        }else{
            ESB_ATTRS.put("Target_ID", "OA"); //目标系统
        }
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        LINE_DATA.add(Main_DATA);
        HEAD.put("appid",headMap.get("appid"));
        HEAD.put("token",headMap.get("token"));
        HEAD.put("userid",headMap.get("userid"));
        REQUEST_DATA.put("SendHead",HEAD);
        REQUEST_DATA.put("SendData",mainMap);
        REQUEST_DATA.put("SendURL",new Object());
        REQUEST_DATA.put("Operation", "Z_OA_FLOW_CREATE_REQUEST");
        REQUEST_DATA.put("Type", "Z_OA_FLOW_CREATE_REQUEST");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    /**
     * 提交接口进行格式化-------------------OA驳回后，重复提交到OA，走这个函数
     */
    public JSONObject submitFormatDataEsb(Map<String, String> headMap,Map<String, String> mainMap,String orgid) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();//ESB报文
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject Main_DATA = new JSONObject();//主表数据
        JSONArray LINE_DATA = new JSONArray();//子表数据
        JSONObject HEAD = new JSONObject();//包含主、子表数据
        //esb接口平台报文
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        if("FMCG".equalsIgnoreCase(orgid)){
            ESB_ATTRS.put("Target_ID", "OA-IPO"); //目标系统
        }else{
            ESB_ATTRS.put("Target_ID", "OA"); //目标系统
        }
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        LINE_DATA.add(Main_DATA);
        HEAD.put("appid",headMap.get("appid"));
        HEAD.put("token",headMap.get("token"));
        HEAD.put("userid",headMap.get("userid"));
        REQUEST_DATA.put("SendHead",HEAD);
        REQUEST_DATA.put("SendData",mainMap);
        REQUEST_DATA.put("SendURL",new Object());
        REQUEST_DATA.put("Operation", "Z_OA_FLOW_SUBMIT_REQUEST");//提交流程
        REQUEST_DATA.put("Type", "Z_OA_FLOW_SUBMIT_REQUEST");//提交流程
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    /**
     * 发送REST请求到ESB，先进行数据格式化 人员信息
     */
    public JSONObject formatDataPerson(Map<String, Object> headMap,String orgid) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();//ESB报文
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject Main_DATA = new JSONObject();//主表数据
        JSONArray LINE_DATA = new JSONArray();//子表数据
        JSONObject HEAD = new JSONObject();//包含主、子表数据
        JSONObject workcode = new JSONObject();//包含主、子表数据
        //esb接口平台报文
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        if("FMCG".equalsIgnoreCase(orgid)){
            ESB_ATTRS.put("Target_ID", "OA-IPO"); //目标系统
        }else{
            ESB_ATTRS.put("Target_ID", "OA"); //目标系统
        }
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        LINE_DATA.add(Main_DATA);
        HEAD.put("appid",headMap.get("appid"));
        HEAD.put("token",headMap.get("token"));
        HEAD.put("userid",headMap.get("userid"));
        workcode.put("workcode", headMap.get("workcode"));
        REQUEST_DATA.put("SendHead",HEAD);
        REQUEST_DATA.put("SendData",new Object());
        REQUEST_DATA.put("SendURL",workcode);
        REQUEST_DATA.put("Operation", "Z_OA_GET_USER_INFO_BY_WORKCODE");
        REQUEST_DATA.put("Type", "Z_OA_GET_USER_INFO_BY_WORKCODE");
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

    /**
     * 2、EAM将接收到的sap固定资产编号再回传给OA
     *    OA端注册的函数为：Z_OA_UPDATE_0352
     */
    public JSONObject Z_EAM_RETURN_ASSETNO(MboRemote mbo) {
        Map zmap = new HashMap();
        JSONObject result = null;//返回值
        try {
            String ORGID = mbo.getString("ORGID");//组织
            String SITEID = mbo.getString("SITEID");//地点
            //头部head
            Map headMap = new HashMap();
            String token=EamToOaWorkflowUtils.getToken(ORGID);
            String userid=EamToOaWorkflowUtils.getUserid("1");//首次调用获取人员接口,id传1
            String appid=UrlConstants.appid;
            headMap.put("appid", appid);
            headMap.put("token", token);
            headMap.put("userid",userid);
            headMap.put("ContentType","application/json");
            //任务管理主表  UDBUDGETTASK
            String TASKNUM = mbo.getString("TASKNUM");//任务编号
            String REQUESTID = mbo.getString("REQUESTID");//OA流程编号
            //主表数据----传OA主表
            zmap.put("tasknum",TASKNUM);//任务编号
            zmap.put("requestid", REQUESTID);//OA流程编号
            //子表数据----传OA明细
            List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
            MboSetRemote assetSet = mbo.getMboSet("ASSET");//设备台账（关联关系）
            if(assetSet!=null && !assetSet.isEmpty()){
                for(int i=0;i<assetSet.count();i++){
                    Map<String, Object> lineMap = new HashMap<String, Object>();
                    MboRemote lineMbo = assetSet.getMbo(i);
                    String ASSETNUM = lineMbo.getString("ASSETNUM");//设备编号
                    String SDGDZCBM = lineMbo.getString("SDGDZCBM");//固定资产主编号
                    String SUBNUMBER = lineMbo.getString("SUBNUMBER");//固定资产子编号
                    lineMap.put("zcbm",ASSETNUM);//设备编号
                    lineMap.put("gdzcbh",SDGDZCBM);//固定资产编号
                    lineMap.put("subnumber",SUBNUMBER);//固定资产编号
                    dataList.add(lineMap);
                }
            }
            //调用格式转换
            JSONObject alldata = returnAssetFormatDataEsb(headMap,zmap,dataList,ORGID);
            // 调用接口
            result = HttpUtilOa.post(UrlConstants.restEsbUrl, alldata);
        }catch (Exception e){
            e.printStackTrace();
            e.getCause();
            e.getMessage();
            return null;
        }finally {
            return result;
        }
    }

    /**
     * 回传OA固定资产编号，进行格式化
     */
    public JSONObject returnAssetFormatDataEsb(Map<String, String> headMap,Map<String, String> mainMap,List<Map<String, Object>> dataList,String orgid) {
        JSONObject ALLDATA = new JSONObject();
        JSONObject REQUEST = new JSONObject();
        JSONObject ESB_ATTRS = new JSONObject();//ESB报文
        JSONObject REQUEST_DATA = new JSONObject();
        JSONObject SendData = new JSONObject();//主表数据
        JSONArray detail = new JSONArray();//子表数据
        JSONObject SendHead = new JSONObject();//HEAD
        //ESB_ATTRS
        ESB_ATTRS.put("App_ID", "EAM"); //源系统
        if("FMCG".equalsIgnoreCase(orgid)){
            ESB_ATTRS.put("Target_ID", "OA-IPO"); //目标系统
        }else{
            ESB_ATTRS.put("Target_ID", "OA"); //目标系统
        }
        ESB_ATTRS.put("Application_ID", "00020000000002"); //固定值
        ESB_ATTRS.put("Transaction_ID", UUID.randomUUID().toString()); //交易id随机生成
        //SendHead
        SendHead.put("appid",headMap.get("appid"));
        SendHead.put("token",headMap.get("token"));
        SendHead.put("userid",headMap.get("userid"));
        SendHead.put("Content-Type",headMap.get("ContentType"));
        //SendData
        SendData.put("requestid",mainMap.get("requestid"));
        //detail
        for (Map<String, Object> map : dataList) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("zcbm",String.valueOf(map.get("zcbm")));//设备编号
            jsonObject.put("gdzcbh",String.valueOf(map.get("gdzcbh")));//固定资产主编号
            jsonObject.put("subnumber",String.valueOf(map.get("subnumber")));//固定资产子编号
            detail.add(jsonObject);
        }
        SendData.put("detail",detail);
        //REQUEST_DATA
        REQUEST_DATA.put("Operation", "Z_OA_UPDATE_0352");//返回给OA固定资产信息
        REQUEST_DATA.put("Type", "Z_OA_UPDATE_0352");//返回给OA固定资产信息
        REQUEST_DATA.put("SendHead",SendHead);
        REQUEST_DATA.put("SendData",SendData);
        //REQUEST
        REQUEST.put("ESB_ATTRS", ESB_ATTRS);
        REQUEST.put("REQUEST_DATA", REQUEST_DATA);
        //ALL
        ALLDATA.put("REQUEST", REQUEST);
        return ALLDATA;
    }

}
