using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Quartz; namespace ICSSoft.FromERP { /// /// 工单 /// public class ICSMo : IJob { private static object key = new object(); private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public void Execute(IJobExecutionContext context) { try { lock (key) { log.Info("开始……………………………………………………………………"); Execute(); log.Info("结束……………………………………………………………………"); } } catch (Exception ex) { log.Error(ex.ToString()); } } public void Execute() { try { string conStr = ICSHelper.GetConnectString(); string Namespace = this.GetType().Namespace; //string Class = this.GetType().Name; DataTable dt = ICSHelper.GetERPDB(conStr); foreach (DataRow dr in dt.Rows) { string erpName = ICSHelper.GetConfigString()["ERPDB"]; string WorkPoint = dr["WorkPointCode"].ToString(); string Class = this.GetType().Name + WorkPoint; erpName = string.Format(erpName, WorkPoint); #region SQL string sql = @" select CAST(b.MoDId as VARCHAR(50)) as ID, a.MoCode as MOCODE, b.SortSeq as Sequence, b.InvCode as InvCode, b.Qty as Quantity, a.CreateUser as CreatePerson, a.CreateTime as CreateDateTime, isnull(b.AuxQty,0) as Amount, isnull(b.QualifiedInQty,0) as RCVQuantity, b.MDeptCode as DepCode, b.WhCode as WHCode, '1' as MOStatus, b.Remark as MOMemo, '2' as ERPStatus, c.StartDate as StartDate, c.DueDate as DueDate, a.MoId as MOID, b.MoDId as MODetailID, CASE WHEN ISNULL(a.ModifyTime, a.CreateTime)>ISNULL(b.CloseTime,ISNULL(b.RelsTime,ISNULL(a.ModifyTime, a.CreateTime))) THEN ISNULL(a.ModifyTime, a.CreateTime) ELSE ISNULL(b.CloseTime,ISNULL(b.RelsTime,ISNULL(a.ModifyTime, a.CreateTime))) END as MTIME, isnull(b.CostItemCode,'') ProjectCode,isnull(b.MoLotCode,'') cBatch,'' version ,'' brand, (case WHEN inv.bFree1=1 THEN b.Free1 ELSE '' END) as cFree1, (case WHEN inv.bFree2=1 THEN b.Free2 ELSE '' END) as cFree2, (case WHEN inv.bFree3=1 THEN b.Free3 ELSE '' END) as cFree3, (case WHEN inv.bFree4=1 THEN b.Free4 ELSE '' END) as cFree4, (case WHEN inv.bFree5=1 THEN b.Free5 ELSE '' END) as cFree5, (case WHEN inv.bFree6=1 THEN b.Free6 ELSE '' END) as cFree6, (case WHEN inv.bFree7=1 THEN b.Free7 ELSE '' END) as cFree7, (case WHEN inv.bFree8=1 THEN b.Free8 ELSE '' END) as cFree8, (case WHEN inv.bFree9=1 THEN b.Free9 ELSE '' END) as cFree9, (case WHEN inv.bFree10=1 THEN b.Free10 ELSE '' END) as cFree10,CAST('' AS NVARCHAR(500)) as Colspan ,'{0}' as WorkPoint ,(CASE WHEN b.MoClass<>1 then '1' else '0' end ) EATTRIBUTE1 INTO #TempMO FROM {1}.dbo.mom_order a INNER JOIN {1}.dbo.mom_orderdetail b ON a.MoId = b.MoId INNER JOIN {1}.dbo.mom_morder c ON b.MoDId = c.MoDId --LEFT JOIN {1}.dbo.mom_orderdetail_extradefine d ON b.MoDId = d.MoDId LEFT JOIN {1}.dbo.Inventory inv ON b.InvCode = inv.cInvCode LEFT JOIN {1}.dbo.Customer cus ON b.CustCode = cus.cCusCode LEFT JOIN {1}.dbo.SO_SODetails so ON b.OrderDId = so.iSOsID --LEFT JOIN {1}.dbo.CusInvContrapose cusInv ON cusinv.cCusCode = b.CustCode AND b.InvCode = cusInv.cInvCode where ISNULL (b.RelsUser,'') <> '' and CASE WHEN ISNULL(a.ModifyTime, a.CreateTime)>ISNULL(b.CloseTime,ISNULL(b.RelsTime,ISNULL(a.ModifyTime, a.CreateTime))) THEN ISNULL(a.ModifyTime, a.CreateTime) ELSE ISNULL(b.CloseTime,ISNULL(b.RelsTime,ISNULL(a.ModifyTime, a.CreateTime))) END>=@LastTime update #TempMO set Colspan=isNULL(ProjectCode,'')+'~'+isNULL(cBatch,'')+'~'+isNULL(Version,'')+'~'+isNULL(Brand,'')+'~'+isNULL(cFree1,'')+'~'+isnull(cFree2,'')+'~'+isnull(cFree3,'')+'~'+isnull(cFree4,'')+'~'+isnull(cFree5,'')+'~'+isnull(cFree6,'')+'~'+isnull(cFree7,'')+'~'+isnull(cFree8,'')+'~'+isnull(cFree9,'')+'~'+isnull(cFree10,'') select distinct Colspan,ProjectCode,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,WorkPoint,cBatch,version ,brand INTO #TempExtensionMO from #TempMO IF NOT EXISTS(SELECT * FROM #TempMO) RETURN"; sql = ICSHelper.Time(Namespace, Class, WorkPoint, sql, "#TempMO"); Dictionary value = new Dictionary(); value.Add("ID", "NEWID()"); value.Add("BatchCode", "a.cBatch"); value.Add("version", "a.version"); value.Add("brand", "a.brand"); value.Add("ProjectCode", "a.ProjectCode"); value.Add("cFree1", "a.cFree1"); value.Add("cFree2", "a.cFree2"); value.Add("cFree3", "a.cFree3"); value.Add("cFree4", "a.cFree4"); value.Add("cFree5", "a.cFree5"); value.Add("cFree6", "a.cFree6"); value.Add("cFree7", "a.cFree7"); value.Add("cFree8", "a.cFree8"); value.Add("cFree9", "a.cFree9"); value.Add("cFree10", "a.cFree10"); value.Add("Colspan", "a.Colspan"); value.Add("MTIME", "GETDATE()"); value.Add("MUSER", "'" + ConstWorkPoint.Muser + "'"); value.Add("MUSERName", "'" + ConstWorkPoint.Musername + "'"); value.Add("WorkPoint", "'" + WorkPoint + "'"); //插入新增数据->ICSExtension表 sql += ICSHelper.InsertSQL("ICSExtension", value) + @"#TempExtensionMO a LEFT JOIN ICSExtension b ON a.ProjectCode+'~'+a.cBatch+'~'+a.Version+'~'+a.Brand+'~'+a.cFree1+'~'+a.cFree2+'~'+a.cFree3+'~'+a.cFree4+'~'+a.cFree5+'~'+a.cFree6+'~'+a.cFree7+'~'+a.cFree8+'~'+a.cFree9+'~'+a.cFree10=b.Colspan and a.WorkPoint=b.WorkPoint WHERE b.Colspan IS NULL"; sql += @"--删除数据 -- DELETE ICSMO WHERE MODetailID NOT IN (SELECT CAST(MoDId AS VARCHAR) FROM {1}.dbo.[mom_orderdetail]) SELECT a.MODetailID INTO #tableICSMO FROM ICSMO a With(NoLock) LEFT JOIN {1}.dbo.[mom_orderdetail] b With(NoLock) ON a.MODetailID=CAST(b.MoDId AS VARCHAR) WHERE a.WorkPoint='{0}' and b.MoDId IS NULL DELETE ICSMO WHERE WorkPoint='{0}' and MODetailID IN ( SELECT MODetailID from #tableICSMO) "; Dictionary values = new Dictionary(); values.Add("MOCODE", "a.MOCODE");//工单号 values.Add("Sequence", "a.Sequence");//工单行号 values.Add("InvCode", "a.InvCode");//物料代码 values.Add("Quantity", "a.Quantity");//数量 values.Add("Amount", "a.Amount");//辅机数量 values.Add("DepCode", "a.DepCode");//辅机数量 values.Add("WHCode", "a.WHCode");//仓库 values.Add("StartDate", "a.StartDate");//开工日 values.Add("DueDate", "a.DueDate");//完工日 values.Add("MOSTATUS", "a.MOStatus");//生产订单状态 values.Add("MOMemo", "a.MOMemo");//生产订单状态 values.Add("CreatePerson", "a.CreatePerson");//生产订单状态 values.Add("CreateDateTime", "a.CreateDateTime");//生产订单状态 values.Add("ERPStatus", "a.ERPStatus");//生产订单状态 // values.Add("ERPStatus", "a.MOSTATUS");//生产订单状态 values.Add("MOID", "a.MoId");//生产订单状态 values.Add("MODetailID", "a.MODetailID");//生产订单状态 values.Add("ExtensionID", "c.ID");//生产订单状态 //values.Add("MODetailID", "a.MOSTATUS");//生产订单状态 // values.Add("ExtensionID", "a.MOSTATUS");//生产订单状态 values.Add("MUSER", "'" + ConstWorkPoint.Muser + "'"); values.Add("MUSERName", "'" + ConstWorkPoint.Musername + "'"); values.Add("WorkPoint", "'" + WorkPoint + "'"); values.Add("MTIME", "a.MTIME");//生产订单状态 values.Add("EATTRIBUTE1", "a.EATTRIBUTE1"); //更新存在数据 sql += ICSHelper.UpdateSQL("b", values) + @" #TempMO a INNER JOIN ICSMO b ON a.MODetailID=b.MODetailID and a.WorkPoint=b.WorkPoint inner join ICSExtension c on a.Colspan=c.Colspan and a.WorkPoint=c.WorkPoint WHERE a.WorkPoint='" + WorkPoint + "' "; values.Add("ID", "NEWID()"); values.Add("RCVQuantity", "a.RCVQuantity");//辅机数量 //插入新增数据 sql += ICSHelper.InsertSQL("ICSMO", values) + @" #TempMO a LEFT JOIN ICSMO b ON a.MODetailID=b.MODetailID and a.WorkPoint=b.WorkPoint inner join ICSExtension c on a.Colspan=c.Colspan and a.WorkPoint=c.WorkPoint WHERE b.ID IS NULL and a.WorkPoint='" + WorkPoint + @"' "; sql += "DROP TABLE #TempMO"; sql += " DROP TABLE #TempExtensionMO " + " DROP TABLE #tableICSMO "; sql = string.Format(sql, WorkPoint, erpName); ICSHelper.ExecuteDate(conStr, sql); #endregion } } catch (Exception ex) { log.Error(ex.ToString()); } } } }