|
|
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<ICSVendor> { /// <summary>
/// 获取分批条码
/// </summary>
public string GetNewLotNo(string LotNO) { DataTable dt = new DataTable();
List<DbParameter> parameter = new List<DbParameter>(); //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<LOTCreateIModel> model = new List<LOTCreateIModel>(); model = JsonConvert.DeserializeObject<List<LOTCreateIModel>>(Parameter.ToString()); msg= LOTSplitCreate(model); } } catch (Exception ex) { msg = ex.Message; } return msg; }
/// <summary>
/// 拆分
/// </summary>
/// <param name="JsonData"></param>
/// <returns></returns>
public static string LOTSplitCreate(List<LOTCreateIModel> 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); }
} /// <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 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; } /// <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 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); } }
/// <summary>
/// 根据ID获取条码
/// </summary>
/// <returns></returns>
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 { /// <summary>
/// 条码
/// </summary>
public string LotNo { get; set; } /// <summary>
/// 操作人
/// </summary>
public string User { get; set; } /// <summary>
/// 操作时间
/// </summary>
public DateTime MTime { get; set; }
/// <summary>
/// 站点
/// </summary>
public string WorkPoint { get; set; }
public List<LOTCreateIModelInfo> detail { get; set; } } public class LOTCreateIModelInfo { /// 合并条码
/// </summary>
public string CurrentLotNo { get; set; } /// <summary>
/// 合并数量
/// </summary>
public string CurrentQuantity { get; set; } /// <summary>
/// 站点
/// </summary>
public string WorkPoint { get; set; }
}
}}
|