1.冲销出库流程联调
2.冲销入库流程联调
3.普通出库 回调逻辑测试
4.物料凭证表结构修改,逻辑修改
1个文件已添加
7个文件已修改
837 ■■■■ 已修改文件
HH.WCS.Mobox3.pinggao.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ApibackModel.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/TestService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsSpaHelper.cs 572 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/ZSCM2_SCFL.cs 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/MaterialVoucher.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/WMSHelper.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.pinggao.csproj
@@ -173,6 +173,7 @@
    <Compile Include="api\ZCCM_NC.cs" />
    <Compile Include="api\ZSCM2_CBZX.cs" />
    <Compile Include="api\ZSCM2_CXPZ.cs" />
    <Compile Include="api\ZSCM2_SCFL.cs" />
    <Compile Include="api\ZSCM2_SCFLJHW.cs" />
    <Compile Include="App_Start\SwaggerControllerDescProvider.cs" />
    <Compile Include="core\WMSCore.cs" />
api/ApibackModel.cs
@@ -176,7 +176,48 @@
        }
        #endregion
        #region 外采审核完成回调入参
        public class ReturnJHWBcak
        {
            public class ITEM
            {
                /// <summary>
                /// 唯一标识
                /// </summary>
                public string KEY { get; set; }
                public string WLPZ { get; set; }
                /// <summary>
                /// 物料凭年度
                /// </summary>
                public string WLPZND { get; set; }
                /// <summary>
                /// 返回结果标识(0成功或者1失败)字符长度1
                /// </summary>
                public int MSGCODE { get; set; }
                /// <summary>
                /// 失败原因或者成功信息字符长度255
                /// </summary>
                public string MSGDESP { get; set; }
            }
            public class ROOT
            {
                /// <summary>
                ///
                /// </summary>
                public ITEM ITEM { get; set; }
            }
            public class Root
            {
                /// <summary>
                ///
                /// </summary>
                public ROOT ROOT { get; set; }
            }
        }
        #endregion
        #region 通用冲销回调入参
        public class ReturnTYBcak
        {
@@ -400,15 +441,16 @@
                /// <summary>
                /// 流水号
                /// </summary>
                public string ZLSH { get; set; }
                public string KEY { get; set; }
                /// <summary>
                /// 
                /// </summary>
                public string YWLX { get; set; }
                public string ZYWLX { get; set; }
                /// <summary>
                /// 过账日期
                /// </summary>
                public string GZRQ { get; set; }
                public string PZRQ { get; set; }
                /// <summary>
                /// 过账人员
                /// </summary>
@@ -461,7 +503,7 @@
                /// <summary>
                /// 输入日期
                /// </summary>
                public string SRRQ { get; set; }
                public string SRSJ { get; set; }
                /// <summary>
                /// 过账人员
                /// </summary>
api/TestService.cs
@@ -39,6 +39,7 @@
            //  this.Url = "http://ceerptest.cee.com.cn:8000/sap/bc/srt/rfc/sap/zscm_wc/110/zscm_wc/binding";
            this.Url = "http://10.89.33.217:8000/sap/bc/srt/rfc/sap/zscm_wc/110/zscm_wc/binding";
        }
        /// <remarks/>
api/WmsSpaHelper.cs
@@ -34,6 +34,7 @@
using System.Net;
using SqlSugar;
using static HH.WCS.Mobox3.pinggao.models.SapRoot.GYSDto;
using System.Web.Services.Protocols;
namespace HH.WCS.Mobox3.pinggao.api
{
@@ -1824,6 +1825,10 @@
            using (var db = new SqlHelper<object>().GetInstance())
            {
                try
                {
                result.resultMsg = "成功";
                result.resultCode = 0;
                if (string.IsNullOrEmpty(model.arrival_no))
@@ -1847,34 +1852,125 @@
                //根据不同出库类型 回调sap
                if (po.S_OUT_TYPE == "冲销出库")
                {
                    result = await CXAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start);
                    result = await CXAddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.start);
                }
                else
                if (po.S_OUT_TYPE == "出库")//普通出库
                {
                    result = await AddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start);
                    result = await AddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.start);
                }
                else if (po.S_OUT_TYPE == "计划外发料出库")
                {
                    result = await jhwtlAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start);
                    result = await jhwtlAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
                }
                else if (po.S_OUT_TYPE == "成本中心出库")
                {
                    result = await CBAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.start);
                    result = await CBAddOutboundOrder(db, model.MaterList, model.arrival_no, model.cntr_code, model.start);
                }
                //通用接口 对容器货品的删减 和生成回库单 都要用的接口
                result = await TYAddOutboundOrder(model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE);
                result = await TYAddOutboundOrder(db,model.MaterList, model.arrival_no, model.cntr_code, model.IsHK, model.start, po.S_OUT_TYPE);
                #region 升降量
                bool adds = true;
                //var itemlist = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == model.cntr_code).ToList();
                if (model.MaterList.Count > 0)
                {
                    var url = Settings.MoboxSeverUrl + "inventory/AddChange";
                    //仓库量表升量
                    var req = new AddChangeModel { op_type = 4 };
                    //库区量表升量
                    var req2 = new AddChangeModel { op_type = 7 };
                    model.MaterList.ForEach(a =>
                    {
                        LogHelper.Info($"填充数据");
                        LogHelper.Info($"减仓库量表数据 仓库{po.S_WH_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}");
                        req.item_info.Add(new AddChangeModel.itemModel
                        {
                            wh_code = po.S_WH_CODE,
                            item_code = a.item_code,
                            item_name = "",
                            qty = a.qty
                        });
                        LogHelper.Info($"减库区量表数据 库区{po.S_AREA_CODE} 物料编码{a.item_code} 物料名称 数量{a.qty}");
                        req2.item_info.Add(new AddChangeModel.itemModel
                        {
                            wh_code = po.S_WH_CODE,
                            area_code = po.S_AREA_CODE,
                            item_code = a.item_code,
                            item_name = "",
                            qty = a.qty
                        });
                    });
                    var reqData = JsonConvert.SerializeObject(req);
                    var AppKey = Settings.AppKey;
                    var AppSecret = Settings.AppSecret;
                    var ReqTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
                    //var ReqTime = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2);
                    LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime}");
                    var ReqVerify = GetMd5FromString(AppKey + AppSecret + ReqTime);
                    LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime} ReqVerify={ReqVerify} url={url} req={reqData}");
                    var res = new HttpHelper().WebPost(url, reqData, "application/json", AppKey, ReqTime, ReqVerify);
                    if (!string.IsNullOrEmpty(res))
                    {
                        LogHelper.Info($"mobox 仓库降量接口返回 {res}");
                        var moboxres = JsonConvert.DeserializeObject<moboxres>(res);
                        if (moboxres.err_code != 0)
                        {
                            adds = false;
                        }
                    }
                    else
                    {
                        LogHelper.Info($"mobox 仓库降量接口返回为空");
                    }
                    var reqData2 = JsonConvert.SerializeObject(req2);
                    var ReqTime2 = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
                    //var ReqTime2 = GetTimeStamp(DateTime.Now.AddHours(-8), 1, 2);
                    LogHelper.Info($"加密前 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2}");
                    var ReqVerify2 = GetMd5FromString(AppKey + AppSecret + ReqTime2);
                    LogHelper.Info($"加密后 AppKey={AppKey} AppSecret={AppSecret} ReqTime={ReqTime2} ReqVerify={ReqVerify2} url={url} req={reqData2}");
                    var res2 = new HttpHelper().WebPost(url, reqData2, "application/json", AppKey, ReqTime2, ReqVerify2);
                    if (!string.IsNullOrEmpty(res2))
                    {
                        LogHelper.Info($"mobox 库区降量接口返回 {res2}");
                        var moboxres = JsonConvert.DeserializeObject<moboxres>(res);
                        if (moboxres.err_code != 0)
                        {
                            adds = false;
                        }
                    }
                    else
                    {
                        LogHelper.Info($"mobox 库区降量接口返回为空");
                    }
                    if (adds) addOnShelves(po, model.cntr_code, 2);
                }
                else LogHelper.Info($"托盘{model.cntr_code}无需要升降量的物料");
                    db.CommitTran();
                    #endregion
                return result;
                }
                catch (Exception e)
                {result.resultMsg=e.Message;
                    db.RollbackTran();
                    return result;
                    throw;
                }
            }
        }
        public static async Task<SimpleResult> TYAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE)
        public static async Task<SimpleResult> TYAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, bool isHK, string start, string S_OUT_TYPE)
        {
            // var db = new SqlHelper<object>().GetInstance();
            using (var db = new SqlHelper<object>().GetInstance())
            {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
                var result = new SimpleResult();
                try
@@ -1969,11 +2065,11 @@
                    }
                    db.Insertable<OutboundRecord>(records).ExecuteCommand();
                    db.CommitTran();
                    //db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();
                    //db.RollbackTran();
                    LogHelper.Info("物料信息绑定到满容器上" + ex.Message);
                    Console.WriteLine(ex.Message);
@@ -1982,7 +2078,7 @@
                return result;
            }
        }
        //}
@@ -1994,10 +2090,10 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> CBAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> CBAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            using (var db = new SqlHelper<object>().GetInstance())
            {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
                //   var db = new SqlHelper<object>().GetInstance();
                var result = new SimpleResult();
@@ -2097,6 +2193,8 @@
                    #region sap回调
                    // 创建Web Service代理类实例
                    ZSCM2_CBZX service = new ZSCM2_CBZX();
                    service.PreAuthenticate = true;
                    service.Url = service.Url + "?sap-language=ZH";
                    //  service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                    // 准备请求参数
                    ZfmScm2CbzxMm001 request = new ZfmScm2CbzxMm001();
@@ -2121,21 +2219,37 @@
                    result.resultCode = data.ROOT.ITEM.MSGCODE;
                    if (data.ROOT.ITEM.MSGCODE == 0)
                    {
                        foreach (var item in MaterList)
                        {
                        MaterialVoucher materialVoucher = new MaterialVoucher();
                        materialVoucher.S_NO = po.S_NO;
                        materialVoucher.S_TYPE = po.S_OUT_TYPE;
                        materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH;
                        materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
                            materialVoucher.S_WLBM = item.item_code;
                            materialVoucher.S_WLH = item.N_ROW_NO;
                            materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH;
                            materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND;
                        materialVoucher.S_WH_CODE = po.S_WH_CODE;
                        materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
                        materialVoucher.F_QTY = item.qty;
                        materialVoucher.STATUS = 0;
                        db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                    }
                        //MaterialVoucher materialVoucher = new MaterialVoucher();
                        //materialVoucher.S_NO = po.S_NO;
                        //materialVoucher.S_TYPE = po.S_OUT_TYPE;
                        //materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH;
                        //materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
                        //materialVoucher.STATUS = 0;
                        //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                    }
                    #endregion
                    db.CommitTran();
                    //db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();
                    //db.RollbackTran();
                    LogHelper.Info("成本中心回调报错" + ex.Message);
                    Console.WriteLine(ex.Message);
@@ -2144,7 +2258,7 @@
                return result;
            }
        }
        //}
        /// <summary>
        /// 计划外退料回调
        /// </summary>
@@ -2153,10 +2267,10 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> jhwtlAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> jhwtlAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            using (var db = new SqlHelper<object>().GetInstance())
            {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
                //  var db = new SqlHelper<object>().GetInstance();
                var result = new SimpleResult();
                try
@@ -2206,7 +2320,6 @@
                    };
                    //回参物料信息
                    List<JHWBackDto.ITEM> iTEMs = new List<JHWBackDto.ITEM>();
                    List<OutboundRecord> records = new List<OutboundRecord>();
                    foreach (var item in MaterList)
                    {
                        var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault();
@@ -2258,6 +2371,7 @@
                    //db.Insertable<OutboundRecord>(records).ExecuteCommand();
                    #region wms-sap回调
                    //类转json
                    var json = JsonConvert.SerializeObject(myRoot.ROOT);
                    //json转xml
                    string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
@@ -2277,6 +2391,8 @@
                    #region sap回调
                    // 创建Web Service代理类实例
                    ZSCM2_SCFLJHW service = new ZSCM2_SCFLJHW();
                    service.PreAuthenticate = true;
                    service.Url = service.Url + "?sap-language=ZH";
                    //  service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                    // 准备请求参数
                    ZscmScflJhw request = new ZscmScflJhw();
@@ -2295,10 +2411,12 @@
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(responses.Output.ToString());
                    JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
                    var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString());
                    var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString());
                    //添加凭证记录表
                    result.resultMsg = data.ROOT.ITEM.MSGDESP;
                    result.resultCode = data.ROOT.ITEM.MSGCODE;
                    if (data.ROOT.ITEM.MSGCODE == 0)
                    {
                    foreach (var item in MaterList)
                    {
                        MaterialVoucher materialVoucher = new MaterialVoucher();
@@ -2306,19 +2424,22 @@
                        materialVoucher.S_TYPE = po.S_OUT_TYPE;
                        materialVoucher.S_WLBM = item.item_code;
                        materialVoucher.S_WLH = item.N_ROW_NO;
                        materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH;
                            materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ;
                        materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND;
                        materialVoucher.S_WH_CODE = po.S_WH_CODE;
                        materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
                        materialVoucher.F_QTY = item.qty;
                        materialVoucher.STATUS = 0;
                        db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                    }
                    }
                    #endregion
                    db.CommitTran();
                    //db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();
                    //db.RollbackTran();
                    LogHelper.Info("计划外退料回调报错" + ex.Message);
                    Console.WriteLine(ex.Message);
@@ -2327,7 +2448,7 @@
                return result;
            }
        }
        //}
        /// <summary>
        /// 通用冲销回调
        /// </summary>
@@ -2336,11 +2457,10 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> CXAddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> CXAddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            // var db = new SqlHelper<object>().GetInstance();
            using (var db = new SqlHelper<object>().GetInstance())
            {
                var result = new SimpleResult();
@@ -2380,12 +2500,21 @@
                        }
                    };
                    List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>();
                    foreach (var item in po.Details)
                    //出库单详情
                    var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO).ToList();
                    foreach (var item in MaterList)
                    {
                        CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD();
                        hEAD.GZRQ = GZRQ;
                        hEAD.SRRQ = DateTime.Now.ToString("yyyyMMdd");
                        hEAD.WLPZ = po.S_NO;
                        hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd");
                    //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.item_code && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH;
                    //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.item_code&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND;
                    //hEAD.WLPZ = porecord.First()?.S_WLPZBH;
                    //hEAD.WLPZNF = porecord.First()?.S_WLPZND;
                    hEAD.WLPZ = po.S_WLPZ;
                        hEAD.WLPZNF = po.S_WLPZND;
                        hEAD.WLPZXM = item.N_ROW_NO;
                        hEAD.GZRY = po.UNAME;
@@ -2405,6 +2534,8 @@
                    LogHelper.Info($"冲销出库回调xml数据{xml}");
                    ZSCM2_CXPZ service = new ZSCM2_CXPZ();
                    service.PreAuthenticate = true;
                    service.Url = service.Url + "?sap-language=ZH";
                    //  service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                    // 准备请求参数
                    ZfmScm2CxpzMm001 request = new ZfmScm2CxpzMm001();
@@ -2430,6 +2561,9 @@
                        {
                            if (item.MSGCODE == 0)
                            {
                            var onr = MaterList.Where(s => s.N_ROW_NO == item.WLPZHXM).First();
                                MaterialVoucher materialVoucher = new MaterialVoucher();
                                materialVoucher.S_NO = po.S_NO;
                                materialVoucher.S_TYPE = po.S_OUT_TYPE;
@@ -2440,9 +2574,14 @@
                                materialVoucher.S_YWLPZBH = item?.YWLPZBH;
                                materialVoucher.S_YWLPZND = item?.YWLPZND;
                                materialVoucher.S_YWLPZHXM = item?.YWLPZHXM;
                                materialVoucher.STATUS = 0;
                                materialVoucher.S_WH_CODE = po.S_WH_CODE;
                                materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
                            materialVoucher.F_QTY = onr.qty;
                                //materialVoucher.STATUS = 0;
                                resmeg += item?.MSGDESP;
                                materiallist.Add(materialVoucher);
                            }
                            else {
                                rescode = 1;
@@ -2464,11 +2603,11 @@
                    result.resultCode = rescode;
                    #endregion
                    db.CommitTran();
                    //db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();
                    //db.RollbackTran();
                    LogHelper.Info("通用冲销回调报错" + ex.Message);
                    Console.WriteLine(ex.Message);
@@ -2477,7 +2616,7 @@
                return result;
            }
        }
        /// <summary>
        /// 普通回调接口
@@ -2487,86 +2626,56 @@
        /// <param name="cntr_code"></param>
        /// <param name="start"></param>
        /// <returns></returns>
        public static async Task<SimpleResult> AddOutboundOrder(List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        public static async Task<SimpleResult> AddOutboundOrder(SqlSugarClient db, List<Mater> MaterList, string arrival_no, string cntr_code, string start)
        {
            using (var db = new SqlHelper<object>().GetInstance())
            {
            //using (var db = new SqlHelper<object>().GetInstance())
            //{
                // var db = new SqlHelper<object>().GetInstance();
                var result = new SimpleResult();
                CkBcakDto.Root myRoot = new CkBcakDto.Root
                {
                    ROOT = new CkBcakDto.ROOT
                    {
                        WLPZ = new CkBcakDto.WLPZ
                        {
                            ZLSH = "流水号值",
                            YWLX = "业务类型值",
                            GZRQ = DateTime.Now.ToString("yyyy-MM-dd"), // 假设日期格式为"年-月-日"
                            GZRY = "过账人员值",
                            ITEM = new List<CkBcakDto.ITEM>
                            {
                            }
                        }
                    }
                };
                try
                {
                    //库位信息
                    var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == start).First();
                    //出库单详情
                    var po = db.Queryable<TN_Outbound_Order>().Includes(s => s.Details).Where(a => a.S_NO == arrival_no).First();
                string GZRQ = "";
                string PZZDRQ = "";
                if (po.BUDAT != null)
                {
                    GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                }
                if (po.BLDAT != null)
                {
                    PZZDRQ = DateTime.Parse(po.BLDAT.ToString()).ToString("yyyyMMdd");
                }
                CkBcakDto.Root myRoot = new CkBcakDto.Root
                {
                    ROOT = new CkBcakDto.ROOT
                    {
                        WLPZ = new CkBcakDto.WLPZ
                        {
                            KEY = po.S_NO,
                            ZYWLX = "业务类型值",
                            PZRQ = PZZDRQ,
                            GZRQ = GZRQ, // 假设日期格式为"年-月-日"
                            GZRY = po.UNAME,
                            ITEM = new List<CkBcakDto.ITEM>
                            {
                            }
                        }
                    }
                };
                    //出库回调入参
                    //回参物料信息
                    List<CkBcakDto.ITEM> iTEMs = new List<CkBcakDto.ITEM>();
                    List<OutboundRecord> records = new List<OutboundRecord>();
                    foreach (var item in MaterList)
                    {
                        // 插入到托盘明细表
                        //var cntr = ContainerHelper.GetCntrItemRel(cntr_code);
                        //var cntr = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList();
                        //if (cntr.Count() > 0)
                        //{
                        db.BeginTran();
                        //1.查看是否有相同物料批次的信息,如果有要累减少,不同批次的可以分开
                        //var cir = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code && a.S_ITEM_CODE == item.item_code && a.S_BATCH_NO == item.S_BATCH_NO && a.N_ROW_NO == item.N_ROW_NO).First();
                        //if (cir != null)
                        //{
                        //cir.F_QTY -= item.qty;
                        //cir.F_ALLOC_QTY -= item.qty;
                        //cir.T_MODIFY = DateTime.Now;
                        //if (cir.F_QTY == 0)
                        //{
                        //    db.Deleteable(cir).ExecuteCommand();
                        //}
                        //else
                        //{
                        //    db.Updateable(cir).UpdateColumns(it => new { it.F_QTY, it.F_ALLOC_QTY, it.T_MODIFY }).ExecuteCommand();
                        //    //添加回库作业
                        //var  wmsTask = new WMSTask
                        //    {
                        //        S_CNTR_CODE = cntr_code,
                        //        S_CODE = WMSHelper.GenerateTaskNo(),
                        //        S_START_LOC = start,
                        //        S_START_AREA = startinfo.S_AREA_CODE,
                        //        S_START_WH = startinfo.S_WH_CODE,
                        //        S_END_LOC = startinfo.S_CODE,
                        //        N_TYPE = 1,
                        //        S_TYPE = WMSTask.GetTypeStr(1),
                        //        S_OP_DEF_CODE = "",
                        //        S_OP_DEF_NAME = "pda入库"
                        //    };
                        //    if (WMSHelper.CreateWmsTask(wmsTask))
                        //    {
                        //        LocationHelper.LockLoc(start, 1);
                        //        result.resultMsg = $"创建作业成功,作业号{wmsTask.S_CODE}";
                        //    }
                        //}
                        var podetail = po.Details.Where(s => s.S_ITEM_CODE == item.item_code).FirstOrDefault();
                        CkBcakDto.ITEM ckbitem = new CkBcakDto.ITEM();
@@ -2593,35 +2702,8 @@
                        //}
                        ckbitem.ITEM1 = listitem1;
                        iTEMs.Add(ckbitem);
                        //}
                        //else
                        //{
                        //    db.RollbackTran();
                        //    result.resultCode = 1;
                        //    result.resultMsg = $"物料不存在{item.item_code}";
                        //    LogHelper.Info($"物料不存在{item.item_code}");
                        //    return result;
                        //}
                        //var pz = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == arrival_no).First();
                        //OutboundRecord outboundRecord = new OutboundRecord();
                        //outboundRecord.S_WLPZBH = pz.S_WLPZBH;
                        //outboundRecord.S_WLPZND = pz.S_WLPZND;
                        //outboundRecord.S_NO = arrival_no;
                        //outboundRecord.S_WLBM = item.item_code;
                        //outboundRecord.S_SL = item.qty;
                        //outboundRecord.S_CNTR_CODE = cntr_code;
                        //records.Add(outboundRecord);
                        //}
                        //else
                        //{
                        //    result.resultCode = 1;
                        //    result.resultMsg = $"获取托盘信息失败{cntr_code}";
                        //    LogHelper.Info($"获取托盘信息失败{cntr_code}");
                        //    return result;
                        //}
                    }
                myRoot.ROOT.WLPZ.ITEM = iTEMs;
                    //db.Insertable<OutboundRecord>(records).ExecuteCommand();
                    #region wms-sap回调
                    //类转json
@@ -2630,40 +2712,73 @@
                    string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
                    LogHelper.Info($"出库xml数据{xml}");
                    // 创建 StringContent 并指定媒体类型为 "text/xml"
                    HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml");
                    string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData";
                    string responseXml = "";
                    using (HttpClient client = new HttpClient())
                    {
                        // 发送 POST 请求并接收响应
                        HttpResponseMessage responsess = await client.PostAsync(url, content);
                        responseXml = await responsess.Content.ReadAsStringAsync();
                //// 创建 StringContent 并指定媒体类型为 "text/xml"
                //HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml");
                //string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData";
                //string responseXml = "";
                //using (HttpClient client = new HttpClient())
                //{
                //    // 发送 POST 请求并接收响应
                //    HttpResponseMessage responsess = await client.PostAsync(url, content);
                //    responseXml = await responsess.Content.ReadAsStringAsync();
                    }
                //}
                ZSCM2_SCFL service = new ZSCM2_SCFL();
                service.PreAuthenticate = true;
                service.Url = service.Url + "?sap-language=ZH";
                //  service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                // 准备请求参数
                ZscmScfl request = new ZscmScfl();
                request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml;
                LogHelper.Info($"出库SAP回调");
                // 调用Web Service
                ZscmScflResponse responses = service.ZscmScfl(request);
                // 处理响应
                LogHelper.Info("出库SAP返回结果: " + responses.Output);
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(responseXml.ToString());
                    xmlDoc.LoadXml(responses.Output.ToString());
                    JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
                    var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString());
                    var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString());
                    //添加凭证记录表
                    result.resultMsg = data.ROOT.ITEM.MSGDESP;
                    result.resultCode = data.ROOT.ITEM.MSGCODE;
                    if (data.ROOT.ITEM.MSGCODE == 0)
                    {
                        foreach (var item in MaterList)
                        {
                    MaterialVoucher materialVoucher = new MaterialVoucher();
                    materialVoucher.S_NO = po.S_NO;
                    materialVoucher.S_TYPE = po.S_OUT_TYPE;
                    materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH;
                            materialVoucher.S_WLBM = item.item_code;
                            materialVoucher.S_WLH = item.N_ROW_NO;
                            materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ;
                    materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND;
                            materialVoucher.S_WH_CODE = po.S_WH_CODE;
                            materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
                            materialVoucher.F_QTY = item.qty;
                    materialVoucher.STATUS = 0;
                    db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                        }
                    }
                    ////添加凭证记录表
                    //result.resultMsg = data.ROOT.ITEM.MSGDESP;
                    //result.resultCode = data.ROOT.ITEM.MSGCODE;
                    //MaterialVoucher materialVoucher = new MaterialVoucher();
                    //materialVoucher.S_NO = po.S_NO;
                    //materialVoucher.S_TYPE = po.S_OUT_TYPE;
                    //materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZBH;
                    //materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND;
                    //materialVoucher.STATUS = 0;
                    //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                    #endregion
                    db.CommitTran();
                    //db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();
                    //db.RollbackTran();
                    LogHelper.Info("普通出库回调" +
                        "" + ex.Message);
                    Console.WriteLine(ex.Message);
@@ -2673,7 +2788,7 @@
                return result;
            }
        }
        //}
@@ -3456,14 +3571,14 @@
            //var db = new SqlHelper<object>().GetInstance();
            using (var db = new SqlHelper<object>().GetInstance())
            {
                LogHelper.Info($"进来了");
                bool resu = false;
                try
                {
                    db.BeginTran();
                    var po = db.Queryable<TN_Inbound_Order>().Includes(p => p.Details).Where(a => a.S_NO == model.S_NO).First();
                    LogHelper.Info($"进来了2");
                    #region MyRegion
                    if (po.Details.Count > 0)
                    {
@@ -3643,6 +3758,9 @@
                        #region sap回调
                        // 创建Web Service代理类实例
                        ZSCM_NC service = new ZSCM_NC();
                        // 添加语言设置(中文)
                        service.PreAuthenticate = true;
                        service.Url = service.Url + "?sap-language=ZH";
                        //  service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                        // 准备请求参数
                        ZscmNc request = new ZscmNc();
@@ -3669,7 +3787,7 @@
                        if (data.ROOT.ITEM.MSGCODE == 0)
                        {
                            materialVoucher.S_NO = model.S_NO;
                            materialVoucher.S_TYPE = po.S_BS_TYPE;
                            materialVoucher.S_TYPE = po.S_IN_TYPE;
                            materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH;
                            materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
                            materialVoucher.STATUS = 0;
@@ -3778,6 +3896,9 @@
                        #region sap回调
                        // 创建Web Service代理类实例
                        ZSCM2_SCFLJHW service = new ZSCM2_SCFLJHW();
                        // 添加语言设置(中文)
                        service.PreAuthenticate = true;
                        service.Url = service.Url + "?sap-language=ZH";
                        //  service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                        // 准备请求参数
                        ZscmScflJhw request = new ZscmScflJhw();
@@ -3903,6 +4024,9 @@
                        #region sap回调
                        // 创建Web Service代理类实例
                        ZSCM_WC service = new ZSCM_WC();
                        service.PreAuthenticate = true;
                        service.Url = service.Url + "?sap-language=ZH";
                        service.Credentials = new NetworkCredential("CONN_RFC", "Init.1234");
                        // 准备请求参数
                        ZscmWc request = new ZscmWc();
@@ -3953,7 +4077,13 @@
                    else if (po.S_IN_TYPE == "冲销入库")
                    {
                        var materpz = db.Queryable<TN_Inbound_Order>().Where(s => s.S_NO == po.S_NO).First();
                        //var materpz = db.Queryable<TN_Inbound_Order>().Where(s => s.S_NO == po.S_NO).First();
                        string GZRQ = "";
                        LogHelper.Info($"冲销入库入库{po.BUDAT}");
                        if (po.BUDAT != null)
                        {
                            GZRQ = DateTime.Parse(po.BUDAT.ToString()).ToString("yyyyMMdd");
                        }
                        //出库回调入参
                        CXCkBackDto.Root roots = new CXCkBackDto.Root
@@ -3962,15 +4092,37 @@
                            {
                                HEAD = new List<CXCkBackDto.HEAD>
                                {
                                    //WLPZ = materpz.S_WLPZ,
                                    //WLPZNF = materpz.S_WLPZNF,
                                    //WLPZXM = null,
                                    //GZRQ = "2025-03-20",
                                    //SRRQ = DateTime.Now.ToString(),
                                    //GZRY = "过账人员姓名"
                                }
                            }
                        };
                        List<CXCkBackDto.HEAD> listhead = new List<CXCkBackDto.HEAD>();
                        //出库单详情
                        LogHelper.Info($"冲销入库入库{GZRQ}");
                        var porecord = db.Queryable<MaterialVoucher>().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList();
                        //var podet = db.Queryable<tn_i>().Where(a => a.S_NO == po.S_BS_NO&&a.STATUS==0).ToList();
                        LogHelper.Info($"数量{porecord.Count()}");
                        LogHelper.Info($"数量{po.Details.Count()}");
                        //if (porecord.Count() <1 )
                        //{
                        //    LogHelper.Info($"凭证号不存在");
                        //}
                        foreach (var item in po.Details)
                        {
                            CXCkBackDto.HEAD hEAD = new CXCkBackDto.HEAD();
                            hEAD.GZRQ = GZRQ;
                            hEAD.SRSJ = DateTime.Now.ToString("yyyyMMdd");
                            //hEAD.WLPZ = porecord.First()?.S_WLPZBH;
                            hEAD.WLPZ = po.S_WLPZ;
                            hEAD.WLPZNF = po.S_WLPZND;
                            //hEAD.WLPZ = porecord.Where(s => s.S_WLBM == item.S_ITEM_CODE && s.S_WLH == item.N_ROW_NO).First()?.S_WLPZBH;
                            //hEAD.WLPZNF = porecord.Where(s=>s.S_WLBM==item.S_ITEM_CODE&&s.S_WLH==item.N_ROW_NO).First()?.S_WLPZND;
                            //hEAD.WLPZNF = porecord.First()?.S_WLPZND;
                            hEAD.WLPZXM = item.N_ROW_NO;
                            hEAD.GZRY = po.UNAME;
                            listhead.Add(hEAD);
                        }
                        roots.ROOT.HEAD = listhead;
                        var json = JsonConvert.SerializeObject(roots.ROOT);
                        string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
                        XElement responseXElement = XElement.Parse(xml);
@@ -3982,41 +4134,111 @@
                        // 确保HTTP成功状态值
                        response.EnsureSuccessStatusCode();
                        LogHelper.Info($"冲销入库xml数据{xml}");
                        // 创建 StringContent 并指定媒体类型为 "text/xml"
                        HttpContent content = new StringContent(xml, Encoding.UTF8, "application/xml");
                        string url = Settings.WCSSeverUrl + "/api/WmsSap/cesReceiveXmlData";
                        string responseXml = "";
                        using (HttpClient client = new HttpClient())
                        {
                            // 发送 POST 请求并接收响应
                            HttpResponseMessage responsess = await client.PostAsync(url, content);
                            responseXml = await responsess.Content.ReadAsStringAsync();
                        }
                        ZSCM2_CXPZ service = new ZSCM2_CXPZ();
                        service.PreAuthenticate = true;
                        service.Url = service.Url + "?sap-language=ZH";
                        // 准备请求参数
                        ZfmScm2CxpzMm001 request = new ZfmScm2CxpzMm001();
                        request.Input = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" + xml;
                        LogHelper.Info($"通用冲销SAP回调");
                        // 调用Web Service
                        ZfmScm2CxpzMm001Response responses = service.ZfmScm2CxpzMm001(request);
                        // 处理响应
                        LogHelper.Info("通用冲销SAP返回结果: " + responses.Output);
                        // 将 XmlDocument 转换为 JSON 字符串
                        //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(responseXml.ToString());
                        xmlDoc.LoadXml(responses.Output.ToString());
                        JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
                        var data = JsonConvert.DeserializeObject<ReturnWcBcak.Root>(jsonObject.ToString());
                        //var data = JsonConvert.DeserializeObject<ReturnJHWBcak.Root>(jsonObject.ToString());
                        var data = JsonConvert.DeserializeObject<ReturnTYBcak.Root>(jsonObject.ToString());
                        var resmeg = "";
                        int rescode = 0;
                        //添加凭证记录表
                        result.resultMsg = data.ROOT.ITEM.MSGDESP;
                        result.resultCode = data.ROOT.ITEM.MSGCODE;
                        if (data != null)
                        {
                            List<MaterialVoucher> materiallist = new List<MaterialVoucher>();
                            foreach (var item in data.ROOT.ITEM)
                            {
                                if (item.MSGCODE == 0)
                                {
                                    var onr = po.Details.Where(s => s.N_ROW_NO == item.WLPZHXM).First();
                        MaterialVoucher materialVoucher = new MaterialVoucher();
                        materialVoucher.S_NO = model.S_NO;
                                    materialVoucher.S_NO = po.S_NO;
                        materialVoucher.S_TYPE = po.S_IN_TYPE;
                        materialVoucher.S_WLPZBH = data.ROOT.ITEM.WLPZBH;
                        materialVoucher.S_WLPZND = data.ROOT.ITEM.WLPZND;
                        materialVoucher.STATUS = 0;
                        db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                                    materialVoucher.S_WLPZBH = item?.WLPZBH;
                                    materialVoucher.S_WLPZND = item?.WLPZND;
                                    materialVoucher.S_WLPZHXM = item?.WLPZHXM;
                                    materialVoucher.S_YWLPZBH = item?.YWLPZBH;
                                    materialVoucher.S_YWLPZND = item?.YWLPZND;
                                    materialVoucher.S_YWLPZHXM = item?.YWLPZHXM;
                                    materialVoucher.S_WH_CODE = po.S_WH_CODE;
                                    materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
                                    materialVoucher.F_QTY = onr.F_QTY;
                                    //materialVoucher.STATUS = 0;
                                    resmeg += item?.MSGDESP;
                                    materiallist.Add(materialVoucher);
                                }
                                else
                                {
                                    rescode = 1;
                                }
                            }
                            if (materiallist.Count() > 0)
                            {
                                db.Insertable<MaterialVoucher>(materiallist).ExecuteCommand();
                            }
                        }
                        result.resultMsg = resmeg;
                        result.resultCode = rescode;
                        //添加凭证记录表
                        //result.resultMsg = data.ROOT.ITEM.MSGDESP;
                        //result.resultCode = data.ROOT.ITEM.MSGCODE;
                        //List<MaterialVoucher> materiallist = new List<MaterialVoucher>();
                        //if (data.ROOT.ITEM.MSGCODE == 0)
                        //{
                        //    foreach (var item in po.Details)
                        //    {
                        //        MaterialVoucher materialVoucher = new MaterialVoucher();
                        //        materialVoucher.S_NO = po.S_NO;
                        //        materialVoucher.S_TYPE = po.S_IN_TYPE;
                        //        materialVoucher.S_WLBM = item.S_ITEM_CODE;
                        //        materialVoucher.S_WLH = item.N_ROW_NO;
                        //        materialVoucher.S_WLPZBH = data.ROOT.ITEM?.WLPZ;
                        //        materialVoucher.S_WLPZND = data.ROOT.ITEM?.WLPZND;
                        //        materialVoucher.S_WH_CODE = po.S_WH_CODE;
                        //        materialVoucher.S_AREA_CODE = po.S_AREA_CODE;
                        //        materialVoucher.F_QTY = item.F_QTY;
                        //        materialVoucher.STATUS = 0;
                        //        db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                        //    }
                        //}
                        //db.Insertable<MaterialVoucher>(materialVoucher).ExecuteCommand();
                    }
                    db.CommitTran();
                }
                catch (Exception ex)
                {
                    LogHelper.Info($"冲销回库回调报错{ex.Message}");
                    LogHelper.Info($"回调报错{ex.Message}");
                    db.RollbackTran();
                    throw;
                }
api/ZSCM2_SCFL.cs
New file
@@ -0,0 +1,158 @@
//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行时版本:4.0.30319.42000
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
//
// 此源代码由 wsdl 自动生成, Version=4.8.3928.0。
//
/// <remarks/>
// CODEGEN: 未处理命名空间“http://schemas.xmlsoap.org/ws/2004/09/policy”中的可选 WSDL 扩展元素“Policy”。
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="binding", Namespace="urn:sap-com:document:sap:soap:functions:mc-style")]
public partial class ZSCM2_SCFL : System.Web.Services.Protocols.SoapHttpClientProtocol {
    private System.Threading.SendOrPostCallback ZscmScflOperationCompleted;
    /// <remarks/>
    public ZSCM2_SCFL() {
        this.Url = "http://ceerptest.cee.com.cn:8000/sap/bc/srt/rfc/sap/zscm2_scfl/110/zscm2_scfl/bin" +
            "ding";
    }
    /// <remarks/>
    public event ZscmScflCompletedEventHandler ZscmScflCompleted;
    /// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
    [return: System.Xml.Serialization.XmlElementAttribute("ZscmScflResponse", Namespace="urn:sap-com:document:sap:soap:functions:mc-style")]
    public ZscmScflResponse ZscmScfl([System.Xml.Serialization.XmlElementAttribute("ZscmScfl", Namespace="urn:sap-com:document:sap:soap:functions:mc-style")] ZscmScfl ZscmScfl1) {
        object[] results = this.Invoke("ZscmScfl", new object[] {
                    ZscmScfl1});
        return ((ZscmScflResponse)(results[0]));
    }
    /// <remarks/>
    public System.IAsyncResult BeginZscmScfl(ZscmScfl ZscmScfl1, System.AsyncCallback callback, object asyncState) {
        return this.BeginInvoke("ZscmScfl", new object[] {
                    ZscmScfl1}, callback, asyncState);
    }
    /// <remarks/>
    public ZscmScflResponse EndZscmScfl(System.IAsyncResult asyncResult) {
        object[] results = this.EndInvoke(asyncResult);
        return ((ZscmScflResponse)(results[0]));
    }
    /// <remarks/>
    public void ZscmScflAsync(ZscmScfl ZscmScfl1) {
        this.ZscmScflAsync(ZscmScfl1, null);
    }
    /// <remarks/>
    public void ZscmScflAsync(ZscmScfl ZscmScfl1, object userState) {
        if ((this.ZscmScflOperationCompleted == null)) {
            this.ZscmScflOperationCompleted = new System.Threading.SendOrPostCallback(this.OnZscmScflOperationCompleted);
        }
        this.InvokeAsync("ZscmScfl", new object[] {
                    ZscmScfl1}, this.ZscmScflOperationCompleted, userState);
    }
    private void OnZscmScflOperationCompleted(object arg) {
        if ((this.ZscmScflCompleted != null)) {
            System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
            this.ZscmScflCompleted(this, new ZscmScflCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
        }
    }
    /// <remarks/>
    public new void CancelAsync(object userState) {
        base.CancelAsync(userState);
    }
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:sap-com:document:sap:soap:functions:mc-style")]
public partial class ZscmScfl {
    private string inputField;
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Input {
        get {
            return this.inputField;
        }
        set {
            this.inputField = value;
        }
    }
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:sap-com:document:sap:soap:functions:mc-style")]
public partial class ZscmScflResponse {
    private string outputField;
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Output {
        get {
            return this.outputField;
        }
        set {
            this.outputField = value;
        }
    }
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
public delegate void ZscmScflCompletedEventHandler(object sender, ZscmScflCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.8.3928.0")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class ZscmScflCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
    private object[] results;
    internal ZscmScflCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
            base(exception, cancelled, userState) {
        this.results = results;
    }
    /// <remarks/>
    public ZscmScflResponse Result {
        get {
            this.RaiseExceptionIfNecessary();
            return ((ZscmScflResponse)(this.results[0]));
        }
    }
}
core/WCSCore.cs
@@ -32,10 +32,10 @@
                            case 4:
                                WCSHelper.UpdateStatus(TN_Task, "取货完成");
                                TaskProcess.OperateStatus(TN_Task, 4);
                                if (TN_Task.N_TYPE == 2)
                                {
                                    WMSHelper.DeleteChange(TN_Task);
                                }
                                //if (TN_Task.N_TYPE == 2)
                                //{
                                //    WMSHelper.DeleteChange(TN_Task);
                                //}
                                break;
                            case 5:
                                WCSHelper.UpdateStatus(TN_Task, "开始卸货");
models/MaterialVoucher.cs
@@ -27,6 +27,11 @@
        public string S_YWLPZBH { get; set; }
        public string S_YWLPZND { get; set; }
        public string S_YWLPZHXM { get; set; }
        public string S_WH_CODE { get; set; }
        public string S_AREA_CODE { get; set; }
        public double F_QTY { get; set; }
        /// <summary>
        /// <summary>
        /// <summary>
        /// 0有效 1冲销
        /// </summary>
wms/WMSHelper.cs
@@ -416,6 +416,50 @@
            }
        }
        internal static void addOnShelves(TN_Outbound_Order task,string cntr_code, int action)
        {
            var db = new SqlHelper<object>().GetInstance();
            var s_action = "";
            if (action == 1)
            {
                s_action = "上架";
            }
            else
            {
                s_action = "下架";
            }
            try
            {
                var itemlist = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == cntr_code).ToList();
                if (itemlist.Count > 0)
                {
                    foreach (var item in itemlist)
                    {
                        var info = new TN_OnOff_Shelves
                        {
                            S_NO = task.S_NO,
                            N_ACTION = action,
                            S_ACTION = s_action,
                            S_ITEM_CODE = item.S_ITEM_CODE,
                            S_ITEM_NAME = item.S_ITEM_NAME,
                            S_LOC_CODE = task.S_END_LOC,
                            S_AREA_CODE = task.S_END_AREA,
                            S_CNTR_CODE = cntr_code,
                            S_BATCH_NO = item.S_BATCH_NO,
                            S_SERIAL_NO = item.S_SERIAL_NO,
                            //D_PRD_DATE = item.D_PRD_DATE,
                            F_QTY = item.F_QTY
                        };
                        db.Insertable(info).ExecuteCommand();
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error($"上架记录添加异常 异常信息={ex.Message}", ex);
            }
        }
        internal static void AddChange(WCSTask task)
        {
            var db = new SqlHelper<object>().GetInstance();