Răsfoiți Sursa

成型线模具使用明细表 按选中的统计方式 统计数据

张忠帅 2 ani în urmă
părinte
comite
203115bc0e
1 a modificat fișierele cu 222 adăugiri și 27 ștergeri
  1. 222 27
      DK.Service/ReportModuleLogic/ReportModuleLogic.cs

+ 222 - 27
DK.Service/ReportModuleLogic/ReportModuleLogic.cs

@@ -757,28 +757,49 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
 				//	"         ,gld.ENDUSEDDATE\n" +
 				//	"         ,t.groutinglinedetailid\n" +
 				//	" ORDER BY t.groutinglinecode, gld.groutingmouldcode, t.groutinglinedetailid";
-				if (se.TotalMethod!= null && se.TotalMethod != "")
-				{
-					sqlString = @"SELECT							
-														CASE WHEN  BuildingNo is NULL AND goodscode IS NULL AND GroutingLineNo IS NULL AND FloorNo IS NULL AND usercode IS NULL THEN '总计'
-																 WHEN groutinglinecode is NULL THEN'合计' 
-																 WHEN BuildingNo is NULL THEN '合计'
-																 WHEN goodscode IS NULL THEN '合计'
-																 WHEN GroutingLineNo IS NULL THEN '合计'
-																 WHEN FloorNo IS NULL THEN '合计'
-																 WHEN usercode IS NULL THEN '合计' 
-
-																 ELSE TO_CHAR(BuildingNo) END as BuildingNo,
-														groutinglinecode,
+				if (se.TotalMethod != null && se.TotalMethod != "" && se.TotalMethod != "goodscode")
+				{
+					sqlString = @"SELECT
+														GROUPING_ID(gmouldstatusname,goodscode) GID,
+														CASE WHEN  GROUPING_ID(gmouldstatusname,goodscode)=1 THEN '[小计]'
+															 WHEN GROUPING_ID(gmouldstatusname,goodscode)=3 AND " + se.TotalMethod + " is NOT null  THEN '【合 计】'";
+					sqlString += @"WHEN GROUPING_ID(gmouldstatusname,goodscode)=3  AND " + se.TotalMethod + " is null THEN '【总 计】' ELSE TO_CHAR(BuildingNo) END AS BuildingNo,";
+					sqlString += @"groutinglinecode,
 														FloorNo,
 														GroutingLineNo,
+														gmouldstatusname,
 														usercode,
 														goodscode,
 														GOODSSPECIFICATION,
 														goodstypename,
-														COUNT(1) AS MouldQuantity,
 														groutingmouldcode,
+														beginuseddate,
+														groutingdate,
+														ENDUSEDDATE,
+														mingresidue,
+														mouldGoodsCode,
+														mouldName,
+														SUM(MouldQuantity) AS MouldQuantity,
+														SUM(mingroutingcount)AS mingroutingcount,
+														SUM(sumgroutingcount)AS sumgroutingcount,
+														SUM(maxGroutingCount)AS maxGroutingCount,
+														SUM(groutingcount)AS groutingcount,
+														SUM(standardgroutingcount) AS standardgroutingcount,
+														SUM(leftcount)AS leftcount,
+														SUM(financecount) AS financecount
+					FROM(
+					SELECT											
+														BuildingNo as BuildingNo,
+														groutinglinecode,
+														FloorNo,
+														GroutingLineNo,
 														gmouldstatusname,
+														usercode,
+														goodscode,
+														GOODSSPECIFICATION,
+														goodstypename,
+														1 AS MouldQuantity,
+														groutingmouldcode,
 														beginuseddate,
 														groutingdate,
 														mingroutingcount,
@@ -889,18 +910,67 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
 															GroutingLineNo,
 															groutinglinecode,
 															groutingmouldcode 
-														)
-															GROUP BY grouping sets((
+														) )
+														GROUP BY GROUPING SETS((
+														TO_CHAR(BuildingNo),
 														groutinglinecode,
-														BuildingNo,
 														FloorNo,
 														GroutingLineNo,
+														gmouldstatusname,
 														usercode,
 														goodscode,
 														GOODSSPECIFICATION,
 														goodstypename,
 														groutingmouldcode,
+														beginuseddate,
+														groutingdate,
+														ENDUSEDDATE,
+														mingresidue,
+														mouldGoodsCode,
+														mouldName),";
+					sqlString += @"(gmouldstatusname," + se.TotalMethod + "),(" + se.TotalMethod + "),()) ORDER BY " + se.TotalMethod + ",GROUPING_ID(gmouldstatusname,goodscode)";
+				} else if (se.TotalMethod != null && se.TotalMethod != "" && se.TotalMethod == "goodscode") {
+					sqlString = @"SELECT
+														GROUPING_ID(gmouldstatusname,GroutingLineNo) GID,
+														CASE WHEN  GROUPING_ID(gmouldstatusname,GroutingLineNo)=1 THEN '[小计]'
+															 WHEN GROUPING_ID(gmouldstatusname,GroutingLineNo)=3 AND " + se.TotalMethod + " is NOT null  THEN '【合计】'";
+					sqlString += @"WHEN GROUPING_ID(gmouldstatusname,GroutingLineNo)=3  AND " + se.TotalMethod + " is null THEN '【总计】' ELSE TO_CHAR(BuildingNo) END AS BuildingNo,";
+					sqlString += @"groutinglinecode,
+														FloorNo,
+														GroutingLineNo,
+														gmouldstatusname,
+														usercode,
+														goodscode,
+														GOODSSPECIFICATION,
+														goodstypename,
+														groutingmouldcode,
+														beginuseddate,
+														groutingdate,
+														ENDUSEDDATE,
+														mingresidue,
+														mouldGoodsCode,
+														mouldName,
+														SUM(MouldQuantity) AS MouldQuantity,
+														SUM(mingroutingcount)AS mingroutingcount,
+														SUM(sumgroutingcount)AS sumgroutingcount,
+														SUM(maxGroutingCount)AS maxGroutingCount,
+														SUM(groutingcount)AS groutingcount,
+														SUM(standardgroutingcount) AS standardgroutingcount,
+														SUM(leftcount)AS leftcount,
+														SUM(financecount) AS financecount
+					FROM(
+					SELECT											
+														BuildingNo as BuildingNo,
+														groutinglinecode,
+														FloorNo,
+														GroutingLineNo,
 														gmouldstatusname,
+														usercode,
+														goodscode,
+														GOODSSPECIFICATION,
+														goodstypename,
+														1 AS MouldQuantity,
+														groutingmouldcode,
 														beginuseddate,
 														groutingdate,
 														mingroutingcount,
@@ -909,13 +979,132 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
 														groutingcount,
 														standardgroutingcount,
 														ENDUSEDDATE,
+														standardgroutingcount - mingroutingcount - sumgroutingcount leftcount,
+																 --期初剩余注浆次数为正数模具剩余注浆次数为正数:取期初剩余注浆次数
+														CASE WHEN gmouldstatusname = '变产' AND standardgroutingcount - mingroutingcount >= 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount > 0 THEN standardgroutingcount - mingroutingcount
+																 --期初剩余注浆次数为正数模具剩余注浆次数为负数:取期初剩余注浆次类
+																 WHEN gmouldstatusname = '变产' AND standardgroutingcount - mingroutingcount >= 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount < 0 THEN standardgroutingcount - mingroutingcount
+																 --期初剩余注浆次数为负数模具剩余注浆次数为负数:取0
+																 WHEN gmouldstatusname = '变产' AND standardgroutingcount - mingroutingcount < 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount < 0 THEN 0
+																 --期初剩余注浆次数为正数模具剩余注浆次数为正数:取期初剩余注浆次数
+																 WHEN gmouldstatusname = '卸模' AND standardgroutingcount - mingroutingcount >= 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount > 0 THEN standardgroutingcount - mingroutingcount
+																 --期初剩余注浆次数为正数模具剩余注浆次数为负数:取期初剩余注浆次类
+																 WHEN gmouldstatusname = '卸模' AND standardgroutingcount - mingroutingcount >= 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount < 0 THEN standardgroutingcount - mingroutingcount
+																 --期初剩余注浆次数为负数模具剩余注浆次数为负数:取0
+																 WHEN gmouldstatusname = '卸模' AND standardgroutingcount - mingroutingcount < 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount < 0 THEN 0
+																 --期初剩余注浆次数为正数模具剩余注浆次数为正数:取本期注浆次数
+																 WHEN gmouldstatusname = '正常' AND standardgroutingcount - mingroutingcount >= 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount > 0 THEN sumgroutingcount
+																--期初剩余注浆次数为正数模具剩余注浆次数为负数:取期初剩余注浆次数
+																 WHEN gmouldstatusname = '正常' AND standardgroutingcount - mingroutingcount >= 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount < 0 THEN standardgroutingcount - mingroutingcount
+																 --期初剩余注浆次数为负数模具剩余注浆次数为负数:取0
+																 WHEN gmouldstatusname = '正常' AND standardgroutingcount - mingroutingcount < 0 AND standardgroutingcount - mingroutingcount - sumgroutingcount < 0 THEN 0 
+														ELSE sumgroutingcount 
+														END financecount,
+														standardgroutingcount - mingroutingcount mingresidue,
+														mouldGoodsCode,
+														mouldName
+													FROM
+														(
+														SELECT
+															t.groutinglinecode,
+															gl.BuildingNo,
+															gl.FloorNo,
+															gl.GroutingLineNo,
+															t.usercode,
+															t.goodscode,
+															t.GOODSSPECIFICATION,
+															t.goodstypename,
+															t.MouldQuantity,
+															gld.groutingmouldcode,
+															gms.gmouldstatusname,
+															gld.beginuseddate,
+															( SELECT MIN( ggg.groutingdate ) FROM tp_pm_groutingdailydetail ggg WHERE ggg.groutinglinedetailid = t.groutinglinedetailid ) groutingdate,
+															MAX( t.GroutingCount ) - SUM( t.groutingflag ) mingroutingcount,
+															SUM( t.groutingflag ) sumgroutingcount,
+															MAX( t.GroutingCount ) maxGroutingCount,
+															gld.groutingcount,
+															MAX( gld.standardgroutingcount ) standardgroutingcount,
+															gld.ENDUSEDDATE,
+															mg.mouldGoodsCode,
+															mg.mouldName
+														FROM
+															(
+															SELECT
+																gd.groutinglinecode,
+																gd.usercode,
+																gdd.goodsid,
+																gd.MouldQuantity,
+																gdd.groutinglinedetailid,
+																decode( gdd.groutingflag, '1', 1, 0 ) groutingflag,
+																gdd.GroutingCount,
+																gt.goodstypename,
+																g.goodscode,
+																g.GOODSSPECIFICATION 
+															FROM
+																TP_PM_GroutingDaily gd
+																INNER JOIN TP_PM_GroutingDailyDetail gdd ON gdd.groutingdailyid = gd.groutingdailyid
+																INNER JOIN TP_MST_Goods g ON g.goodsid = gdd.goodsid
+																INNER JOIN TP_MST_GOODSTYPE gt ON gt.goodstypeid = g.goodstypeid 
+															WHERE
+																gd.accountid = 1 
+																AND gd.groutingdate >= :GDateBegin
+																AND gd.groutingdate <= :GDateEnd
+ 																AND ( : groutinglinecode IS NULL OR instr( gd.groutinglinecode, : groutinglinecode ) > 0 ) 
+ 																AND ( : groutingusercode IS NULL OR instr( gdd.usercode, : groutingusercode ) > 0 ) 
+ 																AND ( : goodscode IS NULL OR instr( gdd.goodscode, : goodscode ) > 0 ) 
+ 																AND ( : goodstypecode IS NULL OR instr( gt.goodstypecode, : goodstypecode ) = 1 ) 
+															) t
+															INNER JOIN tp_pc_groutinglinedetail gld ON gld.groutinglinedetailid = t.groutinglinedetailid
+															INNER JOIN tp_pc_groutingline gl ON gld.groutinglineid = gl.groutinglineid
+															INNER JOIN TP_SYS_GMouldStatus gms ON gms.gmouldstatusid = gld.gmouldstatus 
+															INNER  JOIN TP_MST_MOULDGOODSCODE mg ON t.goodscode = mg.goodsCode
+														GROUP BY
+															t.groutinglinecode,
+															gl.BuildingNo,
+															gl.FloorNo,
+															gl.GroutingLineNo,
+															t.usercode,
+															t.goodscode,
+															t.GOODSSPECIFICATION,
+															t.goodstypename,
+															t.MouldQuantity,
+															gld.groutingmouldcode,
+															gms.gmouldstatusname,
+															gld.beginuseddate,
+															gld.groutingcount,
+															gld.ENDUSEDDATE,
+															t.groutinglinedetailid,
+															mg.mouldGoodsCode,
+															mg.mouldName 
+														ORDER BY
+															BuildingNo,
+															GroutingLineNo,
+															groutinglinecode,
+															groutingmouldcode 
+														) )
+														GROUP BY GROUPING SETS((
+														TO_CHAR(BuildingNo),
+														groutinglinecode,
+														FloorNo,
+														GroutingLineNo,
+														gmouldstatusname,
+														usercode,
+														goodscode,
+														GOODSSPECIFICATION,
+														goodstypename,
+														groutingmouldcode,
+														beginuseddate,
+														groutingdate,
+														ENDUSEDDATE,
+														mingresidue,
 														mouldGoodsCode,
-														mouldName	
-															),(" + se.TotalMethod+"),())";
+														mouldName),";
+					sqlString += @"(gmouldstatusname," + se.TotalMethod + "),(" + se.TotalMethod + "),()) ORDER BY " + se.TotalMethod + ",GROUPING_ID(gmouldstatusname,GroutingLineNo)";
+
 				}
-				else { 
-		
-				 sqlString = @"SELECT
+				else {
+
+					sqlString = @"SELECT
 														groutinglinecode,
 														BuildingNo,
 														FloorNo,
@@ -1049,16 +1238,22 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
 				parameters.Add(new OracleParameter(":groutingusercode", OracleDbType.Varchar2, se.GroutingUserCode, ParameterDirection.Input));
 				parameters.Add(new OracleParameter(":goodscode", OracleDbType.Varchar2, se.GoodsCode, ParameterDirection.Input));
 				parameters.Add(new OracleParameter(":goodstypecode", OracleDbType.Varchar2, se.GoodsTypeCode, ParameterDirection.Input));
-				DataTable data = conn.GetSqlResultToDt(sqlString.ToString(), parameters.ToArray());
-
+				DataSet ds = conn.GetSqlResultToDs(sqlString.ToString(), parameters.ToArray());
 				ServiceResultEntity sre = new ServiceResultEntity();
-				if (data == null || data.Rows.Count == 0)
+				//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;
+				if (ds.Tables == null || ds.Tables[0].Rows.Count == 0)
 				{
 					sre.Status = Constant.ServiceResultStatus.NoSearchResults;
 					return sre;
 				}
-				sre.Data = new DataSet();
-				sre.Data.Tables.Add(data);
+				sre.Data = ds;
 				return sre;
 			}
 			catch (Exception ex)