
using FactorySystemBll;
using FactorySystemCommon;
using FactorySystemModel.ResponseModel;
using System;
using System.Collections.Generic;
using System.Web.Http;
using Newtonsoft.Json;
using FactorySystemApi.Sap_ProductVersion;
using FactorySystemApi.Sap_Bom;
using FactorySystemApi.Sap_ViewMaterial;
using System.Linq;

namespace FactorySystemApi.Controllers
{
    /// <summary>
    /// SAP数据上传接口
    /// </summary>
    [UserLoginFilter]
    public class SapUploadController : ApiController
    {
        /// <summary>
        /// 通用BOM上载
        /// </summary>
        [HttpPost]
        public ApiResult UploadBom(List<object> inParam)
        {
            ApiResult apiResult = new ApiResult();
            apiResult.Data = -1;

            List<Dictionary<string, object>> bomList = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(JsonConvert.SerializeObject(inParam));
            int bomCount = bomList.Count;

            if (bomCount > 0)
            {
                dt_pp079_req req = new dt_pp079_req()
                {
                    SOURCESYS = "MCS",
                    TARGETSYS = "SAP",
                    UPDATETIME = DateTime.Now.ToString("yyyyMMddHHmmss"),
                    HEAD = new dt_pp079_reqHEAD[bomCount]
                };

                for (int i = 0; i < bomCount; i++)
                {

                    Dictionary<string, object> bom = bomList[i];

                    dt_pp079_reqHEAD head = new dt_pp079_reqHEAD()
                    {
                        WERKS = bom.ContainsKey("工厂") && bom["工厂"].ToString()!="(空)" ? bom["工厂"].ToString() : "", // 工厂
                        DATUV = bom.ContainsKey("开始生效日期") && bom["开始生效日期"].ToString() != "(空)" ? bom["开始生效日期"].ToString() : "", // 开始生效日期
                        STLAN = bom.ContainsKey("BOM用途") && bom["BOM用途"].ToString() != "(空)" ? bom["BOM用途"].ToString() : "", // BOM用途
                        STLST = bom.ContainsKey("BOM状态") && bom["BOM状态"].ToString() != "(空)" ? bom["BOM状态"].ToString() : "", // BOM状态
                        STKTX = bom.ContainsKey("可选文本") && bom["可选文本"].ToString() != "(空)" ? bom["可选文本"].ToString() : "", // 可选文本
                        STLAL = bom.ContainsKey("可选BOM") && bom["可选BOM"].ToString() != "(空)" ? bom["可选BOM"].ToString() : "", // 可选BOM
                        MATNR = bom.ContainsKey("父项编码") && bom["父项编码"].ToString() != "(空)" ? bom["父项编码"].ToString() : "", // 父项编码
                        MAKTX = bom.ContainsKey("父项描述") && bom["父项描述"].ToString() != "(空)" ? bom["父项描述"].ToString() : "", // 父项描述
                        BMENG = bom.ContainsKey("基本数量") && bom["基本数量"].ToString() != "(空)" ? bom["基本数量"].ToString() : "", // 基本数量
                        BMEIN = bom.ContainsKey("基本单位") && bom["基本单位"].ToString() != "(空)" ? bom["基本单位"].ToString() : "", // 基本单位
                        ITEM = new dt_pp079_reqHEADITEM[1] // BOM组件项目
                    };

                    req.HEAD[i] = head;
                    dt_pp079_reqHEADITEM item = new dt_pp079_reqHEADITEM()
                    {
                        POSNR = bom.ContainsKey("子项序号") && bom["子项序号"].ToString() != "(空)" ? bom["子项序号"].ToString() : "", // 子项序号
                        POSTP = bom.ContainsKey("项目类别") && bom["项目类别"].ToString() != "(空)" ? bom["项目类别"].ToString() : "", // 项目类别
                        IDNRK = bom.ContainsKey("子项编码") && bom["子项编码"].ToString() != "(空)" ? bom["子项编码"].ToString() : "", // 子项编码
                        MAKTX = bom.ContainsKey("子件描述") && bom["子件描述"].ToString() != "(空)" ? bom["子件描述"].ToString() : "", // 子件描述
                        MENGE = bom.ContainsKey("组件数量") && bom["组件数量"].ToString() != "(空)" ? bom["组件数量"].ToString() : "", // 组件数量
                        MEINS = bom.ContainsKey("计量单位") && bom["计量单位"].ToString() != "(空)" ? bom["计量单位"].ToString() : "", // 计量单位
                        AENNR = bom.ContainsKey("工程变更号") && bom["工程变更号"].ToString() != "(空)" ? bom["工程变更号"].ToString() : "", // 工程变更号
                        IDENT = bom.ContainsKey("项目ID") && bom["项目ID"].ToString() != "(空)" ? bom["项目ID"].ToString() : "", // 项目ID
                        BEIKZ = bom.ContainsKey("物料供应标识符") && bom["物料供应标识符"].ToString() != "(空)" ? bom["物料供应标识符"].ToString() : "", // 物料供应标识符
                        ERSKZ = bom.ContainsKey("备件标示") && bom["备件标示"].ToString() != "(空)" ? bom["备件标示"].ToString() : "", // 备件标示
                        LGORT = bom.ContainsKey("生产仓储地点") && bom["生产仓储地点"].ToString() != "(空)" ? bom["生产仓储地点"].ToString() : "", // 生产仓储地点
                        AUSCH = bom.ContainsKey("组件损耗率") && bom["组件损耗率"].ToString() != "(空)" ? bom["组件损耗率"].ToString() : "", // 组件损耗率
                        SANKA = bom.ContainsKey("成本核算标识相关") && bom["成本核算标识相关"].ToString() != "(空)" ? bom["成本核算标识相关"].ToString() : "", // 成本核算标识相关
                        SANFE = bom.ContainsKey("生产相关") && bom["生产相关"].ToString() != "(空)" ? bom["生产相关"].ToString() : "", // 生产相关
                        POTX1 = bom.ContainsKey("BOM项目文本") && bom["BOM项目文本"].ToString() != "(空)" ? bom["BOM项目文本"].ToString() : "", // BOM项目文本1
                        POTX2 = bom.ContainsKey("BOM项目文本2") && bom["BOM项目文本2"].ToString() != "(空)" ? bom["BOM项目文本2"].ToString() : "", // BOM项目文本2
                        ALPGR = bom.ContainsKey("替代项目组") && bom["替代项目组"].ToString() != "(空)" ? bom["替代项目组"].ToString() : "", // 替代项目组
                        ALPRF = bom.ContainsKey("优先级") && bom["优先级"].ToString() != "(空)" ? bom["优先级"].ToString() : "", // 优先级
                        ALPST = bom.ContainsKey("策略") && bom["策略"].ToString() != "(空)" ? bom["策略"].ToString() : "", // 策略
                        EWAHR = bom.ContainsKey("使用可能性") && bom["使用可能性"].ToString() != "(空)" ? bom["使用可能性"].ToString() : "", // 使用可能性
                        FMENG = bom.ContainsKey("固定损耗数量") && bom["固定损耗数量"].ToString() != "(空)" ? bom["固定损耗数量"].ToString() : "", // 固定损耗数量
                        KZKUP = "" // 联产品
                    };
                    req.HEAD[i].ITEM[0] = item;
                }

                return ExceptionHelper.TryReturnException(() =>
                {

                    si_pp079_mcs_senderClient senderClient = new si_pp079_mcs_senderClient();
                    senderClient.ClientCredentials.UserName.UserName = AppSettingsHelper.GetAppSettingVal("Sap_Upload_UserName");
                    senderClient.ClientCredentials.UserName.Password = AppSettingsHelper.GetAppSettingVal("Sap_Password");

                    dt_pp079_resHEAD[] resData = senderClient.si_pp079_mcs_sender(req);
                    apiResult.Data = 1;
                    for (int i = 0; i < resData.Count(); i++)
                    {
                        if ("E".Equals(resData[i].TYPE))
                        {
                            apiResult.Data = resData[i].INFOTEXT;
                            apiResult.Message = resData[i].INFOTEXT;
                            break;
                        }
                    }
                }, apiResult, Request, req);
            }
            else
            {
                return ExceptionHelper.TryReturnException(() =>
                {
                    apiResult.Data = -1;
                }, apiResult, Request, inParam);
            }
        }

        /// <summary>
        /// 通用生产版本上载
        /// </summary>
        [HttpPost]
        public ApiResult UploadProductVersion(List<object> inParam)
        {
            ApiResult apiResult = new ApiResult();
            apiResult.Data = -1;

            List<Dictionary<string, object>> productList = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(JsonConvert.SerializeObject(inParam));
            int productCount = productList.Count;

            if (productCount > 0)
            {
                dt_pp080_req req = new dt_pp080_req()
                {
                    SOURCESYS = "MCS",
                    TARGETSYS = "SAP",
                    UPDATETIME = DateTime.Now.ToString("yyyyMMddHHmmss"),
                    HEAD = new dt_pp080_reqHEAD[productCount]
                };

                for (int i = 0; i < productCount; i++)
                {

                    Dictionary<string, object> bom = productList[i];

                    dt_pp080_reqHEAD head = new dt_pp080_reqHEAD()
                    {
                        WERKS = bom.ContainsKey("工厂")&& bom["工厂"].ToString()!="(空)" ? bom["工厂"].ToString() : "", // 工厂
                        MATNR = bom.ContainsKey("物料") && bom["物料"].ToString() != "(空)" ? bom["物料"].ToString() : "", // 物料
                        VERID = bom.ContainsKey("版本") && bom["版本"].ToString() != "(空)" ? bom["版本"].ToString() : "", // 版本
                        TEXT1 = bom.ContainsKey("文本") && bom["文本"].ToString() != "(空)" ? bom["文本"].ToString() : "", // 文本
                        ADATU = bom.ContainsKey("有效从") && bom["有效从"].ToString() != "(空)" ? bom["有效从"].ToString() : "", // 有效从
                        BDATU = bom.ContainsKey("有效至") && bom["有效至"].ToString() != "(空)" ? bom["有效至"].ToString() : "", // 有效至
                        BSTMI = bom.ContainsKey("批量从") && bom["批量从"].ToString() != "(空)" ? bom["批量从"].ToString() : "", // 批量从
                        BSTMA = bom.ContainsKey("批量到") && bom["批量到"].ToString() != "(空)" ? bom["批量到"].ToString() : "", // 批量到
                        STLAL = bom.ContainsKey("可选的BOM") && bom["可选的BOM"].ToString() != "(空)" ? bom["可选的BOM"].ToString() : "", // 可选的BOM
                        STLAN = bom.ContainsKey("BOM用途") && bom["BOM用途"].ToString() != "(空)" ? bom["BOM用途"].ToString() : "", // BOM用途
                        PLNTY = bom.ContainsKey("任务清单类型") && bom["任务清单类型"].ToString() != "(空)" ? bom["任务清单类型"].ToString() : "", // 任务清单类型
                        PLNNR = bom.ContainsKey("组") && bom["组"].ToString() != "(空)" ? bom["组"].ToString() : "", // 组
                        ALNAL = bom.ContainsKey("组计数器") && bom["组计数器"].ToString() != "(空)" ? bom["组计数器"].ToString() : "", // 组计数器
                        ALORT = bom.ContainsKey("收货地点") && bom["收货地点"].ToString() != "(空)" ? bom["收货地点"].ToString() : "", // 收货地点
                        ELPRO = bom.ContainsKey("发货仓储地点") && bom["发货仓储地点"].ToString() != "(空)" ? bom["发货仓储地点"].ToString() : "" // 发货仓储地点
                    };

                    req.HEAD[i] = head;
                }

                return ExceptionHelper.TryReturnException(() =>
                {
                    si_pp080_mcs_senderClient senderClient = new si_pp080_mcs_senderClient();
                    senderClient.ClientCredentials.UserName.UserName = AppSettingsHelper.GetAppSettingVal("Sap_Upload_UserName");
                    senderClient.ClientCredentials.UserName.Password = AppSettingsHelper.GetAppSettingVal("Sap_Password");

                    dt_pp080_resHEAD[] resData = senderClient.si_pp080_mcs_sender(req);
                    apiResult.Data = 1;

                    for (int i = 0; i < resData.Count(); i++)
                    {
                        if ("E".Equals(resData[i].STATUS))
                        {
                            apiResult.Data = resData[i].INFOTEXT;
                            apiResult.Message = resData[i].INFOTEXT;
                            break;
                        }
                    }
                    

                }, apiResult, Request, req);                
            }
            else
            {
                return ExceptionHelper.TryReturnException(() =>
                {
                    apiResult.Data = -1;
                }, apiResult, Request, inParam);
            }            
        }

        /// <summary>
        /// 物料上载
        /// </summary>
        [HttpPost]
        public ApiResult UploadViewMaterial(List<object> inParam)
        {
            ApiResult apiResult = new ApiResult();
            apiResult.Data = -1;

            List<Dictionary<string, object>> viewList = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(JsonConvert.SerializeObject(inParam));
            int viewCount = viewList.Count;

            if (viewCount > 0)
            {
                dt_mm104_req req = new dt_mm104_req()
                {
                    VIEW = new dt_mm104_reqVIEW()
                    {
                        //ST1 = "1", // 选择登录视图-基本数据视图
                        //ST2 = "3", // 选择登录视图-分类视图
                        //ST3 = "2", // 选择登录视图-采购视图
                        //ST4 = "5", // 选择登录视图-存储视图
                        //ST6 = "4", // 选择登录视图-销售视图
                        //ST7 = "6", // 选择登录视图-MRP视图
                        //ST8 = "7", // 选择登录视图-工作计划视图
                        //ST9 = "9", // 选择登录视图-会计视图
                        //ST11 = "8" // 选择登录视图-质量管理视图


                        ST1 = "X", // 选择登录视图-基本数据视图
                        ST2 = "X", // 选择登录视图-分类视图
                        ST3 = "X", // 选择登录视图-采购视图
                        ST4 = "X", // 选择登录视图-存储视图
                        ST6 = "X", // 选择登录视图-销售视图
                        ST7 = "X", // 选择登录视图-MRP视图
                        ST8 = "X", // 选择登录视图-工作计划视图
                        ST9 = "X", // 选择登录视图-会计视图
                        ST11 = "X" // 选择登录视图-质量管理视图
                    },

                    DATA = new dt_mm104_reqDATA[viewCount]
                };

                for (int i = 0; i < viewCount; i++)
                {

                    Dictionary<string, object> view = viewList[i];

                    dt_mm104_reqDATA data = new dt_mm104_reqDATA()
                    {
                        IND_SECTOR = view.ContainsKey("组织级别.行业领域") && view["组织级别.行业领域"].ToString()!="(空)" ? view["组织级别.行业领域"].ToString() : "",
                        MATL_TYPE = view.ContainsKey("组织级别.物料类型")&& view["组织级别.物料类型"].ToString()!= "(空)" ? view["组织级别.物料类型"].ToString() : "",
                        PLANT = view.ContainsKey("组织级别.工厂") && view["组织级别.工厂"].ToString() != "(空)" ? view["组织级别.工厂"].ToString() : "",
                        STGE_LOC = view.ContainsKey("组织级别.库存地点") && view["组织级别.库存地点"].ToString() != "(空)" ? view["组织级别.库存地点"].ToString() : "",
                        SALES_ORG = view.ContainsKey("组织级别.销售组织") && view["组织级别.销售组织"].ToString() != "(空)" ? view["组织级别.销售组织"].ToString() : "",
                        DISTR_CHAN = view.ContainsKey("组织级别.分销渠道") && view["组织级别.分销渠道"].ToString() != "(空)" ? view["组织级别.分销渠道"].ToString() : "",
                        MATERIAL = view.ContainsKey("基本视图.物料编号") && view["基本视图.物料编号"].ToString() != "(空)" ? view["基本视图.物料编号"].ToString() : "",
                        OLD_MAT_NO = view.ContainsKey("基本视图.试验号") && view["基本视图.试验号"].ToString() != "(空)" ? view["基本视图.试验号"].ToString() : "",
                        BASE_UOM = view.ContainsKey("基本视图.基本计量") && view["基本视图.基本计量"].ToString() != "(空)" ? view["基本视图.基本计量"].ToString() : "",
                        MATL_DESC_ZH = view.ContainsKey("基本视图.物料描述") && view["基本视图.物料描述"].ToString() != "(空)" ? view["基本视图.物料描述"].ToString() : "",
                        MATL_GROUP = view.ContainsKey("基本视图.物料组") && view["基本视图.物料组"].ToString() != "(空)" ? view["基本视图.物料组"].ToString() : "",
                        GROES = view.ContainsKey("基本视图.大小/量纲(规格)") && view["基本视图.大小/量纲(规格)"].ToString() != "(空)" ? view["基本视图.大小/量纲(规格)"].ToString() : "",
                        LONG_TEXT = view.ContainsKey("基本视图.物料长文本") && view["基本视图.物料长文本"].ToString() != "(空)" ? view["基本视图.物料长文本"].ToString() : "",
                        LABOR = view.ContainsKey("基本视图.标识符:固体/液体") && view["基本视图.标识符:固体/液体"].ToString() != "(空)" ? view["基本视图.标识符:固体/液体"].ToString() : "",
                        VOLUMEUNIT = view.ContainsKey("基本视图.体积单位") && view["基本视图.体积单位"].ToString() != "(空)" ? view["基本视图.体积单位"].ToString() : "",
                        GROSS_WT = view.ContainsKey("基本视图.毛重") && view["基本视图.毛重"].ToString() != "(空)" ? view["基本视图.毛重"].ToString() : "",
                        NET_WEIGHT = view.ContainsKey("基本视图.净重") && view["基本视图.净重"].ToString() != "(空)" ? view["基本视图.净重"].ToString() : "",
                        UNIT_OF_WT = view.ContainsKey("基本视图.重量单位") && view["基本视图.重量单位"].ToString() != "(空)" ? view["基本视图.重量单位"].ToString() : "",
                        FERTH = view.ContainsKey("基本视图.fame号") && view["基本视图.fame号"].ToString() != "(空)" ? view["基本视图.fame号"].ToString() : "",
                        VOLUME = view.ContainsKey("基本视图.业务量") && view["基本视图.业务量"].ToString() != "(空)" ? view["基本视图.业务量"].ToString() : "",
                        PUR_GROUP = view.ContainsKey("采购视图.采购组") && view["采购视图.采购组"].ToString() != "(空)" ? view["采购视图.采购组"].ToString() : "",
                        PO_UNIT = view.ContainsKey("采购视图.采购单位") && view["采购视图.采购单位"].ToString() != "(空)" ? view["采购视图.采购单位"].ToString() : "",
                        DENOMINATR = view.ContainsKey("采购视图.采购单位数量") && view["采购视图.采购单位数量"].ToString() != "(空)" ? view["采购视图.采购单位数量"].ToString() : "",
                        NUMERATOR = view.ContainsKey("采购视图.采购基本单位数量") && view["采购视图.采购基本单位数量"].ToString() != "(空)" ? view["采购视图.采购基本单位数量"].ToString() : "",
                        PUR_VALKEY = view.ContainsKey("采购视图.采购价值码") && view["采购视图.采购价值码"].ToString() != "(空)" ? view["采购视图.采购价值码"].ToString() : "",
                        MMSTA = view.ContainsKey("采购视图.工厂特定状态") && view["采购视图.工厂特定状态"].ToString() != "(空)" ? view["采购视图.工厂特定状态"].ToString() : "",
                        KAUTB = view.ContainsKey("采购视图.自动采购单标识") && view["采购视图.自动采购单标识"].ToString() != "(空)" ? view["采购视图.自动采购单标识"].ToString() : "",
                        KORDB = view.ContainsKey("采购视图.货源清单") && view["采购视图.货源清单"].ToString() != "(空)" ? view["采购视图.货源清单"].ToString() : "",
                        CLASSTYPENEW = view.ContainsKey("分类视图.类别种类") && view["分类视图.类别种类"].ToString() != "(空)" ? view["分类视图.类别种类"].ToString() : "",
                        CLASSNUMNEW = view.ContainsKey("分类视图.类别") && view["分类视图.类别"].ToString() != "(空)" ? view["分类视图.类别"].ToString() : "",
                        DELYG_PLNT = view.ContainsKey("销售视图.交货工厂") && view["销售视图.交货工厂"].ToString() != "(空)" ? view["销售视图.交货工厂"].ToString() : "",
                        TAXCLASS_1 = view.ContainsKey("销售视图.税金分类") && view["销售视图.税金分类"].ToString() != "(空)" ? view["销售视图.税金分类"].ToString() : "",
                        VERSG = view.ContainsKey("销售视图.物料统计组") && view["销售视图.物料统计组"].ToString() != "(空)" ? view["销售视图.物料统计组"].ToString() : "",
                        VRKME = view.ContainsKey("销售视图.销售单位") && view["销售视图.销售单位"].ToString() != "(空)" ? view["销售视图.销售单位"].ToString() : "",
                        BASE_TOR = view.ContainsKey("销售视图.基本单位数量") && view["销售视图.基本单位数量"].ToString() != "(空)" ? view["销售视图.基本单位数量"].ToString() : "",
                        SALE_TOR = view.ContainsKey("销售视图.销售单位数量") && view["销售视图.销售单位数量"].ToString() != "(空)" ? view["销售视图.销售单位数量"].ToString() : "",
                        ACCT_ASSGT = view.ContainsKey("销售视图.科目设置组") && view["销售视图.科目设置组"].ToString() != "(空)" ? view["销售视图.科目设置组"].ToString() : "",
                        ITEM_CAT = view.ContainsKey("销售视图.普通项目类别组") && view["销售视图.普通项目类别组"].ToString() != "(空)" ? view["销售视图.普通项目类别组"].ToString() : "",
                        ITEM_CAT1 = view.ContainsKey("销售视图.项目类别组") && view["销售视图.项目类别组"].ToString() != "(空)" ? view["销售视图.项目类别组"].ToString() : "",
                        AVAILCHECK = view.ContainsKey("销售视图.可用性检查") && view["销售视图.可用性检查"].ToString() != "(空)" ? view["销售视图.可用性检查"].ToString() : "",
                        LOADINGGRP = view.ContainsKey("销售视图.装载组") && view["销售视图.装载组"].ToString() != "(空)" ? view["销售视图.装载组"].ToString() : "",
                        ZJWLH = view.ContainsKey("销售视图.旧物料号") && view["销售视图.旧物料号"].ToString() != "(空)" ? view["销售视图.旧物料号"].ToString() : "",
                        STOR_CONDS = view.ContainsKey("仓储视图.存储条件") && view["仓储视图.存储条件"].ToString() != "(空)" ? view["仓储视图.存储条件"].ToString() : "",
                        XCHPF = view.ContainsKey("仓储视图.批次管理") && view["仓储视图.批次管理"].ToString() != "(空)" ? view["仓储视图.批次管理"].ToString() : "",
                        MAXLZ = view.ContainsKey("仓储视图.最大存储期间") && view["仓储视图.最大存储期间"].ToString() != "(空)" ? view["仓储视图.最大存储期间"].ToString() : "",
                        LZEIH = view.ContainsKey("仓储视图.时间单位") && view["仓储视图.时间单位"].ToString() != "(空)" ? view["仓储视图.时间单位"].ToString() : "",
                        MINREMLIFE = view.ContainsKey("仓储视图.最小剩余货架寿命") && view["仓储视图.最小剩余货架寿命"].ToString() != "(空)" ? view["仓储视图.最小剩余货架寿命"].ToString() : "",
                        SHELF_LIFE = view.ContainsKey("仓储视图.总货架寿命") && view["仓储视图.总货架寿命"].ToString() != "(空)" ? view["仓储视图.总货架寿命"].ToString() : "",
                        PERIOD_IND_EXPIRATION_DATE = view.ContainsKey("仓储视图.SLED期间标识") && view["仓储视图.SLED期间标识"].ToString() != "(空)" ? view["仓储视图.SLED期间标识"].ToString() : "",
                        MRP_TYPE = view.ContainsKey("MRP1.MRP类型") && view["MRP1.MRP类型"].ToString() != "(空)" ? view["MRP1.MRP类型"].ToString() : "",
                        REORDER_PT = view.ContainsKey("MRP1.再订货点") && view["MRP1.再订货点"].ToString() != "(空)" ? view["MRP1.再订货点"].ToString() : "",
                        FIXED_LOT = view.ContainsKey("MRP1.固定批量大小") && view["MRP1.固定批量大小"].ToString() != "(空)" ? view["MRP1.固定批量大小"].ToString() : "",
                        MAX_STOCK = view.ContainsKey("MRP1.最大库存水平") && view["MRP1.最大库存水平"].ToString() != "(空)" ? view["MRP1.最大库存水平"].ToString() : "",
                        MRP_CTRLER = view.ContainsKey("MRP1.MRP控制者") && view["MRP1.MRP控制者"].ToString() != "(空)" ? view["MRP1.MRP控制者"].ToString() : "",
                        LOTSIZEKEY = view.ContainsKey("MRP1.批量大小") && view["MRP1.批量大小"].ToString() != "(空)" ? view["MRP1.批量大小"].ToString() : "",
                        BSTMI = view.ContainsKey("MRP1.最小批量大小") && view["MRP1.最小批量大小"].ToString() != "(空)" ? view["MRP1.最小批量大小"].ToString() : "",
                        BSTMA = view.ContainsKey("MRP1.最大批量大小") && view["MRP1.最大批量大小"].ToString() != "(空)" ? view["MRP1.最大批量大小"].ToString() : "",
                        MRP_GROUP = view.ContainsKey("MRP1.MRP组") && view["MRP1.MRP组"].ToString() != "(空)" ? view["MRP1.MRP组"].ToString() : "",
                        BSTRF = view.ContainsKey("MRP1.舍入值") && view["MRP1.舍入值"].ToString() != "(空)" ? view["MRP1.舍入值"].ToString() : "",
                        ZCATEG = view.ContainsKey("MRP1.产品分类") && view["MRP1.产品分类"].ToString() != "(空)" ? view["MRP1.产品分类"].ToString() : "",
                        ZKUNNR = view.ContainsKey("MRP1.客户代码") && view["MRP1.客户代码"].ToString() != "(空)" ? view["MRP1.客户代码"].ToString() : "",
                        ZFLGMT = view.ContainsKey("MRP1.大小料") && view["MRP1.大小料"].ToString() != "(空)" ? view["MRP1.大小料"].ToString() : "",
                        ZXFLAG = view.ContainsKey("MRP1.不计算缺料") && view["MRP1.不计算缺料"].ToString() != "(空)" ? view["MRP1.不计算缺料"].ToString() : "",
                        ZPFILM = view.ContainsKey("MRP1.压膜") && view["MRP1.压膜"].ToString() != "(空)" ? view["MRP1.压膜"].ToString() : "",
                        ZSTOCK = view.ContainsKey("MRP1.安全库存带小样") && view["MRP1.安全库存带小样"].ToString() != "(空)" ? view["MRP1.安全库存带小样"].ToString() : "",
                        ZRCALC = view.ContainsKey("MRP1.需求计算不考虑前置物料库存") && view["MRP1.需求计算不考虑前置物料库存"].ToString() != "(空)" ? view["MRP1.需求计算不考虑前置物料库存"].ToString() : "",
                        ZSMSTD = view.ContainsKey("MRP1.小料标准（小于）") && view["MRP1.小料标准（小于）"].ToString() != "(空)" ? view["MRP1.小料标准（小于）"].ToString() : "",
                        PROC_TYPE = view.ContainsKey("MRP2.采购类型") && view["MRP2.采购类型"].ToString() != "(空)" ? view["MRP2.采购类型"].ToString() : "",
                        SM_KEY = view.ContainsKey("MRP2.计划边际码") && view["MRP2.计划边际码"].ToString() != "(空)" ? view["MRP2.计划边际码"].ToString() : "",
                        SOBSL = view.ContainsKey("MRP2.特殊采购类") && view["MRP2.特殊采购类"].ToString() != "(空)" ? view["MRP2.特殊采购类"].ToString() : "",
                        BACKFLUSH = view.ContainsKey("MRP2.反冲") && view["MRP2.反冲"].ToString() != "(空)" ? view["MRP2.反冲"].ToString() : "",
                        INHSEPRODT = view.ContainsKey("MRP2.自制生产时间") && view["MRP2.自制生产时间"].ToString() != "(空)" ? view["MRP2.自制生产时间"].ToString() : "",
                        PLIFZ = view.ContainsKey("MRP2.计划交货时间") && view["MRP2.计划交货时间"].ToString() != "(空)" ? view["MRP2.计划交货时间"].ToString() : "",
                        WEBAZ = view.ContainsKey("MRP2.收货处理时间") && view["MRP2.收货处理时间"].ToString() != "(空)" ? view["MRP2.收货处理时间"].ToString() : "",
                        
                        EISBE = view.ContainsKey("MRP2.安全库存") && view["MRP2.安全库存"].ToString() != "(空)" ? view["MRP2.安全库存"].ToString() : "",
                        LGPRO = view.ContainsKey("MRP2.发货库存地点") && view["MRP2.发货库存地点"].ToString() != "(空)" ? view["MRP2.发货库存地点"].ToString() : "",
                        SLOC_EXPRC = view.ContainsKey("MRP2.外部采购仓储地点") && view["MRP2.外部采购仓储地点"].ToString() != "(空)" ? view["MRP2.外部采购仓储地点"].ToString() : "",
                        PLAN_STRGP = view.ContainsKey("MRP3.策略组") && view["MRP3.策略组"].ToString() != "(空)" ? view["MRP3.策略组"].ToString() : "",
                        CONSUMMODE = view.ContainsKey("MRP3.消耗模式") && view["MRP3.消耗模式"].ToString() != "(空)" ? view["MRP3.消耗模式"].ToString() : "",
                        FWD_CONS = view.ContainsKey("MRP3.向前消耗期间") && view["MRP3.向前消耗期间"].ToString() != "(空)" ? view["MRP3.向前消耗期间"].ToString() : "",
                        VINT1 = view.ContainsKey("MRP3.逆向消耗期") && view["MRP3.逆向消耗期"].ToString() != "(空)" ? view["MRP3.逆向消耗期"].ToString() : "",
                        MISKZ = view.ContainsKey("MRP3.混合MRP") && view["MRP3.混合MRP"].ToString() != "(空)" ? view["MRP3.混合MRP"].ToString() : "",
                        MPR_AVAILCHECK = view.ContainsKey("MRP3.可用性检查") && view["MRP3.可用性检查"].ToString() != "(空)" ? view["MRP3.可用性检查"].ToString() : "",
                        DEP_REQ_ID = view.ContainsKey("MRP4.单独或集中") && view["MRP4.单独或集中"].ToString() != "(空)" ? view["MRP4.单独或集中"].ToString() : "",
                        DISCONTINU = view.ContainsKey("MRP4.非连续标识") && view["MRP4.非连续标识"].ToString() != "(空)" ? view["MRP4.非连续标识"].ToString() : "",
                        EFF_O_DAY = view.ContainsKey("MRP4.生效期") && view["MRP4.生效期"].ToString() != "(空)" ? view["MRP4.生效期"].ToString() : "",
                        FOLLOW_UP = view.ContainsKey("MRP4.后续的物料") && view["MRP4.后续的物料"].ToString() != "(空)" ? view["MRP4.后续的物料"].ToString() : "",
                        SFCPF = view.ContainsKey("工作计划视图.生产计划参数文件") && view["工作计划视图.生产计划参数文件"].ToString() != "(空)" ? view["工作计划视图.生产计划参数文件"].ToString() : "",
                        UEETK = view.ContainsKey("工作计划视图.无限制过量交货") && view["工作计划视图.无限制过量交货"].ToString() != "(空)" ? view["工作计划视图.无限制过量交货"].ToString() : "",
                        UNETO = view.ContainsKey("工作计划视图.不足交货允差") && view["工作计划视图.不足交货允差"].ToString() != "(空)" ? view["工作计划视图.不足交货允差"].ToString() : "",
                        UEETO = view.ContainsKey("工作计划视图.过度交货允差") && view["工作计划视图.过度交货允差"].ToString() != "(空)" ? view["工作计划视图.过度交货允差"].ToString() : "",
                        AUSME = view.ContainsKey("工作计划视图.发货单位") && view["工作计划视图.发货单位"].ToString() != "(空)" ? view["工作计划视图.发货单位"].ToString() : "",
                        MENGE_FH = view.ContainsKey("工作计划视图.发货单位数量") && view["工作计划视图.发货单位数量"].ToString() != "(空)" ? view["工作计划视图.发货单位数量"].ToString() : "",
                        
                        MENGE_BS = view.ContainsKey("工作计划视图.发货基本单位数量") && view["工作计划视图.发货基本单位数量"].ToString() != "(空)" ? view["工作计划视图.发货基本单位数量"].ToString() : "",
                        INSPTYPE1 = view.ContainsKey("质检视图.检验类型1") && view["质检视图.检验类型1"].ToString() != "(空)" ? view["质检视图.检验类型1"].ToString() : "",
                        INSPTYPE2 = view.ContainsKey("质检视图.检验类型2") && view["质检视图.检验类型2"].ToString() != "(空)" ? view["质检视图.检验类型2"].ToString() : "",
                        INSPTYPE3 = view.ContainsKey("质检视图.检验类型3") && view["质检视图.检验类型3"].ToString() != "(空)" ? view["质检视图.检验类型3"].ToString() : "",
                        INSPTYPE4 = view.ContainsKey("质检视图.检验类型4") && view["质检视图.检验类型4"].ToString() != "(空)" ? view["质检视图.检验类型4"].ToString() : "",
                        INSPTYPE5 = view.ContainsKey("质检视图.检验类型5") && view["质检视图.检验类型5"].ToString() != "(空)" ? view["质检视图.检验类型5"].ToString() : "",
                        INSPTYPE6 = view.ContainsKey("质检视图.检验类型6") && view["质检视图.检验类型6"].ToString() != "(空)" ? view["质检视图.检验类型6"].ToString() : "",
                        PRICE_CTRL = view.ContainsKey("会计视图.价格控制") && view["会计视图.价格控制"].ToString() != "(空)" ? view["会计视图.价格控制"].ToString() : "",
                        ML_SETTLE = view.ContainsKey("会计视图.价格确定") && view["会计视图.价格确定"].ToString() != "(空)" ? view["会计视图.价格确定"].ToString() : "",
                        PRICE_UNIT = view.ContainsKey("会计视图.价格单位") && view["会计视图.价格单位"].ToString() != "(空)" ? view["会计视图.价格单位"].ToString() : "",
                        VAL_CLASS = view.ContainsKey("会计视图.评估分类") && view["会计视图.评估分类"].ToString() != "(空)" ? view["会计视图.评估分类"].ToString() : "",
                        EKLAS = view.ContainsKey("会计视图.VC: 销售订单库存") && view["会计视图.VC: 销售订单库存"].ToString() != "(空)" ? view["会计视图.VC: 销售订单库存"].ToString() : "",
                        STPRS = view.ContainsKey("会计视图.标准价格") && view["会计视图.标准价格"].ToString() != "(空)" ? view["会计视图.标准价格"].ToString() : "",
                        PROFIT_CTR = view.ContainsKey("会计视图.利润中心") && view["会计视图.利润中心"].ToString() != "(空)" ? view["会计视图.利润中心"].ToString() : "",
                        LOSGR = view.ContainsKey("会计视图.成本核算批量") && view["会计视图.成本核算批量"].ToString() != "(空)" ? view["会计视图.成本核算批量"].ToString() : ""
                    };

                    req.DATA[i] = data;
                }

                return ExceptionHelper.TryReturnException(() =>
                {
                    si_mm104_mcs_senderClient senderClient = new si_mm104_mcs_senderClient();
                    senderClient.ClientCredentials.UserName.UserName = AppSettingsHelper.GetAppSettingVal("Sap_Upload_UserName");
                    senderClient.ClientCredentials.UserName.Password = AppSettingsHelper.GetAppSettingVal("Sap_Password");

                    dt_mm104_res resData = senderClient.si_mm104_mcs_sender(req);
                    apiResult.Data = 1;

                    if (resData.DATA.Length > 0)
                    {
                        foreach (dt_mm104_resDATA data in resData.DATA)
                        {
                            if ("E".Equals(data.MSGTY))
                            {
                                apiResult.Data = -2;
                                apiResult.Message = data.MSGTX;
                                break;
                            }
                        }
                    }
                    
                }, apiResult, Request, req);                
            }
            else
            {
                return ExceptionHelper.TryReturnException(() =>
                {
                    apiResult.Data = -1;
                }, apiResult, Request, inParam);
            }
            
        }
    }
}