QueryDBService.cs 78 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using PMS.BusinessModels.Problem;
  8. using QWPlatform.IService;
  9. using QWPlatform.SystemLibrary;
  10. using QWPlatform.SystemLibrary.LogManager;
  11. using PMS.EntityModels.Product;
  12. using PMS.BusinessModels.Account;
  13. using QWPlatform.DataIntface;
  14. using PMS.BusinessModels.MobileProblem;
  15. using System.Configuration;
  16. using PMS.Plugins.Common;
  17. namespace PMS.DBService.Problems
  18. {
  19. /// <summary>
  20. /// 查询问题的数据服务
  21. /// </summary>
  22. public class QueryDBService : DataServiceBase
  23. {
  24. public static string IsMainMontrol = ConfigurationManager.AppSettings["IsMainMontrol"].ToStringEx();// 是否启用维保控制1启用 0停用
  25. #region 问题记录查询
  26. /// <summary>
  27. /// 综合查询并返回结果
  28. /// </summary>
  29. /// <param name="queryModel">查询模型</param>
  30. /// <returns></returns>
  31. public DataTable Query(QueryModel queryModel, out int total)
  32. {
  33. //是否跨渠道查询
  34. var iscoll = 0;
  35. var number = this.SqlBuilder.SqlText(@"SELECT count(1) FROM 人员信息,渠道人员共享
  36. WHERE 人员信息.ID =:人员ID AND 人员信息.渠道id = 渠道人员共享.共享渠道ID")
  37. .Parameters("人员ID", queryModel.currentUserID).Select<int>();
  38. if(number>0)
  39. {
  40. iscoll = 1;
  41. }
  42. total = 0;
  43. var sql = "";
  44. if (String.IsNullOrEmpty(queryModel.text))
  45. {
  46. sql = @"select ID,编号,
  47. 解决版本,
  48. 是否终止,
  49. 是否验证,
  50. 是否解决,
  51. 是否回退,
  52. 紧急代码,
  53. 是否受理,
  54. 问题性质,
  55. 问题类型,
  56. 问题标题, 解决版本状态,紧急补丁时间,
  57. 解决版本ID,
  58. (select count(1) from 产品问题版本 jj where jj.问题id=t.id) as 是否加入版本,
  59. 研发处理人ID,测试处理人ID,研发处理人, 测试处理人,
  60. (select 联系电话 from 人员信息 where id=t.登记人ID) as 联系电话,
  61. (select 名称||'['||编码||']' from 问题分值管理 where id=t.技术支持分类ID) as 技术支持分类,
  62. (select 编号 from 问题记录 where id=t.关联id and 是否删除=0 and 是否终止=0 and 是否回退=0) as 关联编号,
  63. (select 关联数量 from 问题记录 where id=t.id and 是否删除 = 0 and 是否终止 = 0 and 是否回退 = 0) as 关联数量,
  64. 0 as 重复次数,
  65. ( SELECT MAX(x.服务结束时间) 服务结束时间 FROM ZLDMS.项目维保记录 x,zldms.项目产品模块 c WHERE c.项目ID=x.项目ID AND x.项目产品模块ID=c.id AND c.项目ID= t.项目ID and c.产品ID=t.产品ID)服务结束时间,
  66. --(select count(1) from 问题记录 where 重复问题ID=t.重复问题id and 是否删除=0 and 是否终止=0 and 是否回退=0) as 重复次数,
  67. (select 最后提交人 from (select 姓名 as 最后提交人, 问题id from ( select r.姓名, g.问题id from 问题记录过程 g, 人员信息 r,系统账户 zh,系统角色关系 js where g.状态 = 5 and g.当前流程id in (4, 9, 14, 20, 23) and r.id = g.记录人id and r.id=zh.人员id and zh.id=js.账户id and js.角色id in (5,6,11) order by 记录时间 desc ) ) where 问题id =t.id and rownum = 1) as 最后提交人,";
  68. if (queryModel.type == 0)
  69. {
  70. sql += "问题描述,";
  71. }
  72. if (IsMainMontrol == "1")//是否开启脱保参数管理
  73. {
  74. sql += "( SELECT x.应用状态 FROM ZLDMS.项目产品模块 x WHERE x.项目ID= t.项目ID and x.产品ID=t.产品ID ) as 应用状态,";
  75. }
  76. else//不管控
  77. {
  78. sql += " 1 as 应用状态,";
  79. }
  80. //技术支持导出excel时增加【项目最后提交时间】和【技术支持最后受理时间】
  81. if (queryModel.type == 3)
  82. {
  83. sql += @" (select 记录时间 from ( select 问题id,记录时间 from
  84. (select row_number() over(partition by g.问题id order by g.记录时间 desc) s,g.问题id,g.记录时间 from 问题记录过程 g ,
  85. 人员信息 x where g.记录人id = x.id and x.职务 = 12 and g.状态 = 8) t where t.s=1) js where js.问题id=t.id) as 技术支持最后受理时间,
  86. (select 记录时间 from ( select 问题id,记录时间 from (select row_number() over(partition by g.问题id order by g.记录时间 desc) s,g.问题id,g.记录时间 from 问题记录过程 g ,
  87. 人员信息 x where g.记录人id = x.id and x.职务 != 10 and x.职务 != 11 and x.职务 != 12 and x.职务 != 113 and g.状态 = 5) t where t.s=1) js where js.问题id=t.id) as 项目最后提交时间,";
  88. }
  89. sql += @"(select 名称 from 渠道信息 where id = t.渠道id) as 渠道,
  90. (select 名称 from 项目信息 where id = t.项目ID) as 项目,
  91. (select 名称 from 站点信息 where id = t.机构id) as 机构,
  92. (select 名称 from 产品系统配置 where id = t.产品id) as 产品,
  93. (select 名称 from 产品模块功能 where id = t.模块id) as 模块,
  94. 产品id,
  95. 版本号,
  96. (select 显示名 from 基础编码 where 分类id = '2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB' and 代码= t.来源代码) as 来源,
  97. 登记人,
  98. 反馈人,
  99. 登记日期,
  100. 紧急描述,
  101. 要求时间,
  102. (select 名称 from 问题流程环节 where id = t.环节id ) as 当前环节,
  103. 环节ID,
  104. 受理人,
  105. 受理人ID,
  106. 受理时间,
  107. 指派人,
  108. 指派时间,
  109. (case 是否解决 when 1 then (select ROUND(max(记录时间)-t.登记日期,2)*24 from 问题记录过程 c where t.Id =c.问题id )
  110. when 0 then (select ROUND(sysdate - t.登记日期,2)*24 from dual)
  111. end
  112. ) as 总耗时,
  113. (case when t.是否解决=0 and t.是否终止=0 Then
  114. (select ROUND(sysdate-max(ss.记录时间),2)*24 from 问题记录过程 ss where ss.问题ID=t.ID)
  115. Else 0 end
  116. ) as 滞留时间,
  117. (select count(1) from 产品问题附件 where 问题ID = t.Id) as 附件数量,
  118. (select 姓名 from 人员信息 where ID=t.验证人ID) as 验证人姓名,
  119. (select 名称 from 问题分值管理 where ID=t.分类ID) as 问题分类
  120. from 问题记录 t
  121. where t.是否删除=0 ";
  122. }
  123. else
  124. {
  125. sql = "select ";
  126. Array arry = queryModel.text.Split(',');
  127. foreach (string item in arry)
  128. {
  129. switch (item)
  130. {
  131. case "编号": sql += "编号,"; break;
  132. case "是否终止": sql += "是否终止,"; break;
  133. case "是否验证": sql += "是否验证,"; break;
  134. case "是否解决": sql += "是否解决,"; break;
  135. case "是否回退": sql += "是否回退,"; break;
  136. case "紧急代码": sql += "紧急代码,"; break;
  137. case "是否受理": sql += "是否受理,"; break;
  138. case "问题性质": sql += "问题性质,"; break;
  139. case "问题类型": sql += "问题类型,"; break;
  140. case "问题标题": sql += "问题标题,"; break;
  141. case "问题描述": sql += "问题描述,"; break;
  142. case "渠道": sql += "(select 名称 from 渠道信息 where id = t.渠道id) as 渠道,"; break;
  143. case "项目": sql += "(select 名称 from 项目信息 where id = t.项目ID) as 项目,"; break;
  144. case "机构": sql += "(select 名称 from 站点信息 where id = t.机构id) as 机构,"; break;
  145. case "产品": sql += "(select 名称 from 产品系统配置 where id = t.产品id) as 产品,"; break;
  146. case "模块": sql += "(select 名称 from 产品模块功能 where id = t.模块id) as 模块,"; break;
  147. case "版本号": sql += "版本号,"; break;
  148. case "来源": sql += "(select 显示名 from 基础编码 where 分类id = '2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB' and 代码= t.来源代码) as 来源,"; break;
  149. case "登记人": sql += "登记人,"; break;
  150. case "反馈人": sql += "反馈人,"; break;
  151. case "登记日期": sql += "登记日期,"; break;
  152. case "紧急描述": sql += "紧急描述,"; break;
  153. case "要求时间": sql += "要求时间,"; break;
  154. case "当前环节": sql += "(select 名称 from 问题流程环节 where id = t.环节id ) as 当前环节,"; break;
  155. case "环节ID": sql += "环节ID,"; break;
  156. case "受理人": sql += "受理人,"; break;
  157. case "受理人ID": sql += "受理人ID,"; break;
  158. case "受理时间": sql += "受理时间,"; break;
  159. case "指派人": sql += "指派人,"; break;
  160. case "指派时间": sql += "指派时间,"; break;
  161. case "总耗时": sql += @"(case 是否解决 when 1 then (select ROUND(max(记录时间)-t.登记日期,2)*24 from 问题记录过程 c where t.Id =c.问题id )
  162. when 0 then(select ROUND(sysdate - t.登记日期, 2) * 24 from dual)
  163. end
  164. ) as 总耗时,"; break;
  165. case "滞留时间": sql += @"(case when t.是否解决=0 and t.是否终止=0 Then
  166. (select ROUND(sysdate-max(ss.记录时间),2)*24 from 问题记录过程 ss where ss.问题ID=t.ID)
  167. Else 0 end
  168. ) as 滞留时间,"; break;
  169. case "附件数量": sql += "(select count(1) from 产品问题附件 where 问题ID = t.Id) as 附件数量,"; break;
  170. case "验证人姓名": sql += "(select 姓名 from 人员信息 where ID=t.验证人ID) as 验证人姓名,"; break;
  171. case "问题分类": sql += "(select 名称 from 问题分值管理 where ID=t.分类ID) as 问题分类,"; break;
  172. case "解决方案": sql += "解决方案,"; break;
  173. case "解决版本": sql += "解决版本,"; break;
  174. }
  175. }
  176. sql = sql.Substring(0, sql.Length - 1) + " from 问题记录 t where t.是否删除 = 0 ";
  177. }
  178. var sqlbuilder = this.SqlBuilder;
  179. //若没有勾选包含查询条件
  180. if (!queryModel.IncludeSearchContent)
  181. {
  182. if (!string.IsNullOrEmpty(queryModel.queryText))
  183. {
  184. var numberCode = 0;
  185. if (int.TryParse(queryModel.queryText.Trim(), out numberCode))
  186. {//按编号查询
  187. sql += " And (t.编号 = :编号)";
  188. sqlbuilder.Parameters("编号", numberCode);
  189. }
  190. else
  191. {//按标题查询
  192. sql += " And (t.问题标题 like '%'||:查询关键字||'%' or t.问题描述 like '%'||:查询关键字||'%' or t.解决方案 like'%'||:查询关键字||'%' or t.回退说明 like'%'||:查询关键字||'% ' or t.终止说明 like'%'||:查询关键字||'%' )";
  193. sqlbuilder.Parameters("查询关键字", queryModel.queryText.Trim());
  194. }
  195. }
  196. }
  197. //直接根据快速查询条件查询(其他不包含条件)
  198. else
  199. {
  200. if (!string.IsNullOrEmpty(queryModel.queryText))
  201. {
  202. var numberCode = 0;
  203. if (int.TryParse(queryModel.queryText.Trim(), out numberCode))
  204. {//按编号查询
  205. sql += " And (t.编号 = :编号)";
  206. sqlbuilder.Parameters("编号", numberCode);
  207. }
  208. else
  209. {//按标题查询
  210. sql += " And (t.问题标题 like '%'||:查询关键字||'%' or t.问题描述 like '%'||:查询关键字||'%' or t.解决方案 like'%'||:查询关键字||'%' or t.回退说明 like'%'||:查询关键字||'% ' or t.终止说明 like'%'||:查询关键字||'%' )";
  211. sqlbuilder.Parameters("查询关键字", queryModel.queryText.Trim());
  212. }
  213. }
  214. if (!string.IsNullOrEmpty(queryModel.companyId))
  215. {//渠道ID
  216. sql += " And t.渠道ID =:渠道ID";
  217. sqlbuilder.Parameters("渠道ID", queryModel.companyId);
  218. }
  219. if (!string.IsNullOrEmpty(queryModel.projectId))
  220. {//项目ID
  221. sql += " And t.项目ID =:项目ID";
  222. sqlbuilder.Parameters("项目ID", queryModel.projectId);
  223. }
  224. if (!string.IsNullOrEmpty(queryModel.orgId))
  225. {//机构ID
  226. sql += " And t.机构ID =:机构ID";
  227. sqlbuilder.Parameters("机构ID", queryModel.orgId);
  228. }
  229. if (!string.IsNullOrEmpty(queryModel.productId) || !string.IsNullOrEmpty(queryModel.productModuleId))
  230. {
  231. sql += " And ( ";
  232. //产品ID不为空,则需要根据产品来过滤
  233. if (!string.IsNullOrEmpty(queryModel.productId))
  234. {
  235. sql += " 产品ID in (Select Column_Value From Table(f_Split_String(:产品ID, ','))) or";
  236. sqlbuilder.Parameters("产品ID", queryModel.productId);
  237. }
  238. if (!string.IsNullOrEmpty(queryModel.productModuleId))
  239. {//模块ID不为空
  240. sql += " 模块ID in (Select Column_Value From Table(f_Split_String(:模块ID, ','))) ";
  241. sqlbuilder.Parameters("模块ID", queryModel.productModuleId);
  242. }
  243. else
  244. {
  245. sql = sql.Substring(0, sql.Length - 2);
  246. }
  247. sql += " )";
  248. }
  249. if (queryModel.property > 0)
  250. {//问题性质
  251. sql += " And t.问题性质 =:问题性质";
  252. sqlbuilder.Parameters("问题性质", queryModel.property);
  253. }
  254. if (queryModel.priority > 0)
  255. {//紧急程度
  256. sql += " And t.紧急代码 =:紧急代码";
  257. sqlbuilder.Parameters("紧急代码", queryModel.priority);
  258. }
  259. if (!string.IsNullOrEmpty(queryModel.workflowNode))
  260. {//环节ID
  261. sql += " And t.环节ID in (Select Column_Value From Table(f_Split_String(:环节ID, ',')))";
  262. sqlbuilder.Parameters("环节ID", queryModel.workflowNode);
  263. //2024-02-04 调整维保过期,项目可以看,技术和产品不允许显示
  264. if(IsMainMontrol=="1")
  265. {
  266. if (queryModel.workflowNode == "4"|| queryModel.workflowNode == "5")//技术和产品
  267. {
  268. sql += " And exists (select 1 from 项目产品模块 p where p.项目ID = t.项目ID and t.产品ID= p.产品ID And p.应用状态=1)";
  269. }
  270. }
  271. }
  272. if (!string.IsNullOrEmpty(queryModel.DealPerson))
  273. {//问题处理人
  274. sql += " And t.受理人 like '%' || :受理人 || '%' ";
  275. sqlbuilder.Parameters("受理人", queryModel.DealPerson);
  276. }
  277. if (!string.IsNullOrEmpty(queryModel.RegistPerson))
  278. {//问题登记人
  279. sql += " And t.登记人 like '%' || :登记人 || '%' ";
  280. sqlbuilder.Parameters("登记人", queryModel.RegistPerson);
  281. }
  282. if (!string.IsNullOrEmpty(queryModel.DistributePerson))
  283. {//问题指派人
  284. sql += " And t.指派人 like '%' || :指派人 || '%' ";
  285. sqlbuilder.Parameters("指派人", queryModel.DistributePerson);
  286. }
  287. if (!string.IsNullOrEmpty(queryModel.myProblemCombox) || queryModel.myProblem)
  288. {
  289. sql += " And (";
  290. //与我相关
  291. if (queryModel.myProblem)
  292. {
  293. sql += " (t.受理人ID =:用户ID or t.指派人ID = :用户ID ) or";
  294. }
  295. //我登记/指派/提交的问题,【,】分割
  296. if (!string.IsNullOrEmpty(queryModel.myProblemCombox))
  297. {
  298. sql += @" (t.ID in (select distinct(s.问题id) from 问题记录过程 s
  299. where s.记录人ID=:用户ID
  300. and s.状态 in (Select Column_Value From Table(f_Split_String(:myProblemCombox, ',')))))";
  301. }
  302. else
  303. {
  304. sql = sql.Substring(0, sql.Length - 2);
  305. }
  306. sql += " )";
  307. sqlbuilder.Parameters("用户ID", queryModel.currentUserID);
  308. sqlbuilder.Parameters("myProblemCombox", queryModel.myProblemCombox);
  309. }
  310. if (queryModel.isend)
  311. {
  312. sql += " And t.是否解决 = 1";
  313. }
  314. else if (!queryModel.showCloseProblem && queryModel.zzstartDate == DateTime.MinValue && queryModel.zzendDate == DateTime.MinValue)
  315. {
  316. //只看终止问题
  317. if (queryModel.showTerminIssues)
  318. {
  319. sql += " And t.是否终止 = 1";
  320. }
  321. else
  322. {
  323. //不需要显示已解决与已关闭的问题(只显示正常处理的问题)
  324. sql += " And t.是否终止 = 0 And t.是否解决 = 0";
  325. }
  326. }
  327. if (queryModel.startDate != DateTime.MinValue)
  328. {
  329. sql += " And t.登记日期 >=:开始日期";
  330. sqlbuilder.Parameters("开始日期", queryModel.startDate);
  331. }
  332. //登记结束日期
  333. if (queryModel.endDate != DateTime.MinValue)
  334. {
  335. queryModel.endDate = queryModel.endDate.AddDays(1);
  336. sql += " And t.登记日期 <=:结束日期";
  337. sqlbuilder.Parameters("结束日期", queryModel.endDate);
  338. }
  339. //解决/终止开始日期
  340. if (queryModel.zzstartDate != DateTime.MinValue)
  341. {
  342. sql += " And (t.终止日期 >=:开始日期 or (select to_date(to_char(记录时间,'yyyy-mm-dd'),'yyyy-mm-dd') 记录时间 from 问题记录过程 where 问题ID=t.id and 状态=7 and rownum=1 ) >=:开始日期 )";
  343. sqlbuilder.Parameters("开始日期", queryModel.zzstartDate);
  344. }
  345. //解决/终止结束日期
  346. if (queryModel.zzendDate != DateTime.MinValue)
  347. {
  348. sql += " And (t.终止日期 <=:结束日期 or (select to_date(to_char(记录时间,'yyyy-mm-dd'),'yyyy-mm-dd') 记录时间 from 问题记录过程 where 问题ID=t.id and 状态=7 and rownum=1 ) <=:结束日期 )";
  349. sqlbuilder.Parameters("结束日期", queryModel.zzendDate);
  350. }
  351. //只显示已受理的问题
  352. if (queryModel.showReceiveProblem)
  353. {
  354. sql += " And t.是否受理 = 1";
  355. }
  356. //迭代
  357. if (!string.IsNullOrEmpty(queryModel.lteration))
  358. {
  359. sql += " And t.迭代ID=:DDID";
  360. sqlbuilder.Parameters("DDID", queryModel.lteration);
  361. }
  362. //登记版本
  363. if (!string.IsNullOrEmpty(queryModel.version))
  364. {
  365. sql += " And t.版本号=:BBH";
  366. sqlbuilder.Parameters("BBH", queryModel.version);
  367. }
  368. //研发处理人
  369. if (!string.IsNullOrEmpty(queryModel.YFCLRID))
  370. {
  371. sql += " And t.研发处理人ID=:YFCLRID";
  372. sqlbuilder.Parameters("YFCLRID", queryModel.YFCLRID);
  373. }
  374. //测试处理人
  375. if (!string.IsNullOrEmpty(queryModel.CSCLRID))
  376. {
  377. sql += " And t.测试处理人ID=:CSCLRID";
  378. sqlbuilder.Parameters("CSCLRID", queryModel.CSCLRID);
  379. }
  380. //受理人id
  381. if (!string.IsNullOrEmpty(queryModel.SLRID))
  382. {
  383. sql += " And t.受理人ID=:SLRID";
  384. sqlbuilder.Parameters("SLRID", queryModel.SLRID);
  385. }
  386. //解决版本 0:未指定 1:指定 2:全部
  387. if (queryModel.whether != 2)
  388. {
  389. if (queryModel.whether == 0)
  390. {
  391. sql += " And t.解决版本 is null";
  392. }
  393. else
  394. {
  395. //是否指定解决版本
  396. if (!string.IsNullOrEmpty(queryModel.solutionversion))
  397. {
  398. sql += " And t.解决版本=:JJBBH";
  399. sqlbuilder.Parameters("JJBBH", queryModel.solutionversion);
  400. }
  401. else
  402. {
  403. sql += " And t.解决版本 is not null";
  404. }
  405. }
  406. }
  407. //解决版本状态
  408. if (!string.IsNullOrEmpty(queryModel.JJBBZT))
  409. {
  410. sql += " And t.解决版本状态=:JJBBZT";
  411. sqlbuilder.Parameters("JJBBZT", queryModel.JJBBZT);
  412. }
  413. }
  414. //根据人员性质,加载允许的权限数据(中联性质的人员可以查询全部)
  415. //(1-中联;2-中联渠道;3-客户;4-医院管理员;5-卫计委管理员)
  416. if (queryModel.currentUserProperty == 2)
  417. {
  418. //中联渠道人员,允许查询渠道内的问题
  419. if (!string.IsNullOrWhiteSpace(queryModel.queryText))
  420. {
  421. //放开权限
  422. sql += @" And exists (select 1 from 人员信息
  423. where ID = :人员ID)";
  424. }
  425. else
  426. {
  427. //未放开权限
  428. if (queryModel.myProblem || !string.IsNullOrEmpty(queryModel.myProblemCombox) || !queryModel.projectId.IsNullOrEmpty()|| iscoll==0)//勾上待我处理、我登记、我分配,只看我自己机构的问题,不看其他渠道问题
  429. {
  430. sql += @" And exists (select 1 from 人员信息
  431. where (人员信息.ID = :人员ID and t.渠道id = 人员信息.渠道id ) )
  432. ";
  433. }
  434. else
  435. {
  436. sql += @" And exists (select 1 from 人员信息
  437. where (人员信息.ID = :人员ID and t.渠道id = 人员信息.渠道id ) )
  438. or exists (select 1 from 人员信息,渠道人员共享
  439. where (人员信息.ID =:人员ID and 人员信息.渠道id=渠道人员共享.共享渠道ID and t.渠道id = 渠道人员共享.渠道id )
  440. )
  441. ";
  442. }
  443. }
  444. sqlbuilder.Parameters("人员ID", queryModel.currentUserID);
  445. }
  446. else if (queryModel.currentUserProperty == 3)
  447. {//客户操作人员(只看自己的)
  448. sql += " And t.登记人ID = :登记人ID";
  449. sqlbuilder.Parameters("登记人ID", queryModel.currentUserID);
  450. }
  451. else if (queryModel.currentUserProperty == 4)
  452. {//机构管理员,只看本机构的
  453. sql += @" And exists (select 1 from 人员信息 p
  454. where ID = :人员ID and t.渠道id= p.渠道id And t.机构id = p.站点id)";
  455. sqlbuilder.Parameters("人员ID", queryModel.currentUserID);
  456. }
  457. else if (queryModel.currentUserProperty == 5)
  458. {//卫计委管理员,允许查看该项目下的问题
  459. sql += @" And exists (select 1 from 人员信息 p
  460. where ID = :人员ID and t.渠道id= p.渠道id )";
  461. sqlbuilder.Parameters("人员ID", queryModel.currentUserID);
  462. }
  463. // 是否显示内部产品问题
  464. if (!queryModel.insideProblem)
  465. {
  466. sql += " And t.内部产品问题=0";
  467. }
  468. //自定义排序
  469. sql += queryModel.oderBy;
  470. if (queryModel.page > 0 && queryModel.rows > 0)
  471. {
  472. return sqlbuilder.SqlText(sql)
  473. .Paging(queryModel.page, queryModel.rows)
  474. .Select(out total);
  475. }
  476. else
  477. {
  478. return sqlbuilder.SqlText(sql).Select();
  479. }
  480. }
  481. /// <summary>
  482. /// 重复问题列表所用的数据
  483. /// </summary>
  484. /// <param name="user"></param>
  485. /// <returns></returns>
  486. public DataTable AllProList(UserInfo userInfo)
  487. {
  488. string sql = "select ID,编号,问题标题, '[' ||编号||']'||问题标题 as 显示名称 from 问题记录 where 是否删除=0 and 是否回退=0 and 是否终止=0";
  489. return SqlBuilder.SqlText(sql).Select();
  490. }
  491. //受理该问题(如果已处理返回false)
  492. public bool ReceiveProblem(string id, string userid, string name)
  493. {
  494. var sql = @"update 问题记录
  495. set 受理人 = :受理人,
  496. 受理人ID=:受理人ID,
  497. 是否受理 = 1,
  498. 受理时间=sysdate
  499. where ID = :ID and ( 是否受理 = 0 or 受理人ID=:受理人ID or 指派人ID=:指派人ID)";
  500. return this.SqlBuilder.SqlText(sql)
  501. .Parameters("受理人", name)
  502. .Parameters("受理人ID", userid)
  503. .Parameters("指派人ID", userid)
  504. .Parameters("ID", id)
  505. .Execute() > 0;
  506. //return this.UpdateBuilder
  507. // .Column("受理人", name)
  508. // .Column("受理人ID", userid)
  509. // .Column("受理时间", this.DataBaseBuilder.GetDateTime)
  510. // .Column("是否受理", 1)
  511. // .Update("问题记录")
  512. // .Where("ID", id)
  513. // .Where("是否受理", 0)
  514. // .Execute() > 0;
  515. }
  516. /// <summary>
  517. /// 判断问题是否被他人受理
  518. /// </summary>
  519. /// <param name="id"></param>
  520. /// <param name="userid"></param>
  521. /// <returns></returns>
  522. public int IsReceive(string id, string userid)
  523. {
  524. var status = 0;
  525. var sql = @"select t.ID from 问题记录 t where t.ID=:id
  526. and t.是否受理 = 1 ";
  527. if (!String.IsNullOrEmpty(this.SqlBuilder.SqlText(sql).Parameters("id", id).Select<string>()))
  528. {
  529. //如果已受理,判断是否为我受理
  530. sql += " and ( t.受理人ID=:userid or t.指派人ID=:userid )";
  531. var t = this.SqlBuilder.SqlText(sql).Parameters("id", id).Parameters("userid", userid).Select<string>();
  532. if (!String.IsNullOrEmpty(t))
  533. {
  534. status = 2;
  535. }
  536. else
  537. {
  538. status = 1;
  539. }
  540. }
  541. return status;
  542. }
  543. //强制受理这个问题
  544. public bool TryReceiveProblem(string id, string userid, string name)
  545. {
  546. return this.UpdateBuilder
  547. .Column("受理人", name)
  548. .Column("受理人ID", userid)
  549. .Column("受理时间", this.DataBaseBuilder.GetDateTime)
  550. .Column("是否受理", 1)
  551. .Update("问题记录")
  552. .Where("ID", id)
  553. .Execute() > 0;
  554. }
  555. //获取最近处理描述
  556. public ProblemDealMessage GetRecentlyDetail(string ProblemId)
  557. {
  558. try
  559. {
  560. return new ProblemDealMessage
  561. {
  562. DealDetail = this.SqlBuilder.SqlText("select * from (select 描述 from 问题记录过程 where 问题ID= :ProblemId and 状态=6 order by 记录时间 desc) where rownum=1").Parameters("ProblemId", ProblemId).Select<string>(),
  563. SolveDetail = this.SqlBuilder.SqlText("select * from (select 描述 from 问题记录过程 where 问题ID= :ProblemId and 状态=7 order by 记录时间 desc) where rownum=1").Parameters("ProblemId", ProblemId).Select<string>()
  564. };
  565. }
  566. catch (Exception ex)
  567. {
  568. Logger.Instance.Error("调用GetRecentlyDetail出错", ex);
  569. return new ProblemDealMessage();
  570. }
  571. }
  572. //取消受理问题
  573. public bool CancelReceiveProblem(string id, string PersonId)
  574. {
  575. using (var tran = this.DBTransaction.BeginTrans())
  576. {
  577. try
  578. {
  579. var up = this.UpdateBuilder
  580. .Column("是否受理", 0)
  581. .Column("受理人", DBNull.Value)
  582. .Column("受理人ID", DBNull.Value)
  583. .Column("受理时间", DBNull.Value)
  584. .Update("问题记录")
  585. .Where("ID", id)
  586. .Execute(tran);
  587. var dt = this.SqlBuilder.SqlText("Select * from (Select 当前流程ID,记录时间 from 问题记录过程 where 问题ID=:id order by 记录时间 desc) where rownum=1")
  588. .Parameters("id", id).Select();
  589. var ProcessId = dt.Rows[0].GetValueByName<int>("当前流程ID");
  590. //计算耗时
  591. var ProcessTime = dt.Rows[0].GetValueByName<DateTime>("记录时间");
  592. DateTime CurrentTime = this.DataBaseBuilder.GetDateTime;
  593. TimeSpan time = CurrentTime - ProcessTime;
  594. var PassTime = time.TotalMinutes / 60;
  595. //添加过程
  596. var inserProcess = this.InsertBuilder
  597. .Column("ID", Guid.NewGuid().ToString())
  598. .Column("问题ID", id)
  599. .Column("记录人ID", PersonId)
  600. .Column("记录时间", CurrentTime)
  601. .Column("当前流程ID", ProcessId)
  602. .Column("状态", 9)
  603. .Column("来源流程ID", ProcessId)
  604. .Column("耗时", PassTime)
  605. .Insert("问题记录过程")
  606. .Execute(tran);
  607. tran.CommitTrans();
  608. return (up > 0 && inserProcess > 0);
  609. }
  610. catch (Exception ex)
  611. {
  612. tran.Rollback();
  613. Logger.Instance.Error("取消受理失败", ex);
  614. return false;
  615. }
  616. }
  617. }
  618. //查询用户信息
  619. public DataTable QueryUserInfo(string uid)
  620. {
  621. var sql = "select 性质,职务 from 人员信息 where ID=:ID";
  622. return this.SqlBuilder.SqlText(sql)
  623. .Parameters("ID", uid)
  624. .Select();
  625. }
  626. /// <summary>
  627. /// 查询需要处理的问题列表
  628. /// </summary>
  629. /// <param name="type">1:技术支持,2:研发处理</param>
  630. /// <param name="total">输出总记录数量</param>
  631. /// <returns>返回json数据</returns>
  632. public DataTable QueryNeedProccessList(int type, string productid, string productModuleId, int page, int rows, out int total)
  633. {
  634. total = 0;
  635. var sqlbuilder = this.SqlBuilder;
  636. var sql = @"select ID,编号,紧急代码,问题标题,问题性质,登记人,反馈人,登记日期,
  637. (select 名称 from 渠道信息 where ID = 问题记录.渠道id) as 渠道,
  638. (select 名称 from 产品系统配置 where id = 问题记录.产品id) as 产品,
  639. (select count(1) from 产品问题附件 where 问题id = 问题记录.id) as 附件数量
  640. from 问题记录
  641. where 是否删除 = 0
  642. And 是否终止 = 0
  643. And 是否解决 = 0
  644. And 是否受理 = 0";
  645. if (1 == type)
  646. {//技术支持(只显示技术支持需要处理的问题)
  647. sql += " And 环节ID=4";
  648. }
  649. else if (2 == type)
  650. {//研发支持(只显示研发需要处理的)
  651. sql += " And 环节ID=5";
  652. }
  653. else
  654. {//查询类型不明确
  655. return null;
  656. }
  657. if (!string.IsNullOrEmpty(productid) || !string.IsNullOrEmpty(productModuleId))
  658. {
  659. sql += " And ( ";
  660. //产品ID不为空,则需要根据产品来过滤
  661. if (!string.IsNullOrEmpty(productid))
  662. {
  663. sql += " 产品ID in (Select Column_Value From Table(f_Split_String(:产品ID, ','))) or";
  664. sqlbuilder.Parameters("产品ID", productid);
  665. }
  666. if (!string.IsNullOrEmpty(productModuleId))
  667. {//模块ID不为空
  668. sql += " 模块ID in (Select Column_Value From Table(f_Split_String(:模块ID, ','))) ";
  669. sqlbuilder.Parameters("模块ID", productModuleId);
  670. }
  671. else
  672. {
  673. sql = sql.Substring(0, sql.Length - 2);
  674. }
  675. sql += " )";
  676. }
  677. sql += " Order By 编号 DESC";
  678. return sqlbuilder
  679. .SqlText(sql)
  680. .Paging(page, rows)
  681. .Select(out total);
  682. }
  683. //处理问题时更新的问题附加信息
  684. public bool UpdateProblemInfo(ProblemProcessModel model, UserInfo user)
  685. {
  686. bool result;
  687. using (ITransaction transaction = base.DBTransaction.BeginTrans())
  688. {
  689. try
  690. {
  691. WTJLModel model2 = this.GetModel(model.ProblemID);
  692. bool identify = model.Identify;
  693. if (identify)
  694. {
  695. base.InsertBuilder.Insert("项目个性化").Column("ID", Guid.NewGuid().ToString()).Column("项目ID", model2.XMID).Column("产品ID", model2.CPID).Column("修改人", user.Name).Column("修改时间", base.DataBaseBuilder.GetDateTime).Column("名称", model2.WTBT).Column("修改性质", (user.JobCode.ToInt32() == 10 || user.JobCode.ToInt32() == 11) ? 1 : ((user.JobCode.ToInt32() == 7 || user.JobCode.ToInt32() == 12 || user.JobCode.ToInt32() == 13) ? 2 : 3)).Column("状态", 1).Column("来源问题", model2.BH).Column("修改说明", (model2.XGSM == null) ? model.ProcessRemark : model2.XGSM).Execute();
  696. }
  697. else
  698. {
  699. base.SqlBuilder.SqlText("update 项目个性化 set 状态=2 where 来源问题=:BH").Parameters("BH", model2.BH).Execute();
  700. }
  701. base.UpdateBuilder.Update("问题记录").Column("红黑榜", model.RedBlack).Column("红黑榜理由", model.RedBlackContent).Column("黑榜问题描述", model2.WTMS)
  702. .Column("问题类型", model.IsItem ? 1 : 2).Column("解决版本", model.SolveVersion.IsNullOrEmpty()?model2.JJBB: model.SolveVersion).Column("解决版本状态", model.SolveVersionstate).Column("BH版本", model.BHVersion).Column("BH编号", model.BHNumber).Column("常见问题", model.IsOften ? 1 : 0).Column("修改说明", model.AlterRemark).Column("升级说明", model.UpgrateRemark).Column("是否发布", model.IsRelease ? 1 : 0).Column("需要培训", model.IsTrain ? 1 : 0).Where("ID", model.ProblemID).Execute();
  703. transaction.CommitTrans();
  704. result = true;
  705. }
  706. catch (Exception ex)
  707. {
  708. transaction.Rollback();
  709. Logger.Instance.Error("处理问题操作的更新问题附加信息时失败,方法UpdateProblemInfo", ex);
  710. result = false;
  711. }
  712. }
  713. return result;
  714. }
  715. //根据过程ID查询出相应的过程详细信息
  716. public dynamic QueryProcessInfo(string pid)
  717. {
  718. var sql = @"select t.编号,t.问题标题,t.ID,
  719. (select p.姓名 from 人员信息 p where p.Id =r.记录人id ) as 处理人,
  720. r.记录时间,
  721. r.描述,
  722. decode(r.状态,1,'登记',2,'回退',3,'终止',4,'分配',5,'提交',6,'处理',7,'完成',8,'受理') as 状态,
  723. (Select Wm_Concat(附件id || '|' || 类型) From 产品问题附件 Where 过程ID = r.Id) As 附件
  724. from 问题记录过程 r, 问题记录 t
  725. where r.ID = :过程ID
  726. and r.问题id = t.Id";
  727. var dt = this.SqlBuilder.SqlText(sql)
  728. .Parameters("过程ID", pid)
  729. .Select();
  730. var list = dt.ToList<dynamic>();
  731. if (list != null && list.Count > 0)
  732. {
  733. return list[0];
  734. }
  735. return null;
  736. }
  737. //查询问题记录
  738. public EntityModels.Product.WTJLModel GetModel(string id)
  739. {
  740. EntityModels.Product.WTJLModel model = new EntityModels.Product.WTJLModel(this.DataFactoryObject);
  741. model.ID = id;
  742. model.Select();
  743. return model;
  744. }
  745. //获取问题记录datatable
  746. public DataTable GetProblemById(string id)
  747. {
  748. return this.SqlBuilder.SqlText("Select 是否终止,是否解决,环节ID,编号,ID from 问题记录 where ID=:id").Parameters("id", id).Select();
  749. }
  750. public string GetWTID(string Processid)
  751. {
  752. return this.SqlBuilder.SqlText("Select 问题ID from 问题记录过程 where ID=:id").Parameters("id", Processid).Select<string>();
  753. }
  754. //撤消问题
  755. public int UndoProblem(string id)
  756. {
  757. return this.UpdateBuilder
  758. .Column("是否终止", 0)
  759. .Column("是否解决", 0)
  760. .Update("问题记录")
  761. .Where("ID", id)
  762. .Execute();
  763. }
  764. public string CheckUpdateProcess(string ProcessId, string UserId)
  765. {
  766. var sql = @"select ID,记录人ID from 问题记录过程
  767. where 问题ID=(select 问题ID from 问题记录过程 where ID=:id)
  768. order by 记录时间 desc";
  769. var dt = this.SqlBuilder.SqlText(sql).Parameters("id", ProcessId).Select();
  770. var CurrentProcess = dt.Rows[0].GetValueByName<string>("ID");
  771. var CurrenUserId = dt.Rows[0].GetValueByName<string>("记录人ID");
  772. if (CurrentProcess != ProcessId)
  773. {
  774. return "1"; //只能修改最新的流程
  775. }
  776. if (CurrenUserId != UserId)
  777. {
  778. return "2"; //只能修改自己提交的过程
  779. }
  780. else
  781. {
  782. return "3";
  783. }
  784. }
  785. public int UpdateProblemProcess(EntityModels.Product.WTJLGCModel model)
  786. {
  787. return this.UpdateBuilder.Column("描述", model.MS).Update("问题记录过程").Where("ID", model.ID).Execute();
  788. }
  789. //登记问题时获取推送人
  790. public List<string> GetPushPerson(string ProblemId)
  791. {
  792. try
  793. {
  794. var list = new List<string>();
  795. //获取问题信息
  796. var ProblemModel = GetModel(ProblemId);
  797. //如果为项目环节,通知项目服务人员
  798. if (ProblemModel.HJID <= 3)
  799. {
  800. //获取项目服务人员
  801. var ProjectPerson = this.SqlBuilder.SqlText("select 人员ID from 项目服务人员 where 项目ID=:id").Parameters("id", ProblemModel.XMID).Select();
  802. //如果不为空则通知维护的项目人员
  803. if (ProjectPerson != null && ProjectPerson.Rows.Count > 0)
  804. {
  805. foreach (DataRow row in ProjectPerson.Rows)
  806. {
  807. list.Add(row.GetValueByName<string>("人员ID"));
  808. }
  809. }
  810. else
  811. {
  812. //通知渠道下所有人员
  813. var ProjectPersonAll = this.SqlBuilder.SqlText("select ID from 人员信息 where 渠道ID=:id and 是否删除=0 and 性质=2").Parameters("id", ProblemModel.QDID).Select();
  814. if (ProjectPersonAll != null && ProjectPersonAll.Rows.Count > 0)
  815. {
  816. foreach (DataRow row in ProjectPersonAll.Rows)
  817. {
  818. list.Add(row.GetValueByName<string>("ID"));
  819. }
  820. }
  821. }
  822. }
  823. else if (ProblemModel.HJID == 4)
  824. {
  825. //如果模块ID不为空
  826. if (!string.IsNullOrEmpty(ProblemModel.MKID))
  827. {
  828. //获取测试人ID
  829. var TestPerson = this.SqlBuilder.SqlText("select 测试人IDNEW from 产品模块功能 where ID=:id and 测试人IDNEW is not null").Parameters("id", ProblemModel.MKID).Select<string>();
  830. if (!string.IsNullOrEmpty(TestPerson))
  831. {
  832. var listAll = TestPerson.Split(',');
  833. foreach (string item in listAll)
  834. {
  835. list.Add(item);
  836. }
  837. }
  838. else
  839. {
  840. //如果不存在测试人则通知所有总部人员
  841. var SurpportPerson = this.SqlBuilder.SqlText("select ID from 人员信息 where 性质='1' and 是否删除=0 and 职务='12'").Select();
  842. if (SurpportPerson != null && SurpportPerson.Rows.Count > 0)
  843. {
  844. foreach (DataRow row in SurpportPerson.Rows)
  845. {
  846. list.Add(row.GetValueByName<string>("ID"));
  847. }
  848. }
  849. }
  850. }
  851. else
  852. {
  853. //如果不存在模块则通知所有总部人员技术支持
  854. var SurpportPerson = this.SqlBuilder.SqlText("select ID from 人员信息 where 性质='1' and 是否删除=0 and 职务='12'").Select();
  855. if (SurpportPerson != null && SurpportPerson.Rows.Count > 0)
  856. {
  857. foreach (DataRow row in SurpportPerson.Rows)
  858. {
  859. list.Add(row.GetValueByName<string>("ID"));
  860. }
  861. }
  862. }
  863. }
  864. return list;
  865. }
  866. catch (Exception ex)
  867. {
  868. Logger.Instance.Error("获取推送人发送错误,", ex);
  869. return new List<string>();
  870. }
  871. }
  872. //获取问题流程的主流程
  873. public List<MainProcessModel> GetMainProcess(string ProblemId)
  874. {
  875. try
  876. {
  877. var list = new List<MainProcessModel>();
  878. var mainSql = @"select ID,是否验证,环节ID,流程ID,登记人,登记日期,是否终止,终止日期,是否解决,指派人,指派时间,
  879. decode(环节ID,0,'已登记',1,'机构处理',2,'卫计委处理',3,'项目处理',4,'技术支持处理',5,'研发处理') as 环节名,
  880. (select decode(t.性质,1,'总部',2,'渠道人员',3,'客户',4,'医院管理员',5,'卫计委管理员') as 职务 from 人员信息 t where t.ID=登记人ID) as 职务,
  881. (select decode(s.性质,1,'总部',2,'渠道人员',3,'客户',4,'医院管理员',5,'卫计委管理员') as 指派人职务 from 人员信息 s where s.ID=指派人ID) as 指派人职务
  882. from 问题记录 where ID=:id";
  883. var CurrentDt = this.SqlBuilder.SqlText(mainSql).Parameters("id", ProblemId).Select();
  884. //添加登记过程
  885. var RegistPerson = CurrentDt.Rows[0].GetValueByName<string>("登记人");//登记人
  886. var AssigneePerson = CurrentDt.Rows[0].GetValueByName<string>("指派人");
  887. var AssigneeTime = CurrentDt.Rows[0].GetValueByName<DateTime>("指派时间");
  888. list.Add(new MainProcessModel { StatusID = 1, LinkId = 0, LinkName = "登记", LinkUserName = RegistPerson, LinkTime = CurrentDt.Rows[0].GetValueByName<DateTime>("登记日期"), job = CurrentDt.Rows[0].GetValueByName<string>("职务") });
  889. //获取当前环节
  890. var CurrentLink = CurrentDt.Rows[0].GetValueByName<int>("环节ID");
  891. if (CurrentLink > 0)
  892. {
  893. for (var i = 1; i <= CurrentLink; i++)
  894. {
  895. var sql = @"select * from
  896. (select s.当前流程ID,t.姓名,
  897. decode(:CurrentLink,0,'已登记',1,'机构处理',2,'卫计委处理',3,'项目处理',4,'技术支持处理',5,'研发处理') as 环节名,
  898. s.记录时间,s.描述,s.ID,s.状态,
  899. decode(t.性质,1,'总部',2,'渠道人员',3,'客户',4,'医院管理员',5,'卫计委管理员') as 职务
  900. from 问题记录过程 s,人员信息 t
  901. where s.当前流程ID in (select ID from 问题工作流程 where 环节ID=:CurrentLink)
  902. and s.记录人ID= t.ID
  903. and s.问题ID=:ProblemId
  904. and s.状态!= 1
  905. order by s.记录时间 desc)
  906. where rownum=1";
  907. var processDt = this.SqlBuilder.SqlText(sql).Parameters("CurrentLink", i).Parameters("ProblemId", ProblemId).Select();
  908. if (processDt != null && processDt.Rows.Count > 0)
  909. {
  910. var CurrentRegisName = processDt.Rows[0].GetValueByName<string>("姓名");
  911. var CurrentRegisJob = processDt.Rows[0].GetValueByName<string>("职务");
  912. var Status = processDt.Rows[0].GetValueByName<int>("状态");
  913. var CurrentRegislist = new MainProcessModel { LinkId = i, LinkName = processDt.Rows[0].GetValueByName<string>("环节名") };
  914. ///如果不为提交或回退、指派
  915. if (Status != 2 && Status != 5 && Status != 9 && Status != 10 & Status != 4)
  916. {
  917. CurrentRegislist.LinkUserName = CurrentRegisName;
  918. CurrentRegislist.job = CurrentRegisJob;
  919. CurrentRegislist.LinkTime = processDt.Rows[0].GetValueByName<DateTime>("记录时间");
  920. CurrentRegislist.LinkDeatil = processDt.Rows[0].GetValueByName<string>("描述");
  921. CurrentRegislist.ProcessId = processDt.Rows[0].GetValueByName<string>("ID");
  922. }
  923. else
  924. {
  925. if (Status == 5 && i == CurrentLink && !string.IsNullOrEmpty(AssigneePerson))
  926. {
  927. CurrentRegislist.LinkUserName = "提交给→" + AssigneePerson;
  928. CurrentRegislist.job = CurrentRegisJob;
  929. CurrentRegislist.LinkTime = AssigneeTime;
  930. }
  931. //指派
  932. if (Status == 4)
  933. {
  934. CurrentRegislist.LinkUserName = "处理人变更→" + AssigneePerson;
  935. CurrentRegislist.job = CurrentRegisJob;
  936. CurrentRegislist.LinkTime = AssigneeTime;
  937. CurrentRegislist.ProcessId = processDt.Rows[0].GetValueByName<string>("ID");
  938. }
  939. }
  940. list.Add(CurrentRegislist);
  941. }
  942. }
  943. //是否终止
  944. if (CurrentDt.Rows[0].GetValueByName<int>("是否终止") == 1)
  945. {
  946. list.Add(new MainProcessModel { StatusID = 3, LinkName = "已终止", LinkTime = CurrentDt.Rows[0].GetValueByName<DateTime>("终止日期") });
  947. }
  948. //是否完成
  949. if (CurrentDt.Rows[0].GetValueByName<int>("是否解决") == 1)
  950. {//是否验证
  951. if (CurrentDt.Rows[0].GetValueByName<int>("是否验证") == 1)
  952. {
  953. list.Add(new MainProcessModel { StatusID = 11, LinkName = "已验证" });
  954. }
  955. else
  956. {
  957. list.Add(new MainProcessModel { StatusID = 7, LinkName = "已完成" });
  958. }
  959. }
  960. }
  961. return list;
  962. }
  963. catch (Exception ex)
  964. {
  965. Logger.Instance.Error("获取问题流程的主流程失败,原因:" + ex);
  966. return new List<MainProcessModel>();
  967. }
  968. }
  969. #endregion
  970. #region 其他操作
  971. /// <summary>
  972. /// 判断是否处理过该问题
  973. /// </summary>
  974. /// <param name="id"></param>
  975. /// <returns></returns>
  976. public bool IsDealed(string id, string PersonId)
  977. {
  978. return this.SqlBuilder.SqlText("select ID from 问题记录过程 where 问题ID=:id and 记录人ID=:PersonId").Parameters("id", id).Parameters("PersonId", PersonId).Exists();
  979. }
  980. /// <summary>
  981. /// 判断问题是否完结并处理推送评价
  982. /// </summary>
  983. /// <param name="id"></param>
  984. /// <param name="PersonId"></param>
  985. /// <returns></returns>
  986. public bool IsConfirmClosing(string id, string PersonId)
  987. {
  988. var state= this.SqlBuilder.SqlText("select ID from 问题记录 where id=:id and 登记人ID=:PersonId and (是否解决=1 or 是否终止=1 )").Parameters("id", id).Parameters("PersonId", PersonId).Exists();
  989. if(state)
  990. {
  991. //UpdateBuilder.Update("问题记录").Column("").Where("id", id).Execute();
  992. }
  993. return state;
  994. }
  995. /// <summary>
  996. /// 问题归类
  997. /// </summary>
  998. /// <param name="id"></param>
  999. /// <returns></returns>
  1000. public bool DoClassifi(string id, string ClssID,int nature, UserInfo user)
  1001. {
  1002. if (user.PersonProperty == 1)
  1003. {
  1004. return (base.UpdateBuilder.Update("问题记录").Where("ID", id).Column("技术支持分类ID", ClssID).Column("问题性质", nature).Execute() > 0);
  1005. }
  1006. else
  1007. {
  1008. return (base.UpdateBuilder.Update("问题记录").Where("ID", id).Column("分类ID", ClssID).Column("问题性质", nature).Execute() > 0);
  1009. }
  1010. }
  1011. #endregion
  1012. #region 超时推送
  1013. /// <summary>
  1014. /// 是否开启超时推送
  1015. /// </summary>
  1016. /// <param name="user"></param>
  1017. /// <returns></returns>
  1018. public bool GetIsOverTime(UserInfo user)
  1019. {
  1020. var sqlbulider = this.SqlBuilder;
  1021. var sql = @"select b.ID from 问题流程环节 b where b.人员性质=:PersonProperty and b.超时启用=1 ";
  1022. sqlbulider.Parameters("PersonProperty", user.PersonProperty);
  1023. ///如果为本部人员
  1024. if (user.PersonProperty == 1)
  1025. {
  1026. sql += @" and Exists
  1027. (select column_value from table(Select f_Split_String(x.职务代码1, ',') from 问题流程环节 x
  1028. where id = b.Id)
  1029. where Column_Value =:Job) ";
  1030. sqlbulider.Parameters("Job", Convert.ToInt32(user.JobCode));
  1031. }
  1032. return sqlbulider.SqlText(sql).Exists();
  1033. }
  1034. /// <summary>
  1035. /// 获取受理超时
  1036. ///
  1037. /// </summary>
  1038. /// <param name="user"></param>
  1039. /// <returns></returns>
  1040. public DataTable GetAcceptOverTime(UserInfo user)
  1041. {
  1042. try
  1043. {
  1044. //获取推送人所在环节
  1045. var sqlbulider = this.SqlBuilder;
  1046. var sql = @"select b.ID from 问题流程环节 b where b.人员性质=:PersonProperty ";
  1047. sqlbulider.Parameters("PersonProperty", user.PersonProperty);
  1048. ///如果为本部人员
  1049. if (user.PersonProperty == 1)
  1050. {
  1051. sql += @" and Exists
  1052. (select column_value from table(Select f_Split_String(x.职务代码1, ',') from 问题流程环节 x
  1053. where id = b.Id)
  1054. where Column_Value =:Job) ";
  1055. sqlbulider.Parameters("Job", Convert.ToInt32(user.JobCode));
  1056. }
  1057. var LinkId = sqlbulider.SqlText(sql).Select<int>();
  1058. //如果不存在
  1059. if (LinkId <= 0)
  1060. {
  1061. return new DataTable();
  1062. }
  1063. //获取超时的问题
  1064. var sql2 = @"select a.ID ,a.编号
  1065. from 问题记录 a,问题流程环节 b
  1066. where a.环节ID=b.ID
  1067. and a.是否受理=0
  1068. and a.是否终止=0
  1069. and a.是否解决=0
  1070. and a.是否删除=0
  1071. and b.ID=:LinkId
  1072. and b.超时启用=1
  1073. and (select ROUND(sysdate-max(ss.记录时间),3)*24*60 from 问题记录过程 ss where ss.问题ID=a.ID)>b.受理时间 order by a.编号 desc";
  1074. var ProblemDt = this.SqlBuilder.SqlText(sql2).Parameters("LinkId", LinkId).Select();
  1075. return ProblemDt;
  1076. }
  1077. catch (Exception ex)
  1078. {
  1079. Logger.Instance.Error("超时推送调用GetAcceptOverTime出错,原因:", ex);
  1080. return new DataTable();
  1081. }
  1082. }
  1083. /// <summary>
  1084. /// 获取处理超时
  1085. /// </summary>
  1086. /// <param name="user"></param>
  1087. public DataTable GetDealOverTime(UserInfo user)
  1088. {
  1089. try
  1090. {
  1091. //获取推送人所在环节
  1092. var sqlbulider = this.SqlBuilder;
  1093. var sql = @"select b.ID from 问题流程环节 b where b.人员性质=:PersonProperty ";
  1094. sqlbulider.Parameters("PersonProperty", user.PersonProperty);
  1095. ///如果为本部人员
  1096. if (user.PersonProperty == 1)
  1097. {
  1098. sql += @" and Exists
  1099. (select column_value from table(Select f_Split_String(x.职务代码1, ',') from 问题流程环节 x
  1100. where id = b.Id)
  1101. where Column_Value =:Job) ";
  1102. sqlbulider.Parameters("Job", Convert.ToInt32(user.JobCode));
  1103. }
  1104. var LinkId = sqlbulider.SqlText(sql).Select<int>();
  1105. //如果不存在
  1106. if (LinkId <= 0)
  1107. {
  1108. return new DataTable();
  1109. }
  1110. //获取超时的问题
  1111. var sql2 = @"select a.ID ,a.编号
  1112. from 问题记录 a,问题流程环节 b
  1113. where a.环节ID=b.ID
  1114. and a.是否受理=1
  1115. and a.是否终止=0
  1116. and a.是否解决=0
  1117. and a.是否删除=0
  1118. and (a.受理人ID=:PersonId or a.指派人ID=:PersonId)
  1119. and b.ID=:LinkId
  1120. and b.超时启用=1
  1121. and (select ROUND(sysdate-max(ss.记录时间),3)*24*60 from 问题记录过程 ss where ss.问题ID=a.ID)>b.处理时间 order by a.编号 desc";
  1122. var ProblemDt = this.SqlBuilder.SqlText(sql2).Parameters("LinkId", LinkId).Parameters("PersonId", user.PersonID).Select();
  1123. return ProblemDt;
  1124. }
  1125. catch (Exception ex)
  1126. {
  1127. Logger.Instance.Error("超时推送调用GetDealOverTime出错,原因:", ex);
  1128. return new DataTable();
  1129. }
  1130. }
  1131. #endregion
  1132. #region 首页查询使用
  1133. /// <summary>
  1134. /// 首页查询统计数量
  1135. /// </summary>
  1136. /// <param name="uid">用户id</param>
  1137. /// <param name="userprop">用户性质</param>
  1138. /// <param name="companyid">渠道ID</param>
  1139. /// <param name="projectid">项目ID</param>
  1140. /// <param name="orgid">机构ID</param>
  1141. /// <returns>返回数据表</returns>
  1142. public DataTable QueryNotFinishProblem(string uid, int userprop, string companyid, string projectid, string orgid)
  1143. {
  1144. var sqlbuilder = this.SqlBuilder;
  1145. var sql = @"with tab as (select
  1146. *
  1147. from 问题记录 t
  1148. where 是否解决 = 0
  1149. and 是否终止= 0
  1150. and 是否删除 = 0
  1151. ";
  1152. if (userprop == 2)
  1153. {//人员性质2:渠道人员,查看当前渠道未解决的问题
  1154. sql += " And 渠道ID = :渠道ID";
  1155. sqlbuilder.Parameters("渠道ID", companyid);
  1156. }
  1157. else if (userprop == 3)
  1158. {//客户人员:只看自己登记未解决的问题
  1159. sql += " And 登记人 = :登记人ID";
  1160. sqlbuilder.Parameters("登记人ID", uid);
  1161. }
  1162. else if (userprop == 4)
  1163. {//医院管理员:查看自己机构问题
  1164. sql += " And 机构ID = :机构ID";
  1165. if (!string.IsNullOrEmpty(orgid))
  1166. {
  1167. sqlbuilder.Parameters("机构ID", orgid);
  1168. }
  1169. else
  1170. {
  1171. Logger.Instance.Warn("当前人员未设置机构ID");
  1172. }
  1173. }
  1174. else if (userprop == 5)
  1175. {//卫计委人员
  1176. sql += " And 项目ID = :项目ID";
  1177. sqlbuilder.Parameters("项目ID", projectid);
  1178. }
  1179. sql += ")";
  1180. sql += @"select '未解决的BUG' as 类型, sum(1) as 数量 from tab where tab.问题性质 = 1
  1181. union
  1182. select '未完成的任务',sum(1) from tab where tab.问题性质 = 4
  1183. union
  1184. select '待完成的需求',sum(1) from tab where tab.问题性质 = 3
  1185. union
  1186. select '未回复的咨询',sum(1) from tab where tab.问题性质 = 2
  1187. union
  1188. select '指派给我的问题',sum(1) from tab where tab.指派人ID =:人员ID";
  1189. sqlbuilder.Parameters("人员ID", uid);
  1190. //返回查询的表结果
  1191. return sqlbuilder.SqlText(sql)
  1192. .Select();
  1193. }
  1194. public DataTable NotFinishProblemList(string uid, int userprop, string companyid, string projectid, string orgid, int Type, int page, int rows, out int total)
  1195. {
  1196. var sqlbuilder = this.SqlBuilder;
  1197. var sql = @" select
  1198. t.编号,t.问题性质,t.问题标题,t.登记日期,t.受理人,t.登记人,t.指派人,t.ID,
  1199. (select 名称 from 问题流程环节 where id = t.环节id ) as 当前环节,
  1200. (select 名称 from 渠道信息 where id = t.渠道id) as 渠道,
  1201. (select 名称 from 项目信息 where id = t.项目ID) as 项目,
  1202. (select 名称 from 站点信息 where id = t.机构id) as 机构,
  1203. (select 名称 from 产品系统配置 where id = t.产品id) as 产品,
  1204. (case t.是否解决 when 1 then (select ROUND(max(记录时间)-t.登记日期,2)*24 from 问题记录过程 c where t.Id =c.问题id )
  1205. when 0 then (select ROUND(sysdate - t.登记日期,2)*24 from dual)
  1206. end
  1207. ) as 总耗时
  1208. from 问题记录 t
  1209. where t.是否解决 = 0
  1210. and t.是否终止= 0
  1211. and t.是否删除 = 0
  1212. ";
  1213. if (userprop == 2)
  1214. {//人员性质2:渠道人员,查看当前渠道未解决的问题
  1215. sql += " And t.渠道ID = :渠道ID";
  1216. sqlbuilder.Parameters("渠道ID", companyid);
  1217. }
  1218. else if (userprop == 3)
  1219. {//客户人员:只看自己登记未解决的问题
  1220. sql += " And t.登记人 = :登记人ID";
  1221. sqlbuilder.Parameters("登记人ID", uid);
  1222. }
  1223. else if (userprop == 4)
  1224. {//医院管理员:查看自己机构问题
  1225. sql += " And t.机构ID = :机构ID";
  1226. if (!string.IsNullOrEmpty(orgid))
  1227. {
  1228. sqlbuilder.Parameters("机构ID", orgid);
  1229. }
  1230. else
  1231. {
  1232. Logger.Instance.Warn("当前人员未设置机构ID");
  1233. }
  1234. }
  1235. else if (userprop == 5)
  1236. {//卫计委人员
  1237. sql += " And t.项目ID = :项目ID ";
  1238. sqlbuilder.Parameters("项目ID", projectid);
  1239. }
  1240. if (Type != 5)
  1241. {
  1242. sql += " And t.问题性质 =:Type";
  1243. sqlbuilder.Parameters("Type", Type);
  1244. }
  1245. else
  1246. {
  1247. sql += $" And t.指派人ID ='{uid}'";
  1248. }
  1249. sql += " order by t.编号 desc";
  1250. //返回查询的表结果
  1251. return sqlbuilder.SqlText(sql).Paging(page, rows)
  1252. .Select(out total);
  1253. }
  1254. /// <summary>
  1255. /// 查询各渠道的问题总数
  1256. /// </summary>
  1257. /// <returns></returns>
  1258. public DataTable QueryCompanyProblemCount()
  1259. {
  1260. var sql = @"Select 名称, (Select Count(1) From 问题记录 Where 渠道id = t.Id And 问题性质 = 1 and 是否删除 = 0 and 是否解决 = 0 and 是否终止 = 0) As Bug,
  1261. (Select Count(1) From 问题记录 Where 渠道id = t.Id And 问题性质 = 2 and 是否删除 = 0 and 是否解决 = 0 and 是否终止 = 0) As 任务,
  1262. (Select Count(1) From 问题记录 Where 渠道id = t.Id And 问题性质 = 3 and 是否删除 = 0 and 是否解决 = 0 and 是否终止 = 0) As 需求,
  1263. (Select Count(1) From 问题记录 Where 渠道id = t.Id And 问题性质 = 4 and 是否删除 = 0 and 是否解决 = 0 and 是否终止 = 0) As 咨询
  1264. From 渠道信息 t
  1265. Where t.状态=1";
  1266. return this.SqlBuilder.SqlText(sql)
  1267. .Select();
  1268. }
  1269. public DataTable QueryOrgProblemCount(string companyid)
  1270. {
  1271. var sql = @"select 名称,
  1272. (select count(1) from 问题记录 where 机构id = t.id and 问题性质 = 1) as Bug,
  1273. (select count(1) from 问题记录 where 机构id = t.id and 问题性质 = 2) as 任务,
  1274. (select count(1) from 问题记录 where 机构id = t.id and 问题性质 = 3) as 需求,
  1275. (select count(1) from 问题记录 where 机构id = t.id and 问题性质 = 4) as 咨询
  1276. from 站点信息 t where id in(
  1277. select 机构ID from 问题记录
  1278. where 渠道id = :渠道ID
  1279. group by 机构ID)";
  1280. return this.SqlBuilder.Parameters("渠道ID", companyid)
  1281. .SqlText(sql)
  1282. .Select();
  1283. }
  1284. //根据机构ID,查询出该机构下人员提出的问题
  1285. public DataTable QueryOrgPersonProblemCount(string orgid)
  1286. {
  1287. var sql = @"select 姓名 as 名称,
  1288. (select count(1) from 问题记录 where 登记人ID = t.id and 问题性质 = 1) as Bug,
  1289. (select count(1) from 问题记录 where 登记人ID = t.id and 问题性质 = 2) as 任务,
  1290. (select count(1) from 问题记录 where 登记人ID = t.id and 问题性质 = 3) as 需求,
  1291. (select count(1) from 问题记录 where 登记人ID = t.id and 问题性质 = 4) as 咨询
  1292. from 人员信息 t where id in(
  1293. select 登记人ID from 问题记录
  1294. where 机构ID =:机构ID
  1295. group by 登记人ID) ";
  1296. return this.SqlBuilder.Parameters("机构ID", orgid)
  1297. .SqlText(sql)
  1298. .Select();
  1299. }
  1300. //查询与我相关的问题
  1301. public DataTable QueryMyProblemList(string userid)
  1302. {
  1303. var sql = @"Select * from (Select ID, 编号, 问题性质,
  1304. (Select 名称 From 问题流程环节 Where ID = t.环节id) As 当前环节,
  1305. 问题标题,
  1306. 登记人,
  1307. 问题描述,
  1308. 登记日期,
  1309. 指派时间
  1310. From 问题记录 t
  1311. Where (登记人id = :人员ID Or 指派人id = :人员ID or 受理人id =:人员ID) And t.是否删除 = 0 and t.是否解决=0 and t.是否终止=0
  1312. order by 编号 desc) where rownum <=5 ";
  1313. return this.SqlBuilder.SqlText(sql)
  1314. .Parameters("人员ID", userid)
  1315. .Select();
  1316. }
  1317. //查询常见问题
  1318. public DataTable QueryOftenProblemList()
  1319. {
  1320. var sql = @"select ID,编号,问题标题,版本号,登记日期,登记人,问题描述 from 问题记录 t where 常见问题= 1 and 是否删除=0 and rownum <=5";
  1321. return this.SqlBuilder.SqlText(sql)
  1322. .Select();
  1323. }
  1324. //查询出问题所停留的环节
  1325. public DataTable QueryAllProblemStopWorkFlow(int personProp, string companyid, string orgid, string userid)
  1326. {
  1327. var sql = @"Select 名称, (Select Count(1) From 问题记录 r
  1328. Where r.环节id = t.Id
  1329. And r.是否终止 = 0
  1330. And r.是否解决 = 0
  1331. And r.是否删除 = 0 ";
  1332. var sqlbuilder = this.SqlBuilder;
  1333. if (personProp == 2 || personProp == 5)
  1334. {//渠道(项目人员,卫计委显示该渠道下的问题数量)
  1335. sql += @" And r.渠道ID = :渠道ID ";
  1336. sqlbuilder.Parameters("渠道ID", companyid);
  1337. }
  1338. else if (personProp == 3)
  1339. {//客户显示自己提交的问题
  1340. sql += @" And r.登记人ID = :登记人ID ";
  1341. sqlbuilder.Parameters("登记人ID", userid);
  1342. }
  1343. else if (personProp == 4)
  1344. {//医院管理员
  1345. sql += @" And r.机构ID = :机构ID ";
  1346. sqlbuilder.Parameters("机构ID", orgid);
  1347. }
  1348. sql += @" ) As 数量
  1349. From 问题流程环节 t
  1350. Order By 序号";
  1351. return sqlbuilder.SqlText(sql).Select();
  1352. }
  1353. #endregion
  1354. #region 版本问题查询
  1355. public DataTable GetVersionProblem(string SearchText, string ProductId, string VersionId,string projectId, string AcceptedId, string sort, string order, int page, int rows, out int total)
  1356. {
  1357. var sql = @"select a.编号,a.问题性质,a.问题标题,a.ID,a.问题描述,s.ID as 产品问题版本ID,s.是否紧急,s.紧急补丁时间,
  1358. (select decode(性质,1,'中联本部',2,'中联渠道',3,'客户',4,'医院管理员',5,'卫计委') from 人员信息 where ID=a.登记人ID ) as 性质,
  1359. (select 版本号 from 产品版本配置 where ID=s.版本ID) as 版本,
  1360. (select 名称 from 产品系统配置 where id = s.产品id) as 产品,
  1361. (select 名称 from 产品模块功能 where id = a.模块id) as 模块,
  1362. s.说明,a.登记人,a.登记日期,a.受理人,
  1363. decode(a.解决版本状态,1,'登记',2,'修改',3,'测试',4,'待发布',5,'终止') 解决版本状态,
  1364. (select 名称 from 渠道信息 where id = a.渠道id) as 渠道,
  1365. (select 名称 from 项目信息 where id = a.项目ID) as 项目,
  1366. (select 名称 from 站点信息 where id = a.机构id) as 机构
  1367. from 问题记录 a,产品问题版本 s
  1368. where a.ID = s.问题ID ";
  1369. var sqlbuilder = this.SqlBuilder;
  1370. if (!string.IsNullOrEmpty(ProductId))
  1371. {
  1372. sql += " and s.产品ID in (Select Column_Value From Table(f_Split_String(:ProductId, ','))) ";
  1373. sqlbuilder.Parameters("ProductId", ProductId);
  1374. }
  1375. if (!string.IsNullOrEmpty(AcceptedId))//受理人id
  1376. {
  1377. sql += " and a.受理人ID= :AcceptedId ";
  1378. sqlbuilder.Parameters("AcceptedId", AcceptedId);
  1379. }
  1380. if (!string.IsNullOrEmpty(VersionId))
  1381. {
  1382. sql += " and s.版本ID=:VersionId ";
  1383. sqlbuilder.Parameters("VersionId", VersionId);
  1384. }
  1385. if (!string.IsNullOrEmpty(SearchText))
  1386. {
  1387. sql += " and (a.问题标题 like '%'||:查询关键字||'%' or a.编号 like '%'||:查询关键字||'%' ) ";
  1388. sqlbuilder.Parameters("查询关键字", SearchText);
  1389. }
  1390. if (!string.IsNullOrEmpty(projectId))
  1391. {//项目ID
  1392. sql += " And a.项目ID =:项目ID";
  1393. sqlbuilder.Parameters("项目ID", projectId);
  1394. }
  1395. var orders = sort + order;
  1396. var orderBy = " order by a.编号 desc";
  1397. switch (orders)
  1398. {
  1399. case "编号asc":
  1400. orderBy = " order by a.编号 asc";
  1401. break;
  1402. case "编号desc":
  1403. orderBy = " order by a.编号 desc";
  1404. break;
  1405. case "受理人asc":
  1406. orderBy = " order by a.受理人 asc";
  1407. break;
  1408. case "受理人desc":
  1409. orderBy = " order by a.受理人 desc";
  1410. break;
  1411. case "解决版本状态asc":
  1412. orderBy = " order by a.解决版本状态 asc";
  1413. break;
  1414. case "解决版本状态desc":
  1415. orderBy = " order by a.解决版本状态 desc";
  1416. break;
  1417. case "登记日期asc":
  1418. orderBy = " order by a.登记日期 asc";
  1419. break;
  1420. case "登记日期desc":
  1421. orderBy = " order by a.登记日期 desc";
  1422. break;
  1423. case "项目asc":
  1424. orderBy = " order by a.项目ID asc";
  1425. break;
  1426. case "项目desc":
  1427. orderBy = " order by a.项目ID desc";
  1428. break;
  1429. }
  1430. sql += orderBy;
  1431. return sqlbuilder.SqlText(sql).Paging(page, rows)
  1432. .Select(out total);
  1433. }
  1434. /// <summary>
  1435. /// 添加备注
  1436. /// </summary>
  1437. /// <param name="model"></param>
  1438. /// <returns></returns>
  1439. public string AddNotes(SubmitProblemFormModel model)
  1440. {
  1441. try
  1442. {
  1443. var ProcessId = String.Empty;
  1444. //var t = UpdateBuilder.Update("问题记录").Where("ID", model.ProblemId).Column("解决版本状态", model.解决版本状态) .Execute();
  1445. var dt = this.SqlBuilder.SqlText("select ID,当前流程ID,来源流程ID from 问题记录过程 where 问题ID=:id and 状态=1")
  1446. .Parameters("id", model.ProblemId).Select();
  1447. var CurrenProcessId = dt.Rows[0].GetValueByName<int>("当前流程ID");
  1448. InsertBuilder.Insert("问题记录过程").Column("ID", Guid.NewGuid().ToString())
  1449. .Column("问题ID", model.ProblemId)
  1450. .Column("记录人ID", model.registrantID)
  1451. .Column("记录时间", this.DataBaseBuilder.GetDateTime)
  1452. .Column("当前流程ID", CurrenProcessId)
  1453. .Column("状态", model.Status)
  1454. .Column("来源流程ID", CurrenProcessId)
  1455. .Column("描述", model.DealDetail)
  1456. .Execute();
  1457. ProcessId = dt.Rows[0].GetValueByName<string>("ID");
  1458. return ProcessId;
  1459. }
  1460. catch (Exception ex)
  1461. {
  1462. Logger.Instance.Error("添加备注失败失败" + ex);
  1463. return "";
  1464. }
  1465. }
  1466. #endregion
  1467. }
  1468. }