rpt.ashx 16 KB

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