using Dapper; using Estsh.Core.Dapper; using Estsh.Core.IRepositories; using Estsh.Core.Model.Result; using Estsh.Core.Models; using Estsh.Core.Repository.IRepositories; using System.Collections; using System.Data; using System.Text; /*************************************************************************************************** * * 更新人:sitong.dong * 描述:日程单条码手工生成数据访问类 * 修改时间:2022.06.22 * 修改日志:系统迭代升级 * **************************************************************************************************/ namespace Estsh.Core.Repositories { /// /// 处理日程单条码手工生成模块的业务数据 /// public class PurchasePrintRepository : BaseRepository, IPurchasePrintRepository { public PurchasePrintRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext) { } #region 成员方法 /// /// 获取分页数据列表 /// public List getListByPage(int PageSize, int PageIndex, string strWhere, string OrderBy) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); DynamicParameters Params = new DynamicParameters(); Params.Add("@TotalCount", 100); Params.Add("@TotalPage", 100); Params.Add("@GroupColumn", ""); Params.Add("@Table", "dbo.sys_stock"); Params.Add("@Column", "*"); Params.Add("@PageSize", PageSize); Params.Add("@CurrentPage", PageIndex); Params.Add("@Condition", strWhere); Params.Add("@OrderColumn", OrderBy); Params.Add("@Group", 0); List result = dbConn.Query("Com_Pagination", Params, commandType: CommandType.StoredProcedure).ToList(); return result; } } /// /// 获取采购单信息,用于下拉列表框填充数据 /// /// public List getBuyNo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT DISTINCT UPPER(xw_po_nbr) as [value],UPPER(xw_po_nbr) as [key] FROM xw_po_mstr ORDER BY [value]"); List result = dbConn.Query(strSql.ToString()).ToList(); return result; } } /// /// 获取单据编号 /// /// 单据类型,dbo.sys_sn_seed 表中的 sn_name 字段 /// 单据前缀 /// 单据编号 public String GetOrderNo(string orderType, string orderPrefix) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); DynamicParameters list = new DynamicParameters(); list.Add("@order_type", orderType); list.Add("@order_prefix", orderPrefix); list.Add("@order_no", null, DbType.String, ParameterDirection.Output, 50); var hashtable = dbConn.Execute("sys_create_orderno", list, commandType: CommandType.StoredProcedure); string result = list.Get("@order_no"); return result; } } /// /// 根据采购单号获取相应的零件号 /// /// public List getPartNo(String buyNo) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT p.part_id as [value],p.part_no +' | '+ p.part_spec as [key],p.part_no,p.default_box_qty "); strSql.Append(" FROM xw_pod_det det join sys_part p on det.xw_pod_part = p.part_no AND p.part_type = 0 "); strSql.Append(" WHERE UPPER(xw_pod_nbr)=@xw_pod_nbr "); DynamicParameters ht = new DynamicParameters(); ht.Add("@xw_pod_nbr", buyNo); List result = dbConn.Query(strSql.ToString(), ht).ToList(); return result; } } public bool saveBuyOrder(Hashtable htData) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); int loginUserFactory = Convert.ToInt32(htData["loginFactory"]); string orderNo = Convert.ToString(htData["orderNo"]); int vendorId = Convert.ToInt32(htData["vendor"].ToString()); string seDate = Convert.ToString(htData["dtpSeDate"]); string shipNo = Convert.ToString(htData["shipNo"]); string typeId = Convert.ToString(htData["modelType"]); string factory = Convert.ToString(htData["factory"]); string buyNo = Convert.ToString(htData["buyNo"]); string partId = Convert.ToString(htData["partId"]); int qty = Convert.ToInt32(htData["qty"].ToString()); int snpQty = Convert.ToInt32(htData["snpQty"].ToString()); int loginUserId = Convert.ToInt32(htData["loginUserId"].ToString()); int cartonQty = (int)Math.Ceiling(Convert.ToDouble(qty) / snpQty); string lotNo = seDate.Replace("-", "").Substring(2); string sqlPart = "select top 1 part_no from sys_part where part_id = @part_id"; DynamicParameters htPart = new DynamicParameters(); htPart.Add("@part_id", partId); string partNo = Convert.ToString(dbConn.ExecuteScalar(sqlPart, htPart)); StringBuilder sql = new StringBuilder(1024); List sqlStrings = new List(); List parameters = new List(); DynamicParameters param = new DynamicParameters(); //删除订单 deleteBuyOrder(htData); sql.Remove(0, sql.Length); sql.Append("INSERT INTO g_buy_day_fact (order_no,weekly_order_no,type_id,buy_no,vendor_id,se_date,part_id,lot_no "); sql.Append(" ,qty,snp_qty,carton_qty,rec_qty,rec_carton_qty,diff_qty,status,is_closed,type,factory_id,enabled,create_userid, create_time) "); sql.Append(" VALUES (@order_no,@order_no,@type_id,@buy_no,@vendor_id,@se_date,@part_id,@lot_no "); sql.Append(" ,@qty,@snpQty,@carton_qty,0,0,@qty,@status,@is_closed,@type,@factory_id,@enabled,@user_id, CONVERT(varchar(50), GETDATE(), 21))"); param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@type_id", typeId); param.Add("@buy_no", buyNo); param.Add("@vendor_id", vendorId); param.Add("@se_date", seDate.Replace("-", "/")); param.Add("@part_id", partId); param.Add("@lot_no", lotNo); param.Add("@qty", qty); param.Add("@snpQty", snpQty); param.Add("@carton_qty", cartonQty); param.Add("@status", "0"); param.Add("@is_closed", "N"); param.Add("@type", "1"); param.Add("@factory_id", factory); param.Add("@enabled", "Y"); param.Add("@user_id", loginUserId); sqlStrings.Add(sql.ToString()); parameters.Add(param); sql.Remove(0, sql.Length); sql.Append("SELECT TOP 1 RIGHT(carton_no,3) AS carton_no,lot_no FROM sys_stock (NOLOCK) WHERE 1=1 "); sql.Append(" AND part_id=@part_id ORDER BY carton_no DESC"); param = new DynamicParameters(); param.Add("@type_id", typeId); //param.Add("@se_date", seDate.Replace("-", "/")); param.Add("@part_id", partId); int iLastQty = 0; List dtCarton = dbConn.Query(sql.ToString(), param).ToList(); if (dtCarton != null && dtCarton.Count > 0) { iLastQty = Convert.ToInt32(dtCarton[0].CartonNo.ToString()); } int iRema = qty % snpQty; for (int j = 1; j <= cartonQty; j++) { iLastQty++; string strCartonNo = GetCartonNo(partNo, lotNo, iLastQty); string strCartonQty = snpQty.ToString(); if (j == cartonQty && iRema > 0) { strCartonQty = iRema.ToString(); } sql.Remove(0, sql.Length); sql.Append("INSERT INTO sys_stock (vendor_id,part_id "); sql.Append(" ,carton_no,lot_no,qty,snp_qty,status,factory_id,enabled,create_userid, create_time) "); sql.Append(" VALUES (@vendor_id,@part_id "); sql.Append(" ,@carton_no,@lot_no,@qty,@snpQty,@status,@factory_id,@enabled,@user_id, CONVERT(varchar(50), GETDATE(), 21))"); param = new DynamicParameters(); //param.Add("@order_no", orderNo); //param.Add("@type_id", typeId); //param.Add("@buy_no", buyNo); param.Add("@vendor_id", vendorId); //param.Add("@se_date", seDate.Replace("-", "/")); param.Add("@part_id", partId); param.Add("@carton_no", strCartonNo); param.Add("@lot_no", lotNo); param.Add("@qty", strCartonQty); param.Add("@snpQty", snpQty.ToString()); param.Add("@status", "A"); //param.Add("@type", "1"); //param.Add("@ship_no", shipNo); param.Add("@factory_id", loginUserFactory); param.Add("@enabled", "Y"); param.Add("@user_id", loginUserId); sqlStrings.Add(sql.ToString()); parameters.Add(param); } IDbTransaction transaction = dbConn.BeginTransaction(); for (int i = 0; i < sqlStrings.Count; i++) { dbConn.Execute(sqlStrings[i], parameters[i], transaction); } transaction.Commit(); return true; } } /// /// 箱条码生成(零件号(18)+批号(6)+流水号(3)) /// /// 零件号 /// 批号 /// 流水号 /// private string GetCartonNo(string partNo, string lotNo, int seq) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string strCartonNo = partNo + "000000000000000000"; strCartonNo = strCartonNo.Substring(0, 18) + lotNo; string strSeq = "000" + seq.ToString(); return strCartonNo + strSeq.Substring(strSeq.Length - 3); } } /// /// 删除采购单信息 /// /// /// public bool deleteBuyOrder(Hashtable htData) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); IDbTransaction transaction = dbConn.BeginTransaction(); string orderNo = Convert.ToString(htData["orderNo"]); int vendorId = Convert.ToInt32(htData["vendor"].ToString()); string seDate = Convert.ToString(htData["dtpSeDate"]); string shipNo = Convert.ToString(htData["shipNo"]); string buyNo = Convert.ToString(htData["buyNo"]); string partId = Convert.ToString(htData["partId"]); List sqlStrings = new List(); List parameters = new List(); StringBuilder sql = new StringBuilder(); sql.Append("update g_buy_day_fact set Enabled='N' WHERE order_no=@order_no AND part_id = @part_id AND vendor_id=@vendor_id AND buy_no=@buy_no AND se_date=@se_date"); DynamicParameters param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@part_id", partId); param.Add("@vendor_id", vendorId); param.Add("@buy_no", buyNo); param.Add("@se_date", seDate.Replace("-", "/")); sqlStrings.Add(sql.ToString()); parameters.Add(param); sql.Clear(); sql.Append(" update sys_stock set Enabled='N' WHERE status = 'A' AND order_no=@order_no AND part_id=@part_id "); sql.Append(" AND se_date=@se_date AND ship_no=@ship_no "); param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@part_id", partId); param.Add("@ship_no", shipNo); param.Add("@se_date", seDate.Replace("-", "/")); sqlStrings.Add(sql.ToString()); parameters.Add(param); try { for (int i = 0; i < sqlStrings.Count; i++) { dbConn.Execute(sqlStrings[i], parameters[i], transaction); } transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } //启用 public bool EnableData(Hashtable htData) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); IDbTransaction transaction = dbConn.BeginTransaction(); string orderNo = Convert.ToString(htData["orderNo"]); int vendorId = Convert.ToInt32(htData["vendor"].ToString()); string seDate = Convert.ToString(htData["dtpSeDate"]); string shipNo = Convert.ToString(htData["shipNo"]); string buyNo = Convert.ToString(htData["buyNo"]); string partId = Convert.ToString(htData["partId"]); List sqlStrings = new List(); List parameters = new List(); StringBuilder sql = new StringBuilder(); sql.Append("update g_buy_day_fact set Enabled='Y' WHERE order_no=@order_no AND part_id = @part_id AND vendor_id=@vendor_id AND buy_no=@buy_no AND se_date=@se_date"); DynamicParameters param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@part_id", partId); param.Add("@vendor_id", vendorId); param.Add("@buy_no", buyNo); param.Add("@se_date", seDate.Replace("-", "/")); sqlStrings.Add(sql.ToString()); parameters.Add(param); sql.Clear(); sql.Append(" update sys_stock set Enabled='Y' WHERE status = 'A' AND order_no=@order_no AND part_id=@part_id "); sql.Append(" AND se_date=@se_date AND ship_no=@ship_no "); param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@part_id", partId); param.Add("@ship_no", shipNo); param.Add("@se_date", seDate.Replace("-", "/")); sqlStrings.Add(sql.ToString()); parameters.Add(param); try { for (int i = 0; i < sqlStrings.Count; i++) { dbConn.Execute(sqlStrings[i], parameters[i], transaction); } transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } //禁用 public bool DisableData(Hashtable htData) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); IDbTransaction transaction = dbConn.BeginTransaction(); string orderNo = Convert.ToString(htData["orderNo"]); int vendorId = Convert.ToInt32(htData["vendor"].ToString()); string seDate = Convert.ToString(htData["dtpSeDate"]); string shipNo = Convert.ToString(htData["shipNo"]); string buyNo = Convert.ToString(htData["buyNo"]); string partId = Convert.ToString(htData["partId"]); List sqlStrings = new List(); List parameters = new List(); StringBuilder sql = new StringBuilder(); sql.Append("update g_buy_day_fact set Enabled='N' WHERE order_no=@order_no AND part_id = @part_id AND vendor_id=@vendor_id AND buy_no=@buy_no AND se_date=@se_date"); DynamicParameters param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@part_id", partId); param.Add("@vendor_id", vendorId); param.Add("@buy_no", buyNo); param.Add("@se_date", seDate.Replace("-", "/")); sqlStrings.Add(sql.ToString()); parameters.Add(param); sql.Clear(); sql.Append(" update sys_stock set Enabled='N' WHERE status = 'A' AND order_no=@order_no AND part_id=@part_id "); sql.Append(" AND se_date=@se_date AND ship_no=@ship_no "); param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@part_id", partId); param.Add("@ship_no", shipNo); param.Add("@se_date", seDate.Replace("-", "/")); sqlStrings.Add(sql.ToString()); parameters.Add(param); try { for (int i = 0; i < sqlStrings.Count; i++) { dbConn.Execute(sqlStrings[i], parameters[i], transaction); } transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } /// /// 获取采购单数据 /// /// /// public List getBuyOrder(Hashtable htData) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string orderNo = Convert.ToString(htData["orderNo"]); string seDate = Convert.ToString(htData["dtpSeDate"]); StringBuilder sql = new StringBuilder(); sql.Remove(0, sql.Length); sql.Append("SELECT a.*,b.part_no,b.part_spec "); sql.Append(" ,a.lot_no,a.qty,a.snp_qty,a.carton_qty,a.factory_id FROM g_buy_day_fact(NOLOCK) AS a "); sql.Append(" LEFT JOIN sys_part(NOLOCK) AS b ON a.part_id=b.part_id WHERE a.order_no=@order_no "); sql.Append(" AND se_date=@se_date ORDER BY b.part_no"); DynamicParameters param = new DynamicParameters(); param.Add("@order_no", orderNo); param.Add("@se_date", seDate.Replace("-", "/")); List result = dbConn.Query(sql.ToString(), param).ToList(); return result; } } /// /// 返回采购单明细 /// /// /// public List getBuyOrderStock(Hashtable htData) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); string orderNo = Convert.ToString(htData["orderNo"]); StringBuilder sql = new StringBuilder(); sql.Remove(0, sql.Length); sql.Append("SELECT ruid,vendor_id,vendor_name "); sql.Append(" ,part_id,part_no,part_spec,carton_no,lot_no,qty,snp_qty,status "); sql.Append(" ,group_no,locate_id,date_code,factory_id "); sql.Append(" FROM vw_sys_stock WHERE ref_order_no=@order_no AND enabled='Y' ORDER BY carton_no"); DynamicParameters param = new DynamicParameters(); param.Add("@order_no", orderNo); List result = dbConn.Query(sql.ToString(), param).ToList(); return result; } } #endregion 成员方法 } }