using NFine.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using NFine.Code;
using System.Data.Common;
using NFine.Domain._03_Entity.SRM;
using System.Configuration;
using System.Net;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.IO;
using NFine.Domain._03_Entity.WMS;
using NFine.Data.Extensions;

namespace NFine.Application.WMS
{
    public class WMSDeleteReceipts : RepositoryFactory<ICSVendor>
    {
        public int DeleteReceipt(string codes, string type)
        {
            try
            {
                string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
                string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
                DateTime MTime = DateTime.Now;
                StringBuilder sqlString = new StringBuilder();
                #region 工单领料 售后领料
                if (type == "2" || type == "12")
                {
                    #region SAP(三层结构)
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql1 = $@"select DISTINCT A.ApplyCode from ICSMOApply A
                            WHERE A.ApplyCode in({codes})";
                    DataTable Sapdt1 = Repository().FindDataSetBySql(sql1).Tables[0];
                    if (Sapdt1.Rows.Count == 0)
                    {
                        throw new Exception("单据查询失败");//单据查询失败
                    }
                    for (int i = 0; i < Sapdt1.Rows.Count; i++)
                    {
                        var code = Sapdt1.Rows[i]["ApplyCode"].ToString();
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                        Info.NEWID = Guid.NewGuid().ToString();
                        Info.DANJU = Sapdt1.Rows[i]["ApplyCode"].ToString();
                        Info.STATE = "0";
                        string sql = $@"select A.ID,A.ApplyCode,A.InvCode,A.Sequence,A.SAPSequence,A.Quantity,A.IssueQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode,A.WorkPoint,A.WHCode from ICSMOApply A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE A.ApplyCode ='{code}'";
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        if (Sapdt.Rows.Count == 0)
                        {
                            throw new Exception("单据查询失败");//单据查询失败
                        }
                        List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                        List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                        Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];

                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["ApplyCode"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["WHCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["IssueQuantity"].ToDecimal();
                            SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                            SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                            Item.DANJU = dr["ApplyCode"].ToString();
                            Item.POSNR = dr["SAPSequence"].ToString();
                            Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["IssueQuantity"].ToString()), 3);
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.DANJU = dr["ApplyCode"].ToString();
                                ItemLine.POSNR = dr["SAPSequence"].ToString();
                                ItemLine.MATNR = dr["InvCode"].ToString();
                                ItemLine.GERNR = dr["BatchCode"].ToString();
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["IssueQuantity"].ToString()) != Convert.ToDecimal(dr["Quantity"].ToString())|| Convert.ToDecimal(dr["Quantity"].ToString())==0)
                            {
                                sqlString.Append($@"DELETE FROM ICSMOApply WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','2','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");


                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.Z_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.Z_GERNR = ItemLineList.ToArray();
                            }
                            else
                            {
                                Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                            }
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                            result = Client.CallZWMS_SK_WS_PZ(Info);
                            if (result.Z_NULL == "N")
                            {
                                foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    #endregion
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion
                #region 委外领料
                else if (type == "5")
                {

                    #region SAP(三层结构)
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql1 = $@"select DISTINCT A.ApplyCode from ICSOApply A
                            WHERE A.ApplyCode in({codes})";
                    DataTable Sapdt1 = Repository().FindDataSetBySql(sql1).Tables[0];
                    if (Sapdt1.Rows.Count == 0)
                    {
                        throw new Exception("单据查询失败");//单据查询失败
                    }
                    for (int i = 0; i < Sapdt1.Rows.Count; i++)
                    {
                        var code = Sapdt1.Rows[i]["ApplyCode"].ToString();
                        string sql = $@" select Distinct A.ApplyCode,A.WorkPoint from ICSOApply A
                                where A.ApplyCode='{code}'";
                        DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                        for (int j = 0; j < dt.Rows.Count; j++)
                        {
                            string chksql = @"select SUM(Quantity) AS Quantity,SUM(IssueQuantity) AS IssueQuantity from ICSOApply
                                      where ApplyCode='{0}' and WorkPoint='{1}'
                                      GROUP BY ApplyCode,WorkPoint";
                            chksql = string.Format(chksql, dt.Rows[j]["ApplyCode"].ToString(), dt.Rows[j]["WorkPoint"].ToString());
                            DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];

                            SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                            Info.NEWID = Guid.NewGuid().ToString();
                            Info.DANJU = dt.Rows[j]["ApplyCode"].ToString();
                            Info.STATE = "0";
                            List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                            List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                            Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];
                            sql = @" select A.ApplyCode,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.IssueQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode,A.ID,A.WorkPoint,A.WHCode from ICSOApply A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE ApplyCode='{0}' AND A.WorkPoint='{1}'";
                            sql = string.Format(sql, dt.Rows[j]["ApplyCode"].ToString(), dt.Rows[j]["WorkPoint"].ToString());
                            DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                            foreach (DataRow dr in Sapdt.Rows)
                            {

                                string id = dr["ID"].ToString();
                                string dnCode = dr["ApplyCode"].ToString();
                                string invCode = dr["INVCode"].ToString();
                                string workPoint = dr["WorkPoint"].ToString();
                                string whCode = dr["WHCode"].ToString();
                                decimal quantity = dr["Quantity"].ToDecimal();
                                string sequence = dr["SAPSequence"].ToString();
                                string batchCode = dr["BatchCode"].ToString();
                                decimal dnQuantity = dr["IssueQuantity"].ToDecimal();
                                SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                                SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                                Item.DANJU = dr["ApplyCode"].ToString();
                                Item.POSNR = dr["SAPSequence"].ToString();
                                Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["IssueQuantity"].ToString()), 3);
                                ItemList.Add(Item);
                                ItemLine.DANJU = dr["ApplyCode"].ToString();
                                ItemLine.POSNR = dr["SAPSequence"].ToString();
                                ItemLine.MATNR = dr["InvCode"].ToString();
                                ItemLine.GERNR = dr["BatchCode"].ToString();
                                ItemLineList.Add(ItemLine);
                                if (Convert.ToDecimal(dr["IssueQuantity"].ToString()) != Convert.ToDecimal(dr["Quantity"].ToString())||Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                                {
                                    sqlString.Append($@"DELETE FROM ICSOApply WHERE ID='{id}';");
                                    sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','5','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                                }
                            }
                            if (ItemList.Count > 0)
                            {
                                Info.Z_ITEM = ItemList.ToArray();
                                if (ItemLineList.Count > 0)
                                {
                                    Info.Z_GERNR = ItemLineList.ToArray();
                                }
                                else
                                {
                                    Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                                }
                                SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                                result = Client.CallZWMS_SK_WS_PZ(Info);
                                if (result.Z_NULL == "N")
                                {
                                    foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                    {
                                        IsSuccess = "N";
                                        ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                    }
                                }
                            }

                        }
                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    #endregion
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;

                }
                #endregion
                #region 销售发货
                else if (type == "7")
                {
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.SDNCode,A.WorkPoint from ICSSDN A
                                    where A.SDNCode in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(SDNQuantity) AS SDNQuantity from ICSSDN
                                          where SDNCode='{0}' and WorkPoint='{1}'
                                          GROUP BY SDNCode,WorkPoint";
                        chksql = string.Format(chksql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];
                        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ Client = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ();
                        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1 Info = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD> headlist = new List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD>();
                        SAPCallBackDispatchVPN.ZWMS_DO_HEAD head = new SAPCallBackDispatchVPN.ZWMS_DO_HEAD();
                        head.VBELN = dt.Rows[i]["SDNCode"].ToString();
                        headlist.Add(head);
                        Info.T_HEAD = headlist.ToArray();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM> ItemList = new List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM>();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR> ItemLineList = new List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR>();
                        Info.T_RETURN = new SAPCallBackDispatchVPN.ZWMS_DO_RETURN[1];
                        sql = @" select A.ID,A.WorkPoint,A.WHCode, A.SDNCode,A.InvCode,A.SAPSequence,A.Sequence,A.Quantity,A.SDNQuantity
                                ,ISNULL(B.BatchCode,'') AS BatchCode from ICSSDN A
                                LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                                WHERE SDNCode='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["SDNCode"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["WHCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["SDNQuantity"].ToDecimal();
                            SAPCallBackDispatchVPN.ZWMS_DO_GERNR ItemLine = new SAPCallBackDispatchVPN.ZWMS_DO_GERNR();
                            SAPCallBackDispatchVPN.ZWMS_DO_ITEM Item = new SAPCallBackDispatchVPN.ZWMS_DO_ITEM();
                            Item.VBELN = dr["SDNCode"].ToString();
                            Item.POSNR = dr["SAPSequence"].ToString();
                            Item.LFIMG = System.Decimal.Round(Convert.ToDecimal(dr["SDNQuantity"].ToString()), 3);
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.VBELN = dr["SDNCode"].ToString();
                                ItemLine.POSNR = dr["SAPSequence"].ToString();
                                ItemLine.GERNR = dr["BatchCode"].ToString();
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["Quantity"].ToString()) != Convert.ToDecimal(dr["SDNQuantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                            {
                                sqlString.Append($@"DELETE FROM ICSSDN WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','7','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.T_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.T_GERNR = ItemLineList.ToArray();
                            }
                            SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse result = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse();
                            result = Client.CallZWMS_SK_DO_GZ(Info);
                            foreach (SAPCallBackDispatchVPN.ZWMS_DO_RETURN resultItem in result.T_RETURN)
                            {
                                if (resultItem.ZFLG == "N")
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.ZMESS + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion
                #region 其他出库
                else if (type == "8")
                {
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.OutCode,A.WorkPoint from ICSOtherOut A
                                where A.OutCode in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(OutQuantity) AS OutQuantity from ICSOtherOut
                                      where OutCode='{0}' and WorkPoint='{1}'
                                      GROUP BY OutCode,WorkPoint";
                        chksql = string.Format(chksql, dt.Rows[i]["OutCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];
                        if (Convert.ToDecimal(chkdt.Rows[0]["Quantity"]) != Convert.ToDecimal(chkdt.Rows[0]["OutQuantity"]))
                        {
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                            Info.NEWID = Guid.NewGuid().ToString();
                            Info.DANJU = dt.Rows[i]["OutCode"].ToString();
                            Info.STATE = "0";
                            List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                            List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                            Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];
                            sql = @"select A.ID, A.OutCode,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.OutQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode,A.WorkPoint,A.WHCode from ICSOtherOut A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE OutCode='{0}' AND A.WorkPoint='{1}'";
                            sql = string.Format(sql, dt.Rows[i]["OutCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                            DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                            foreach (DataRow dr in Sapdt.Rows)
                            {

                                string id = dr["ID"].ToString();
                                string dnCode = dr["OutCode"].ToString();
                                string invCode = dr["INVCode"].ToString();
                                string workPoint = dr["WorkPoint"].ToString();
                                string whCode = dr["WHCode"].ToString();
                                decimal quantity = dr["Quantity"].ToDecimal();
                                string sequence = dr["SAPSequence"].ToString();
                                string batchCode = dr["BatchCode"].ToString();
                                decimal dnQuantity = dr["OutQuantity"].ToDecimal();
                                SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                                SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                                Item.DANJU = dr["OutCode"].ToString();
                                Item.POSNR = dr["SAPSequence"].ToString();
                                Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["OutQuantity"].ToString()), 3);
                                ItemList.Add(Item);
                                if (dr["BatchCode"].ToString() != "")
                                {
                                    ItemLine.DANJU = dr["OutCode"].ToString();
                                    ItemLine.POSNR = dr["SAPSequence"].ToString();
                                    ItemLine.MATNR = dr["InvCode"].ToString();
                                    ItemLine.GERNR = dr["BatchCode"].ToString();
                                    ItemLineList.Add(ItemLine);
                                }
                                if (Convert.ToDecimal(dr["Quantity"].ToString()) != Convert.ToDecimal(dr["OutQuantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                                {
                                    sqlString.Append($@"DELETE FROM ICSOtherOut WHERE ID='{id}';");
                                    sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','8','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                                }
                            }
                            if (ItemList.Count > 0)
                            {
                                Info.Z_ITEM = ItemList.ToArray();
                                if (ItemLineList.Count > 0)
                                {
                                    Info.Z_GERNR = ItemLineList.ToArray();
                                }
                                else
                                {
                                    Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                                }
                                SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                                result = Client.CallZWMS_SK_WS_PZ(Info);
                                if (result.Z_NULL == "N")
                                {
                                    foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                    {
                                        IsSuccess = "N";
                                        ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                    }
                                }
                            }
                        }
                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion
                #region 物料调拨
                else if (type == "10")
                {
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.TransferNO,A.WorkPoint from ICSTransfer A
                                where A.TransferNO in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(TransferQuantity) AS TransferQuantity from ICSTransfer
                                      where TransferNO='{0}' and WorkPoint='{1}'
                                      GROUP BY TransferNO,WorkPoint";
                        chksql = string.Format(chksql, dt.Rows[i]["TransferNO"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];

                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                        Info.NEWID = Guid.NewGuid().ToString();
                        Info.DANJU = dt.Rows[i]["TransferNO"].ToString();
                        Info.STATE = "0";
                        List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                        List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                        Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];
                        sql = @" select A.ID,A.WorkPoint,A.FromWarehouseCode, A.TransferNO,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.TransferQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode from ICSTransfer A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE TransferNO='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["TransferNO"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["TransferNO"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["FromWarehouseCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["TransferQuantity"].ToDecimal();
                            SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                            SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                            Item.DANJU = dr["TransferNO"].ToString();
                            Item.POSNR = dr["SAPSequence"].ToString();
                            Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["TransferQuantity"].ToString()), 3);
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.DANJU = dr["TransferNO"].ToString();
                                ItemLine.POSNR = dr["SAPSequence"].ToString();
                                ItemLine.MATNR = dr["InvCode"].ToString();
                                ItemLine.GERNR = dr["BatchCode"].ToString();
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["Quantity"].ToString()) != Convert.ToDecimal(dr["TransferQuantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                            {
                                sqlString.Append($@"DELETE FROM ICSTransfer WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','10','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.Z_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.Z_GERNR = ItemLineList.ToArray();
                            }
                            else
                            {
                                Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                            }
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                            result = Client.CallZWMS_SK_WS_PZ(Info);
                            if (result.Z_NULL == "N")
                            {
                                foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion
                #region 检验合格单
                else if (type == "13")
                {

                    #region SAP(检验合格单为两层结构 一行对应一个序列号)
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select A.DNCode,A.WorkPoint,Quantity,A.Sequence,A.WHCode,A.ID,A.INVCode,A.RCVQuantity 
                                from ICSDeliveryNotice A
                                where A.DNCode in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];

                    for (int i = 0; i < dt.Rows.Count; i++)
                    {

                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(RCVQuantity) AS RCVQuantity from ICSDeliveryNotice
                                      where DNCode='{0}' and WorkPoint='{1}'
                                      GROUP BY DNCode,WorkPoint";
                        chksql = string.Format(chksql, dt.Rows[i]["DNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];

                        sql = @"select A.DNCode, SUM(Convert(decimal(18,6),A.RCVQuantity))  AS RCVQuantity,B.BatchCode,A.WHCode from ICSDeliveryNotice A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE DNCode='{0}' AND A.WorkPoint='{1}'
							GROUP BY A.DNCode,B.BatchCode,A.WHCode";
                        sql = string.Format(sql, dt.Rows[i]["DNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        if (Sapdt.Rows.Count == 0)
                        {
                            throw new Exception("单据查询失败");//单据查询失败
                        }
                        string id = dt.Rows[i]["ID"].ToString();
                        string dnCode = dt.Rows[i]["DNCode"].ToString();
                        string invCode = dt.Rows[i]["INVCode"].ToString();
                        string workPoint = dt.Rows[i]["WorkPoint"].ToString();
                        string whCode = dt.Rows[i]["WHCode"].ToString();
                        string quantity = dt.Rows[i]["Quantity"].ToString();
                        string sequence = dt.Rows[i]["Sequence"].ToString();
                        decimal dnQuantity = dt.Rows[i]["RCVQuantity"].ToDecimal();

                        sqlString.Append($@"DELETE FROM ICSDeliveryNotice WHERE ID='{id}';");
                        sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','13','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                        SAPCallBackJYHGDVPN.ZWMS_SK_WS_RUKU Client = new SAPCallBackJYHGDVPN.ZWMS_SK_WS_RUKU();
                        SAPCallBackJYHGDVPN.ZWMS_SK_WS_RUKU1 Info = new SAPCallBackJYHGDVPN.ZWMS_SK_WS_RUKU1();
                        Info.NEWID = Guid.NewGuid().ToString();
                        Info.PRUEFLOS = Sapdt.Rows[0]["DNCode"].ToString();
                        Info.L_LME = System.Decimal.Round(Convert.ToDecimal(Sapdt.Rows[0]["RCVQuantity"].ToString()), 3);
                        Info.SERNP = Sapdt.Rows[0]["BatchCode"].ToString();
                        Info.LGORT = Sapdt.Rows[0]["WHCode"].ToString(); ;//仓库
                        Info.Z_GERNR = new SAPCallBackJYHGDVPN.ZWEBS_GERNR[0];

                        SAPCallBackJYHGDVPN.ZWMS_SK_WS_RUKUResponse result = new SAPCallBackJYHGDVPN.ZWMS_SK_WS_RUKUResponse();
                        result = Client.CallZWMS_SK_WS_RUKU(Info);
                        if (result.Z_NULL == "N")
                        {
                            IsSuccess = "N";
                            ErrorMessage += result.L_MESSAGE;
                        }
                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    #endregion
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion
                #region 机加工入库
                else if (type == "14")
                {
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.RCVCode,A.WorkPoint from ICSManufactureReceive A
                                where A.RCVCode in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(RCVQuantity) AS RCVQuantity from ICSManufactureReceive
                                      where RCVCode='{0}' and WorkPoint='{1}'
                                      GROUP BY RCVCode,WorkPoint";
                        chksql = string.Format(chksql, dt.Rows[i]["RCVCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];

                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                        Info.NEWID = Guid.NewGuid().ToString();
                        Info.DANJU = dt.Rows[i]["RCVCode"].ToString();
                        Info.STATE = "0";
                        List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                        List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                        Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];
                        sql = @"select A.ID,A.WorkPoint,A.WHCode,A.RCVCode,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.RCVQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode from ICSManufactureReceive A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE RCVCode='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["RCVCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["RCVCode"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["WHCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["RCVQuantity"].ToDecimal();
                            SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                            SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                            Item.DANJU = dr["RCVCode"].ToString();
                            Item.POSNR = dr["SAPSequence"].ToString();
                            Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["RCVQuantity"].ToString()), 3);
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.DANJU = dr["RCVCode"].ToString();
                                ItemLine.POSNR = dr["SAPSequence"].ToString();
                                ItemLine.MATNR = dr["InvCode"].ToString();
                                ItemLine.GERNR = dr["BatchCode"].ToString();
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["Quantity"].ToString()) != Convert.ToDecimal(dr["RCVQuantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                            {
                                sqlString.Append($@"DELETE FROM ICSManufactureReceive WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','14','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.Z_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.Z_GERNR = ItemLineList.ToArray();
                            }
                            else
                            {
                                Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                            }
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                            result = Client.CallZWMS_SK_WS_PZ(Info);
                            if (result.Z_NULL == "N")
                            {
                                foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;

                }
                #endregion
                #region 成本中心退料
                else if (type == "15")
                {
                    #region SAP(三层结构)
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.InCode,A.WorkPoint from ICSOtherIn A
                                where A.InCode in ({codes})";

                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        var applyCode = dt.Rows[i]["InCode"].ToString();
                        var applyWorkPoint = dt.Rows[i]["WorkPoint"].ToString();
                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(InQuantity) AS InQuantity from ICSOtherIn
                                      where InCode='{0}' and WorkPoint='{1}'
                                      GROUP BY InCode,WorkPoint";
                        chksql = string.Format(chksql, applyCode, applyWorkPoint);
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                        Info.NEWID = Guid.NewGuid().ToString();
                        Info.DANJU = dt.Rows[i]["InCode"].ToString();
                        Info.STATE = "0";
                        List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                        List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                        Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];
                        sql = @"select A.InCode,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.InQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode,A.ID,A.WHCode,A.WorkPoint from ICSOtherIn A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE InCode='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["InCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["InCode"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["WHCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["InQuantity"].ToDecimal();
                            SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                            SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                            Item.DANJU = dnCode;
                            Item.POSNR = sequence;
                            Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["InQuantity"].ToString()), 3); ;
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.DANJU = dnCode;
                                ItemLine.POSNR = sequence;
                                ItemLine.MATNR = invCode;
                                ItemLine.GERNR = batchCode;
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["InQuantity"].ToString()) != Convert.ToDecimal(dr["Quantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                            {
                                sqlString.Append($@"DELETE FROM ICSOtherIn WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','15','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");
                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.Z_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.Z_GERNR = ItemLineList.ToArray();
                            }
                            else
                            {
                                Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                            }
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                            result = Client.CallZWMS_SK_WS_PZ(Info);
                            if (result.Z_NULL == "N")
                            {
                                foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    #endregion
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;

                }
                #endregion、
                #region 退料单
                else if (type == "16")
                {
                    #region SAP(三层结构)
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.ApplyNegCode,A.WorkPoint from ICSMOApplyNeg A
                                where A.ApplyNegCode in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        var applyCode = dt.Rows[i]["ApplyNegCode"].ToString();
                        var applyWorkPoint = dt.Rows[i]["WorkPoint"].ToString();
                        string chksql = @"select SUM(B.Quantity) AS Quantity,SUM(B.IssueNegQuantity) AS IssueQuantity from ICSMOApplyNeg A
									  LEFT JOIN ICSMOApplyNegDetail B ON B.ApplyNegCode=A.ApplyNegCode AND B.WorkPoint=A.WorkPoint
                                      where A.ApplyNegCode='{0}' and A.WorkPoint='{1}'
                                      GROUP BY A.ApplyNegCode,A.WorkPoint";
                        chksql = string.Format(chksql, applyCode, applyWorkPoint);
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];
                        if (Convert.ToDecimal(chkdt.Rows[0]["IssueQuantity"].ToString()) == 0)
                        {
                            //删除主表
                            sqlString.Append($@"DELETE FROM ICSMOApplyNeg WHERE ApplyNegCode='{applyCode}' and WorkPoint='{applyWorkPoint}';");

                        }

                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ Client = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ();
                        SAPCallBackDocVPN.ZWMS_SK_WS_PZ1 Info = new SAPCallBackDocVPN.ZWMS_SK_WS_PZ1();
                        Info.NEWID = Guid.NewGuid().ToString();
                        Info.DANJU = dt.Rows[i]["ApplyNegCode"].ToString();
                        Info.STATE = "0";
                        List<SAPCallBackDocVPN.ZWMS_PZ> ItemList = new List<SAPCallBackDocVPN.ZWMS_PZ>();
                        List<SAPCallBackDocVPN.ZWEBS_GERNR> ItemLineList = new List<SAPCallBackDocVPN.ZWEBS_GERNR>();
                        Info.Z_FLAG = new SAPCallBackDocVPN.ZWEB_RETURN[1];
                        sql = @" select A.ApplyNegCode,B.SAPSequence,B.InvCode,B.Sequence,B.Quantity,B.IssueNegQuantity
                            ,ISNULL(C.BatchCode,'') AS BatchCode,B.WorkPoint,B.ID,B.WHCode from ICSMOApplyNeg A
							LEFT JOIN ICSMOApplyNegDetail B ON B.ApplyNegCode=A.ApplyNegCode AND B.WorkPoint=A.WorkPoint
                            LEFT JOIN ICSExtension C ON C.ID=B.ExtensionID AND C.WorkPoint=B.WorkPoint
                            WHERE A.ApplyNegCode='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["ApplyNegCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["ApplyNegCode"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["WHCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["IssueNegQuantity"].ToDecimal() == 0 ? 0 : dr["IssueNegQuantity"].ToDecimal();
                            SAPCallBackDocVPN.ZWMS_PZ Item = new SAPCallBackDocVPN.ZWMS_PZ();
                            SAPCallBackDocVPN.ZWEBS_GERNR ItemLine = new SAPCallBackDocVPN.ZWEBS_GERNR();
                            Item.DANJU = dnCode;
                            Item.POSNR = sequence;
                            Item.LINGYSL = System.Decimal.Round(Convert.ToDecimal(dr["IssueNegQuantity"].ToString()), 3); 
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.DANJU = dnCode;
                                ItemLine.POSNR = sequence;
                                ItemLine.MATNR = invCode;
                                ItemLine.GERNR = batchCode;
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["IssueNegQuantity"].ToString()) != Convert.ToDecimal(dr["Quantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                            {
                                sqlString.Append($@"DELETE FROM ICSMOApplyNegDetail WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','16','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.Z_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.Z_GERNR = ItemLineList.ToArray();
                            }
                            else
                            {
                                Info.Z_GERNR = new SAPCallBackDocVPN.ZWEBS_GERNR[1];
                            }
                            SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse result = new SAPCallBackDocVPN.ZWMS_SK_WS_PZResponse();
                            result = Client.CallZWMS_SK_WS_PZ(Info);
                            if (result.Z_NULL == "N")
                            {
                                foreach (SAPCallBackDocVPN.ZWEB_RETURN resultItem in result.Z_FLAG)
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.L_MESSAGE + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    #endregion
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion
                #region 销售退货单
                else
                {
                    string IsSuccess = "";
                    string ErrorMessage = "";
                    string sql = $@" select Distinct A.SDNCode,A.WorkPoint from ICSSDN A
                                where A.SDNCode in ({codes})";
                    DataTable dt = Repository().FindDataSetBySql(sql).Tables[0];
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        string chksql = @"select SUM(Quantity) AS Quantity,SUM(SDNQuantity) AS SDNQuantity from ICSSDN
                                      where SDNCode='{0}' and WorkPoint='{1}'
                                      GROUP BY SDNCode,WorkPoint";
                        chksql = string.Format(chksql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable chkdt = Repository().FindDataSetBySql(chksql).Tables[0];

                        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ Client = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ();
                        SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1 Info = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZ1();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD> headlist = new List<SAPCallBackDispatchVPN.ZWMS_DO_HEAD>();
                        SAPCallBackDispatchVPN.ZWMS_DO_HEAD head = new SAPCallBackDispatchVPN.ZWMS_DO_HEAD();
                        head.VBELN = dt.Rows[i]["SDNCode"].ToString();
                        headlist.Add(head);
                        Info.T_HEAD = headlist.ToArray();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM> ItemList = new List<SAPCallBackDispatchVPN.ZWMS_DO_ITEM>();
                        List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR> ItemLineList = new List<SAPCallBackDispatchVPN.ZWMS_DO_GERNR>();
                        Info.T_RETURN = new SAPCallBackDispatchVPN.ZWMS_DO_RETURN[1];
                        sql = @" select A.ID,A.WorkPoint,A.WHCode, A.SDNCode,A.SAPSequence,A.InvCode,A.Sequence,A.Quantity,A.SDNQuantity
                            ,ISNULL(B.BatchCode,'') AS BatchCode from ICSSDN A
                            LEFT JOIN ICSExtension B ON B.ID=A.ExtensionID AND B.WorkPoint=A.WorkPoint
                            WHERE SDNCode='{0}' AND A.WorkPoint='{1}'";
                        sql = string.Format(sql, dt.Rows[i]["SDNCode"].ToString(), dt.Rows[i]["WorkPoint"].ToString());
                        DataTable Sapdt = Repository().FindDataSetBySql(sql).Tables[0];
                        foreach (DataRow dr in Sapdt.Rows)
                        {

                            string id = dr["ID"].ToString();
                            string dnCode = dr["SDNCode"].ToString();
                            string invCode = dr["INVCode"].ToString();
                            string workPoint = dr["WorkPoint"].ToString();
                            string whCode = dr["WHCode"].ToString();
                            decimal quantity = dr["Quantity"].ToDecimal();
                            string sequence = dr["SAPSequence"].ToString();
                            string batchCode = dr["BatchCode"].ToString();
                            decimal dnQuantity = dr["SDNQuantity"].ToDecimal();
                            SAPCallBackDispatchVPN.ZWMS_DO_ITEM Item = new SAPCallBackDispatchVPN.ZWMS_DO_ITEM();
                            SAPCallBackDispatchVPN.ZWMS_DO_GERNR ItemLine = new SAPCallBackDispatchVPN.ZWMS_DO_GERNR();
                            Item.VBELN = dr["SDNCode"].ToString();
                            Item.POSNR = dr["SAPSequence"].ToString();
                            Item.LFIMG = System.Decimal.Round(Convert.ToDecimal(dr["SDNQuantity"].ToString()), 3);
                            ItemList.Add(Item);
                            if (dr["BatchCode"].ToString() != "")
                            {
                                ItemLine.VBELN = dr["SDNCode"].ToString();
                                ItemLine.POSNR = dr["SAPSequence"].ToString();
                                ItemLine.GERNR = dr["BatchCode"].ToString();
                                ItemLineList.Add(ItemLine);
                            }
                            if (Convert.ToDecimal(dr["Quantity"].ToString()) != Convert.ToDecimal(dr["SDNQuantity"].ToString()) || Convert.ToDecimal(dr["Quantity"].ToString()) == 0)
                            {
                                sqlString.Append($@"DELETE FROM ICSSDN WHERE ID='{id}';");
                                sqlString.Append($@"INSERT INTO ICSDeleteReceiptsLog VALUES(NEWID(),'{dnCode}','{sequence}','17','{workPoint}','{invCode}',{dnQuantity},null,'{MUSER}','{MUSERNAME}','{MTime}');");

                            }
                        }
                        if (ItemList.Count > 0)
                        {
                            Info.T_ITEM = ItemList.ToArray();
                            if (ItemLineList.Count > 0)
                            {
                                Info.T_GERNR = ItemLineList.ToArray();
                            }
                            else
                            {
                                Info.T_GERNR = new SAPCallBackDispatchVPN.ZWMS_DO_GERNR[1];
                            }
                            SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse result = new SAPCallBackDispatchVPN.ZWMS_SK_DO_GZResponse();
                            result = Client.CallZWMS_SK_DO_GZ(Info);
                            foreach (SAPCallBackDispatchVPN.ZWMS_DO_RETURN resultItem in result.T_RETURN)
                            {
                                if (resultItem.ZFLG == "N")
                                {
                                    IsSuccess = "N";
                                    ErrorMessage += resultItem.ZMESS + "/r/n";
                                }
                            }
                        }

                    }
                    if (IsSuccess == "N")
                    {
                        throw new Exception(ErrorMessage);
                    }
                    if (sqlString.IsEmpty())
                    {
                        return 0;
                    }
                    int count = SqlHelper.CmdExecuteNonQueryLi(sqlString.ToString());
                    return count;
                }
                #endregion 
            }

            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


        public string CheckReceipt(string codes, string type)
        {
            try
            {
                string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
                string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
                DateTime MTime = DateTime.Now;
                string check = $@"IF EXISTS (SELECT ID FROM ICSWareHouseLotInfoLog WHERE TransType='15' AND TransCode IN ({codes}) )
                             BEGIN 
                                RAISERROR('单据已占料,请先取消占料',16,1);
                                RETURN
                              END;"; 
                //Repository().ExecuteBySql(check);
                SqlHelper.CmdExecuteNonQueryLi(check);
                string sql = String.Empty;
                StringBuilder msg=new StringBuilder();
                if (type == "14")
                {
                    sql += $@"SELECT a.RCVCode as Code,a.Sequence,SUM(c.Quantity) as Quantity ,a.RCVQuantity as IssueQuantity     
                                        FROM ICSManufactureReceive  a
                                       left JOIN ICSInventoryLotDetail b ON a.RCVCode=b.TransCode AND a.Sequence=b.TransSequence
		                               left JOIN ICSInventoryLot c  ON c.LotNo=b.LotNo
                                       WHERE a.RCVCode in ({codes}) 
		                                    AND b.LotNo NOT LIKE '%-%' 
		                                    GROUP BY a.RCVCode,a.Sequence,a.RCVQuantity";
                }
                else if (type == "15")
                {
                    sql += $@"SELECT a.InCode as Code,a.Sequence,SUM(c.Quantity) as Quantity ,a.InQuantity as IssueQuantity
                                       FROM ICSOtherIn  a
                                       left JOIN ICSInventoryLotDetail b ON a.InCode=b.TransCode AND a.Sequence=b.TransSequence
		                               left JOIN ICSInventoryLot c  ON c.LotNo=b.LotNo
                                       WHERE a.InCode in ({codes}) 
		                                    AND b.LotNo NOT LIKE '%-%' 
		                                    GROUP BY a.InCode,a.Sequence,a.InQuantity";
                }
                else if (type == "16")
                {
                    sql += $@"SELECT a.ApplyNegCode as Code,a.Sequence,SUM(c.Quantity) as Quantity ,a.IssueNegQuantity as IssueQuantity      FROM ICSMOApplyNegDetail  a
                                       left JOIN ICSInventoryLotDetail b ON a.ApplyNegCode=b.TransCode AND a.Sequence=b.TransSequence
		                               left JOIN ICSInventoryLot c  ON c.LotNo=b.LotNo
                                       WHERE a.ApplyNegCode in ({codes}) 
		                                    AND b.LotNo NOT LIKE '%-%' 
		                                    GROUP BY a.ApplyNegCode,a.Sequence,a.IssueNegQuantity";
                }
                else if (type == "17")
                {
                    sql += $@"SELECT a.SDNCode as Code,a.Sequence,SUM(c.Quantity) as Quantity ,a.SDNQuantity as IssueQuantity     
                                       FROM ICSSDN  a
                                       left JOIN ICSInventoryLotDetail b ON a.SDNCode=b.TransCode AND a.Sequence=b.TransSequence
		                               left JOIN ICSInventoryLot c  ON c.LotNo=b.LotNo
                                       WHERE a.SDNCode in ({codes}) 
		                                    AND b.LotNo NOT LIKE '%-%' 
		                                    GROUP BY a.SDNCode,a.Sequence,a.SDNQuantity";
                }
                if (!sql.IsEmpty())
                {
                    var datas = Repository().FindDataSetBySql(sql).Tables[0];
                    if (datas.Rows.Count < 1)
                        return msg.ToString();
                    foreach (DataRow data in datas.Rows)
                    {
                        string code = data["Code"].ToString();
                        string sequence = data["Sequence"].ToString();
                        decimal quantity = data["Quantity"].ToDecimal();
                        decimal issueQuantity = data["IssueQuantity"].ToDecimal();
                        if (quantity != issueQuantity)
                        {
                            msg.Append($@"单据号:{code},行号:{sequence},已经生成条码,请先删除条码后再取消单据;   ");
                        }
                    }
                }

                return msg.ToString();
            }
            
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}