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.Text; using System.Threading.Tasks; namespace ICSSoft.DataProject { /// /// 生产订单备料表 /// public class ManufactureOrderPick { private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private static string connString = System.Configuration.ConfigurationManager.AppSettings["ERPConnStr"]; private static string ERPDB = System.Configuration.ConfigurationManager.AppSettings["ERPDB"]; private static string Type = System.Configuration.ConfigurationManager.AppSettings["Type"]; /// /// 创建生产订单备料表 /// /// /// public string CreateManufactureOrderPick(List Bills) { string msg = ""; string connS = ""; DataSet ds = null; if (Bills.Count <= 0) { throw new Exception("传送数据为空!"); } string res = string.Empty; SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); List result = Bills.Select(t => t.WorkPoint).Distinct().ToList(); foreach (string WorkPoint in result) { try { connS = string.Format(connString, WorkPoint); conn = new System.Data.SqlClient.SqlConnection(connS); conn.Open(); SqlTransaction sqlTran = conn.BeginTransaction(); cmd = new SqlCommand(); cmd.Transaction = sqlTran; cmd.Connection = conn; var list = Bills.Where(a => a.WorkPoint == WorkPoint); foreach (ICSManufactureOrderPick head in list) { ICSUserInfo userInfo = new ICSUserInfo(); userInfo = DBHelper.GetPersonInfo(head.User, cmd); string[] ss = head.WorkPoint.Split('_'); ERPDB = ss[1]; Dictionary dic; string sql = ""; List ids = new List(); #region 备料表 foreach (ICSManufactureOrderPicks body in head.details) { dic = DBHelper.GetAllCode(ERPDB, "mom_moallocate", "1", head.WorkPoint); int iFatherId = Convert.ToInt32(dic["iFatherId"].ToString()); int iChildId = Convert.ToInt32(dic["iChildId"].ToString()); ids.Add(iChildId); #region 生产备料表 sql = @"SELECT '{6}' AS AllocateId,d.MoDId,'{2}' AS SortSeq,ISNULL(a.OpSeq, '0000') AS OpSeq,ISNULL(a.ComponentId,c.PartId) AS ComponentId, ISNULL(a.FVFlag,'1') AS FVFlag,'{3}' AS BaseQtyN,'{4}' AS BaseQtyD,'0' AS ParentScrap,ISNULL(a.CompScrap,'0') AS CompScrap, '{5}' AS Qty,'0' AS IssQty,'0' AS DeclaredQty, GETDATE() AS StartDemDate, GETDATE() AS EndDemDate, '{7}' AS WhCode,NULL AS LotNo,'{8}' AS WIPType,ISNULL(a.ByproductFlag,'0') AS ByproductFlag,'0' AS QcFlag, '0' AS Offset,c.InvCode,ISNULL(a.Free1,'') AS Free1,ISNULL(a.Free2,'') AS Free2,ISNULL(a.Free3,'') AS Free3 ,ISNULL(a.Free4,'') AS Free4,ISNULL(a.Free5,'') AS Free5,ISNULL(a.Free6,'') AS Free6,ISNULL(a.Free7,'') AS Free7,ISNULL(a.Free8,'') AS Free8 ,ISNULL(a.Free9,'') AS Free9,ISNULL(a.Free10,'') AS Free10,ISNULL(a.OpComponentId,'0') AS OpComponentId,a.Define22,a.Define23, a.Define24,a.Define25,a.Define26,a.Define27,a.Define28, a.Define29,a.Define30,a.Define31,a.Define32,a.Define33, a.Define34,a.Define35,a.Define36,a.Define37,'0' AS ReplenishQty, a.Remark,'0' AS TransQty,ISNULL(a.ProductType,'1') AS ProductType,'0' AS SoType,NULL AS SoDId, NULL AS SoCode,NULL AS SoSeq,NULL AS DemandCode,'0' AS QmFlag,'0' AS OrgQty, '0' AS OrgAuxQty,NULL AS CostItemCode,NULL AS CostItemName,'0' AS RequisitionFlag,'0' AS RequisitionQty, '0' AS RequisitionIssQty,'0' AS CostWIPRel,NULL AS MoallocateSubId,NULL AS cSubSysBarCode,'0' AS PickingQty, '0' AS PickingAuxQty,'0' AS UpperMoQty,'0' AS InvAlloeFlag,NULL AS FactoryCode INTO #TempMOAll FROM mom_orderdetail d INNER JOIN bas_part p on d.InvCode = p.InvCode LEFT JOIN bom_parent q on q.ParentId = p.PartId LEFT JOIN bom_bom b ON q.BomId=b.BomId AND b.VersionEndDate>=CONVERT(VARCHAR(10),GETDATE(),23) --子料 INNER JOIN bas_part c ON c.InvCode='{1}' LEFT JOIN bom_opcomponent a ON a.ComponentId = c.PartId AND a.BomId=b.BomId LEFT JOIN bom_opcomponentopt e ON a.OptionsId=e.OptionsId WHERE d.MoDId='{0}' ORDER BY d.MoDId"; sql = string.Format(sql, head.DetailID, body.InvCode, body.Sequence, body.BaseQtyN, body.BaseQtyD, body.Quantity, iChildId, body.WHCode, body.SupplyType); sql += @" INSERT INTO mom_moallocate (AllocateId,MoDId,SortSeq,OpSeq,ComponentId, FVFlag,BaseQtyN,BaseQtyD,ParentScrap,CompScrap, Qty,IssQty,DeclaredQty,StartDemDate,EndDemDate, WhCode,LotNo,WIPType,ByproductFlag,QcFlag, Offset,InvCode,Free1,Free2,Free3, Free4,Free5,Free6,Free7,Free8, Free9,Free10,OpComponentId,Define22,Define23, Define24,Define25,Define26,Define27,Define28, Define29,Define30,Define31,Define32,Define33, Define34,Define35,Define36,Define37,ReplenishQty, Remark,TransQty,ProductType,SoType,SoDId, SoCode,SoSeq,DemandCode,QmFlag,OrgQty, OrgAuxQty,CostItemCode,CostItemName,RequisitionFlag,RequisitionQty, RequisitionIssQty,CostWIPRel,cSubSysBarCode,PickingQty, PickingAuxQty,UpperMoQty,InvAlloeFlag,FactoryCode) SELECT AllocateId,MoDId,SortSeq,OpSeq,ComponentId, FVFlag,BaseQtyN,BaseQtyD,ParentScrap,CompScrap, Qty,IssQty,DeclaredQty,StartDemDate,EndDemDate, WhCode,LotNo,WIPType,ByproductFlag,QcFlag, Offset,InvCode,Free1,Free2,Free3, Free4,Free5,Free6,Free7,Free8, Free9,Free10,OpComponentId,Define22,Define23, Define24,Define25,Define26,Define27,Define28, Define29,Define30,Define31,Define32,Define33, Define34,Define35,Define36,Define37,ReplenishQty, Remark,TransQty,ProductType,SoType,SoDId, SoCode,SoSeq,DemandCode,QmFlag,OrgQty, OrgAuxQty,CostItemCode,CostItemName,RequisitionFlag,RequisitionQty, RequisitionIssQty,CostWIPRel,cSubSysBarCode,PickingQty, PickingAuxQty,UpperMoQty,InvAlloeFlag,FactoryCode FROM #TempMOAll"; sql += @" DROP TABLE #TempMOAll" + Environment.NewLine; cmd.CommandText = sql; try { int count = cmd.ExecuteNonQuery(); if (count <= 0) { throw new Exception("生成生产订单备料表失败,受影响行数<=0;"); } } catch (Exception ex) { log.Error("生成生产订单备料表失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex); throw new Exception("生成生产订单备料表失败!异常:" + ex.Message + ";SQL:\r\n" + sql, ex); } #endregion } #endregion #region 查询 sql = @" SELECT DISTINCT a.MoDId AS IDs,a.MoDId AS DetailID,a.SortSeq AS DetailSequence,a.InvCode AS DetailInvCode,a.Qty AS DetailQuantity FROM mom_orderdetail a INNER JOIN mom_moallocate b ON a.MoDId=b.MoDId WHERE b.AllocateId in ({0}) SELECT DISTINCT a.MoDId as IDs, AllocateId as PickID,SortSeq as Sequence, InvCode,Qty as Quantity,0 as Amount,a.WhCode,b.cWhName AS WHName,WIPType AS SupplyType, '' ProjectCode,'' cBatch,'' version ,'' brand, isnull(a.Free1,'') as cFree1, isnull(a.Free2,'') as cFree2, isnull(a.Free3,'') as cFree3, isnull(a.Free4,'') as cFree4, isnull(a.Free5,'') as cFree5, isnull(a.Free6,'') as cFree6, isnull(a.Free7,'') as cFree7, isnull(a.Free8,'') as cFree8, isnull(a.Free9,'') as cFree9, isnull(a.Free10,'') as cFree10 FROM mom_moallocate a LEFT JOIN Warehouse b on a.WhCode=b.cWhCode WHERE a.AllocateId in ({0}) "; sql = string.Format(sql, "'" + string.Join("','", ids) + "'"); if (ds != null) ds.Merge(DBHelper.SQlReturnDataSet(sql, cmd)); else ds = DBHelper.SQlReturnDataSet(sql, cmd); #endregion } cmd.Transaction.Commit(); } catch (Exception ex) { if(cmd.Transaction!=null) cmd.Transaction.Rollback(); log.Error(ex.Message); throw new Exception(ex.Message); } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } conn.Dispose(); } } msg = JSON.DataSetToJson(ds, "details", "IDs"); return msg; } } }