using NFine.Data.Extensions; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using NFine.Code; using NFine.Repository; using System.Data.Common; using NFine.Domain._03_Entity.SRM; using ICS.Application.Entity; using Newtonsoft.Json; using System.Configuration; using System.Data.SqlClient; using ICS.Data; using Newtonsoft.Json.Linq; using System.Net; using System.IO; using NFine.Domain._03_Entity.WMS; namespace NFine.Application.WMS { public class InspectionDeciliterApp : RepositoryFactory { /// /// 获取分批条码 /// public string GetNewLotNo(string LotNO) { DataTable dt = new DataTable(); List parameter = new List(); //string sql = @"select max(LotNo) as NewLotNo from ICSInventoryLot where EATTRIBUTE1='{0}' "; string sql = @"SELECT TOP 1 LotNO as NewLotNo FROM ICSInventoryLot WHERE EATTRIBUTE1='{0}' ORDER BY CAST(SUBSTRING(LotNO, (LEN(LotNO)-CHARINDEX('-',REVERSE(LotNO))+1)+1,CHARINDEX('-',REVERSE(LotNO))-1) AS INT) DESC"; sql = string.Format(sql, LotNO); dt= Repository().FindTableBySql(sql.ToString()); if (dt==null||dt.Rows.Count==0|| dt.Rows[0]["NewLotNo"].ToString()=="") { return LotNO+"-1"; } else { string newLotNO = dt.Rows[0]["NewLotNo"].ToString(); int COUNT = Convert.ToInt32(newLotNO.Substring(newLotNO.LastIndexOf('-') + 1)) + 1; return LotNO + "-"+ COUNT.ToString(); } } public string Split(string Parameter) { string msg = ""; try { if (Parameter != null && !string.IsNullOrWhiteSpace(Parameter.ToString()) && Parameter.ToString() != "[]") { List model = new List(); model = JsonConvert.DeserializeObject>(Parameter.ToString()); msg= LOTSplitCreate(model); } } catch (Exception ex) { msg = ex.Message; } return msg; } /// /// 拆分 /// /// /// public static string LOTSplitCreate(List JsonData) { string newlotno = ""; string msg; DataTable printTable = new DataTable(); if (JsonData.Count <= 0) { throw new Exception("");//"传送数据为空!" } try { string Identification = Guid.NewGuid().ToString(); foreach (var item in JsonData) { if (string.IsNullOrEmpty(item.LotNo)) { msg = "条码不能为空"; throw new Exception("条码不能为空");//"条码不能为空!" } else if (item.detail.Count <= 0) { msg = "明细信息不能为空"; throw new Exception("明细信息不能为空");//"明细信息不能为空!"); } //拆分前日志 WareHouseLotInfoLog(Identification, item.LotNo, item.User, item.WorkPoint, "4", "71", ""); foreach (var info in item.detail) { newlotno = info.CurrentLotNo; //更新条码信息 WareHouseLotInfoSplit(item.LotNo, info.CurrentLotNo, info.CurrentQuantity, item.User, item.WorkPoint); } //拆分后日志 printTable = WareHouseLotInfoLog(Identification, item.LotNo, item.User, item.WorkPoint, "4","72", newlotno); } return ""; } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 拆分、合并日志 /// /// /// /// /// /// /// /// public static DataTable WareHouseLotInfoLog(string Identification, string LotNo, string User, string WorkPoint, string TransType, string BusinessCode, string newLotno) { String LotEnable = ""; DataTable dtLotno = new DataTable(); DataTable lstDt = new DataTable(); 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 = SqlHelper.CmdExecuteDataTable(sql); if (dt.Rows.Count == 0) { throw new Exception("条码不存在,操作失败"); } else { LotEnable = dt.Rows[0]["LotEnable"].ToString(); } ///添加日志 sql = @"IF NOT EXISTS(SELECT F_Account FROM Sys_SRM_User WHERE F_Account='{2}' AND F_Location='{1}') BEGIN RAISERROR('用户不存在',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 , '','','','',a.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 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 (SqlHelper.ExecuteNonQuery(sql) < 0) { throw new Exception("日志表更新失败"); } } catch (Exception) { throw; } return lstDt; } /// /// 拆分 /// /// /// /// /// /// /// /// public static void WareHouseLotInfoSplit( string LotNo, string CurrentLotNo, string Quantity, string User, string WorkPoint) { try { string sql = string.Empty; #region 添加库存 //插入条码表 sql = @" IF NOt EXISTS(SELECT a.LotNo FROM ICSInventoryLot a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}') BEGIN RAISERROR('原条码不存在,操作失败',16,1); RETURN END IF EXISTS(SELECT a.LotNo FROM ICSContainerLot a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}') BEGIN INSERT INTO ICSContainerLot([ID], [ContainerID], [LotNo], [MUSER], [MUSERName], [WorkPoint], [MTIME], [EATTRIBUTE1], [EATTRIBUTE2], [EATTRIBUTE3], [EATTRIBUTE4], [EATTRIBUTE5], [EATTRIBUTE6], [EATTRIBUTE7], [EATTRIBUTE8], [EATTRIBUTE9], [EATTRIBUTE10]) SELECT NEWID(),ContainerID,'{4}' ,MUSER,MUSERName,WorkPoint ,MTIME,EATTRIBUTE1,EATTRIBUTE2, EATTRIBUTE3, EATTRIBUTE4, EATTRIBUTE5, EATTRIBUTE6, EATTRIBUTE7, EATTRIBUTE8, EATTRIBUTE9, EATTRIBUTE10 FROM ICSContainerLot WHERE LotNo='{4}' AND WorkPoint='{1}' END INSERT INTO ICSInventoryLot(ID,LotNo,InvCode,ProductDate,ExpirationDate,Quantity,Amount,ExtensionID,Type,MUSER,MUSERName,MTIME,WorkPoint,EATTRIBUTE1,EATTRIBUTE7) SELECT NEWID(),'{4}' ,a.InvCode,a.ProductDate,a.ExpirationDate ,'{3}',a.Amount/a.Quantity*{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}'; UPDATE ICSInventoryLot SET Quantity=Quantity-{3} WHERE LotNo='{0}' AND WorkPoint='{1}'; IF EXISTS(SELECT a.LotNo FROM ICSASNDetail a WHERE a.LotNo='{0}' AND a.WorkPoint='{1}') BEGIN INSERT INTO [dbo].[ICSASNDetail] ([ID], [ASNCode], [Sequence], [LotNo], [Quantity], [Amount], [DNQuantity], [DNAmount], [MUSER], [MUSERName], [WorkPoint], [MTIME]) SELECT NEWID(),a.ASNCode,a.Sequence,'{4}',{3},a.Amount,{3},a.DNAmount,f.F_Account ,f.F_RealName,a.WorkPoint,GETDATE() FROM ICSASNDetail 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}' ; UPDATE ICSASNDetail SET Quantity=Quantity-{3} ,DNQuantity=DNQuantity-{3} WHERE LotNo='{0}' AND WorkPoint='{1}' END"; sql = string.Format(sql, LotNo, WorkPoint, User, Quantity, CurrentLotNo); if (SqlHelper.ExecuteNonQuery(sql) < 0) { throw new Exception("条码表写入失败!");//"条码表写入失败!"); } //插入条码单据表 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 (SqlHelper.ExecuteNonQuery(sql) < 0) { throw new Exception("条码单据表写入失败!");//"条码单据表写入失败!"); } #endregion } catch (Exception) { throw; } } //接口api解析 public static string HttpPost(string url, string body) { try { Encoding encoding = Encoding.UTF8; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*"; request.ContentType = "application/json; charset=utf-8"; byte[] buffer = encoding.GetBytes(body); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)) { return reader.ReadToEnd(); } } catch (WebException ex) { throw new Exception(ex.Message); } } /// /// 根据ID获取条码 /// /// public DataTable GetLotNoByID(string ID) { string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location; string sql = @"select '' as ID,'' as LotNo union all SELECT ID,LotNo FROM ICSWareHouseLotInfo WITH (NOLOCK) WHERE ID in ({0}) "; sql = string.Format(sql, ID.TrimEnd(',')); //string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode; //if (role != "admin") //{ // sql += " and b.WorkPoint='" + WorkPoint + "'"; //} DataTable dt = SqlHelper.GetDataTableBySql(sql); return dt; } public class LOTCreateIModel { /// /// 条码 /// public string LotNo { get; set; } /// /// 操作人 /// public string User { get; set; } /// /// 操作时间 /// public DateTime MTime { get; set; } /// /// 站点 /// public string WorkPoint { get; set; } public List detail { get; set; } } public class LOTCreateIModelInfo { /// 合并条码 /// public string CurrentLotNo { get; set; } /// /// 合并数量 /// public string CurrentQuantity { get; set; } /// /// 站点 /// public string WorkPoint { get; set; } } } }