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#

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 方法
}
}