rpt.ashx 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <%@ WebHandler Language="C#" Class="rpt" %>
  2. using System;
  3. using System.Web;
  4. using System.Web.SessionState;
  5. using System.Data;
  6. using System.Text;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using Newtonsoft.Json;
  10. using Newtonsoft.Json.Linq;
  11. using Curtain.DataAccess;
  12. using DK.XuWei.WebMes;
  13. public class rpt : IHttpHandler, IReadOnlySessionState
  14. {
  15. public void ProcessRequest(HttpContext context)
  16. {
  17. context.Response.ContentType = "text/plain";
  18. using (IDataAccess conn = DataAccess.Create())
  19. {
  20. //主表
  21. if (context.Request["m"].ToString() == "master")
  22. {
  23. DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
  24. DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]);
  25. string totalMaster = context.Request["totalMaster"].ToString();
  26. string groutinglineId = context.Request["groutinglineMaster[]"] is object ? context.Request["groutinglineMaster[]"].ToString() : "0";
  27. if (groutinglineId == "0" && (context.Request["groutinglineMaster"] is object)) groutinglineId = context.Request["groutinglineMaster"].ToString();
  28. if (groutinglineId == "") groutinglineId = "0";
  29. if (!groutinglineId.Equals("0"))
  30. {
  31. List<string> list = new List<string>(groutinglineId.Split(','));
  32. List<string> newlist = new List<string>();
  33. foreach (string item in list)
  34. {
  35. if (IsNumber(item))
  36. {
  37. newlist.Add(item);
  38. }
  39. }
  40. if (newlist != null && newlist.Count < 1)
  41. {
  42. groutinglineId = "0";
  43. }
  44. else
  45. {
  46. groutinglineId = string.Join(",", newlist);
  47. }
  48. }
  49. string goodsId = context.Request["goodsMaster[]"] is object ? context.Request["goodsMaster[]"].ToString() : "0";
  50. if (goodsId == "0" && (context.Request["goodsMaster"] is object)) goodsId = context.Request["goodsMaster"].ToString();
  51. if (goodsId == "") goodsId = "0";
  52. if (!goodsId.Equals("0")) {
  53. List<string> list= new List<string>(goodsId.Split(','));
  54. List<string> newlist = new List<string>();
  55. foreach (string item in list) {
  56. if (IsNumber(item)) {
  57. newlist.Add(item);
  58. }
  59. }
  60. if (newlist != null && newlist.Count < 1) {
  61. goodsId = "0";
  62. }
  63. else{
  64. goodsId = string.Join(",", newlist);
  65. }
  66. }
  67. string highFlag = context.Request["highFlagMaster"];
  68. if (highFlag == "") highFlag = "-1";
  69. //商标id
  70. string logoId = context.Request["LOGONAME"] is object ? context.Request["LOGONAME"].ToString() : "";
  71. logoId = logoId==""?string.Empty:"AND GDD.LOGOID=" + logoId;
  72. string procedureId = context.Request["procedureidMaster[]"] is object ? context.Request["procedureidMaster[]"].ToString() : "0";
  73. if (procedureId == "0" && context.Request["procedureidMaster"] is object) procedureId = context.Request["procedureidMaster"].ToString();
  74. if (procedureId == "") procedureId = "0";
  75. string goodstypeCode = context.Request["goodstypecodeMaster"] is object ? context.Request["goodstypecodeMaster"].ToString() : "";
  76. string workshopcodeMaster = context.Request["workshopcodeMaster"] is object ? context.Request["workshopcodeMaster"].ToString() : "0";
  77. if (workshopcodeMaster == "") workshopcodeMaster = "0";
  78. string dataStr = "";
  79. if (totalMaster == "YYYY-MM-DD") {
  80. int day = DateDiffDay(dateBegin,dateEnd);
  81. DateTime beginItem = dateBegin;
  82. if (day >= 0) {
  83. for (int i = 0; i <= day; i++) {
  84. dataStr += "'" + beginItem.Year.ToString() + "-" + beginItem.Month.ToString().PadLeft(2, '0') + "-" + beginItem.Day.ToString().PadLeft(2, '0') + "' AS \"" + beginItem.Year.ToString() + "-" + beginItem.Month.ToString() + "-" + beginItem.Day.ToString() + "\"";
  85. if (i < day) {
  86. dataStr += ",";
  87. }else {
  88. dataStr += ", '累计' AS 累计";
  89. }
  90. beginItem = beginItem.AddDays(1);
  91. }
  92. }
  93. } else if (totalMaster == "YYYY-MM") {
  94. int month = (dateEnd.Year - dateBegin.Year) * 12 + (dateEnd.Month - dateBegin.Month);
  95. DateTime beginItem = dateBegin;
  96. if (month >= 0) {
  97. for (int i = 0; i <= month; i++) {
  98. dataStr += "'" + beginItem.Year.ToString() + "-" + beginItem.Month.ToString().PadLeft(2, '0') + "' AS \"" + beginItem.Year.ToString() + "-" + beginItem.Month.ToString() + "\"";
  99. if (i < month) {
  100. dataStr += ",";
  101. }else {
  102. dataStr += ", '累计' AS 累计";
  103. }
  104. beginItem = beginItem.AddMonths(1);
  105. }
  106. }
  107. }else if (totalMaster == "YYYY") {
  108. DateTime beginItem = dateBegin;
  109. while (beginItem.Year <= dateEnd.Year) {
  110. dataStr += "'" + beginItem.Year.ToString() + "' AS \"" + beginItem.Year.ToString() + "\"";
  111. if (beginItem.Year < dateEnd.Year)
  112. {
  113. dataStr += ",";
  114. }
  115. else {
  116. dataStr += ", '累计' AS 累计";
  117. }
  118. beginItem = beginItem.AddYears(1);
  119. }
  120. }
  121. //读取报表数据
  122. string sqlStr = @"
  123. WITH TMP_FINISHPACK AS (
  124. SELECT
  125. P.GOODSNAME,
  126. L.LOGONAME,
  127. GT2.goodstypecode goodstypecode2,
  128. GT2.goodstypename goodstypename2,
  129. TO_CHAR( P.CREATETIME, 'YYYY-MM-DD' ) 时间,
  130. COUNT(1) COUNTNUM
  131. FROM
  132. TP_PM_PRODUCTIONDATA P
  133. INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = P.GROUTINGDAILYDETAILID
  134. INNER JOIN TP_MST_GOODS G ON G.GOODSID = P.GOODSID
  135. INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID
  136. INNER JOIN TP_MST_GOODSTYPE GT2 ON GT2.goodstypecode = substr(GT.goodstypecode, 0, 6)
  137. INNER JOIN TP_PC_GROUTINGLINE GL ON P.GROUTINGLINEID = GL.GROUTINGLINEID
  138. LEFT JOIN TP_MST_LOGO L ON L.LOGOID = P.LOGOID
  139. WHERE
  140. P.PROCEDUREID IN (107,13)
  141. AND P.CREATETIME >= @DATEBEGIN@
  142. AND P.CREATETIME <= @DATEEND@
  143. AND (G.GOODSID IN ({GOODSID}) OR '{GOODSID}' = '0')
  144. AND (@USERCODE@ IS NULL OR INSTR(GDD.USERCODE, @USERCODE@) > 0)
  145. AND (GL.GROUTINGLINEID IN ({GROUTINGLINEID}) OR '{GROUTINGLINEID}' = '0')
  146. AND (GL.HIGHPRESSUREFLAG = @HIGHPRESSUREFLAG@ OR @HIGHPRESSUREFLAG@ = '-1')
  147. {LOGOID}
  148. AND ( INSTR( GT.GOODSTYPECODE, '{GOODSTYPECODE}' ) = 1 OR '{GOODSTYPECODE}' IS NULL OR '{GOODSTYPECODE}' = '')
  149. AND ( '{WORKSHOPCODE}' = '0'
  150. OR ( '{WORKSHOPCODE}' = '1'AND (INSTR( GDD.GROUTINGLINECODE, 'A' ) = 1 OR INSTR( GT.GOODSTYPECODE, '001002' ) = 1) )
  151. OR ( '{WORKSHOPCODE}' = '2'AND ((INSTR( GDD.GROUTINGLINECODE, 'B' ) = 1 OR INSTR( GDD.GROUTINGLINECODE, 'D' ) = 1) AND INSTR( GT.GOODSTYPECODE, '001001' ) = 1))
  152. OR ( '{WORKSHOPCODE}' = '3'AND (INSTR( GDD.GROUTINGLINECODE, 'C' ) = 1 AND INSTR( GDD.GROUTINGLINECODE, 'A' ) = 4 OR INSTR( GDD.GROUTINGLINECODE, 'C06B' ) = 1)))
  153. GROUP BY P.GOODSNAME, L.LOGONAME, GT2.goodstypecode , GT2.goodstypename ,TO_CHAR( P.CREATETIME, 'YYYY-MM-DD' )
  154. UNION ALL
  155. SELECT
  156. P.GOODSNAME,
  157. L.LOGONAME,
  158. GT2.goodstypecode goodstypecode2,
  159. GT2.goodstypename goodstypename2,
  160. TO_CHAR( P.CREATETIME, 'YYYY-MM-DD' ) 时间,
  161. -1*COUNT(1) COUNTNUM
  162. FROM
  163. TP_PM_PRODUCTIONDATA P
  164. INNER JOIN TP_PM_GROUTINGDAILYDETAIL GDD ON GDD.GROUTINGDAILYDETAILID = P.GROUTINGDAILYDETAILID
  165. INNER JOIN TP_MST_GOODS G ON G.GOODSID = P.GOODSID
  166. INNER JOIN TP_MST_GOODSTYPE GT ON GT.GOODSTYPEID = G.GOODSTYPEID
  167. INNER JOIN TP_MST_GOODSTYPE GT2 ON GT2.goodstypecode = substr(GT.goodstypecode, 0, 6)
  168. INNER JOIN TP_PC_GROUTINGLINE GL ON P.GROUTINGLINEID = GL.GROUTINGLINEID
  169. LEFT JOIN TP_MST_LOGO L ON L.LOGOID = P.LOGOID
  170. WHERE
  171. P.PROCEDUREID IN (107,13)
  172. AND P.BACKOUTTIME >= @DATEBEGIN@
  173. AND P.BACKOUTTIME <= @DATEEND@
  174. AND (G.GOODSID IN ({GOODSID}) OR '{GOODSID}' = '0')
  175. AND (@USERCODE@ IS NULL OR INSTR(GDD.USERCODE, @USERCODE@) > 0)
  176. AND (GL.GROUTINGLINEID IN ({GROUTINGLINEID}) OR '{GROUTINGLINEID}' = '0')
  177. AND (GL.HIGHPRESSUREFLAG = @HIGHPRESSUREFLAG@ OR @HIGHPRESSUREFLAG@ = '-1')
  178. {LOGOID}
  179. AND ( INSTR( GT.GOODSTYPECODE, '{GOODSTYPECODE}' ) = 1 OR '{GOODSTYPECODE}' IS NULL OR '{GOODSTYPECODE}' = '')
  180. AND ( '{WORKSHOPCODE}' = '0'
  181. OR ( '{WORKSHOPCODE}' = '1'AND (INSTR( GDD.GROUTINGLINECODE, 'A' ) = 1 OR INSTR( GT.GOODSTYPECODE, '001002' ) = 1) )
  182. OR ( '{WORKSHOPCODE}' = '2'AND ((INSTR( GDD.GROUTINGLINECODE, 'B' ) = 1 OR INSTR( GDD.GROUTINGLINECODE, 'D' ) = 1) AND INSTR( GT.GOODSTYPECODE, '001001' ) = 1))
  183. OR ( '{WORKSHOPCODE}' = '3'AND (INSTR( GDD.GROUTINGLINECODE, 'C' ) = 1 AND INSTR( GDD.GROUTINGLINECODE, 'A' ) = 4 OR INSTR( GDD.GROUTINGLINECODE, 'C06B' ) = 1)))
  184. GROUP BY P.GOODSNAME, L.LOGONAME, GT2.goodstypecode , GT2.goodstypename ,TO_CHAR( P.CREATETIME, 'YYYY-MM-DD' )
  185. )
  186. SELECT * FROM (
  187. SELECT decode(GID,3,'总计',0,GOODSNAME, '合计【' || to_char(goodstypename2) || '】') 产品名称,
  188. LOGONAME 产品商标,
  189. GOODSTYPECODE2,
  190. NVL(时间,'累计') 时间,
  191. COUNTNUM,
  192. GID
  193. FROM(
  194. SELECT
  195. grouping_id(GOODSNAME,goodstypecode2) GID,
  196. GOODSNAME,
  197. LOGONAME,
  198. goodstypecode2,
  199. goodstypename2,
  200. 时间 ,
  201. SUM(COUNTNUM) COUNTNUM
  202. FROM
  203. TMP_FINISHPACK
  204. GROUP BY GROUPING SETS ((GOODSNAME, LOGONAME, goodstypecode2, goodstypename2, 时间),(GOODSNAME, LOGONAME, goodstypecode2, goodstypename2),(goodstypecode2, goodstypename2, 时间),(goodstypecode2, goodstypename2),(时间),())
  205. )
  206. )
  207. PIVOT(SUM(COUNTNUM) FOR 时间 IN({日期}))
  208. ORDER BY goodstypecode2,GID
  209. ".Replace("{日期}", dataStr)
  210. .Replace("YYYY-MM-DD",totalMaster)
  211. .Replace("{GOODSID}",goodsId)
  212. .Replace("{GROUTINGLINEID}",groutinglineId)
  213. .Replace("{PROCEDUREID}",procedureId)
  214. .Replace("{WORKSHOPCODE}",workshopcodeMaster)
  215. .Replace("{GOODSTYPECODE}",goodstypeCode)
  216. .Replace("{LOGOID}", logoId);
  217. //获取查询条件
  218. List<CDAParameter> sqlPara = new List<CDAParameter>();
  219. sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
  220. sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
  221. sqlPara.Add(new CDAParameter("HIGHPRESSUREFLAG",highFlag));
  222. sqlPara.Add(new CDAParameter("USERCODE", context.Request["usercodeMaster"]));
  223. //直接获取不分页数据
  224. DataTable dt = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray());
  225. //去掉无关列
  226. dt.Columns.Remove("GID");
  227. dt.Columns.Remove("GOODSTYPECODE2");
  228. for (int i = 2; i < dt.Columns.Count; i++) {
  229. foreach (DataRow r in dt.Rows) {
  230. if (Convert.IsDBNull(r[i])) {
  231. r[i] = 0;
  232. }
  233. }
  234. }
  235. context.Response.Write(new JsonResult(dt) { total = dt.Rows.Count }.ToJson());
  236. }
  237. }
  238. }
  239. //相差天数
  240. private int DateDiffDay(DateTime dateStart, DateTime dateEnd)
  241. {
  242. DateTime start = Convert.ToDateTime(dateStart.ToShortDateString());
  243. DateTime end = Convert.ToDateTime(dateEnd.ToShortDateString());
  244. TimeSpan sp = end.Subtract(start);
  245. return sp.Days;
  246. }
  247. public static bool IsNumber(string s)
  248. {
  249. try {
  250. int.Parse(s);
  251. return true;
  252. }
  253. catch (Exception) {
  254. return false;
  255. }
  256. }
  257. public bool IsReusable
  258. {
  259. get
  260. {
  261. return false;
  262. }
  263. }
  264. /// <summary>
  265. /// 执行sql语句
  266. /// </summary>
  267. /// <param name="conn">连接</param>
  268. /// <param name="sql">sql语句</param>
  269. /// <param name="sqlPara">参数</param>
  270. /// <returns>json数据</returns>
  271. private DataTable ExecuteData(IDataAccess conn, string sql, ref List<CDAParameter> sqlPara)
  272. {
  273. DataTable dt;
  274. int total = 0;
  275. if (HttpContext.Current.Request["page"] is object)
  276. {
  277. //获取分页数据
  278. int page = HttpContext.Current.Request["page"] is object ? Convert.ToInt32(HttpContext.Current.Request["page"]) : 1;
  279. int rows = HttpContext.Current.Request["rows"] is object ? Convert.ToInt32(HttpContext.Current.Request["rows"]) : 10;
  280. string sort = HttpContext.Current.Request["sort"] is object ? HttpContext.Current.Request["sort"] : " createtime ";
  281. string order = HttpContext.Current.Request["order"] is object ? HttpContext.Current.Request["order"] : "";
  282. dt = conn.SelectPages(page, rows, out total, sql, sqlPara.ToArray());
  283. }
  284. else
  285. {
  286. //直接获取不分页数据
  287. dt = conn.ExecuteDatatable(sql, sqlPara.ToArray());
  288. total = dt.Rows.Count;
  289. }
  290. return dt;
  291. }
  292. }