You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
579 lines
50 KiB
C#
579 lines
50 KiB
C#
using log4net;
|
|
using SlabHandle.Enity;
|
|
using SOA.Objects;
|
|
using SOA.Persistent;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
|
|
namespace SlabHandle
|
|
{
|
|
public class SlabNumService
|
|
{
|
|
private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
public static string end_time = DateTime.Now.AddDays(0).ToString("yyyy-MM-dd");
|
|
public static string start_time = DateTime.Now.AddDays(0).ToString("yyyy-MM-dd");
|
|
|
|
public static IList<TB_SUB_RESULT> GetHisC1RATE_ALL()
|
|
{
|
|
StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量
|
|
StringBuilder strSql2 = new StringBuilder(); //声明拼接Sql语句变量
|
|
StringBuilder strSql3 = new StringBuilder(); //声明拼接Sql语句变量
|
|
IList<TB_SUB_RESULT> ltResult = new List<TB_SUB_RESULT>();
|
|
|
|
IList<SLAB_DATE> ltSlabDate = new List<SLAB_DATE>();
|
|
|
|
IList<TB_SLAB_STAT_C1> ltSlaStat = new List<TB_SLAB_STAT_C1>();
|
|
|
|
//人工替代记录
|
|
IList<TB_SLAB_MUA_LOG> ltTbSlabMuaLog = new List<TB_SLAB_MUA_LOG>();
|
|
//查询可用订单以及常用字段
|
|
|
|
try
|
|
{
|
|
strSql.AppendLine("SELECT ManmMde_COUNT, SYS_COUNT, nvl(TO_CHAR(ManmMde_Yield * 100, 'FM9999999990.00'), 0) ManmMde_Yield, nvl(TO_CHAR(SYS_Yield * 100, 'FM9999999990.00'), 0) SYS_Yield, nvl(TO_CHAR(SYS_PERCENT * 100, 'FM9999999990.00'), 0) SYS_PERCENT , SUB_DATE ,'C1' PLT ");
|
|
strSql.AppendLine("FROM ");
|
|
strSql.AppendLine("( ");
|
|
strSql.AppendLine("select count(case when UPD_PGMID LIKE 'ACE%' then 1 else null end) ManmMde_COUNT ");
|
|
strSql.AppendLine(",count(case when UPD_PGMID IN('WEC4005C') then 1 else null end) SYS_COUNT ");
|
|
strSql.AppendLine(",case when sum(case when UPD_PGMID LIKE 'ACE%' then wgt2 else 0 end ) != 0 then sum(case when UPD_PGMID LIKE 'ACE%' then wgt1 else 0 end )/ sum(case when UPD_PGMID LIKE 'ACE%' then wgt2 else 0 end ) else 0 end ManmMde_Yield ");
|
|
strSql.AppendLine(",case when sum(case when UPD_PGMID IN ('WEC4005C') then wgt2 else 0 end ) != 0 then sum(case when UPD_PGMID IN ('WEC4005C') then wgt1 else 0 end )/ sum(case when UPD_PGMID IN('WEC4005C') then wgt2 else 0 end ) else 0 end SYS_Yield ");
|
|
strSql.AppendLine(",case when count(1) != 0 then count(case when UPD_PGMID IN ('WEC4005C') then 1 else null end)/ count(1) else 0 end SYS_PERCENT ");
|
|
strSql.AppendLine(", TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') SUB_DATE ");
|
|
strSql.AppendLine("from(select p.* ");
|
|
strSql.AppendLine(", (select sum(WGT) from nisco.FP_slab_des FSD where FSD.slab_no = P.MAT_NO AND FSD.BLOCK_SEQ != '00' AND FSD.SEQ != '00') wgt1 ");
|
|
strSql.AppendLine(",(select sum(slab_wgt) from nisco.FP_slab_des FSD where FSD.slab_no = P.MAT_NO AND FSD.BLOCK_SEQ = '00' AND FSD.SEQ = '00' AND FSD.PROC_CD != 'CAC') wgt2 ");
|
|
strSql.AppendLine("from ");
|
|
strSql.AppendLine(" (select rank() over(partition by mat_no order by ins_date desc) rank, t.* from ");
|
|
strSql.AppendLine(" nisco.CP_REP_HIS t ");
|
|
strSql.AppendLine("WHERE((prod_cd = 'SL' ");
|
|
strSql.AppendLine("and rep_typ = '2' ");
|
|
strSql.AppendLine("AND NOT REGEXP_LIKE(T.MAT_NO, '[A-Za-z]') ");
|
|
strSql.AppendLine("AND UPD_PGMID LIKE 'ACE%') ");
|
|
strSql.AppendLine("or UPD_PGMID IN('WEC4005C')) ");
|
|
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
|
|
strSql.AppendLine("and not ((select count(1) from NISCO.BP_ODER_XY BOXY where order_no = UPD_AFT_ORD AND ORDER_ITEM=UPD_AFT_ORD_ITEM) < 1 AND (select ORD_KND from NISCO.BP_ORDER_ITEM where ord_no = UPD_AFT_ORD AND ORD_ITEM=UPD_AFT_ORD_ITEM)='T' ) ");
|
|
strSql.AppendLine(") p ");
|
|
strSql.AppendLine("where rank = 1 ");
|
|
strSql.AppendLine(") ");
|
|
strSql.AppendLine("GROUP BY TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') ");
|
|
strSql.AppendLine("order by TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') ");
|
|
strSql.AppendLine(") ");
|
|
|
|
//开启数据库连接查询数据
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db_sur"))
|
|
{
|
|
ltResult = db.Query<TB_SUB_RESULT>(strSql.ToString());
|
|
|
|
strSql2.AppendLine("SELECT DISTINCT CRH.MAT_NO,SUBSTR(CRH.INS_DATE,1,8) INS_DATE FROM NISCO.CP_REP_HIS CRH");
|
|
strSql2.AppendLine("WHERE prod_cd = 'SL' and rep_typ = '2' AND UPD_PGMID LIKE 'ACE%'");
|
|
strSql2.AppendLine("AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql2.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
ltSlabDate = db.Query<SLAB_DATE>(strSql2.ToString());
|
|
}
|
|
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
strSql3.AppendLine("SELECT SLAB_NO ");
|
|
strSql3.AppendLine(", GRP_CNT ");
|
|
strSql3.AppendLine(", TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') SUB_DATE ");
|
|
strSql3.AppendLine(", GRP_CNT_JZ ");
|
|
strSql3.AppendLine(", REMARK ");
|
|
strSql3.AppendLine(", RESULT_CNT FROM TB_SLAB_STAT_C1 WHERE 1 = 1 ");
|
|
|
|
strSql3.AppendLine("AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql3.AppendLine(" AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
|
|
ltSlaStat = db.Query<TB_SLAB_STAT_C1>(strSql3.ToString());
|
|
}
|
|
|
|
//根据日期分组
|
|
foreach (SLAB_DATE iDate in ltSlabDate.GroupBy(p => p.INS_DATE).Select(group => group.First()))
|
|
{
|
|
//记录初始数量
|
|
decimal intCnt = ltSlabDate.Where(p => p.INS_DATE == iDate.INS_DATE).Count();
|
|
//只统计20230824 之后的数据 ,之前的没有记录
|
|
if (Convert.ToDecimal(iDate.INS_DATE) >= Convert.ToDecimal(20230826))
|
|
{
|
|
try
|
|
{
|
|
//每个日期统计数量
|
|
foreach (SLAB_DATE iSlabDate in ltSlabDate.Where(p => p.INS_DATE == iDate.INS_DATE).ToList())
|
|
{
|
|
//没有记录 减一
|
|
if (ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).Count() <= 0)
|
|
{
|
|
intCnt--;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
//没有订单 减一
|
|
if ((ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).OrderByDescending(p => p.SUB_DATE).FirstOrDefault().GRP_CNT == null
|
|
|| ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).OrderByDescending(p => p.SUB_DATE).FirstOrDefault().GRP_CNT == 0) && (ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).OrderByDescending(p => p.SUB_DATE).FirstOrDefault().GRP_CNT_JZ == null
|
|
|| ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).OrderByDescending(p => p.SUB_DATE).FirstOrDefault().GRP_CNT_JZ == 0))
|
|
{
|
|
intCnt--;
|
|
continue;
|
|
}
|
|
}
|
|
//记录人工替代的记录
|
|
TB_SLAB_MUA_LOG TSML = new TB_SLAB_MUA_LOG();
|
|
TSML.PLT = "C1";//工厂
|
|
TSML.REMARK = "";//备注
|
|
TSML.STAT_DATE = DateTime.Now.ToString();//统计时间
|
|
TSML.SUB_DATE = iSlabDate.INS_DATE; //替代时间
|
|
TSML.SLAB_NO = iSlabDate.MAT_NO; //板坯号
|
|
|
|
ltTbSlabMuaLog.Add(TSML); //添加记录
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().MANMMDE_COUNT = intCnt;
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_PERCENT
|
|
= Math.Round(Convert.ToDecimal((ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT
|
|
/ (ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT + intCnt))), 4) * 100;
|
|
}
|
|
}
|
|
//存储人工替代的记录数据
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
try
|
|
{
|
|
if (ltTbSlabMuaLog.Count() > 0)
|
|
{
|
|
//开启事务
|
|
db.BeginTransaction();
|
|
//删除7天之前的数据
|
|
db.Execute("DELETE FROM TB_SLAB_MUA_LOG WHERE PLT='C1' AND STAT_DATE < '"+ DateTime.Now.AddDays(7).ToString("yyyy-MM-dd HH:mm:dd") +"'");
|
|
//存储人工记录的数据
|
|
db.Insert<TB_SLAB_MUA_LOG>(ltTbSlabMuaLog);
|
|
db.Commit();
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//数据如果发生错误则回滚
|
|
db.Rollback();
|
|
logger.ErrorFormat("人工替代记录数据存储错误!信息:{0}", ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("GetHisC1RATE_ 报错", ex);
|
|
}
|
|
|
|
return ltResult;
|
|
}
|
|
|
|
public static IList<TB_SUB_RESULT> GetHisC2RATE_ALL()
|
|
{
|
|
StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量
|
|
StringBuilder strSql2 = new StringBuilder(); //声明拼接Sql语句变量
|
|
StringBuilder strSql3 = new StringBuilder(); //声明拼接Sql语句变量
|
|
IList<TB_SUB_RESULT> ltResult = new List<TB_SUB_RESULT>();
|
|
|
|
IList<SLAB_DATE> ltSlabDate = new List<SLAB_DATE>();
|
|
|
|
IList<TB_SLAB_STAT_C2> ltSlaStat = new List<TB_SLAB_STAT_C2>();
|
|
|
|
//人工替代记录
|
|
IList<TB_SLAB_MUA_LOG> ltTbSlabMuaLog = new List<TB_SLAB_MUA_LOG>();
|
|
|
|
//查询可用订单以及常用字段
|
|
|
|
try
|
|
{
|
|
strSql.AppendLine(" SELECT ManmMde_COUNT, SYS_COUNT, nvl(TO_CHAR(ManmMde_Yield * 100, 'FM9999999990.00'), 0) ManmMde_Yield, nvl(TO_CHAR(SYS_Yield * 100, 'FM9999999990.00'), 0) SYS_Yield, nvl(TO_CHAR(SYS_PERCENT * 100, 'FM9999999990.00'), 0) SYS_PERCENT , SUB_DATE,'C2' PLT ");
|
|
strSql.AppendLine("FROM ");
|
|
strSql.AppendLine("( ");
|
|
strSql.AppendLine("select count(case when UPD_PGMID LIKE 'WEF%' then 1 else null end) ManmMde_COUNT ");
|
|
strSql.AppendLine(",count(case when UPD_PGMID IN('WEC4004C') then 1 else null end) SYS_COUNT ");
|
|
strSql.AppendLine(",case when sum(case when UPD_PGMID LIKE 'WEF%' then wgt2 else 0 end ) != 0 then sum(case when UPD_PGMID LIKE 'WEF%' then wgt1 else 0 end )/ sum(case when UPD_PGMID LIKE 'WEF%' then wgt2 else 0 end ) else 0 end ManmMde_Yield ");
|
|
strSql.AppendLine(",case when sum(case when UPD_PGMID IN ('WEC4004C') then wgt2 else 0 end ) != 0 then sum(case when UPD_PGMID IN ('WEC4004C') then wgt1 else 0 end )/ sum(case when UPD_PGMID IN('WEC4004C') then wgt2 else 0 end ) else 0 end SYS_Yield ");
|
|
strSql.AppendLine(",case when count(1) != 0 then count(case when UPD_PGMID IN ('WEC4004C') then 1 else null end)/ count(1) else 0 end SYS_PERCENT ");
|
|
strSql.AppendLine(", TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') SUB_DATE ");
|
|
strSql.AppendLine("from(select p.* ");
|
|
strSql.AppendLine(", (select sum(WGT) from nisco.FP_slab_des FSD where FSD.slab_no = P.MAT_NO AND FSD.BLOCK_SEQ != '00' AND FSD.SEQ != '00') wgt1 ");
|
|
strSql.AppendLine(",(select sum(slab_wgt) from nisco.FP_slab_des FSD where FSD.slab_no = P.MAT_NO AND FSD.BLOCK_SEQ = '00' AND FSD.SEQ = '00' AND FSD.PROC_CD != 'CAC') wgt2 ");
|
|
strSql.AppendLine("from ");
|
|
strSql.AppendLine(" (select rank() over(partition by mat_no order by ins_date desc) rank, t.* from ");
|
|
strSql.AppendLine(" nisco.CP_REP_HIS t ");
|
|
strSql.AppendLine("WHERE((prod_cd = 'SL' ");
|
|
strSql.AppendLine("and rep_typ = '2' ");
|
|
strSql.AppendLine("AND NOT REGEXP_LIKE(T.MAT_NO, '[A-Za-z]') ");
|
|
strSql.AppendLine("AND UPD_PGMID LIKE 'WEF%') ");
|
|
strSql.AppendLine("or UPD_PGMID IN('WEC4004C')) ");
|
|
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql.AppendLine("and not ((select count(1) from NISCO.BP_ODER_XY BOXY where order_no = UPD_AFT_ORD AND ORDER_ITEM=UPD_AFT_ORD_ITEM) < 1 AND (select ORD_KND from NISCO.BP_ORDER_ITEM where ord_no = UPD_AFT_ORD AND ORD_ITEM=UPD_AFT_ORD_ITEM)='T' ) ");
|
|
strSql.AppendLine(") p ");
|
|
strSql.AppendLine("where rank = 1 ");
|
|
strSql.AppendLine(") ");
|
|
strSql.AppendLine("GROUP BY TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') ");
|
|
strSql.AppendLine("order by TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') ");
|
|
strSql.AppendLine(") ");
|
|
|
|
//开启数据库连接查询数据
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db_sur"))
|
|
{
|
|
ltResult = db.Query<TB_SUB_RESULT>(strSql.ToString());
|
|
|
|
strSql2.AppendLine("SELECT DISTINCT CRH.MAT_NO,SUBSTR(CRH.INS_DATE,1,8) INS_DATE FROM NISCO.CP_REP_HIS CRH");
|
|
strSql2.AppendLine("WHERE prod_cd = 'SL' and rep_typ = '2' AND UPD_PGMID LIKE 'WEF%'");
|
|
strSql2.AppendLine("AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
//strSql2.AppendLine("AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + QAGP.END_TIME.ToString("yyyy-MM-dd") + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql2.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
ltSlabDate = db.Query<SLAB_DATE>(strSql2.ToString());
|
|
}
|
|
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
strSql3.AppendLine("SELECT SLAB_NO ");
|
|
strSql3.AppendLine(", GRP_CNT ");
|
|
strSql3.AppendLine(", TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') SUB_DATE ");
|
|
strSql3.AppendLine(", ORI_ORD_CNT ");
|
|
strSql3.AppendLine(", REMARK ");
|
|
strSql3.AppendLine(", RESULT_CNT FROM TB_SLAB_STAT_C2 WHERE 1 = 1 ");
|
|
|
|
strSql3.AppendLine("AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql3.AppendLine(" AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
|
|
ltSlaStat = db.Query<TB_SLAB_STAT_C2>(strSql3.ToString());
|
|
}
|
|
|
|
//根据日期分组
|
|
foreach (SLAB_DATE iDate in ltSlabDate.GroupBy(p => p.INS_DATE).Select(group => group.First()))
|
|
{
|
|
//记录初始数量
|
|
decimal intCnt = ltSlabDate.Where(p => p.INS_DATE == iDate.INS_DATE).Count();
|
|
//只统计20230824 之后的数据 ,之前的没有记录
|
|
if (Convert.ToDecimal(iDate.INS_DATE) >= Convert.ToDecimal(20230824))
|
|
{
|
|
try
|
|
{
|
|
//每个日期统计数量
|
|
foreach (SLAB_DATE iSlabDate in ltSlabDate.Where(p => p.INS_DATE == iDate.INS_DATE).ToList())
|
|
{
|
|
//没有记录 减一
|
|
if (ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).Count() <= 0)
|
|
{
|
|
intCnt--;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
//没有订单 减一
|
|
if (ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).OrderByDescending(p => p.SUB_DATE).FirstOrDefault().GRP_CNT == null
|
|
|| ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO && p.SUB_DATE == iDate.INS_DATE).OrderByDescending(p => p.SUB_DATE).FirstOrDefault().GRP_CNT == 0)
|
|
{
|
|
intCnt--;
|
|
continue;
|
|
}
|
|
}
|
|
//记录人工替代的记录
|
|
TB_SLAB_MUA_LOG TSML = new TB_SLAB_MUA_LOG();
|
|
TSML.PLT = "C2";//工厂
|
|
TSML.REMARK = "";//备注
|
|
TSML.STAT_DATE = DateTime.Now.ToString();//统计时间
|
|
TSML.SUB_DATE = iSlabDate.INS_DATE; //替代时间
|
|
TSML.SLAB_NO = iSlabDate.MAT_NO; //板坯号
|
|
|
|
ltTbSlabMuaLog.Add(TSML); //添加记录
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().MANMMDE_COUNT = intCnt;
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_PERCENT
|
|
= Math.Round(Convert.ToDecimal((ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT
|
|
/ (ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT + intCnt))), 4) * 100;
|
|
}
|
|
}
|
|
//存储人工替代的记录数据
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
try
|
|
{
|
|
//开启事务
|
|
db.BeginTransaction();
|
|
//删除7天之前的数据
|
|
db.Execute("DELETE FROM TB_SLAB_MUA_LOG WHERE PLT='C2' AND STAT_DATE < '" + DateTime.Now.AddDays(7).ToString("yyyy-MM-dd HH:mm:dd") + "'");
|
|
//存储人工记录的数据
|
|
db.Insert<TB_SLAB_MUA_LOG>(ltTbSlabMuaLog);
|
|
db.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//数据如果发生错误则回滚
|
|
db.Rollback();
|
|
logger.ErrorFormat("人工替代记录数据存储错误!信息:{0}", ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("GetHisC2RATE_ 报错", ex);
|
|
}
|
|
|
|
return ltResult;
|
|
}
|
|
|
|
public static IList<TB_SUB_RESULT> GetHisC3RATE_ALL()
|
|
{
|
|
StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量
|
|
StringBuilder strSql2 = new StringBuilder(); //声明拼接Sql语句变量
|
|
StringBuilder strSql3 = new StringBuilder(); //声明拼接Sql语句变量
|
|
IList<TB_SUB_RESULT> ltResult = new List<TB_SUB_RESULT>();
|
|
|
|
IList<SLAB_DATE> ltSlabDate = new List<SLAB_DATE>();
|
|
|
|
IList<TB_SLAB_STAT> ltSlaStat = new List<TB_SLAB_STAT>();
|
|
|
|
//人工替代记录
|
|
IList<TB_SLAB_MUA_LOG> ltTbSlabMuaLog = new List<TB_SLAB_MUA_LOG>();
|
|
//查询可用订单以及常用字段
|
|
|
|
try
|
|
{
|
|
strSql.AppendLine(" SELECT ManmMde_COUNT, SYS_COUNT, nvl(TO_CHAR(ManmMde_Yield * 100, 'FM9999999990.00'), 0) ManmMde_Yield, nvl(TO_CHAR(SYS_Yield * 100, 'FM9999999990.00'), 0) SYS_Yield, nvl(TO_CHAR(SYS_PERCENT * 100, 'FM9999999990.00'), 0) SYS_PERCENT , SUB_DATE,'C3' PLT ");
|
|
strSql.AppendLine("FROM ");
|
|
strSql.AppendLine("( ");
|
|
strSql.AppendLine("select count(case when UPD_PGMID LIKE 'CEF%' then 1 else null end) ManmMde_COUNT ");
|
|
strSql.AppendLine(",count(case when UPD_PGMID IN('WEC4003C') then 1 else null end) SYS_COUNT ");
|
|
strSql.AppendLine(",case when sum(case when UPD_PGMID LIKE 'CEF%' then wgt2 else 0 end ) != 0 then sum(case when UPD_PGMID LIKE 'CEF%' then wgt1 else 0 end )/ sum(case when UPD_PGMID LIKE 'CEF%' then wgt2 else 0 end ) else 0 end ManmMde_Yield ");
|
|
strSql.AppendLine(",case when sum(case when UPD_PGMID IN ('WEC4003C') then wgt2 else 0 end ) != 0 then sum(case when UPD_PGMID IN ('WEC4003C') then wgt1 else 0 end )/ sum(case when UPD_PGMID IN('WEC4003C') then wgt2 else 0 end ) else 0 end SYS_Yield ");
|
|
strSql.AppendLine(",case when count(1) != 0 then count(case when UPD_PGMID IN ('WEC4003C') then 1 else null end)/ count(1) else 0 end SYS_PERCENT ");
|
|
strSql.AppendLine(", TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') SUB_DATE ");
|
|
strSql.AppendLine("from(select p.* ");
|
|
strSql.AppendLine(", (select sum(WGT) from nisco.FP_slab_des FSD where FSD.slab_no = P.MAT_NO AND FSD.BLOCK_SEQ != '00' AND FSD.SEQ != '00') wgt1 ");
|
|
strSql.AppendLine(",(select sum(slab_wgt) from nisco.FP_slab_des FSD where FSD.slab_no = P.MAT_NO AND FSD.BLOCK_SEQ = '00' AND FSD.SEQ = '00' AND FSD.PROC_CD != 'CAC') wgt2 ");
|
|
strSql.AppendLine("from ");
|
|
strSql.AppendLine(" (select rank() over(partition by mat_no order by ins_date desc) rank, t.* from ");
|
|
strSql.AppendLine(" nisco.CP_REP_HIS t ");
|
|
strSql.AppendLine("WHERE((prod_cd = 'SL' ");
|
|
strSql.AppendLine("and rep_typ = '2' ");
|
|
strSql.AppendLine("AND NOT REGEXP_LIKE(T.MAT_NO, '[A-Za-z]') ");
|
|
strSql.AppendLine("AND UPD_PGMID LIKE 'CEF%') ");
|
|
strSql.AppendLine("or UPD_PGMID IN('WEC4003C')) ");
|
|
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
//strSql.AppendLine("AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(trunc(sysdate - 7), 'yyyyMMdd') ");
|
|
strSql.AppendLine("and not ((select count(1) from NISCO.BP_ODER_XY BOXY where order_no = UPD_AFT_ORD AND ORDER_ITEM=UPD_AFT_ORD_ITEM) < 1 AND (select ORD_KND from NISCO.BP_ORDER_ITEM where ord_no = UPD_AFT_ORD AND ORD_ITEM=UPD_AFT_ORD_ITEM)='T' ) ");
|
|
strSql.AppendLine(") p ");
|
|
strSql.AppendLine("where rank = 1 ");
|
|
strSql.AppendLine(") ");
|
|
strSql.AppendLine("GROUP BY TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') ");
|
|
strSql.AppendLine("order by TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyy-MM-dd') ");
|
|
strSql.AppendLine(") ");
|
|
|
|
//开启数据库连接查询数据
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db_sur"))
|
|
{
|
|
ltResult = db.Query<TB_SUB_RESULT>(strSql.ToString());
|
|
|
|
strSql2.AppendLine("SELECT DISTINCT CRH.MAT_NO, SUBSTR(CRH.INS_DATE,1,8) INS_DATE FROM NISCO.CP_REP_HIS CRH");
|
|
strSql2.AppendLine("WHERE prod_cd = 'SL' and rep_typ = '2' AND UPD_PGMID LIKE 'CEF%'");
|
|
strSql2.AppendLine("AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
//strSql2.AppendLine("AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + QAGP.END_TIME.ToString("yyyy-MM-dd") + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql2.AppendLine(" AND TO_CHAR(TO_DATE(ins_date, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
ltSlabDate = db.Query<SLAB_DATE>(strSql2.ToString());
|
|
}
|
|
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
strSql3.AppendLine("SELECT SLAB_NO ");
|
|
strSql3.AppendLine(", GRP_CNT ");
|
|
strSql3.AppendLine(", TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') SUB_DATE ");
|
|
strSql3.AppendLine(", ORI_ORD_CNT ");
|
|
strSql3.AppendLine(", F_CNT ");
|
|
strSql3.AppendLine(", S_CNT ");
|
|
strSql3.AppendLine(", T_CNT ");
|
|
strSql3.AppendLine(", REMARK ");
|
|
strSql3.AppendLine(", RESULT_CNT FROM TB_SLAB_STAT WHERE 1 = 1 ");
|
|
|
|
strSql3.AppendLine("AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
//strSql3.AppendLine("AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + QAGP.END_TIME.ToString("yyyy-MM-dd") + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql3.AppendLine(" AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
ltSlaStat = db.Query<TB_SLAB_STAT>(strSql3.ToString());
|
|
}
|
|
|
|
//根据日期分组
|
|
foreach (SLAB_DATE iDate in ltSlabDate.GroupBy(p => p.INS_DATE).Select(group => group.First()))
|
|
{
|
|
//记录初始数量
|
|
decimal intCnt = ltSlabDate.Where(p => p.INS_DATE == iDate.INS_DATE).Count();
|
|
//只统计202321 之后的数据 ,之前的没有记录
|
|
if (Convert.ToDecimal(iDate.INS_DATE) >= Convert.ToDecimal(20230821))
|
|
{
|
|
try
|
|
{
|
|
//每个日期统计数量
|
|
foreach (SLAB_DATE iSlabDate in ltSlabDate.Where(p => p.INS_DATE == iDate.INS_DATE).ToList())
|
|
{
|
|
//没有记录 减一
|
|
if (ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO).Count() <= 0)
|
|
{
|
|
intCnt--;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
//没有订单 减一
|
|
if (ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO).FirstOrDefault().GRP_CNT == null
|
|
|| ltSlaStat.Where(p => p.SLAB_NO == iSlabDate.MAT_NO).FirstOrDefault().GRP_CNT == 0)
|
|
{
|
|
intCnt--;
|
|
continue;
|
|
}
|
|
}
|
|
//记录人工替代的记录
|
|
TB_SLAB_MUA_LOG TSML = new TB_SLAB_MUA_LOG();
|
|
TSML.PLT = "C3";//工厂
|
|
TSML.REMARK = "";//备注
|
|
TSML.STAT_DATE = DateTime.Now.ToString();//统计时间
|
|
TSML.SUB_DATE = iSlabDate.INS_DATE; //替代时间
|
|
TSML.SLAB_NO = iSlabDate.MAT_NO; //板坯号
|
|
|
|
ltTbSlabMuaLog.Add(TSML); //添加记录
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().MANMMDE_COUNT = intCnt;
|
|
if ((ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT + intCnt) == 0)
|
|
{
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_PERCENT = 0;
|
|
}
|
|
else
|
|
{
|
|
ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_PERCENT
|
|
= Math.Round(Convert.ToDecimal((ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT
|
|
/ (ltResult.Where(p => p.SUB_DATE.Replace("-", "") == iDate.INS_DATE).FirstOrDefault().SYS_COUNT + intCnt))), 4) * 100;
|
|
}
|
|
}
|
|
}
|
|
|
|
//存储人工替代的记录数据
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
try
|
|
{
|
|
//开启事务
|
|
db.BeginTransaction();
|
|
//删除7天之前的数据
|
|
db.Execute("DELETE FROM TB_SLAB_MUA_LOG WHERE PLT='C3' AND STAT_DATE < '" + DateTime.Now.AddDays(7).ToString("yyyy-MM-dd HH:mm:dd") + "'");
|
|
//存储人工记录的数据
|
|
db.Insert<TB_SLAB_MUA_LOG>(ltTbSlabMuaLog);
|
|
db.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//数据如果发生错误则回滚
|
|
db.Rollback();
|
|
logger.ErrorFormat("人工替代记录数据存储错误!信息:{0}", ex.ToString());
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("GetHisC3RATE_ 报错", ex);
|
|
}
|
|
|
|
return ltResult;
|
|
}
|
|
|
|
public static IList<TB_SUB_RESULT> GetHisRATE()
|
|
{
|
|
StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量
|
|
IList<TB_SUB_RESULT> ltResult = new List<TB_SUB_RESULT>();
|
|
try
|
|
{
|
|
strSql.AppendLine("select * from TB_SUB_RESULT where 1=1");
|
|
strSql.AppendLine("AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + end_time + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
//strSql3.AppendLine("AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') <= TO_CHAR(TO_DATE('" + QAGP.END_TIME.ToString("yyyy-MM-dd") + "', 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
strSql.AppendLine(" AND TO_CHAR(TO_DATE(SUB_DATE, 'yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd') >= TO_CHAR(TO_DATE('" + start_time + "','yyyy-MM-dd HH24:mi:ss'), 'yyyyMMdd')");
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
ltResult = db.Query<TB_SUB_RESULT>(strSql.ToString());
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("GetHisRATE_ 报错", ex);
|
|
}
|
|
return ltResult;
|
|
}
|
|
|
|
public static void SaveInfo(IList<TB_SUB_RESULT> ltFSD)
|
|
{
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
try
|
|
{
|
|
//因为是同时操作两个表, 所以开启事务
|
|
db.BeginTransaction();
|
|
//db.Execute("DELETE FROM FP_SLAB_DES WHERE PLT='C2' AND HAN_RSL IS NULL");
|
|
db.Insert<TB_SUB_RESULT>(ltFSD);
|
|
db.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//数据如果发生错误则回滚
|
|
db.Rollback();
|
|
logger.ErrorFormat("存储错误!信息:{0}", ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void deleteInfo(string INS_DATE)
|
|
{
|
|
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
|
|
{
|
|
try
|
|
{
|
|
//因为是同时操作两个表, 所以开启事务
|
|
db.BeginTransaction();
|
|
db.Execute("DELETE FROM TB_SUB_RESULT WHERE SUB_DATE='" + INS_DATE + "'");
|
|
db.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//数据如果发生错误则回滚
|
|
db.Rollback();
|
|
logger.ErrorFormat("存储错误!信息:{0}", ex.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
#region 方法
|
|
|
|
/// <summary>
|
|
/// 获取时间戳
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static string GetTimeStamp()
|
|
{
|
|
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 8, 0, 0, 0);
|
|
return Convert.ToInt64(ts.TotalMilliseconds).ToString();
|
|
}
|
|
|
|
#endregion 方法
|
|
}
|
|
} |