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());
}
}
}
}