/*******************************************************************************
* Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
* 类的信息:
* 1.程序名称:PMModuleLogic.cs
* 2.功能描述:生产管理服务端业务逻辑
* 编辑履历:
* 作者 日期 版本 修改内容
* 陈晓野 2015/03/21 1.00 新建
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using Dongke.IBOSS.PRD.Basics.BaseResources;
using Dongke.IBOSS.PRD.Basics.DataAccess;
using Dongke.IBOSS.PRD.WCF.DataModels;
using Oracle.DataAccess.Client;
namespace Dongke.IBOSS.PRD.Service.PublicModuleService
{
///
/// 生产管理服务端业务逻辑
///
public static class PublicModuleLogic
{
/*
///
/// 取得FP00002画面(工号产量质量分析表)的查询数据
///
/// 登录用户信息
/// 查询条件
/// 查询结果
public static ServiceResultEntity GetFP00002Data(int accountID, int rptSProcedureID, string usercode, DateTime date)
{
//if(string.IsNullOrWhiteSpace(usercode))
//{
// ServiceResultEntity sre = new ServiceResultEntity();
// sre.Status = Constant.ServiceResultStatus.NoSearchResults;
// return sre;
//}
IDBConnection conn = null;
try
{
conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
List parameters = new List();
date = date.Date;
//parameters.Add(new OracleParameter(":AccountID", OracleDbType.Int32, user.AccountID, ParameterDirection.Input));
parameters.Add(new OracleParameter(":AccountID", OracleDbType.Int32, accountID, ParameterDirection.Input));
parameters.Add(new OracleParameter(":CreateTimeStart", OracleDbType.Date, date, ParameterDirection.Input));
parameters.Add(new OracleParameter(":CreateTimeEnd", OracleDbType.Date, date.AddDays(1), ParameterDirection.Input));
parameters.Add(new OracleParameter(":Usercode", OracleDbType.NVarchar2, usercode, ParameterDirection.Input));
// 产量
string sqlString = "\n" +
"select --qdgroup.gid,\n" +
" decode(qdgroup.gid, 7, '总计', 0, qdgroup.productionlinename, '--') productionlinename,\n" +
" decode(qdgroup.gid, 3, '合计', 0, qdgroup.procedurename, '--') procedurename,\n" +
" decode(qdgroup.gid, 1, '小计', 0, qdgroup.goodstypename2, '--') goodstypename2,\n" +
" --decode(qdgroup.gid, 0, qdgroup.usercode, '--') usercode,\n" +
" decode(qdgroup.gid, 0, qdgroup.goodstypename, '--') goodstypename,\n" +
" decode(qdgroup.gid, 0, qdgroup.goodscode, '--') goodscode,\n" +
" qdgroup.production\n" +
" from (select grouping_id(pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstgoodstype2.goodstypename,\n" +
" --qd.usercode,\n" +
" mstgoods.goodscode) gid,\n" +
" pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstgoodstype2.goodstypename goodstypename2,\n" +
" --qd.usercode,\n" +
" mstgoodstype.goodstypename,\n" +
" mstgoods.goodscode,\n" +
" sum(qd.production) production\n" +
" from (select --pd.barcode,\n" +
" pd.productionlineid,\n" +
" pd.procedureid,\n" +
" pd.goodsid,\n" +
" --pd.userid,\n" +
" --pd.usercode,\n" +
" 1 production\n" +
" from tp_pm_productiondata pd\n" +
" where pd.valueflag = '1'\n" +
" and ((pd.modeltype <> 5) or\n" +
" (pd.modeltype = 5 and pd.SpecialRepairFlag = '0'))\n" +
" and pd.Usercode = :Usercode\n" +
" and pd.AccountID = :AccountID\n" +
" AND pd.createtime >= :CreateTimeStart\n" +
" AND pd.createtime < :CreateTimeEnd) qd\n" +
" left join tp_pc_productionline pcpl\n" +
" on pcpl.productionlineid = qd.productionlineid\n" +
" left join tp_pc_procedure pcp\n" +
" on pcp.procedureid = qd.procedureid\n" +
" left join tp_mst_goods mstgoods\n" +
" on mstgoods.goodsid = qd.goodsid\n" +
" left join tp_mst_goodstype mstgoodstype\n" +
" on mstgoodstype.goodstypeid = mstgoods.goodstypeid\n" +
" left join tp_mst_goodstype mstgoodstype2\n" +
" on mstgoodstype2.goodstypecode =\n" +
" substr(mstgoodstype.goodstypecode, 0, 6)\n" +
" and mstgoodstype.AccountID = mstgoodstype2.AccountID\n" +
" group by grouping sets((pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstgoodstype2.goodstypename,\n" +
" --qd.usercode,\n" +
" mstgoodstype.goodstypename,\n" +
" mstgoods.goodscode),\n" +
" (pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstgoodstype2.goodstypename),\n" +
" (pcpl.productionlinename,\n" +
" pcp.procedurename),\n" +
" pcpl.productionlinename)\n" +
" order by pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstgoodstype2.goodstypename,\n" +
" --qd.usercode,\n" +
" mstgoodstype.goodstypename,\n" +
" mstgoods.goodscode) qdgroup";
DataTable data = conn.GetSqlResultToDt(sqlString, parameters.ToArray());
ServiceResultEntity sre = new ServiceResultEntity();
if (data == null || data.Rows.Count == 0)
{
sre.Status = Constant.ServiceResultStatus.NoSearchResults;
return sre;
}
sre.Data = new DataSet();
sre.Data.Tables.Add(data);
parameters.Add(new OracleParameter(":in_rptSprocedureId", OracleDbType.Int32, rptSProcedureID, ParameterDirection.Input));
string sqlString1 = "\n" +
"select qdgroup.gid,\n" +
" decode(qdgroup.gid, 0, qdgroup.productionlinename, '--') productionlinename,\n" +
" decode(qdgroup.gid, 7, '总计', 0, qdgroup.procedurename, '--') procedurename,\n" +
" decode(qdgroup.gid, 3, '合计', 0, qdgroup.kilncode, '--') kilncode,\n" +
" decode(qdgroup.gid, 1, '小计', 0, qdgroup.goodstypename2, '--') goodstypename2,\n" +
" --decode(qdgroup.gid, 0, qdgroup.usercode, '--') usercode,\n" +
" decode(qdgroup.gid, 0, qdgroup.goodstypename, '--') goodstypename,\n" +
" decode(qdgroup.gid, 0, qdgroup.goodscode, '--') goodscode,\n" +
" qdgroup.OutKilnCount,\n" +
" qdgroup.GoodCount,\n" +
" qdgroup.GoodCount,\n" +
" to_char((qdgroup.GoodCount / qdgroup.OutKilnCount) * 100, '990.00') || '%' GoodPercent,\n" +
" to_char(((qdgroup.GoodCount+qdgroup.BadCount) / qdgroup.OutKilnCount) * 100, '990.00') || '%' QualifiedPercent,\n" +
" qdgroup.SubstandardCount,\n" +
" to_char((qdgroup.SubstandardCount / qdgroup.OutKilnCount) * 100,\n" +
" '990.00') || '%' SubstandardPercent,\n" +
" qdgroup.GoodCount+qdgroup.BadCount Qualified,\n" +
" to_char((qdgroup.BadCount / qdgroup.OutKilnCount) * 100, '990.00') || '%' BadPercent,\n" +
" qdgroup.ReFireCount,\n" +
" to_char((qdgroup.ReFireCount / qdgroup.OutKilnCount) * 100,\n" +
" '990.00') || '%' ReFirePercent\n" +
" from (select grouping_id(pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstkiln.kilncode,\n" +
" mstgoodstype2.goodstypename,\n" +
" --qd.usercode,\n" +
" mstgoods.goodscode) gid,\n" +
" pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstkiln.kilncode,\n" +
" mstgoodstype2.goodstypename goodstypename2,\n" +
" --qd.usercode,\n" +
" mstgoodstype.goodstypename,\n" +
" mstgoods.goodscode,\n" +
" sum(qd.OutKilnCount) OutKilnCount,\n" +
" sum(qd.GoodCount) GoodCount,\n" +
" sum(qd.SubstandardCount) SubstandardCount,\n" +
" sum(qd.BadCount) BadCount,\n" +
" sum(qd.ReFireCount) ReFireCount\n" +
" from (select --pdbc.barcode,\n" +
" pdbc.productionlineid,\n" +
" pdata.procedureid,\n" +
" --pdata.usercode,\n" +
" pdbc.goodsid,\n" +
" pdbc.kilnid,\n" +
" 1 OutKilnCount,\n" +
" case\n" +
" when defect.defectprocedureid is not null and glt.goodsleveltypeid in (5, 6, 7) then\n" +
" 0\n" +
" else\n" +
" 1\n" +
" end GoodCount,\n" +
" case\n" +
" when defect.defectprocedureid is not null and glt.goodsleveltypeid = 7 then\n" +
" 1\n" +
" else\n" +
" 0\n" +
" end SubstandardCount,\n" +
" case\n" +
" when defect.defectprocedureid is not null and glt.goodsleveltypeid = 6 then\n" +
" 1\n" +
" else\n" +
" 0\n" +
" end ReFireCount,\n" +
" case\n" +
" when defect.defectprocedureid is not null and glt.goodsleveltypeid = 5 then\n" +
" 1\n" +
" else\n" +
" 0\n" +
" end BadCount\n" +
" from (select distinct pd.barcode,\n" +
" pd.productionlineid,\n" +
" pd.goodsid,\n" +
" pd.kilnid,\n" +
" pd.kilncarbatchno\n" +
" from tp_pm_productiondata pd\n" +
" where pd.valueflag = '1'\n" +
" and pd.procedureid = :in_rptSprocedureId \n" +
" and pd.AccountID = :AccountID\n" +
" and pd.createtime >= :CreateTimeStart\n" +
" and pd.createtime < :CreateTimeEnd\n" +
" ) pdbc\n" +
" inner join (select pd.barcode,\n" +
" --pd.userid,\n" +
" --pd.usercode,\n" +
" pd.procedureid\n" +
" from tp_pm_productiondata pd\n" +
" where pd.valueflag = '1'\n" +
" and pd.AccountID = :AccountID\n" +
" and pd.usercode = :Usercode\n" +
// 公坯、干补不算交坯工序的质量。
//" and ((pd.modeltype <> 5) or (pd.modeltype = 5 and pd.IsPublicBody = '0' and pd.SpecialRepairFlag = '0')) \n" +
// 干补不算交坯工序的质量。
" and ((pd.modeltype <> 5) or (pd.modeltype = 5 and pd.SpecialRepairFlag = '0')) \n" +
" ) pdata\n" +
" on pdata.barcode = pdbc.barcode\n" +
" left join (select kcbc.barcode, kcbc.kilncarbatchno, kcbc.goodsleveltypeid, kcbc.productiondataid\n" +
" from (select pd.barcode,\n" +
" pd.kilncarbatchno,\n" +
" pd.goodsleveltypeid,\n" +
" pd.productiondataid,\n" +
" ROW_NUMBER() OVER(PARTITION BY pd.barcode, pd.kilncarbatchno ORDER BY pd.productiondataid desc) AS dataid\n" +
" from tp_pm_productiondata pd\n" +
" where pd.valueflag = '1'\n" +
" and pd.AccountID = :AccountID\n" +
" and length(pd.kilncarbatchno) > 0\n" +
" AND pd.createtime >= :CreateTimeStart\n" +
" and pd.modeltype = -1) kcbc\n" +
" where kcbc.dataid = 1) glt\n" +
" on pdbc.kilncarbatchno = glt.kilncarbatchno\n" +
" and pdbc.barcode = glt.barcode\n" +
" left join (select distinct productiondataid, defectprocedureid" +
" from tp_pm_defect def " +
" where def.valueflag='1'" +
" and def.AccountID = :AccountID\n" +
" AND def.createtime >= :CreateTimeStart) defect\n" +
" on defect.productiondataid = glt.productiondataid\n" +
" and pdata.procedureid = defect.defectprocedureid) qd\n" +
" inner join tp_pc_productionline pcpl\n" +
" on pcpl.productionlineid = qd.productionlineid\n" +
" inner join tp_pc_procedure pcp\n" +
" on pcp.procedureid = qd.procedureid\n" +
" inner join tp_mst_kiln mstkiln\n" +
" on mstkiln.kilnid = qd.kilnid\n" +
" inner join tp_mst_goods mstgoods\n" +
" on mstgoods.goodsid = qd.goodsid\n" +
" inner join tp_mst_goodstype mstgoodstype\n" +
" on mstgoodstype.goodstypeid = mstgoods.goodstypeid\n" +
" inner join tp_mst_goodstype mstgoodstype2\n" +
" on mstgoodstype2.goodstypecode =\n" +
" substr(mstgoodstype.goodstypecode, 0, 6)\n" +
" and mstgoodstype.AccountID = mstgoodstype2.AccountID\n" +
" group by grouping sets((pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstkiln.kilncode,\n" +
" mstgoodstype2.goodstypename,\n" +
" --qd.usercode,\n" +
" mstgoodstype.goodstypename,\n" +
" mstgoods.goodscode),\n" +
" (pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstkiln.kilncode,\n" +
" mstgoodstype2.goodstypename),\n" +
" (pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstkiln.kilncode),\n" +
" (pcpl.productionlinename, pcp.procedurename))\n" +
" order by pcpl.productionlinename,\n" +
" pcp.procedurename,\n" +
" mstkiln.kilncode,\n" +
" mstgoodstype2.goodstypename,\n" +
" --qd.usercode,\n" +
" mstgoodstype.goodstypename,\n" +
" mstgoods.goodscode\n" +
" ) qdgroup\n";
DataTable data1 = conn.GetSqlResultToDt(sqlString1, parameters.ToArray());
if (data1 == null || data1.Rows.Count == 0)
{
sre.Status = Constant.ServiceResultStatus.NoSearchResults;
return sre;
}
sre.Data.Tables.Add(data1);
return sre;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null &&
conn.ConnState == ConnectionState.Open)
{
conn.Close();
}
}
}
*/
///
/// 取得FP00002画面(工号产量质量分析表)的查询数据
///
/// 登录用户信息
/// 查询条件
/// 查询结果
public static ServiceResultEntity GetFP00002Data(int accountID, string usercode, DateTime date)
{
IDBTransaction tran = null;
try
{
tran = ClsDbFactory.CreateDBTransaction(DataBaseType.ORACLE, DataManager.ConnectionString);
tran.Connect();
// 只限成型工查询
string sqlString = "select u.userid, u.isgroutingworker from tp_mst_user u where u.AccountID = :AccountID and u.usercode = :usercode";
OracleParameter[] paraUser = new OracleParameter[]
{
new OracleParameter(":AccountID", OracleDbType.Int32, accountID, ParameterDirection.Input),
new OracleParameter(":usercode", OracleDbType.NVarchar2, usercode, ParameterDirection.Input),
};
DataTable dt = tran.GetSqlResultToDt(sqlString, paraUser);
if (dt == null || dt.Rows.Count == 0)
{
ServiceResultEntity sreUser = new ServiceResultEntity();
sreUser.Status = Constant.ServiceResultStatus.Other;
sreUser.Message = "系统中不存在此成型工号";
return sreUser;
}
if ("1" != (dt.Rows[0]["isgroutingworker"] + ""))
{
ServiceResultEntity sreUser = new ServiceResultEntity();
sreUser.Status = Constant.ServiceResultStatus.Other;
sreUser.Message = "此工号不是成型工号";
return sreUser;
}
DateTime month = new DateTime(date.Year, date.Month, 1);
date = DateTime.Now.Date;
DateTime month1 = new DateTime(date.Year, date.Month, 1).AddMonths(-1);
if (month < month1)
{
month = month1;
}
OracleParameter[] parameters = new OracleParameter[]
{
new OracleParameter("in_AccountID", OracleDbType.Int32, accountID, ParameterDirection.Input),
new OracleParameter("in_UserCode", OracleDbType.NVarchar2, usercode, ParameterDirection.Input),
//new OracleParameter("in_OutKilnProcedureID", OracleDbType.Int32, rptSProcedureID, ParameterDirection.Input),
new OracleParameter("in_DateBegin", OracleDbType.Date, date, ParameterDirection.Input),
new OracleParameter("in_DateEnd", OracleDbType.Date, date.AddDays(1).AddSeconds(-1), ParameterDirection.Input),
new OracleParameter("in_MonthBegin", OracleDbType.Date, month, ParameterDirection.Input),
new OracleParameter("in_NextMonth", OracleDbType.Date, month.AddMonths(1), ParameterDirection.Input),
new OracleParameter("out_DataD", OracleDbType.RefCursor, null, ParameterDirection.Output),
new OracleParameter("out_DataM", OracleDbType.RefCursor, null, ParameterDirection.Output),
new OracleParameter("out_DataCC", OracleDbType.RefCursor, null, ParameterDirection.Output),
new OracleParameter("out_DataNS", OracleDbType.RefCursor, null, ParameterDirection.Output),
new OracleParameter("out_DataSC", OracleDbType.RefCursor, null, ParameterDirection.Output),
new OracleParameter("out_DataRC", OracleDbType.RefCursor, null, ParameterDirection.Output),
};
DataSet data = tran.ExecStoredProcedure("PRO_P2_GetUserProductionInfo", parameters);
ServiceResultEntity sre = new ServiceResultEntity();
if (data != null)
{
//,out_DataD OUT SYS_REFCURSOR -- 总体信息
//,out_DataM OUT SYS_REFCURSOR -- 月度信息
//,out_DataCC OUT SYS_REFCURSOR -- 成检明细
//,out_DataNS OUT SYS_REFCURSOR -- 后损明细
//,out_DataSC OUT SYS_REFCURSOR -- 半检不合格
//,out_DataRC OUT SYS_REFCURSOR -- 返工合格
data.Tables[0].TableName = "DataD";
data.Tables[1].TableName = "DataM";
data.Tables[2].TableName = "DataCC";
data.Tables[3].TableName = "DataNS";
data.Tables[4].TableName = "DataSC";
data.Tables[5].TableName = "DataRC";
}
tran.Commit();
sre.Data = data;
return sre;
}
catch (Exception ex)
{
//if (tran != null)
//{
// tran.Rollback();
//}
throw ex;
}
finally
{
if (tran != null &&
tran.ConnState == ConnectionState.Open)
{
tran.Disconnect();
}
}
}
///
/// 取得报表数据源数据
///
/// 登录用户信息
/// 查询结果
public static ServiceResultEntity GetRptProcedureModule(int accountid)
{
IDBConnection conn = null;
try
{
conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
string selSql = " select "
+ " TP_MST_RptProcedure.Rptprocedureid,"
+ " TP_MST_RptProcedure.Rptprocedurecode,"
+ " TP_MST_RptProcedure.Rptprocedurename,"
+ " TP_MST_RptProcedure.Rptproceduretype,"
+ " decode(TP_MST_RptProcedure.Rptproceduretype,'A0001','出窑统计','质量统计') RptproceduretypeName,"
+ " (select wm_concat(s.procedureid) sprocedureid from tp_mst_rptsprocedure s where s.rptprocedureid = TP_MST_RptProcedure.Rptprocedureid) sprocedureid,"
+ " (select wm_concat(t.procedureid) tprocedureid from tp_mst_rpttprocedure t where t.rptprocedureid = TP_MST_RptProcedure.Rptprocedureid) tprocedureid,"
+ " TP_MST_RptProcedure.Optimestamp "
+ " from TP_MST_RptProcedure "
+ " where TP_MST_RptProcedure.ValueFlag=1 "
+ " and TP_MST_RptProcedure.AccountID=:accountID order by TP_MST_RptProcedure.displayno";
List parameters = new List();
parameters.Add(new OracleParameter(":AccountID", OracleDbType.Int32, accountid, ParameterDirection.Input));
DataTable data = conn.GetSqlResultToDt(selSql.ToString(), parameters.ToArray());
ServiceResultEntity sre = new ServiceResultEntity();
if (data == null || data.Rows.Count == 0)
{
sre.Status = Constant.ServiceResultStatus.NoSearchResults;
return sre;
}
sre.Data = new DataSet();
sre.Data.Tables.Add(data);
return sre;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null &&
conn.ConnState == ConnectionState.Open)
{
conn.Close();
}
}
}
///
/// 取得报表的查询数据源统计工序数据
///
/// 登录用户信息
/// 查询条件
/// 查询结果
public static ServiceResultEntity GetRptSourceProcedureModule(int accountid, int? RptProcedureID)
{
IDBConnection conn = null;
try
{
conn = ClsDbFactory.CreateDBConnection(DataBaseType.ORACLE, DataManager.ConnectionString);
OracleParameter[] paras = new OracleParameter[]{
new OracleParameter("in_rptProcedureId",OracleDbType.Int32,RptProcedureID,ParameterDirection.Input),
new OracleParameter("out_rptSResult",OracleDbType.RefCursor, ParameterDirection.Output),
new OracleParameter("out_rptTresult",OracleDbType.RefCursor, ParameterDirection.Output),
};
DataSet data = conn.ExecStoredProcedure("PRO_MST_GetRptProcedureBYID", paras);
ServiceResultEntity sre = new ServiceResultEntity();
if (data == null || data.Tables.Count == 0)
{
sre.Status = Constant.ServiceResultStatus.NoSearchResults;
return sre;
}
sre.Data = new DataSet();
sre.Data = data;
return sre;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn != null &&
conn.ConnState == ConnectionState.Open)
{
conn.Close();
}
}
}
}
}