using ICS.WCF.Base; using ICSSoft.Entity; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; namespace ICS.LotNoInfoGet { public class GetLotNoInfo { /// /// 获取物料条码信息生成条码 /// public FormICSCreatedArrivalNoticeModel CustGetLotNoInfo(List lstl) { FormICSCreatedArrivalNoticeModel result = new FormICSCreatedArrivalNoticeModel(); using (SqlConnection conn = new SqlConnection(Appconfig.GetMESStr())) { conn.Open(); using (SqlTransaction trans = conn.BeginTransaction()) { try { string sql = ""; int flag = 0; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.Transaction = trans; StringBuilder str = new StringBuilder(); foreach (LotNoValues l in lstl) { string chksql = @"select * from ICSItemLot where LotNo='{0}' AND WorkPoint='{1}'"; chksql = string.Format(chksql, l.LotNo, l.WorkPoint); DataTable chkdt = SQlReturnData(chksql, cmd); if (chkdt.Rows.Count != 0) { str.AppendLine("传入条码:" + l.LotNo + "已存在"); continue; } if (l.LotType == 0) { foreach (POInfo poinfo in l.PoInfoList) { chksql = @"select * from ICSPO_PoMain where POCode='{0}' AND PORow='{1}'"; chksql = string.Format(chksql, poinfo.POCode, poinfo.PORow); chkdt = SQlReturnData(chksql, cmd); if (chkdt.Rows.Count == 0) { throw new Exception("传入采购订单号:" + poinfo.POCode + ",行号:" + poinfo.PORow + "不存在,无法创建条码!"); } } sql = @"INSERT INTO ICSITEMLot ( ID ,LotNO ,ItemCODE ,TransNO ,TransLine ,VENDORITEMCODE ,VENDORCODE , VenderLotNO ,PRODUCTDATE ,LOTQTY ,ACTIVE ,Exdate ,WorkPoint , MUSER ,MUSERName ,MTIME ,TYPE,ORDERNO) SELECT NEWID(),'" + l.LotNo + "',InvCode,'','','',VenCode,'" + l.VendorLot + "',GETDATE(),'" + l.LOTQTY + "','Y','2999-12-31 00:00:00.000','" + l.WorkPoint + "','" + l.MUSER + "','" + l.MUSERNAME + @"',GETDATE(),'采购原料',ORDERNO FROM dbo.ICSPO_PoMain WHERE POCode='" + l.PoInfoList[0].POCode + "' AND PORow='" + l.PoInfoList[0].PORow + "' AND WorkPoint='" + l.WorkPoint + "'"; cmd.CommandText = sql; flag = cmd.ExecuteNonQuery(); StringBuilder resultlog = new StringBuilder(); if (flag <= 0) { resultlog.AppendLine("生成物料条码失败"); resultlog.AppendLine("查询sql:" + sql); Appconfig.WriteLogFile(resultlog.ToString(), "获取生成条码接口日志"); throw new Exception("生成条码失败"); } foreach (POInfo p in l.PoInfoList) { sql = @"INSERT INTO ICSLot2Doc (ID,LotNO,DocType,TransNO,TransLine,LinkQty,MTIME,MUSER,MUSERNAME,WorkPoint) select NEWID(),LotNO,'采购订单','" + p.POCode + "','" + p.PORow + "'," + p.LinkQty + ",MTIME,MUSER,MUSERName,WorkPoint from ICSITEMLot where LotNO='" + l.LotNo + "' "; cmd.CommandText = sql; flag = cmd.ExecuteNonQuery(); if (flag <= 0) { resultlog.AppendLine("物料内箱信息添加失败"); resultlog.AppendLine("查询sql:" + sql); Appconfig.WriteLogFile(resultlog.ToString(), "获取生成条码接口日志"); throw new Exception("物料内箱信息添加失败"); } } } else if (l.LotType == 1) { string WHID = ""; string StackID = ""; string BinCode = fenge(l.BinCode); if (!string.IsNullOrWhiteSpace(l.WHCode) && !string.IsNullOrWhiteSpace(BinCode)) { chksql = @"select Serial from ICSStorage WHERE StorageCode='{0}' and WorkPoint='{1}'"; chksql = string.Format(chksql, l.WHCode, l.WorkPoint); chkdt = SQlReturnData(chksql, cmd); if (chkdt.Rows.Count == 0) { throw new Exception("传入仓库:" + l.WHCode + "不存在,无法创建条码!"); } else { WHID = chkdt.Rows[0]["Serial"].ToString(); } chksql = @"select Serial from ICSStack WHERE StackCode = '{0}' and Storage_Serial='{1}' and WorkPoint='{2}'"; chksql = string.Format(chksql, BinCode, WHID, l.WorkPoint); chkdt = SQlReturnData(chksql, cmd); if (chkdt.Rows.Count == 0) { str.AppendLine("传入库位:" + BinCode + "不存在!"); continue; } else { StackID = chkdt.Rows[0]["Serial"].ToString(); } } sql = @"insert into ICSWareHouseLotInfo Values (NEWID(),'" + l.LotNo + "','" + WHID + "','" + l.WHCode + "','" + StackID + "','" + BinCode + "','1002107293539020','1250020051' ,'" + l.LOTQTY + "',GETDATE(),'" + l.WorkPoint + "','" + l.MUSER + "','" + l.MUSERNAME + "',GETDATE(),'期初',null,0,'')"; cmd.CommandText = sql; flag = cmd.ExecuteNonQuery(); StringBuilder resultlog = new StringBuilder(); if (flag <= 0) { throw new Exception("生成库存失败"); } sql = @"INSERT INTO ICSITEMLot ( ID ,LotNO ,ItemCODE ,TransNO ,TransLine ,VENDORITEMCODE ,VENDORCODE , VenderLotNO ,PRODUCTDATE ,LOTQTY ,ACTIVE ,Exdate ,WorkPoint , MUSER ,MUSERName ,MTIME ,EATTRIBUTE1,TYPE,ORDERNO) values (NEWID(),'" + l.LotNo + "','1250020051','','','','','" + l.VendorLot + "',GETDATE(),'" + l.LOTQTY + "','Y','2999-12-31 00:00:00.000','" + l.WorkPoint + "','" + l.MUSER + "','" + l.MUSERNAME + @"',GETDATE(),'期初','原材料','')"; cmd.CommandText = sql; flag = cmd.ExecuteNonQuery(); resultlog = new StringBuilder(); if (flag <= 0) { throw new Exception("生成条码失败"); } if (l.PoInfoList != null && l.PoInfoList.Count > 0) { foreach (POInfo p in l.PoInfoList) { sql = @"INSERT INTO ICSLot2Doc (ID,LotNO,DocType,TransNO,TransLine,LinkQty,MTIME,MUSER,MUSERNAME,WorkPoint) select NEWID(),LotNO,'期初','" + p.POCode + "','" + p.PORow + "'," + p.LinkQty + ",MTIME,MUSER,MUSERName,WorkPoint from ICSITEMLot where LotNO='" + l.LotNo + "' "; cmd.CommandText = sql; flag = cmd.ExecuteNonQuery(); if (flag <= 0) { throw new Exception("物料内箱信息添加失败"); } } } } else { throw new Exception("传入数据错误"); } } trans.Commit(); Appconfig.WriteLogFile(str.ToString(), "获取生成条码接口日志(无效数据)"); result.Code = 0; result.ResMsg = "物料条码生成成功"; result.ResData = "{}"; result.IsCompress = false; result.IsSuccess = true; } catch (Exception ex) { StringBuilder str = new StringBuilder(); result.Code = -1; result.ResMsg = ex.Message; result.ResData = "{}"; result.IsCompress = false; result.IsSuccess = true; str.AppendLine("物料信息获取失败"); str.AppendLine("失败原因:" + ex.Message); Appconfig.WriteLogFile(str.ToString(), "获取生成条码接口日志"); trans.Rollback(); } } conn.Close(); } return result; } //库位转换 public string fenge(string sourceString) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < sourceString.Length; i++) { if (i == 0 || i == 3) { sb.Append(sourceString[i].ToString()).Append("-"); } else { sb.Append(sourceString[i]); } } return sb.ToString(); } /// /// 送货单返回值 /// public class FormICSCreatedArrivalNoticeModel { //0 :正常数据,-1:失败。 public int Code { get; set; } public string ResMsg { get; set; } public Object ResData { get; set; } public bool IsCompress { get; set; } public bool IsSuccess { get; set; } } /// /// SQL执行方法 /// /// /// /// public static DataTable SQlReturnData(string SQl, SqlCommand cmd) { DataTable dt = new DataTable(); cmd.CommandText = SQl; SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter(); dr.SelectCommand = cmd; dr.Fill(dt); return dt; } } }