using ICSSoft.Common;
using ICSSoft.Entity;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace ICSSoft.DataProject
{
    /// <summary>
    /// 使用中
    /// 更新库存表、日志表
    /// </summary>
    public class ICSWareHouseLotInfoService
    {
        private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);


        /// <summary>
        /// 分批
        /// </summary>
        /// <param name="Identification"></param>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoInBatches(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
    string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
        {

        }
        /// <summary>
        /// 添加库存
        /// </summary>
        /// <param name="LocationCode"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        /// <param name="jointLotNo"></param>
        public static void WareHouseLotInfoUp(string Identification, string LocationCode, string LotNo, string Quantity, string User,
        string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string LogID, string jointLotNo)
        {
            try
            {

                #region 正常入库
                ///添加库存(原条码退回,更新库存;新条码直接入库)
                //stirng locationcode = "";
                string sql = string.Empty;
                string locationcode = "";

                if (BusinessCode != TransTypeEnum.SalesReturnBack.GetDescription<DBValue>())
                {
                    if (string.IsNullOrWhiteSpace(LogID))
                    {
                        sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
                            BEGIN
	                            RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
                                RETURN
                            END ";
                    }
                    else
                    {
                        sql = @"SELECT LocationCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
                        sql = string.Format(sql, LotNo, WorkPoint);
                        DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                        if (dt == null || dt.Rows.Count <= 0)
                        {
                            throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
                        }
                        locationcode = dt.Rows[0]["LocationCode"].ToString();
                    }


                }
                sql += @" IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
                        BEGIN
                            IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.Quantity=0)
                            BEGIN
                                UPDATE a  SET a.Quantity=ISNULL(a.Quantity,0)+'{3}',WarehouseCode=e.WarehouseCode,LocationCode=d.LocationCode
                                From ICSWareHouseLotInfo a
                                INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
                                INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
                                WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                            END
                            ELSE IF EXISTS(SELECT a.LotNO FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.LocationCode='{4}')
                            BEGIN
                                UPDATE ICSWareHouseLotInfo  SET Quantity=ISNULL(Quantity,0)+'{3}'
                                WHERE LotNo='{0}' AND WorkPoint='{1}'
                            END
                            ELSE IF('" + locationcode + @"' != '{4}')
                            BEGIN
                            RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo395"), "{4}", locationcode) + @"', 16, 1);
                                RETURN
                            END
                        END
                        ELSE
                        BEGIN
                            IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
                                INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
                                WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
                            BEGIN
                                IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
                                    INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
                                    WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}' AND il.LocationCode='{4}')
                                BEGIN
                                    RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
                                    RETURN
                                END
                            END
                            INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
                            SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
                            FROM ICSInventoryLot a
                            INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                            --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                            INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
                            INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
                            INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                            WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        END";
                sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
                }

                ///添加日志
                sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,LogID)
                        SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
                        '','',c.WarehouseCode,c.LocationCode,'{6}',
                        '','0','{4}','{5}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{7}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, LogID);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }

                #endregion

                #region 管控方式是"料品"时

                ControlMode mode = ICSControlModeService.GetControlMode();

                if (mode.itemCode.Equals("ControlMode02"))
                {
                    //查询是否存在料品管控的条码
                    string sqlStrNew = @"SELECT  a.ID,
	                                        con.ContainerCode,
	                                        con.ContainerName,
	                                        a.LotNo,
	                                        a.InvCode,
	                                        inv.InvName,
	                                        inv.InvStd,
	                                        inv.InvUnit,-- {0}
	                                        inv.AmountUnit,
	                                        ext.ID AS ExtensionID,
	                                        ext.ProjectCode,
	                                        ext.Version,
	                                        ext.BatchCode,
	                                        ext.Brand,
	                                        ext.cFree1,
	                                        ext.cFree2,
	                                        ext.cFree3,
	                                        ext.cFree4,
	                                        ext.cFree5,
	                                        ext.cFree6,
	                                        ext.cFree7,
	                                        ext.cFree8,
	                                        ext.cFree9,
	                                        ext.cFree10,
	                                        a.MUSER AS [ USER ],
	                                        a.MTIME AS [ MTime ] 
                                        FROM
	                                        ICSInventoryLot a
	                                        LEFT JOIN ICSContainerLot conlot ON a.LotNo = conlot.LotNo AND a.WorkPoint = conlot.WorkPoint
	                                        LEFT JOIN ICSContainer con ON conlot.ContainerID = con.ID AND conlot.WorkPoint = con.WorkPoint
	                                        INNER JOIN ICSInventory inv ON a.InvCode = inv.InvCode AND a.WorkPoint = inv.WorkPoint 
	                                        INNER JOIN ICSExtension ext ON a.ExtensionID = ext.ID AND a.WorkPoint = ext.WorkPoint 
																					WHERE  a.LotNo='{0}' AND a.WorkPoint='{1}'";
                    sqlStrNew = string.Format(sqlStrNew, jointLotNo, WorkPoint);
                    DataTable table = DBHelper.SQlReturnData(sqlStrNew, cmd);
                    string json = JsonConvert.SerializeObject(table);
                    List<LotNoMode> modelNew = JsonConvert.DeserializeObject<List<LotNoMode>>(json);

                    //当不存在料品管控条码时,生成新条码
                    if (!(modelNew.Count > 0))
                    {
                        //获取旧条码的信息
                        string jsonStr = ICSControlModeService.QueryLotNo(LotNo, WorkPoint);
                        List<LotNoMode> model = JsonConvert.DeserializeObject<List<LotNoMode>>(jsonStr);
                        //在条码表中插入一条新数据,在条码表中插入一条新数据,并在库存表中添加新数据
                        LotNoMode lotNoMode = model[0];
                        CreateLotNo(jointLotNo, Quantity, "", "", WorkPoint, Identification, User, lotNoMode.InvCode, BusinessCode, lotNoMode.ProjectCode, lotNoMode.BatchCode,
                            lotNoMode.Version, lotNoMode.Brand, lotNoMode.cFree1, lotNoMode.cFree2, lotNoMode.cFree3, lotNoMode.cFree4, lotNoMode.cFree5, lotNoMode.cFree6, lotNoMode.cFree7,
                            lotNoMode.cFree8, lotNoMode.cFree9, lotNoMode.cFree10, cmd, language, LocationCode, LotNo);
                    }
                    try
                    {

                        //合并前日志
                        WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
                            TransTypeEnum.LOTMergeBefore.GetDescription<DBValue>(), cmd, language);

                        //更新目标条码库存
                        WareHouseLotInfoMerge(Identification, jointLotNo, LotNo, Quantity, User, WorkPoint, "2",
                        TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);

                        //合并后日志
                        WareHouseLotInfoLog(Identification, jointLotNo, User, WorkPoint, "2",
                            TransTypeEnum.LOTMergeAfter.GetDescription<DBValue>(), cmd, language);
                    }
                    catch (Exception)
                    {
                        throw;
                    }


                }
                #endregion


                #region 成品(生产)入库,倒冲
                if (BusinessCode.Equals(TransTypeEnum.ManufactureReceiveDoc.GetDescription<DBValue>()))
                {
                    #region sql
                    sql = @"-- 1.创建临时表 初始单据数据 maintemp
                            SELECT
	                                                    c.MOCode AS TransCode,
													                            a.MODetailID AS DetailID,
	                                                                            a.InvCode,
	                                                                            b.InvName,
	                                                                            b.InvStd,
	                                                                            a.ParentQuantity/c.Quantity*{2} AS Quantity,
													                            a.Amount,
													                            a.Sequence AS TransSequence,
													                            a.IssueQuantity,
													                            c.Sequence,
													                            inv.InvUnit,
													                            0 AS LocationQty,
													                            inv.AmountUnit,
													                            a.ExtensionID,
													                            a.WorkPoint,
													                            ext.ProjectCode,
													                            CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
													                            ext.Version,
													                            ext.Brand,
													                            ext.cFree1,
													                            ext.cFree2,
													                            ext.cFree3,
													                            ext.cFree4,
													                            ext.cFree5,
													                            ext.cFree6,
													                            ext.cFree7,
													                            ext.cFree8,
													                            ext.cFree9,
													                            ext.cFree10
                                                            INTO #maintemp
												
												                            FROM
	                                                    ICSMOPick a
														                            inner join ICSMO c on a.MODetailID=c.MODetailID and a.WorkPoint=c.WorkPoint
                                                        LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
														                            INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
														                            INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
														                            INNER JOIN (
																                            SELECT a.MOCode,a.Sequence,a.WorkPoint
																                            FROM ICSMO a
																                            INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.MOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
																                            INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
																                            WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
														                            ) temp ON  c.MOCode=temp.MOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
                                                                                    WHERE a.SupplyType='1'
														                            GROUP BY c.MOCode,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.MODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
														                            ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
				
                            select * into #resulttemp from #maintemp
                            ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
                            delete from #resulttemp

                            -- 2.根据maintemp 中的物料信息 查出库存中对应的条码信息 barcodetemp
                            select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
                            (select #maintemp.invcode  from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC

                            -- 3.循环maintemp,根据 行号和子表ID 向最终结果集中写入数据 ;barcodetemp 中的已匹配数据删除或更新
                            BEGIN
                            DECLARE @transSequence int;--当前循环的行号
                            DECLARE @qty int;--条码表数量
                            DECLARE @needqty int;--本行所需数量
                            DECLARE @lotno VARCHAR(50);--条码
                            DECLARE @DetailID VARCHAR(50);--本行所在工单行ID
                            DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp);   --创建游标tempCursor,并定义游标所指向的集合	
	                            OPEN tempCursor;                              --打开游标
	                            FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;          --游标读取下一个数据
	                            WHILE @@fetch_status=0  
		                            BEGIN
			                            select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
				                            PRINT @transSequence
				                            WHILE @needqty>0
					                            BEGIN

						                            select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
                                                            RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode   ORDER BY mtime
						                            BEGIN
													    IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
														    BEGIN
															    insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
																    Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
																    ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
															    SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
																    ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
																    ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
																    where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
															    delete from #barcodetemp where lotno = @lotno
															    SET @needqty=@needqty-@qty
														    END
													    ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
														    BEGIN
															    insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
																    Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
																    ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
															    SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
																    ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
																    ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
																    where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
															    update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
															    SET @needqty=@needqty-@qty
														    END
													    ELSE
														    BEGIN
															    insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
																    Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
																    ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
															    SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
																    ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
																    ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
																    where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
																							
															    SET @needqty=0
														    END
												    END
					                            END
			                            FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
		                            END
	                            CLOSE tempCursor
	                            DEALLOCATE tempCursor
                            END

                            select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
                            --select * from #resulttemp

                            DROP table #maintemp
                            DROP table #resulttemp
                            DROP table #barcodetemp";
                    #endregion
                    sql = String.Format(sql, LotNo, WorkPoint, Quantity);
                    DataTable table = DBHelper.SQlReturnData(sql, cmd);
                    string json = JsonConvert.SerializeObject(table);
                    List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
                    foreach (DownItemModel model in downItemModels)
                    {
                        if (model != null && model.LotNo == null || "" == model.LotNo)
                        {
                            throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
                        }
                        WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "12", BusinessCode, cmd, language);
                        //回写已领数量
                        sql = @"UPDATE ICSMOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE MODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
                        sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
                        if (!DBHelper.ExecuteNonQuery(sql, cmd))
                        {
                            throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
                        }
                    }
                }
                #endregion

                #region 委外入库,倒冲
                if (BusinessCode.Equals(TransTypeEnum.OutsourcingReceiveDoc.GetDescription<DBValue>()))
                {
                    #region sql
                    sql = @"-- 1.创建临时表 初始单据数据 maintemp
                            SELECT
	                                                    c.OOCode AS TransCode,
													                            a.OODetailID AS DetailID,
	                                                    a.InvCode,
	                                                    b.InvName,
	                                                    b.InvStd,
	                                                    a.Quantity/c.Quantity*{2} AS Quantity,
													                            a.Amount,
													                            a.Sequence AS TransSequence,
													                            a.IssueQuantity,
													                            c.Sequence,
													                            inv.InvUnit,
													                            0 AS LocationQty,
													                            inv.AmountUnit,
													                            a.ExtensionID,
													                            a.WorkPoint,
													                            ext.ProjectCode,
													                            CASE WHEN ISNULL(inv.BatchEnable, '0')='1' THEN ext.BatchCode ELSE '' END AS BatchCode,
													                            ext.Version,
													                            ext.Brand,
													                            ext.cFree1,
													                            ext.cFree2,
													                            ext.cFree3,
													                            ext.cFree4,
													                            ext.cFree5,
													                            ext.cFree6,
													                            ext.cFree7,
													                            ext.cFree8,
													                            ext.cFree9,
													                            ext.cFree10
                                                     INTO #maintemp
												
												                            FROM
	                                                    ICSOOPick a
														                            inner join ICSOutsourcingOrder c on a.OODetailID=c.OODetailID and a.WorkPoint=c.WorkPoint
                                                        LEFT JOIN ICSINVENTORY b ON a.InvCode = b.InvCode AND a.WorkPoint=b.WorkPoint
														                            INNER JOIN ICSExtension ext ON a.ExtensionID=ext.ID AND a.WorkPoint=ext.WorkPoint
														                            INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
														                            INNER JOIN (
																                            SELECT a.OOCode,a.Sequence,a.WorkPoint
																                            FROM ICSOutsourcingOrder a
																                            INNER JOIN ICSInventoryLotDetail b ON b.TransCode=a.OOCode AND b.TransSequence=a.Sequence AND b.WorkPoint=a.WorkPoint
																                            INNER JOIN ICSInventoryLot c ON c.LotNo=b.LotNo AND c.WorkPoint=b.WorkPoint
																                            WHERE c.LotNo='{0}' AND c.WorkPoint='{1}'
														                            ) temp ON  c.OOCode=temp.OOCode AND a.WorkPoint=temp.WorkPoint AND c.Sequence=temp.Sequence
                                                                                    WHERE a.SupplyType='1'
														                            GROUP BY c.OOCode,a.Quantity,c.Quantity,a.InvCode,b.InvName,b.InvStd,a.WhCode,a.ExtensionID,a.WorkPoint,inv.BatchEnable,a.OODetailID,a.Amount,a.Sequence,a.IssueQuantity,inv.InvName,inv.InvCode,inv.InvUnit,inv.AmountUnit,c.Sequence,
														                            ext.ProjectCode,ext.BatchCode,ext.Version,ext.Brand,ext.cFree1,ext.cFree2,ext.cFree3,ext.cFree4,ext.cFree5,ext.cFree6,ext.cFree7,ext.cFree8,ext.cFree9,ext.cFree10;
				
                            select * into #resulttemp from #maintemp
                            ALTER TABLE #resulttemp ADD LotNo VARCHAR(50)
                            delete from #resulttemp

                            -- 2.根据maintemp 中的物料信息 查出库存中对应的条码信息 barcodetemp
                            select a.lotno,a.invcode,(a.quantity-a.lockQuantity) as quantity ,a.mtime into #barcodetemp from ICSWareHouseLotInfo a LEFT JOIN
                            (select #maintemp.invcode  from #maintemp group by #maintemp.InvCode) b on a.invcode = b.invcode where a.Quantity-a.lockQuantity>0 ORDER BY a.MTIME ASC

                            -- 3.循环maintemp,根据 行号和子表ID 向最终结果集中写入数据 ;barcodetemp 中的已匹配数据删除或更新
                            BEGIN
                            DECLARE @transSequence int;--当前循环的行号
                            DECLARE @qty int;--条码表数量
                            DECLARE @needqty int;--本行所需数量
                            DECLARE @lotno VARCHAR(50);--条码
                            DECLARE @DetailID VARCHAR(50);--本行所在工单行ID
                            DECLARE tempCursor CURSOR FOR (select transSequence,DetailID from #maintemp);   --创建游标tempCursor,并定义游标所指向的集合	
	                            OPEN tempCursor;                              --打开游标
	                            FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;          --游标读取下一个数据
	                            WHILE @@fetch_status=0  
		                            BEGIN
			                            select @needqty=Quantity from #maintemp where transSequence = @transSequence AND DetailID = @DetailID
				                            PRINT @transSequence
				                            WHILE @needqty>0
					                            BEGIN

						                            select top 1 @qty = isnull(quantity,0),@lotno = isnull(lotno,'') from #barcodetemp a
                                                            RIGHT JOIN (select invcode from #maintemp where transSequence = @transSequence AND DetailID = @DetailID) b on a.invcode=b.invcode   ORDER BY mtime
						                            BEGIN
														IF(@needqty-@qty>=0 and ISNULL(@lotno, '')<>'')
															BEGIN
																insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
																	Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
																	ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
																SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
																	ISNULL(Amount, 0), InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@qty,ISNULL(AmountUnit, ''),
																	ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
																	where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
																delete from #barcodetemp where lotno = @lotno
																SET @needqty=@needqty-@qty
															END
														ELSE IF(@needqty-@qty<0 and ISNULL(@lotno, '')<>'')
															BEGIN
																insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
																	Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
																	ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
																SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
																	ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,@needqty,ISNULL(AmountUnit, ''),
																	ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
																	where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
																update #barcodetemp set quantity = @qty-@needqty where lotno = @lotno
																SET @needqty=@needqty-@qty
															END
														ELSE
															BEGIN
																insert INTO #resulttemp (lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity,Quantity,
																	Amount,InvCode,InvName,InvStd,InvUnit,LocationQty,AmountUnit,
																	ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint)
																SELECT @lotno,TransCode,DetailID,Sequence,TransSequence,IssueQuantity, Quantity,
																	ISNULL(Amount, 0),InvCode,InvName,ISNULL(InvStd, ''),InvUnit,0,ISNULL(AmountUnit, ''),
																	ExtensionID,ProjectCode,BatchCode, Version,Brand,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint from #maintemp
																	where #maintemp.transSequence = @transSequence AND DetailID = @DetailID
																							
																SET @needqty=0
															END
													END
					                            END
			                            FETCH NEXT FROM tempCursor INTO @transSequence,@DetailID;
		                            END
	                            CLOSE tempCursor
	                            DEALLOCATE tempCursor
                            END

                            select TransCode,LotNo,LocationQty AS Quantity,InvCode,DetailID,Sequence,TransSequence from #resulttemp
                            --select * from #resulttemp

                            DROP table #maintemp
                            DROP table #resulttemp
                            DROP table #barcodetemp";
                    #endregion
                    sql = String.Format(sql, LotNo, WorkPoint, Quantity);
                    DataTable table = DBHelper.SQlReturnData(sql, cmd);
                    string json = JsonConvert.SerializeObject(table);
                    List<DownItemModel> downItemModels = JsonConvert.DeserializeObject<List<DownItemModel>>(json);
                    foreach (DownItemModel model in downItemModels)
                    {
                        if (model != null && model.LotNo == null || "" == model.LotNo)
                        {
                            throw new Exception(language.GetNameByCode("WMSAPIInfo201"));
                        }
                        WareHouseLotInfoDown(Identification, model.TransCode, model.Sequence + "~" + model.TransSequence, model.LotNo, model.Quantity, User, WorkPoint, "13", BusinessCode, cmd, language);
                        //回写已领数量
                        sql = @"UPDATE ICSOOPick SET IssueQuantity=(ISNULL(IssueQuantity,0)+" + model.Quantity + ") WHERE OODetailID='{0}' AND Sequence='{1}' AND WorkPoint='{2}'";
                        sql = String.Format(sql, model.DetailID, model.TransSequence, WorkPoint);
                        if (!DBHelper.ExecuteNonQuery(sql, cmd))
                        {
                            throw new Exception(language.GetNameByCode("WMSAPIInfo199"));
                        }
                    }
                }
                #endregion



            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 减少库存
        /// </summary>
        /// <param name="Identification"></param>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static DataTable WareHouseLotInfoDown(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
            string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID = "")
        {
            String LotEnable = "";
            String PrintEnable = "";
            string lotstr = "";
            int result = 0;
            List<string> NewBarCodeList = new List<string>();
            DataTable dtLotno = new DataTable();
            DataTable lstDt = new DataTable();
            try
            {

                ///更新库存
                string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'

                               IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
                                    RETURN
                                END";
                sql = string.Format(sql, LotNo, WorkPoint, Quantity);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
                }



                //检验是否分批
                sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
                            LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
                            where a.LotNo='{0}' and a.WorkPoint='{1}'
                         ";
                sql = string.Format(sql, LotNo, WorkPoint);
                DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                if (dt.Rows.Count == 0)
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
                }
                else
                {
                    LotEnable = dt.Rows[0]["LotEnable"].ToString();
                    PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
                }
                if (LotEnable.Equals("True"))
                {
                    ///分批前添加日志
                    sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
                        '','0','{4}','31','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                    }
                    #region 获取分批后的条码(lotstr)
                    sql = @"SELECT  TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}' 
                            ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
                    sql = string.Format(sql, LotNo, WorkPoint);
                    dt = DBHelper.SQlReturnData(sql, cmd);
                    if (dt.Rows.Count == 0)
                    {
                        lotstr = LotNo + "-" + 1;
                    }
                    else
                    {
                        lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
                    }
                    NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
                    #endregion

                    #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
                    sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
                                Quantity,Amount,ExtensionID,Type,PrintTimes,
                                LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
                                WorkPoint,EATTRIBUTE1)
                            SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
                            '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
                            a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
                            a.WorkPoint ,'{1}'
                            From ICSInventoryLot a 
                            where a.LotNo='{1}' and a.WorkPoint='{3}'";
                    sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
                    cmd.CommandText = sql;
                    result = cmd.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
                    }
                    sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
                            select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'0',InDate,LockQuantity
                            ,MUSER,MUSERName,GETDATE(),'{3}',''
                            from ICSWareHouseLotInfo
                            where LotNO='{1}' AND WorkPoint='{3}'";
                    sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
                    cmd.CommandText = sql;
                    result = cmd.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
                    }
                    //插入条码单据表
                    sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
                        SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
                    sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
                    }
                    sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,LogID)
                        SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'','','{6}',
                        '','0','{7}','{8}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{9}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr);
                    cmd.CommandText = sql;
                    result = cmd.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
                    }

                    if (PrintEnable.Equals("True"))
                    {
                        sql = @"select A.LotNO AS OLDLotNo ,  C.Quantity AS OLDLotQty, A.eattribute1 as LotNO, B.Quantity AS  LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
                                from ICSWareHouseLotInfolog A  
                                left join   ICSInventoryLot  B on  A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint 
                                left join  ICSWareHouseLotInfo C  ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint 
                                left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint 
                                where A.lotno like'{0}%'  and a.workpoint='{1}'
                                ";
                        sql = string.Format(sql, LotNo, WorkPoint);
                        dtLotno = DBHelper.SQlReturnData(sql, cmd);
                        lstDt = dtLotno;
                    }

                    ///添加日志
                    sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,MergeID)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'','',c.Quantity,
                        '','0','{7}','32','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{9}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                    }

                    #endregion
                }
                else
                {
                    NewBarCodeList.Add(LotNo);

                    ///添加日志
                    sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,MergeID)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'','','{6}',
                        '','0','{7}','{8}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{9}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                    }
                }



            }
            catch (Exception)
            {
                throw;
            }
            return lstDt;
        }

        /// <summary>
        /// 修改库存
        /// </summary>
        /// <param name="Identification"></param>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoUpdate(string Identification, string TransCode, string TransSequence, string LotNo, string Quantity, string User,
            string WorkPoint, string TransType, string CheckKind, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///添加日志
                string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        a.WarehouseCode,a.LocationCode,'','',a.Quantity,
                        '{8}','0','{6}','{7}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSWareHouseLotInfo a
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckBefore.GetDescription<DBValue>(), CheckKind);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
                ///更新库存
                sql = @"UPDATE ICSWareHouseLotInfo SET Quantity='{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'";
                sql = string.Format(sql, LotNo, WorkPoint, Quantity);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
                }
                ///添加日志
                sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        a.WarehouseCode,a.LocationCode,'','',a.Quantity,
                        '{8}','0','{6}','{7}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSWareHouseLotInfo a
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, TransTypeEnum.LOTCheckAfter.GetDescription<DBValue>(), CheckKind);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// 调拨
        /// </summary>
        /// <param name="LocationCode"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static DataTable WareHouseLotInfoTransfer(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
            string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language, string MergeID)
        {
            String LotEnable = "";
            String PrintEnable = "";
            string lotstr = "";
            int result = 0;
            DataTable dtLotno = new DataTable();
            DataTable lstDt = new DataTable();
            List<string> NewBarCodeList = new List<string>();
            try
            {
                //检验是否分批
                string sql = @"SELECT b.LotEnable,b.PrintEnable FROM ICSInventoryLot a
                            LEFT JOIN ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
                            where a.LotNo='{0}' and a.WorkPoint='{1}'
                         ";
                sql = string.Format(sql, LotNo, WorkPoint);
                DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                if (dt.Rows.Count == 0)
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo369"));
                }
                else
                {
                    LotEnable = dt.Rows[0]["LotEnable"].ToString();
                    PrintEnable = dt.Rows[0]["PrintEnable"].ToString();
                }
                if (!LotEnable.Equals("False"))
                {
                    ///更新库存
                    sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'

                               IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
                                    RETURN
                                END";
                    sql = string.Format(sql, LotNo, WorkPoint, Quantity);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
                    }

                    ///分批前添加日志
                    sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{7}','{8}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'','',c.Quantity+{6},
                        '','0','{4}','31','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode, Quantity, TransCode, TransSequence);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                    }
                    #region 获取分批后的条码(lotstr)
                    sql = @"SELECT  TOP 1 LotNO FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' AND WorkPoint='{1}' 
                            ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC";
                    sql = string.Format(sql, LotNo, WorkPoint);
                    dt = DBHelper.SQlReturnData(sql, cmd);
                    if (dt.Rows.Count == 0)
                    {
                        lotstr = LotNo + "-" + 1;
                    }
                    else
                    {
                        lotstr = LotNo + "-" + (Convert.ToInt32(dt.Rows[0]["LotNO"].ToString().Split('-')[dt.Rows[0]["LotNO"].ToString().Split('-').Length - 1]) + 1).ToString();
                    }
                    NewBarCodeList.Add(lotstr);//将分批后新条码添加到新集合
                    #endregion

                    #region 将分批后的条码记录插入条码表,库存表及日志表并将原条码库存数量清零
                    sql = @"INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
                                Quantity,Amount,ExtensionID,Type,PrintTimes,
                                LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
                                WorkPoint,EATTRIBUTE1)
                            SELECT TOP 1 NEWID(),'{0}',a.InvCode,a.ProductDate,a.ExpirationDate,
                            '{2}',a.Amount,a.ExtensionID,a.Type,a.PrintTimes,
                            a.LastPrintUser,a.LastPrintTime,a.MUSER ,a.MUSERName ,GETDATE(),
                            a.WorkPoint ,'{1}'
                            From ICSInventoryLot a 
                            where a.LotNo='{1}' and a.WorkPoint='{3}'";
                    sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
                    cmd.CommandText = sql;
                    result = cmd.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo195"));//条码分批后条码表存入失败!
                    }
                    #endregion
                    sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
                            select NEWID(),'{0}',WarehouseCode,LocationCode,InvCode,'{2}',InDate,LockQuantity
                            ,MUSER,MUSERName,GETDATE(),'{3}',''
                            from ICSWareHouseLotInfo
                            where LotNO='{1}' AND WorkPoint='{3}'";
                    sql = string.Format(sql, lotstr, LotNo, Quantity, WorkPoint);
                    cmd.CommandText = sql;
                    result = cmd.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo196"));//条码分批后库存表存入失败!
                    }
                    //插入条码单据表
                    sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
                        SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
                    sql = string.Format(sql, LotNo, WorkPoint, User, lotstr);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
                    }
                    sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,LogID)
                        SELECT NEWID(),'{3}','{4}','{5}','{10}' ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'{11}','{12}','{6}',
                        '','0','{7}','{8}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{9}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID, lotstr, WarehouseCode, LocationCode);
                    cmd.CommandText = sql;
                    result = cmd.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo197"));//条码分批后库存日志表存入失败!
                    }
                    ///添加日志
                    sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,MergeID)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'','',c.Quantity,
                        '','0','{7}','32','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{9}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, MergeID);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                    }
                    if (PrintEnable.Equals("True"))
                    {
                        sql = @"select A.LotNO AS OLDLotNo ,  C.Quantity AS OLDLotQty, A.eattribute1 as LotNO, B.Quantity AS  LotQty ,b.InvCode,d.INVSTD,d.INVNAME,b.MTIME,A.TransCode
                                from ICSWareHouseLotInfolog A  
                                left join   ICSInventoryLot  B on  A.LotNO=B.LotNO and a.WorkPoint=b.WorkPoint 
                                left join  ICSWareHouseLotInfo C  ON A.LotNO=C.LotNO and a.WorkPoint=c.WorkPoint 
                                left join ICSInventory D on b.INVCODE=d.INVCODE and b.WorkPoint=d.WorkPoint 
                                where a.BusinessCode ='105'
                                and A.lotno like'{0}%'  and a.workpoint='{1}'
                                ";
                        sql = string.Format(sql, LotNo, WorkPoint);
                        dtLotno = DBHelper.SQlReturnData(sql, cmd);
                        lstDt = dtLotno;
                    }
                }
                else
                {
                    ///添加日志
                    sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        IF EXISTS(SELECT id FROM ICSWareHouseLotInfo WHERE WarehouseCode='{9}' AND LocationCode='{10}' AND WorkPoint='{1}' AND LotNo = '{0}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo355")) + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1,MergeID)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'{9}','{10}',{6},
                        '','0','{7}','{8}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,'','{11}'
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                    sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode, MergeID);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                    }

                    ///更新库存
                    sql = @"UPDATE ICSWareHouseLotInfo SET WareHouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'

                               IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
                                    RETURN
                                END";
                    sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);

                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
                    }
                }

            }
            catch (Exception)
            {
                throw;
            }
            return lstDt;
        }

        /// <summary>
        /// 移库
        /// </summary>
        /// <param name="LocationCode"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoLibrary(string Identification, string TransCode, string TransSequence, string WarehouseCode, string LocationCode,
            string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {

                string sql = @"SELECT WarehouseCode FROM ICSWareHouseLotInfo a WHERE LotNo='{0}' AND WorkPoint='{1}'";
                sql = string.Format(sql, LotNo, WorkPoint);
                DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                if (dt == null || dt.Rows.Count <= 0)
                {
                    throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo171"), LotNo));
                }
                string whcode = dt.Rows[0]["WarehouseCode"].ToString();
                ///添加日志
                sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END
                            IF('" + whcode + @"' != '{8}')
                        BEGIN
                            RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo394"), "{8}", whcode) + @"', 16, 1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
                        '','0','{6}','{7}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, TransType, BusinessCode, WarehouseCode, LocationCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
                ///添加库存
                sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity>0)
                        BEGIN
	                        RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
                            RETURN
                        END
                        IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND a.WarehouseCode='{2}')
                        BEGIN
	                        RAISERROR('" + language.GetNameByCode("WMSAPIInfo038") + @"',16,1);
                            RETURN
                        END

                        UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}' WHERE LotNo='{0}' AND WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 两步调入
        /// </summary>
        /// <param name="LocationCode"></param>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoTwoStepTransferDocIn(string Identification, string TransCode, string TransSequence, string WarehouseCode,
            string LocationCode, string LotNo, string Quantity, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///添加日志
                string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        '{9}','{10}','{6}',
                        '','0','{7}','{8}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransCode, TransSequence, Quantity, TransType, BusinessCode, WarehouseCode, LocationCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
                ///添加库存
                sql = @"IF NOT EXISTS(SELECT a.ID FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
                        BEGIN
	                        RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
                            RETURN
                        END

                        UPDATE ICSWareHouseLotInfo SET WarehouseCode='{2}',LocationCode='{3}',Quantity=Quantity+'{4}' WHERE LotNo='{0}' AND WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, WarehouseCode, LocationCode, Quantity);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存表更新失败!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 拆分、合并日志
        /// </summary>
        /// <param name="Identification"></param>
        /// <param name="LotNo"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///添加日志
                string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
                        '','',c.WarehouseCode,c.LocationCode,c.Quantity,
                        '','0','{4}','{5}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, LotNo, WorkPoint, User, Identification, TransType, BusinessCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 合并
        /// </summary>
        /// <param name="Identification"></param>
        /// <param name="LotNo"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoMerge(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
            string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///更新目标条码库存
                string sql = @"IF NOT EXISTS(SELECT a.LotNo FROM ICSInventoryLot a 
							    INNER JOIN ICSInventoryLot b ON b.LotNo='{3}' AND a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
							    WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
                            BEGIN
	                            RAISERROR('" + language.GetNameByCode("WMSAPIInfo170") + @"',16,1);
                                RETURN
                            END
                            IF NOT EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
                            BEGIN
	                            RAISERROR('" + language.GetNameByCode("WMSAPIInfo171") + @"',16,1);
                                RETURN
                            END
                            UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)+'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'
                            ";
                sql = string.Format(sql, LotNo, WorkPoint, Quantity, CurrentLotNo);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo169"));//"目标条码库存更新失败!");
                }
                ///更新原条码库存
                sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'

                        IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
                        BEGIN
	                        RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
                            RETURN
                        END";
                sql = string.Format(sql, CurrentLotNo, WorkPoint, Quantity);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
                }
                ///添加日志
                sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
                        '','',c.WarehouseCode,c.LocationCode,c.Quantity,
                        '','0','{4}','{5}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 拆分
        /// </summary>
        /// <param name="Identification"></param>
        /// <param name="LotNo"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="TransType"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoSplit(string Identification, string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint, string TransType,
            string BusinessCode, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///更新库存
                string sql = @"UPDATE ICSWareHouseLotInfo SET Quantity=ISNULL(Quantity,0)-'{2}' WHERE LotNo='{0}' AND WorkPoint='{1}'

                               IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}' AND Quantity<0)
                                BEGIN
	                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo167") + @"',16,1);
                                    RETURN
                                END";
                sql = string.Format(sql, LotNo, WorkPoint, Quantity);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo168"));//"库存更新失败!");
                }
                #region 添加库存
                //插入条码表
                sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        IF EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{4}' AND a.WorkPoint='{1}')
                        BEGIN
	                        RAISERROR('" + language.GetNameByCode("WMSAPIInfo172") + @"',16,1);
                            RETURN
                        END
                        INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.ExtensionID,'101',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,a.LotNo
                        FROM ICSInventoryLot a
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
                sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo173"));//"条码表写入失败!");
                }
                //插入条码单据表
                sql = @"INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,WorkPoint)
                        SELECT '{3}',b.TransCode,b.TransSequence,f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
                sql = string.Format(sql, LotNo, WorkPoint, User, CurrentLotNo);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo174"));//"条码单据表写入失败!");
                }
                ///添加库存
                sql = @"IF EXISTS(SELECT a.LotNo FROM ICSWareHouseLotInfo a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}')
                        BEGIN
	                        RAISERROR('" + language.GetNameByCode("WMSAPIInfo164") + @"',16,1);
                            RETURN
                        END
                        IF EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
                            INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
                            INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
                            WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
                        BEGIN
                            IF NOT EXISTS(SELECT il.InvCode FROM ICSInventoryLocation il
                                INNER JOIN ICSInventoryLot a ON a.InvCode=il.InvCode AND a.WorkPoint=il.WorkPoint
                                INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint AND il.LocationCode=d.LocationCode
                                WHERE il.Enable='1' AND a.LotNo='{0}' AND a.WorkPoint='{1}')
                            BEGIN
                                RAISERROR('" + language.GetNameByCode("WMSAPIInfo180") + @"',16,1);
                                RETURN
                            END
                        END
                        INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),a.LotNo ,d.WarehouseCode,d.LocationCode,a.InvCode ,'{3}',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo d ON a.EATTRIBUTE1=d.LotNo AND a.WorkPoint=d.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";
                sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Quantity);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
                }
                ///添加日志
                sql = @"INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}',b.TransCode,b.TransSequence,a.LotNo ,a.InvCode ,
                        '','',c.WarehouseCode,c.LocationCode,c.Quantity,
                        '','0','{4}','{5}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                sql = string.Format(sql, CurrentLotNo, WorkPoint, User, Identification, TransType, BusinessCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo166"));
                }
                #endregion
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 回写ERP ID
        /// </summary>
        /// <param name="TransType"></param>
        /// <param name="SourceDetailID"></param>
        /// <param name="Identification"></param>
        /// <param name="ID"></param>
        /// <param name="DetailID"></param>
        /// <param name="Code"></param>
        /// <param name="Sequence"></param>
        /// <param name="cmd"></param>
        public static void WareHouseLotInfoLogUpdate(string TransType, string SourceDetailID, string Identification, string ID, string DetailID, string Code, string Sequence, string col, SqlCommand cmd, Dictionary<string, string> language, string BusinessCode)
        {
            string ERPupdate = string.Empty;
            try
            {
                //采购入库
                if (TransType == TransTypeEnum.PurchaseReceiveDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE c.PODetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                
                                and  (ISNULL(a.towarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //审核的到货单
                else if (TransType == TransTypeEnum.DeliveryNotice.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint


                                WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                
                                and  (ISNULL(a.towarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //采购拒收
                else if (TransType == TransTypeEnum.PurchaseRejectDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSDeliveryNotice c ON b.TransCode=c.DNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //审核的委外到货单
                else if (TransType == TransTypeEnum.ODeliveryNotice.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                               
                                ";
                }
                //委外拒收
                else if (TransType == TransTypeEnum.OutsourcingRejectDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSODeliveryNotice c ON b.TransCode=c.ODNCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint 
                                ";
                }
                //采购退货
                else if (TransType == TransTypeEnum.PurchaseReceiveDoctNegative.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSDeliveryNotice c ON a.TransCode=c.DNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.ToWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE c.DNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.DNType='2' AND a.BusinessCode ='{7}' 

                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //委外发料
                else if (TransType == TransTypeEnum.OutsourcingIssueDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOutsourcingOrder y ON a.TransCode=y.OOCode AND a.WorkPoint=y.WorkPoint
                                INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE x.PickID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'

                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //委外退料
                else if (TransType == TransTypeEnum.ICSOutsourcingIssueDoNegative.GetDescription()
                    || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeApply.GetDescription()
                    || TransType == TransTypeEnum.ICSOutsourcingIssueDoNegativeIssue.GetDescription())
                {
                    ERPupdate = @"--根据退料单退料
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                INNER JOIN ICSOApplyNeg d ON c.OApplyNegCode=d.OApplyNegCode AND c.WorkPoint=d.WorkPoint
                                Left JOIN ICSOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE ISNULL(m.ApplyDetailID,ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                
                                --根据原条码退料-备料表
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSOutsourcingOrder y ON b.TransCode=y.OOCode AND b.WorkPoint=y.WorkPoint
                                INNER JOIN ICSOOPick x ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE x.PickID='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                
                                --根据原条码退料-申请单
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSOApply z ON b.TransCode=z.ApplyCode  AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                
                                --根据原条码退料-材料出库单
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSOIssue m ON b.TransCode=m.IssueCode  AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
                                LEFT JOIN ICSOOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
                                LEFT JOIN ICSOutsourcingOrder y ON x.OODetailID=y.OODetailID AND x.WorkPoint=y.WorkPoint
                                LEFT JOIN ICSOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //委外入库
                else if (TransType == TransTypeEnum.OutsourcingReceiveDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSOutsourcingOrder c ON b.TransCode=c.OOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE c.OODetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //委外退货
                else if (TransType == TransTypeEnum.OutsourcingReturnBack.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSODeliveryNotice c ON a.TransCode=c.ODNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.ODNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.ODNType='2' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                
                                ";
                }
                //生产发料
                else if (TransType == TransTypeEnum.MOIssueDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSMO y ON a.TransCode=y.MOCode AND a.WorkPoint=y.WorkPoint
                                INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND a.TransSequence=y.Sequence+'~'+x.Sequence AND x.WorkPoint=y.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE x.PickID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //生产退料
                else if (TransType == TransTypeEnum.MOIssueDocNegative.GetDescription()
                        || TransType == TransTypeEnum.MOIssueDocNegativeApply.GetDescription()
                        || TransType == TransTypeEnum.MOIssueDocNegativeIssue.GetDescription())
                {
                    ERPupdate = @"--根据退料单退料
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSMOApplyNegDetail c ON b.TransCode=c.ApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                INNER JOIN ICSMOApplyNeg d ON c.ApplyNegCode=d.ApplyNegCode AND c.WorkPoint=d.WorkPoint
                                left JOIN ICSMOIssue m ON (CASE WHEN d.Type='3' THEN c.SourceDetailID ELSE 0 END)=m.IssueDetailID AND c.WorkPoint=m.WorkPoint
                                WHERE ISNULL(m.ApplyDetailID, ISNULL(m.PickID, c.SourceDetailID))='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                --根据原条码退料-备料表
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSMO y ON b.TransCode=y.MOCode AND b.WorkPoint=y.WorkPoint
                                INNER JOIN ICSMOPick x ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint AND b.TransSequence = y.Sequence + '~' + x.Sequence
                                WHERE x.PickID='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                --根据原条码退料-申请单
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSMOApply z ON b.TransCode=z.ApplyCode  AND b.TransSequence=z.Sequence AND b.WorkPoint=z.WorkPoint
                                WHERE z.ApplyDetailID='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                --根据原条码退料-材料出库单
                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSWareHouseLotInfoLog b ON a.LogID=b.ID AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSMOIssue m ON b.TransCode=m.IssueCode  AND b.TransSequence=m.Sequence AND b.WorkPoint=m.WorkPoint
                                LEFT JOIN ICSMOPick x ON m.PickID=x.PickID AND m.WorkPoint=x.WorkPoint
                                LEFT JOIN ICSMO y ON x.MODetailID=y.MODetailID AND x.WorkPoint=y.WorkPoint
                                LEFT JOIN ICSMOApply z ON m.ApplyDetailID=z.ApplyDetailID AND m.WorkPoint=z.WorkPoint
                                WHERE ISNULL(m.ApplyDetailID, m.PickID)='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //生产入库
                else if (TransType == TransTypeEnum.ManufactureReceiveDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSMO c ON b.TransCode=c.MOCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE c.MODetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //开立的生产入库单
                else if (TransType == TransTypeEnum.ManufactureReceive.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSManufactureReceive c ON b.TransCode=c.RCVCode AND b.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.RCVID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND c.Type='1' AND a.BusinessCode ='{7}'
                                ";
                }
                //销售出库
                else if (TransType == TransTypeEnum.SalesShipmentDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.Type='1' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                
                                ";
                }
                //销售退货
                else if (TransType == TransTypeEnum.SalesShipmentDocNegative.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.Type='2' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'                               
                                ";
                }

                //返工工单
                else if (TransType == TransTypeEnum.ReWorkReceiveMo.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSMO c ON b.TransCode=c.MOCode  AND b.WorkPoint=c.WorkPoint
                                INNER JOIN ICSMOPick d ON d.MODetailID=c.MODetailID  AND d.WorkPoint=c.WorkPoint and b.TransSequence=c.Sequence+'-'+d.Sequence
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE d.PickID='{3}' AND a.Identification='{1}' AND  ERPUpload='0'  AND a.BusinessCode ='{7}'
                                 and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                
                                ";
                }
                //一步调拨
                else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.TransferID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.Type='1' AND a.BusinessCode ='{7}'
                                ";
                }
                //调拨
                else if (TransType == TransTypeEnum.OneStepTransferDocIn.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSTransfer c ON a.TransCode=c.TransferNO AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.TransferID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.Type='1' AND a.BusinessCode ='{7}'
                                ";
                }
                //两步调出
                else if (TransType == TransTypeEnum.TwoStepTransferDocOut.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSTransfer d ON c.TransferDetailID=d.TransferDetailID AND c.WorkPoint=d.WorkPoint
                                WHERE c.OutID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //两步调入
                else if (TransType == TransTypeEnum.TwoStepTransferDocIn.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOtherIn b ON a.TransCode=b.InCode AND a.TransSequence=b.Sequence AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSTransfer c ON b.TransferDetailID=c.TransferDetailID AND b.WorkPoint=c.WorkPoint
                                WHERE b.InID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //销售退货-原条码
                else if (TransType == TransTypeEnum.SalesReturnBack.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSSDN c ON a.TransCode=c.SDNCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.SDNDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.Type='2' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'                                                               
                                ";
                }
                //其他出库
                else if (TransType == TransTypeEnum.OtherOutDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOtherOut c ON a.TransCode=c.OutCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.OutID='{0}' AND a.Identification='{1}' AND  a.ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //其他入库
                else if (TransType == TransTypeEnum.OtherInDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSOtherIn c ON b.TransCode=c.InCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                WHERE c.InID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //拆卸单
                else if (TransType == TransTypeEnum.DisassemblyDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE d set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                INNER JOIN ICSWareHouseLotInfoLog d ON b.TransCode=d.TransCode AND d.TransSequence='1' AND b.WorkPoint=d.WorkPoint
                                WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND  d.ERPUpload='0' AND a.BusinessCode ='{7}'

                                UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSDisassemblyDoc c ON b.TransCode=c.DABDOCCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                WHERE c.DABDOCID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND  c.DABDOCType='2' AND a.BusinessCode ='{7}'
                                ";
                }
                //领料申请单
                else if (TransType == TransTypeEnum.MOApply.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSMOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //委外领料申请单
                else if (TransType == TransTypeEnum.OOApply.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOApply c ON a.TransCode=c.ApplyCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint

                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint

                                WHERE c.ApplyDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //开立材料出库
                else if (TransType == TransTypeEnum.MOIssue.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSMOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.IssueID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //开立委外材料出库
                else if (TransType == TransTypeEnum.OOIssue.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOIssue c ON a.TransCode=c.IssueCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.IssueID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                ";
                }
                //开立红字入库单
                else if (TransType == TransTypeEnum.PurchaseReceive.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSPurchaseReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.RCVID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
                                ";
                }
                //开立委外红字入库单
                else if (TransType == TransTypeEnum.OutsourcingReceiveDocNegative.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSOutsourcingReceive c ON a.TransCode=c.RCVCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                WHERE c.RCVID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND c.Type='2' AND a.BusinessCode ='{7}'
                                ";
                }
                //借用
                else if (TransType == TransTypeEnum.BrrowDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSBrrow c ON a.TransCode=c.BrrowCode AND a.TransSequence=c.Sequence AND a.WorkPoint=c.WorkPoint
                                INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.BrrowDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.fromwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                ";
                }
                //归还
                else if (TransType == TransTypeEnum.ReturnDoc.GetDescription())
                {
                    ERPupdate = @"UPDATE a set ERPID='{2}',ERPDetailID='{3}',ERPCode='{4}',ERPSequence='{5}',ERPUpload='1'
                                FROM ICSWareHouseLotInfoLog a
                                INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                                INNER JOIN ICSReturn c ON b.TransCode=c.ReturnCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                                 INNER JOIN ICSInventoryLot lot ON a.LotNo=lot.LotNo AND a.WorkPoint=lot.WorkPoint
                                INNER JOIN ICSExtension ext ON lot.ExtensionID=ext.ID AND lot.WorkPoint=ext.WorkPoint
                                INNER JOIN ICSInventory inv ON a.InvCode=inv.InvCode AND a.WorkPoint=inv.WorkPoint
                                LEFT JOIN ICSInventoryBatchEnable invBat ON a.InvCode=invBat.InvCode AND a.FromWarehouseCode=invBat.WHCode AND a.WorkPoint=invBat.WorkPoint
                                WHERE c.ReturnDetailID='{0}' AND a.Identification='{1}' AND  ERPUpload='0' AND a.BusinessCode ='{7}'
                                and (ISNULL(a.tohwarehousecode, '') + ISNULL(ext.ProjectCode, '') + CASE WHEN (invBat.BatchEnable IS NULL AND ISNULL(inv.BatchEnable, '0')='1') OR ISNULL(invBat.BatchEnable, '0')='1' THEN ISNULL(ext.BatchCode, '') ELSE '' END + ISNULL(ext.Version, '') + ISNULL(ext.Brand, '') +
	                            ISNULL(ext.cFree1, '') + ISNULL(ext.cFree2, '') + ISNULL(ext.cFree3, '') + ISNULL(ext.cFree4, '') + ISNULL(ext.cFree5, '')+ ISNULL(ext.cFree6, '') + ISNULL(ext.cFree7, '') + ISNULL(ext.cFree8, '') + ISNULL(ext.cFree9, '') + ISNULL(ext.cFree10, ''))='{6}'
                                 ";
                }

                ERPupdate = string.Format(ERPupdate, SourceDetailID, Identification, ID, DetailID, Code, Sequence, col, BusinessCode);
                if (!DBHelper.ExecuteNonQuery(ERPupdate, cmd))
                {
                    throw new Exception(TransType + language.GetNameByCode("WMSAPIInfo175"));//"回写日志失败!");
                }
            }
            catch (Exception ex)
            {
                log.Debug(ex.ToString());
                log.Debug(TransType + Environment.NewLine + ERPupdate);
                throw;
            }
        }

        /// <summary>
        /// 倒冲时子件已领数量回写
        /// </summary>
        public static void DetailQTYUpdate()
        {

        }

        /// <summary>
        /// 生成条码
        /// </summary>
        /// <param name="LotNo"></param>
        /// <param name="Quantity"></param>
        /// <param name="TransCode"></param>
        /// <param name="TransSequence"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="Identification"></param>
        /// <param name="User"></param>
        /// <param name="InvCode"></param>
        /// <param name="BusinessCode"></param>
        /// <param name="ProjectCode"></param>
        /// <param name="BatchCode"></param>
        /// <param name="Version"></param>
        /// <param name="Brand"></param>
        /// <param name="cFree1"></param>
        /// <param name="cFree2"></param>
        /// <param name="cFree3"></param>
        /// <param name="cFree4"></param>
        /// <param name="cFree5"></param>
        /// <param name="cFree6"></param>
        /// <param name="cFree7"></param>
        /// <param name="cFree8"></param>
        /// <param name="cFree9"></param>
        /// <param name="cFree10"></param>
        /// <param name="cmd"></param>
        /// <param name="language"></param>
        public static void CreateLotNo(string LotNo, string Quantity, string TransCode, string TransSequence, string WorkPoint, string Identification, string User, string InvCode, string BusinessCode,
            string ProjectCode, string BatchCode, string Version, string Brand, string cFree1, string cFree2, string cFree3, string cFree4, string cFree5, string cFree6, string cFree7, string cFree8, string cFree9, string cFree10, SqlCommand cmd, Dictionary<string, string> language, string LocationCode, string OLDLotNo)
        {
            try
            {
                String EffectiveEnable = "";
                String Colspan = "";
                String IDD = "";
                int EffectiveDays = 0;
                String Time = "";
                int EffectiveDayss = 0;
                DateTime dtt;
                DateTime now = DateTime.Now;
                string sql = string.Empty;
                //string sql = @"select EffectiveEnable,EffectiveDays from ICSInventory a
                //               Left Join ICSMO b ON a.InvCode=b.InvCode and a.WorkPoint = b.WorkPoint
                //               where b.MoCode='{0}' and b.WorkPoint='{1}'";
                //sql = string.Format(sql, TransCode, WorkPoint);
                //DataTable dt = DBHelper.SQlReturnData(sql, cmd);
                //if (dt.Rows.Count == 0)
                //{
                //    throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
                //}
                //else
                //{
                //    EffectiveEnable = dt.Rows[0]["EffectiveEnable"].ToString();
                //EffectiveDays = Convert.ToInt32(dt.Rows[0]["EffectiveDays"]);
                //}
                //EffectiveDayss = Convert.ToInt32(EffectiveDays);
                //if (!EffectiveEnable.Equals("False"))
                //{
                int year = now.Year;
                int month = now.Month;
                int day = now.Day;
                int n = DateTime.DaysInMonth(year, month);
                int k = day + EffectiveDays;
                if (k > n)
                {
                    day = EffectiveDays - (n - day);
                    month = month + 1;
                    if (month > 12)
                    {
                        month = 1;
                        year = year + 1;
                    }
                }
                else
                {
                    day = day + EffectiveDays;
                }
                Time = year + "-" + month + "-" + day;
                //}
                //else
                //{
                //    Time = "2999-12-31 00:00:00.000";
                //}
                dtt = Convert.ToDateTime(Time);

                //检验自由项
                Colspan = ProjectCode + "~" + BatchCode + "~" + Version
                        + "~" + Brand + "~" + cFree1
                        + "~" + cFree2 + "~" + cFree3 + "~" + cFree4
                        + "~" + cFree5 + "~" + cFree6 + "~" + cFree7
                        + "~" + cFree8 + "~" + cFree9 + "~" + cFree10;
                sql = @"select ID,Colspan from ICSExtension a
                               where Colspan='{0}' and WorkPoint='{1}'";
                sql = string.Format(sql, Colspan, WorkPoint);
                DataTable dttt = DBHelper.SQlReturnData(sql, cmd);
                if (dttt.Rows.Count == 0)
                {
                    IDD = Guid.NewGuid().ToString();
                    sql = @"Insert into ICSExtension(ID, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, MTIME, MUSER, MUSERName, WorkPoint) 
                        select '{17}','{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}',GETDATE(),'{15}',f.F_RealName,'{16}'from Sys_SRM_User f where f.F_Account='{15}' and f.F_Location='{16}'";
                    sql = string.Format(sql, Colspan, ProjectCode, BatchCode, Version, Brand, cFree1, cFree2, cFree3, cFree4, cFree5, cFree6, cFree7, cFree8, cFree9, cFree10, User, WorkPoint, IDD);
                    if (!DBHelper.ExecuteNonQuery(sql, cmd))
                    {
                        throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
                    }
                }
                else
                {
                    IDD = dttt.Rows[0]["ID"].ToString();
                }
                //存入条码表
                sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{4}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,
                        Quantity,Amount,ExtensionID,Type,PrintTimes,
                        LastPrintUser,LastPrintTime,MUSER,MUSERName,MTIME,
                        WorkPoint,EATTRIBUTE1)
                        SELECT TOP 1 NEWID(),'{0}','{8}',GETDATE(),'{6}',
                        '{1}','0','{7}','16',null,
                        null,null,'{2}' ,f.F_RealName ,GETDATE(),
                        '{4}' ,''
                        FROM Sys_SRM_User f
                        where f.F_Account='{2}' and f.F_Location='{4}'
                        ";
                sql = string.Format(sql, LotNo, Quantity, User, TransCode, WorkPoint, TransSequence, dtt, IDD, InvCode);
                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo366"));
                }

                ///存入条码关联表
                sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{3}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{2}") + @"',16,1);
                            RETURN
                        END

                        INSERT INTO ICSInventoryLotDetail(LotNo,TransCode,TransSequence,MUSER,MUSERName,MTIME,
                         WorkPoint,EATTRIBUTE1)
                        SELECT '{4}','{0}','{1}',f.F_Account ,f.F_RealName,GETDATE(),
                        a.WorkPoint,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{5}' AND a.WorkPoint='{3}'
                        ";
                sql = string.Format(sql, TransCode, TransSequence, User, WorkPoint, LotNo, OLDLotNo);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo367"));
                }

                //存入库存表
                sql = @"INSERT INTO ICSWareHouseLotInfo(ID,LotNO,WarehouseCode,LocationCode,InvCode,Quantity,InDate,LockQuantity,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1)
                            SELECT NEWID(),a.LotNo ,e.WarehouseCode,d.LocationCode,a.InvCode ,'0',SYSDATETIME(),'0',f.F_Account ,f.F_RealName ,SYSDATETIME() ,a.WorkPoint ,''
                            FROM ICSInventoryLot a
                            INNER JOIN ICSInventoryLotDetail b ON a.LotNo=b.LotNo AND a.WorkPoint=b.WorkPoint
                            --INNER JOIN ICSOApplyNegDetail c ON b.TransCode=c.OApplyNegCode AND b.TransSequence=c.Sequence AND b.WorkPoint=c.WorkPoint
                            INNER JOIN ICSLocation d ON d.LocationCode='{4}' AND a.WorkPoint=d.WorkPoint
                            INNER JOIN ICSWarehouse e ON d.WHID=e.ID AND d.WorkPoint=e.WorkPoint
                            INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                            WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'";

                sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, LocationCode);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(language.GetNameByCode("WMSAPIInfo165"));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 料架条码绑定
        /// </summary>
        /// <param name="LotNo"></param>
        /// <param name="ContainerCode"></param>
        /// <param name="User"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="cmd"></param>
        /// <param name="language"></param>
        public static void ContainerBind(string LotNo, string ContainerCode, string ContainerType, string User, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///添加日志
                string sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{3}' AND F_Location='{2}')
                        BEGIN
	                        RAISERROR('" + string.Format(language.GetNameByCode("WMSAPIInfo060"), "{3}") + @"',16,1);
                            RETURN
                        END
                        INSERT INTO ICSContainerLot
                        (ID,ContainerID,LotNo,MUSER,MUSERName,WorkPoint,MTIME,EATTRIBUTE1)
                        SELECT NEWID(),ID,'{0}','{3}'
                        ,(SELECT F_RealName FROM Sys_SRM_User WHERE F_Account='{3}' AND F_Location='{2}'),'{2}',GETDATE(),'{4}' FROM ICSContainer
                        WHERE ContainerCode='{1}' AND WorkPoint='{2}'
                        ";
                sql = string.Format(sql, LotNo, ContainerCode, WorkPoint, User, ContainerType);

                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo060"), ContainerCode, LotNo));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// 料架条码解绑
        /// </summary>
        /// <param name="ContainerCode"></param>
        /// <param name="WorkPoint"></param>
        /// <param name="cmd"></param>
        /// <param name="language"></param>
        public static void ContainerUnBind(string ContainerCode, string WorkPoint, SqlCommand cmd, Dictionary<string, string> language)
        {
            try
            {
                ///添加日志
                string sql = @"delete from ICSContainerLot
                               WHERE ContainerCode='{0}' AND WorkPoint='{1}'";
                sql = string.Format(sql, ContainerCode, WorkPoint);
                if (!DBHelper.ExecuteNonQuery(sql, cmd))
                {
                    throw new Exception(string.Format(language.GetNameByCode("WMSAPIInfo201"), ContainerCode, ContainerCode));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}