ReportService.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. namespace PMS.DBService.Problems
  2. {
  3. using PMS.BusinessModels.Problem;
  4. using PMS.Plugins.Common;
  5. using QWPlatform.IService;
  6. using System;
  7. using System.Data;
  8. public class ReportService : DataServiceBase
  9. {
  10. //售后统计
  11. public DataTable GetAfterSale(AfterSaleModel model, out int total)
  12. {
  13. var sql = @"Select t.编号,
  14. t.登记人,
  15. t.反馈人,
  16. t.问题标题 As 问题描述,
  17. p.名称 As 产品,
  18. xm.名称 As 项目名称,
  19. jg.名称 As 机构名称,
  20. g.名称 As 产品模块,
  21. t.版本号 As 产品版本,
  22. t.登记日期,
  23. b.显示名 As 登记来源,
  24. Decode(t.是否解决, 0, '未解决', 1, '已解决') As 是否解决,
  25. Decode(t.是否终止, 0, '未终止', 1, '已终止') As 是否终止,
  26. t.受理时间 As 处理时间,
  27. t.解决方案 As 解决方案,
  28. f.名称 As 问题分类,
  29. f.分值 问题分值,
  30. t.受理人 As 处理人,
  31. Decode(t.是否验证, 0, '未验证', 1, '已验证') As 是否验证,
  32. x.姓名 As 验证人,
  33. Gc.记录时间
  34. From 问题记录 t
  35. Left Join 产品系统配置 p
  36. On p.Id = t.产品id
  37. Left Join 产品模块功能 g
  38. On g.Id = t.模块id
  39. Left Join 基础编码 b
  40. On b.分类id = '2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB' And b.代码 = t.来源代码
  41. Left Join 问题分值管理 f
  42. On f. ID = t.分类id
  43. Left Join 人员信息 x
  44. On x.Id = t.验证人id
  45. Left Join 项目信息 xm
  46. on t.项目id=xm.id
  47. Left Join 站点信息 jg
  48. on t.机构id=jg.id
  49. Left Join (Select *
  50. From (Select 记录时间, 状态, 问题id, Row_Number() Over(Partition By 问题id Order By 记录时间) 序号
  51. From 问题记录过程
  52. Where 状态 = 7)) Gc
  53. On Gc.问题id = t.Id And Gc.序号 = 1
  54. Where t.渠道id =:ChannelId And t.是否删除 = 0";
  55. var sqlbuild = this.SqlBuilder;
  56. sqlbuild.Parameters("ChannelId", model.ChannelId);
  57. ///如果有查询条件
  58. if (!string.IsNullOrEmpty(model.DealPerson))
  59. {
  60. sql += " and t.登记人 like '%'||:登记人||'%'";
  61. sqlbuild.Parameters("登记人", model.DealPerson);
  62. }
  63. if (!string.IsNullOrEmpty(model.AcceptorPerson))
  64. {
  65. sql += " and t.受理人 like '%'||:受理人||'%'";
  66. sqlbuild.Parameters("受理人", model.AcceptorPerson);
  67. }
  68. //如果根据登记时间查询
  69. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  70. {
  71. if (model.timetype == "1")
  72. {
  73. if (model.startDate != DateTime.MinValue)
  74. {
  75. sql += $" And t.登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  76. }
  77. if (model.endDate != DateTime.MinValue)
  78. {
  79. sql += $" And t.登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  80. }
  81. }
  82. else if (model.timetype == "2")
  83. {
  84. if (model.startDate != DateTime.MinValue)
  85. {
  86. sql += $" And Gc.记录时间 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  87. }
  88. if (model.endDate != DateTime.MinValue)
  89. {
  90. sql += $" And Gc.记录时间 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  91. }
  92. }
  93. sql += " and (t.是否解决=1 or t.是否终止=1) ";
  94. }
  95. sql += " order by t.编号 desc";
  96. return sqlbuild.SqlText(sql).Paging(model.page, model.rows).Select(out total);
  97. }
  98. public DataTable GetChannel()
  99. {
  100. return SelectBuilder.From("渠道信息").Columns("ID,名称").Where("状态", 1).Select();
  101. }
  102. public DataTable GetRing()
  103. {
  104. return SelectBuilder.From("问题流程环节").Columns("ID,名称").Where("ID!=0").Select();
  105. }
  106. //渠道问题统计
  107. public DataTable GetChannelStatistics(MonitoringModel model, out int total)
  108. {
  109. string sql = "select q.名称,count(*)服务数量 from 问题记录 w,渠道信息 q where w.渠道id=q.id and w.是否删除 =0";
  110. //如果根据时间查询
  111. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  112. {
  113. if (model.startDate != DateTime.MinValue)
  114. {
  115. sql += $" And w.登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  116. }
  117. if (model.endDate != DateTime.MinValue)
  118. {
  119. //model.endDate = model.endDate.AddDays(1);
  120. sql += $" And w.登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  121. //SqlBuilder.Parameters("结束日期", model.endDate);
  122. }
  123. }
  124. sql += " group by w.渠道id,q.名称 order by 服务数量 desc";
  125. return SqlBuilder.SqlText(sql).Paging(model.page, model.rows).Select(out total);
  126. }
  127. //反馈人统计
  128. public DataTable GetFeedbackStatistics(MonitoringModel model, out int total)
  129. {
  130. string sql = " select w.登记人 as 姓名,count(w.id)服务数量 from 问题记录 w where w.是否删除 =0 ";
  131. if (!string.IsNullOrEmpty(model.Deal))
  132. {
  133. sql += " and w.登记人 like '%'||:登记人||'%'";
  134. }
  135. //如果根据时间查询
  136. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  137. {
  138. if (model.startDate != DateTime.MinValue)
  139. {
  140. sql += $" And w.登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  141. }
  142. if (model.endDate != DateTime.MinValue)
  143. {
  144. //model.endDate = model.endDate.AddDays(1);
  145. sql += $" And w.登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  146. }
  147. }
  148. sql += " group by w.登记人 order by 服务数量 desc";
  149. return SqlBuilder.SqlText(sql).Paging(model.page, model.rows).Parameters("登记人", model.Deal).Select(out total);
  150. }
  151. public DataTable GetMonitoring(MonitoringModel model, out int total)
  152. {
  153. var sql = @"select x.*,(nvl(x.项目处理1,0)+nvl(x.技术支持1,0)+nvl(x.研发处理1,0)) 总耗时 from ( select a.ID,
  154. a.编号,a.问题标题,(select 名称 from 问题流程环节 where id=a.环节id) 当前环节1,
  155. a.受理人,a.登记人,a.登记日期,(select 名称 from 渠道信息 where id = a.渠道id) as 渠道,a.是否解决,a.是否终止,
  156. nvl((select sum(ROUND(nvl(c.结束时间, sysdate) - c.记录时间, 2) * 24)
  157. from 问题记录过程 c, 问题工作流程 d
  158. where c.问题ID = a.ID
  159. and c.当前流程id = d.id
  160. and d.环节id <= 3),0) as 项目处理1,
  161. nvl((select sum(ROUND(nvl(c.结束时间, sysdate) - c.记录时间, 2) * 24)
  162. from 问题记录过程 c, 问题工作流程 d
  163. where c.问题ID = a.ID
  164. and c.当前流程id = d.id
  165. and d.环节id = 4),0) as 技术支持1,
  166. nvl((select sum(ROUND(nvl(c.结束时间, sysdate) - c.记录时间, 2) * 24)
  167. from 问题记录过程 c, 问题工作流程 d
  168. where c.问题ID = a.ID
  169. and c.当前流程id = d.id
  170. and d.环节id = 5),0) as 研发处理1,
  171. (case
  172. when a.是否解决 = 0 and a.是否终止 = 0 Then
  173. (select ROUND(sysdate - max(ss.记录时间), 2) * 24
  174. from 问题记录过程 ss
  175. where ss.问题ID = a.ID)
  176. Else
  177. 0
  178. end) as 滞留时间
  179. from 问题记录 a
  180. where a.是否删除 = 0 ";
  181. if (model.State == "未完成")
  182. {
  183. sql += " and a.是否终止=0 and a.是否解决=0 ";
  184. }
  185. if (model.State == "完成")
  186. {
  187. sql += " and (a.是否终止=1 or a.是否解决=1) ";
  188. }
  189. if (model.CurrentLink != 0)
  190. {
  191. sql += " and a.环节ID=" + model.CurrentLink;
  192. }
  193. if (model.Channel != null)
  194. {
  195. sql += " and a.渠道ID='" + model.Channel.Trim() + "' ";
  196. }
  197. sql += " ) x ";
  198. sql += model.oderBy;
  199. return SqlBuilder.SqlText(sql).Paging(model.page, model.rows).Select(out total);
  200. }
  201. //研发问题统计
  202. public DataTable GetDevelopStatistics(MonitoringModel model, out int total)
  203. {
  204. string sql = "select count(1) 处理数 ,r.姓名 from 问题记录 w ,人员信息 r where w.受理人id=r.id and nvl(w.是否解决,0)=1 and r.职务=11";
  205. //and w.受理时间 between to_date('2019-4-1','yyyy-mm-dd') and to_date('2019-6-30 23:59:59','yyyy-mm-dd hh24:mi:ss')";
  206. //根据时间查询
  207. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  208. {
  209. if (model.startDate != DateTime.MinValue)
  210. {
  211. sql += $" And w.登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  212. }
  213. if (model.endDate != DateTime.MinValue)
  214. {
  215. //model.endDate = model.endDate.AddDays(1);
  216. sql += $" And w.登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  217. }
  218. }
  219. //受理人
  220. if (!String.IsNullOrEmpty(model.Deal))
  221. {
  222. sql += " and w.受理人 like '%'||:受理人||'%' ";
  223. }
  224. if (model.IsInside && !model.NoInside)
  225. {
  226. sql += " and w.内部产品问题=1";
  227. }
  228. else if (!model.IsInside && model.NoInside)
  229. {
  230. sql += " and w.内部产品问题=0";
  231. }
  232. sql += " group by r.姓名 order by 处理数 desc";
  233. return SqlBuilder.SqlText(sql).Paging(model.page, model.rows).Parameters("受理人", model.Deal).Select(out total);
  234. }
  235. //技术支持统计
  236. public DataTable GetSupportStatistics(MonitoringModel model, out int total)
  237. {
  238. string sql = @"select s.处理人,s.问题编号,
  239. (select sum(耗时)from 问题记录过程 where 记录人id = s.记录人ID and 问题ID = s.问题ID)处理时间
  240. from(select(select 姓名 from 人员信息 where ID = g.记录人id)处理人, (select 编号 from 问题记录 where id = g.问题id)问题编号,g.记录人ID,g.问题ID
  241. from 问题记录过程 g
  242. where(select 职务 from 人员信息 where id = g.记录人id and 是否删除 = 0) = 12 and ((select 环节ID from 问题记录 where id = g.问题ID)= 4 or (select l.环节id from 问题工作流程 l where l.id=g.当前流程id)=4) and (select 是否删除 from 问题记录 where id = g.问题ID and 是否解决=1) = 0";
  243. //如果根据时间查询
  244. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  245. {
  246. if (model.startDate != DateTime.MinValue)
  247. {
  248. sql += $" And g.登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  249. }
  250. if (model.endDate != DateTime.MinValue)
  251. {
  252. //model.endDate = model.endDate.AddDays(1);
  253. sql += $" And g.登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  254. }
  255. }
  256. sql += " group by g.记录人ID,g.问题ID) s ";
  257. if (!String.IsNullOrEmpty(model.Deal))
  258. {
  259. sql += " where s.处理人 like '%'||:处理人||'%' ";
  260. }
  261. sql += " order by 处理人,问题编号";
  262. return SqlBuilder.SqlText(sql).Paging(model.page, model.rows).Parameters("处理人", model.Deal).Select(out total);
  263. }
  264. //未完成统计
  265. public DataTable GetNotYetStatistics(MonitoringModel model, out int total)
  266. {
  267. string sql = @"select 环节,受理人,编号,当前环节耗时,总耗时,登记日期 from
  268. (select 编号,登记日期,
  269. (select 姓名 from 人员信息 where id=w.受理人id)受理人,
  270. (select 名称 from 问题流程环节 where id=环节id)环节,
  271. (select ROUND(sysdate - w.登记日期,2)*24 from dual)总耗时,
  272. (select (ROUND(sysdate - (select max(记录时间) from 问题记录过程 where 问题id=w.id),2)*24) from dual)当前环节耗时
  273. from 问题记录 w where 是否删除=0 and (w.环节id=3 or w.环节id=4 or w.环节id=5) and 是否终止=0 and 是否解决=0";
  274. //(select 耗时 from 问题记录过程 where 记录时间 = (select max(记录时间) from 问题记录过程 where 问题id = w.id)and 问题id = w.id)当前环节耗时
  275. //(select sum(耗时)from 问题记录过程 where 问题id = w.id)总耗时,
  276. if (!String.IsNullOrEmpty(model.Deal))
  277. {
  278. sql += " and 受理人 like '%'||:受理人||'%'";
  279. }
  280. //如果根据时间查询
  281. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  282. {
  283. if (model.startDate != DateTime.MinValue)
  284. {
  285. sql += $" And 登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  286. }
  287. if (model.endDate != DateTime.MinValue)
  288. {
  289. //model.endDate = model.endDate.AddDays(1);
  290. sql += $" And 登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  291. }
  292. }
  293. sql += ") order by decode(环节,'研发处理',1,'技术支持',2,'项目处理',3),受理人";
  294. return SqlBuilder.SqlText(sql).Paging(model.page, model.rows).Parameters("受理人", model.Deal).Select(out total);
  295. }
  296. //超时统计(30分钟)
  297. public DataTable TimeoutStatistics(MonitoringModel model, out int total)
  298. {
  299. DataTable result = new DataTable();
  300. result.Columns.Add("ID");
  301. result.Columns.Add("编号");
  302. result.Columns.Add("问题标题");
  303. result.Columns.Add("模块");
  304. result.Columns.Add("反馈人");
  305. string sql = "select w.ID,w.编号,w.反馈人,w.问题标题,g.名称 as 模块 from 问题记录 w,产品模块功能 g where w.是否终止=0 and w.是否删除=0 and w.模块ID=g.id ";
  306. //如果根据时间查询
  307. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  308. {
  309. if (model.startDate != DateTime.MinValue)
  310. {
  311. sql += $" And 登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  312. }
  313. if (model.endDate != DateTime.MinValue)
  314. {
  315. sql += $" And 登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  316. }
  317. }
  318. sql += " order by 登记日期 desc";
  319. DataTable dt = SqlBuilder.SqlText(sql).Select();
  320. foreach (DataRow item in dt.Rows)
  321. {
  322. DataTable dd = SqlBuilder.SqlText("select 状态,耗时 from 问题记录过程 where 问题id=:ID order by 记录时间").Parameters("ID", item.ItemArray[0]).Select();
  323. foreach (DataRow obj in dd.Rows)
  324. {
  325. if (Convert.ToInt32(obj.ItemArray[0]) == 8 && Convert.ToInt32(obj.ItemArray[1]) > 0.5)
  326. {
  327. DataRow dr = result.NewRow();
  328. dr["ID"] = item.ItemArray[0];
  329. dr["编号"] = item.ItemArray[1];
  330. dr["反馈人"] = item.ItemArray[2];
  331. dr["问题标题"] = item.ItemArray[3];
  332. dr["模块"] = item.ItemArray[4];
  333. result.Rows.Add(dr);
  334. break;
  335. }
  336. }
  337. }
  338. total = result.Rows.Count;
  339. //真分页
  340. //DataTable NewTable = result.Clone();
  341. //var page = (model.page - 1) * model.rows;
  342. //var size = model.page * model.rows;
  343. //for (int i = page; i < size&&size<=result.Rows.Count; i++)
  344. //{
  345. // NewTable.Rows.Add(dt.Rows[i].ItemArray); //添加数据行
  346. //}
  347. //return NewTable;
  348. return result;
  349. }
  350. public DataTable GetList(int PersonProperty)
  351. {
  352. if (PersonProperty == 1)
  353. {
  354. return SelectBuilder.From("统计报表").Columns("*").Select();
  355. }
  356. else
  357. {
  358. string sql = "select * from 统计报表 where 查询人员性质 like '%'||:性质||'%' or 查询人员性质 is null ";
  359. return SqlBuilder.SqlText(sql).Parameters("性质", PersonProperty).Select();
  360. }
  361. }
  362. //贵阳售后统计问题积分
  363. public DataTable GuiyangProblems(AfterSaleModel model, out int total)
  364. {
  365. var sqlWhere = "";
  366. var sqlbuild = this.SqlBuilder;
  367. sqlbuild.Parameters("ChannelId", model.ChannelId);
  368. ///如果有查询条件
  369. if (!string.IsNullOrEmpty(model.DealPerson))
  370. {
  371. sqlWhere += " and t.登记人 like '%'||:登记人||'%'";
  372. sqlbuild.Parameters("登记人", model.DealPerson);
  373. }
  374. if (!string.IsNullOrEmpty(model.AcceptorPerson))
  375. {
  376. sqlWhere += " and t.受理人 like '%'||:受理人||'%'";
  377. sqlbuild.Parameters("受理人", model.AcceptorPerson);
  378. }
  379. //如果根据登记时间查询
  380. if (model.startDate != DateTime.MinValue || model.endDate != DateTime.MinValue)
  381. {
  382. if (model.timetype == "1")
  383. {
  384. if (model.startDate != DateTime.MinValue)
  385. {
  386. sqlWhere += $" And t.登记日期 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  387. }
  388. if (model.endDate != DateTime.MinValue)
  389. {
  390. sqlWhere += $" And t.登记日期 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  391. }
  392. }
  393. else if (model.timetype == "2")
  394. {
  395. if (model.startDate != DateTime.MinValue)
  396. {
  397. sqlWhere += $" And Gc.记录时间 >=to_date('{model.startDate}', 'YYYY-MM-DD hh24:mi:ss')";
  398. }
  399. if (model.endDate != DateTime.MinValue)
  400. {
  401. sqlWhere += $" And Gc.记录时间 <=to_date('{model.endDate}', 'YYYY-MM-DD hh24:mi:ss')";
  402. }
  403. }
  404. sqlWhere += " and (t.是否解决=1 or t.是否终止=1) ";
  405. }
  406. var sql = @" select 名称, 0 as 问题分值,sum(陈勇) as 陈勇, sum(池显) as 池显, sum(兰忠胜) as 兰忠胜, sum(陈运良) as 陈运良
  407. from (
  408. select xm.名称, nvl(s.问题分值, 0) as 问题分值,
  409. case when s.处理人='张晓厅' then nvl(问题分值, 0)
  410. end as 张晓厅,
  411. case when s.处理人='吴昊' then nvl(问题分值, 0)
  412. end as 吴昊,
  413. case when s.处理人='陈勇' then nvl(问题分值, 0)
  414. end as 陈勇,
  415. case when s.处理人='池显' then nvl(问题分值, 0)
  416. end as 池显,
  417. case when s.处理人='向成高' then nvl(问题分值, 0)
  418. end as 向成高,
  419. case when s.处理人='陈洪江' then nvl(问题分值, 0)
  420. end as 陈洪江,
  421. case when s.处理人='苏伟' then nvl(问题分值, 0)
  422. end as 苏伟,
  423. case when s.处理人='兰忠胜' then nvl(问题分值, 0)
  424. end as 兰忠胜,
  425. case when s.处理人='陈运良' then nvl(问题分值, 0)
  426. end as 陈运良,
  427. case when s.处理人='刘彦' then nvl(问题分值, 0)
  428. end as 刘彦,
  429. case when s.处理人='王转正' then nvl(问题分值, 0)
  430. end as 王转正
  431. from (
  432. Select t.编号,
  433. t.渠道id,
  434. t.项目id,
  435. t.登记人,
  436. t.反馈人,
  437. t.问题标题 As 问题描述,
  438. p.名称 As 产品,
  439. g.名称 As 产品模块,
  440. t.版本号 As 产品版本,
  441. t.登记日期,
  442. b.显示名 As 登记来源,
  443. Decode(t.是否解决, 0, '未解决', 1, '已解决') As 是否解决,
  444. Decode(t.是否终止, 0, '未终止', 1, '已终止') As 是否终止,
  445. t.受理时间 As 处理时间,
  446. t.解决方案 As 解决方案,
  447. f.名称 As 问题分类,
  448. f.分值 问题分值,
  449. t.受理人 As 处理人,
  450. Decode(t.是否验证, 0, '未验证', 1, '已验证') As 是否验证,
  451. x.姓名 As 验证人,
  452. Gc.记录时间
  453. From 问题记录 t
  454. Left Join 产品系统配置 p
  455. On p.Id = t.产品id
  456. Left Join 产品模块功能 g
  457. On g.Id = t.模块id
  458. Left Join 基础编码 b
  459. On b.分类id = '2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB' And b.代码 = t.来源代码
  460. Left Join 问题分值管理 f
  461. On f. ID = t.分类id
  462. Left Join 人员信息 x
  463. On x.Id = t.受理人ID
  464. Left Join (Select *
  465. From (Select 记录时间, 状态, 问题id, Row_Number() Over(Partition By 问题id Order By 记录时间) 序号
  466. From 问题记录过程
  467. Where 状态 = 7)) Gc
  468. On Gc.问题id = t.Id And Gc.序号 = 1
  469. Where t.渠道id =:ChannelId And t.是否删除 = 0 " + sqlWhere+@"
  470. ) s ,项目信息 xm where xm.id=s.项目id
  471. ) ct group by ct.名称";
  472. return sqlbuild.SqlText(sql).Paging(model.page, model.rows).Select(out total);
  473. }
  474. /// <summary>
  475. /// 获取渠道脱保数
  476. /// </summary>
  477. /// <param name="model"></param>
  478. /// <param name="total"></param>
  479. /// <returns></returns>
  480. public DataTable GeMaintenanceInquiry(MaintenanceModel model, out int total)
  481. {
  482. var sqlWhere = "";
  483. var sqlbuild = this.SqlBuilder;
  484. if(model.PersonProperty!=1)//总部
  485. {
  486. sqlWhere += " and x.渠道id =:ChannelId";
  487. sqlbuild.Parameters("ChannelId", model.ChannelId);
  488. }
  489. else
  490. {
  491. if (!string.IsNullOrEmpty(model.qdid))//总部筛选条件
  492. {
  493. sqlWhere += " and x.渠道id =:ChannelId";
  494. sqlbuild.Parameters("ChannelId", model.qdid);
  495. }
  496. }
  497. if (model.type == 1)//脱保状态0 全部 ,1正常,
  498. {
  499. sqlWhere += " and wbjl.服务状态 = '在保'";
  500. }
  501. else if (model.type == 2)
  502. {
  503. sqlWhere += " and wbjl.服务状态 = '脱保'";
  504. }
  505. ///如果有查询条件
  506. if (!string.IsNullOrEmpty(model.name))
  507. {
  508. sqlWhere += " and (q.名称 like '%'||:name||'%' or x.名称 like '%'||:name||'%' )";
  509. sqlbuild.Parameters("name", model.name);
  510. }
  511. // var sql = @" SELECT t.渠道名称,t.项目信息 AS 客户信息,t.名称 产品名称,t.服务状态,wbjl.服务开始时间,wbjl.服务结束时间,(SELECT count(1) FROM 问题记录 j WHERE j.渠道id=t.渠道id AND j.项目id=t.项目id AND j.产品ID=t.产品ID AND j.登记日期>(SYSDATE -60)) AS 登记问题数量,
  512. //(TRUNC( wbjl.服务结束时间-SYSDATE)) AS 维保天数,t.应用状态,wbjl.说明
  513. //FROM (
  514. //select (q.名称)渠道名称,x.名称 as 项目信息 ,t.名称,c.应用状态,
  515. //case when (c.应用状态)=1 then '在保'
  516. //else '脱保'
  517. //end
  518. //as 服务状态,
  519. //(q.id) 渠道id,
  520. //(x.id) 项目id,
  521. //(c.产品id) 产品id,
  522. //c.id AS 项目产品模块ID
  523. //from 渠道信息 q , 项目信息 x ,项目产品模块 c,产品系统配置 t
  524. //where q.id=x.渠道id and c.项目id=x.id
  525. //and t.id=c.产品id
  526. //) t ,项目维保记录 wbjl
  527. //WHERE (wbjl.渠道ID(+)=t.渠道ID AND wbjl.项目ID(+)=t.项目ID AND wbjl.项目产品模块ID(+)=t.项目产品模块ID)
  528. // " + sqlWhere + " order by t.渠道名称 , t.应用状态,wbjl.服务结束时间";
  529. var sql = @"select
  530. q.名称 AS 渠道名称,x.名称 AS 客户信息,p.名称 AS 产品名称 ,
  531. wbjl.服务状态,
  532. wbjl.服务开始时间,wbjl.服务结束时间,(SELECT count(1) FROM 问题记录 j WHERE j.渠道id=q.id AND j.项目id=x.id AND j.产品ID=wbjl.产品ID AND j.登记日期>(SYSDATE -60)) AS 登记问题数量,
  533. (TRUNC( wbjl.服务结束时间-SYSDATE)) AS 维保天数,wbjl.说明
  534. from 渠道信息 q , 项目信息 x ,产品系统配置 p,(select * from (
  535. select
  536. wbjl.服务开始时间,wbjl.服务结束时间,wbjl.说明,wbjl.渠道ID,wbjl.项目ID,wbjl.项目产品模块ID,c.应用状态,c.产品ID,
  537. case when (c.应用状态)=1 then '在保'
  538. else '脱保'
  539. end
  540. as 服务状态,row_number() over(partition by wbjl.渠道ID,wbjl.项目ID,c.产品ID
  541. order by wbjl.服务结束时间 desc) rn from 项目维保记录 wbjl,项目产品模块 c WHERE wbjl.项目产品模块ID=c.ID AND wbjl.项目ID=c.项目ID
  542. )
  543. where rn=1
  544. ) wbjl
  545. where q.id=x.渠道id AND p.id=wbjl.产品ID
  546. AND wbjl.渠道ID=x.渠道ID AND wbjl.项目ID=x.id
  547. " + sqlWhere + " order by q.名称 ,x.名称, wbjl.服务状态,wbjl.服务结束时间";
  548. return sqlbuild.SqlText(sql).Paging(model.page, model.rows).Select(out total);
  549. }
  550. }
  551. }