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) { if (body.ParentAllocateId > 0 && body.Factor <= 0) throw new Exception("需要替代时替代比例必须大于零!"); int iFatherId =0; int iChildId = 0; if (body.AllocateId <= 0) { dic = DBHelper.GetAllCode(ERPDB, "mom_moallocate", "1", head.WorkPoint, cmd); iFatherId = Convert.ToInt32(dic["iFatherId"].ToString()); iChildId = Convert.ToInt32(dic["iChildId"].ToString()); ids.Add(iChildId); } else { ids.Add(body.AllocateId); } #region 生产备料表 sql = @"UPDATE a SET ModifyTime=GETDATE() --更新工单修改时间,以便再次同步 FROM mom_order a INNER JOIN mom_orderdetail b ON a.MoId=b.MoId WHERE MoDId='{0}' IF {10}>0 BEGIN IF NOT EXISTS (SELECT AllocateId FROM mom_moallocate WHERE AllocateId='{10}') BEGIN RAISERROR('子件不存在!AllocateId:{10}',16,1) END ELSE IF NOT EXISTS (SELECT AllocateId FROM mom_moallocate WHERE AllocateId='{10}' AND MoDId='{0}') BEGIN RAISERROR('工单行与子件不符!MoDId:{0},AllocateId:{10}',16,1) END UPDATE mom_moallocate SET BaseQtyN='{3}',BaseQtyD='{4}',Qty='{5}',AuxQty='{11}',WhCode='{7}',WIPType='{8}',Define33='{12}' WHERE AllocateId='{10}' END ELSE BEGIN SELECT '{6}' AS AllocateId,d.MoDId,ISNULL((SELECT MAX(SortSeq) FROM mom_moallocate WHERE MoDId=d.MoDId), 0)+10 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,'{12}' AS 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,(SELECT TOP 1 RequisitionFlag FROM mom_moallocate WHERE MoDId=d.MoDId ORDER BY RequisitionFlag DESC) AS RequisitionFlag,'0' AS RequisitionQty, '0' AS RequisitionIssQty,'0' AS CostWIPRel,NULL AS cSubSysBarCode,'0' AS PickingQty, '0' AS PickingAuxQty,'0' AS UpperMoQty,'0' AS InvAlloeFlag,NULL AS FactoryCode,'{11}' AS AuxQty ,ISNULL((SELECT MAX(Sequence) FROM mom_moallocatesub WHERE AllocateId=o.AllocateId), 0)+1 AS Sequence,o.AllocateId AS SubAllocateId,n.MoallocateSubId AS SubMoallocateSubId,ISNULL(n.MoallocateSubId, NEWID()) AS MoallocateSubId,c.PartId,'{9}' AS Factor,'2000-01-01' AS EffBegDate,'2099-12-31' AS EffEndDate,'0' AS ReplaceFlag INTO #TempMOAll FROM mom_orderdetail d INNER JOIN bas_part p on d.PartId = p.PartId 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 LEFT JOIN mom_moallocate o on d.MoDId = o.MoDId AND o.AllocateId='{2}' LEFT JOIN mom_moallocatesub n on o.AllocateId = n.AllocateId AND c.PartId=n.PartId WHERE d.MoDId='{0}' ORDER BY d.MoDId IF @@ROWCOUNT<=0 BEGIN RAISERROR('工单行或物料不存在!物料:{1},MoDId:{0}',16,1) END IF {2}>0 BEGIN IF EXISTS (SELECT SubAllocateId FROM #TempMOAll WHERE SubAllocateId IS NULL) BEGIN RAISERROR('被替代料不存在!ParentAllocateId:{2}',16,1) END IF EXISTS (SELECT SubMoallocateSubId FROM #TempMOAll WHERE SubMoallocateSubId IS NULL) BEGIN INSERT INTO mom_moallocatesub(MoallocateSubId,AllocateId,Sequence,PartId,Factor,EffBegDate,EffEndDate,ReplaceFlag) SELECT MoallocateSubId,SubAllocateId,Sequence,PartId,Factor,EffBegDate,EffEndDate,ReplaceFlag FROM #TempMOAll END ELSE BEGIN UPDATE a SET Factor = b.Factor FROM mom_moallocatesub a INNER JOIN #TempMOAll b ON a.MoallocateSubId=b.MoallocateSubId END END 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,MoallocateSubId,AuxQty) 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,MoallocateSubId,AuxQty FROM #TempMOAll DROP TABLE #TempMOAll END IF EXISTS (SELECT AllocateId FROM mom_moallocate WHERE AllocateId='{10}' AND Qty