CPWTJLService.cs 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122
  1. using QWPlatform.IService;
  2. using QWPlatform.SystemLibrary;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using PMS.EntityModels.Product;
  9. using PMS.BusinessModels.Problem;
  10. using PMS.BusinessModels.Account;
  11. using System.Text.RegularExpressions;
  12. using System.Data.Common;
  13. using QWPlatform.DataIntface;
  14. using PMS.EntityModels.WorkFlow;
  15. using QWPlatform.SystemLibrary.LogManager;
  16. using System.Net.Http.Headers;
  17. using System.Net.Http;
  18. using PMS.Plugins.Common;
  19. using System.ComponentModel.Design;
  20. namespace PMS.DBService.Product
  21. {
  22. /// <summary>
  23. /// 创建者:冉利
  24. /// 创建日期:2019/1/04
  25. /// 功能描述:问题记录
  26. /// </summary>
  27. public class CPWTJLService : DataServiceBase
  28. {
  29. //实例化数据库
  30. public DataServiceBase dataservice = new DataServiceBase();
  31. #region 自定义查询,问题记录绑定,及combobox取值
  32. /// <summary>
  33. /// 自定义查询方案查询
  34. /// </summary>
  35. /// <param name="model"></param>
  36. /// <param name="startNumbers"></param>
  37. /// <param name="endnumbers"></param>
  38. /// <returns></returns>
  39. public DataTable ProjectZdyCxInfoSqlBulder(CPWTJLModel model, int page, int rows, out int total)
  40. {
  41. string sql = @"select z.编号,
  42. z.标题,
  43. z.id,
  44. z.问题描述,
  45. (select 显示名
  46. from 基础编码
  47. where 分类ID =
  48. 'AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73'
  49. and 代码 = z.性质) 性质,
  50. (select 名称
  51. from 产品系统配置
  52. where ID = z.产品ID) 产品,
  53. z.版本号 版本,
  54. (select 显示名
  55. from 基础编码
  56. where 分类ID =
  57. 'A10D6027-DEDD-4B6D-9549-33830DE52AEA'
  58. and 代码 = z.紧急程度) 优先级,
  59. (select 名称 from 项目信息 where ID = z.项目ID) 项目,
  60. (select 名称 from 站点信息 where ID = z.机构ID) 机构,
  61. z.登记人 反馈人,
  62. decode((select 确认类型 from 产品问题过程 x
  63. where x.问题id = z.ID
  64. and x.记录时间 = (select max(记录时间) from 产品问题过程 b where b.问题id =x.问题id)
  65. ) ,1,'机构确认',2,'卫计委确认',3,'项目人员确认',4,'技术支持确认',5,'研发人员确认','未确认' ) as 确认类型,
  66. (select 显示名
  67. from 基础编码
  68. where 分类ID =
  69. 'CEDA4B34-83F3-4E76-A38D-AC40EDF01D6D'
  70. and 代码 = z.当前环节) 问题环节,
  71. decode(z.是否终止,1,'正常',2,'终止',3,'回退')||','||decode(z.是否解决,1,'未解决',2,'已解决')是否解决 from 问题记录 z where 产品问题=1 &wheresql";
  72. // and 是否终止 = 1 and 是否解决 = 1
  73. string replacestr = string.Empty;
  74. if (!String.IsNullOrEmpty(model.XMID))
  75. {
  76. replacestr += " and 项目id= '" + model.XMID + "' ";
  77. }
  78. if (!String.IsNullOrEmpty(model.QDID))
  79. {
  80. replacestr += " and 渠道id= '" + model.QDID + "' ";
  81. }
  82. if (!String.IsNullOrEmpty(model.CPID))
  83. {
  84. replacestr += " and 产品id= '" + model.CPID + "' ";
  85. }
  86. if (!String.IsNullOrEmpty(model.JGID))
  87. {
  88. replacestr += " and 机构id= '" + model.JGID + "' ";
  89. }
  90. if (!String.IsNullOrEmpty(model.DJRID))
  91. {
  92. replacestr += " and 登记人id= '" + model.DJRID + "' ";
  93. }
  94. if (!String.IsNullOrEmpty(model.XZ))
  95. {
  96. replacestr += " and 性质= '" + model.XZ + "' ";
  97. }
  98. if (!String.IsNullOrEmpty(model.JJCD))
  99. {
  100. replacestr += " and 紧急程度= '" + model.JJCD + "' ";
  101. }
  102. if (!String.IsNullOrEmpty(model.DQHJ))
  103. {
  104. replacestr += " and 当前环节= '" + model.DQHJ + "' ";
  105. }
  106. if (!String.IsNullOrEmpty(model.GJZ))
  107. {
  108. replacestr += " and 关键字= '" + model.GJZ + "' ";
  109. }
  110. replacestr += " order by 编号 asc";
  111. if (String.IsNullOrEmpty(replacestr))
  112. {
  113. sql = sql.Replace("&wheresql", "");
  114. }
  115. else
  116. {
  117. sql = sql.Replace("&wheresql", replacestr);
  118. }
  119. return this.SqlBuilder.SqlText(sql)
  120. .Paging(page, rows)
  121. .Select(out total);
  122. }
  123. /// <summary>
  124. /// 问题确认
  125. /// </summary>
  126. /// <param name="id"></param>
  127. /// <returns></returns>
  128. public string WtQr(string id, string JlrID, DateTime Jlsj, int Qrlx)
  129. {
  130. var dt = this.ProcedureBuilder.Procedure("B_问题记录.P_确认问题_insert")
  131. .Paramter("问题ID_in", id)
  132. .Paramter("记录人ID_in", JlrID)
  133. .Paramter("记录时间_in", Jlsj)
  134. .Paramter("确认类型_in", Qrlx)
  135. .ParamterOut("Result_out", DbType.String, 4000);
  136. dt.Execute();
  137. return dt.ParameterValue<string>("Result_out");
  138. }
  139. /// <summary>
  140. /// 查看问题
  141. /// </summary>
  142. /// <param name="id"></param>
  143. /// <returns></returns>
  144. public DataTable Wtdetail(string id)
  145. {
  146. var dt = @"select (select 名称 from 渠道信息 where id=t.渠道id)渠道,
  147. (select 名称 from 项目信息 where id = t.项目id)项目,
  148. (select 名称 from 站点信息 where id = t.机构id)机构,
  149. (select 名称 from 产品系统配置 where id = t.产品id)产品,
  150. (select 显示名 from 基础编码 where 分类id = 'A10D6027-DEDD-4B6D-9549-33830DE52AEA' and 代码 = t.紧急程度)紧急程度,
  151. decode(t.产品问题, 1, '项目问题', 2, '项目问题')问题类型,t.是否解决,t.机构内处理,
  152. t.研发协助,t.卫计委处理,t.项目处理,t.预计方案,t.修改说明,t.问题描述,/*t.附件,*/
  153. t.要求时间,t.版本号,t.登记人,t.登记日期,
  154. (select 显示名 from 基础编码 where 分类id = '2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB'and 代码 = t.来源)来源
  155. from 问题记录 t where t.id=:id ";
  156. return this.SqlBuilder.SqlText(dt).Parameters("id", id).Select();
  157. }
  158. /// <summary>
  159. /// 查询当前问题是否被确认
  160. /// </summary>
  161. /// <param name="id"></param>
  162. /// <returns></returns>
  163. public string WtsfQr(string id)
  164. {
  165. string sql = "select 当前环节 from 问题记录 where ID=:id";
  166. return this.SqlBuilder.SqlText(sql).Parameters("id", id)
  167. .Select<string>();
  168. }
  169. /// <summary>
  170. /// 判断问题是否被终止或者解决
  171. /// </summary>
  172. /// <param name="id"></param>
  173. /// <returns></returns>
  174. public string SfZz(string id)
  175. {
  176. string sql = "select 是否终止 from 问题记录 where ID=:id";
  177. return this.SqlBuilder.SqlText(sql).Parameters("id", id)
  178. .Select<string>();
  179. }
  180. /// <summary>
  181. /// 客户问题查询
  182. /// </summary>
  183. /// <param name="DJRID"></param>
  184. /// <param name="page"></param>
  185. /// <param name="rows"></param>
  186. /// <param name="total"></param>
  187. /// <returns></returns>
  188. public DataTable ProjectZdyCxInfoKh(string DJRID, int page, int rows, out int total)
  189. {
  190. string sql = @"select z.编号,
  191. z.标题,
  192. z.id,
  193. z.问题描述,
  194. (select 显示名
  195. from 基础编码
  196. where 分类ID =
  197. 'AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73'
  198. and 代码 = z.性质) 性质,
  199. (select 名称
  200. from 产品系统配置
  201. where ID = z.产品ID) 产品,
  202. z.版本号 版本,
  203. (select 显示名
  204. from 基础编码
  205. where 分类ID =
  206. 'A10D6027-DEDD-4B6D-9549-33830DE52AEA'
  207. and 代码 = z.紧急程度) 优先级,
  208. (select 名称 from 项目信息 where ID = z.项目ID) 项目,
  209. (select 名称 from 站点信息 where ID = z.机构ID) 机构,
  210. z.登记人 反馈人,
  211. decode((select 确认类型 from 产品问题过程 x
  212. where x.问题id = z.ID
  213. and x.记录时间 = (select max(记录时间) from 产品问题过程 b where b.问题id =x.问题id)
  214. ) ,1,'机构确认',2,'卫计委确认',3,'项目人员确认',4,'技术支持确认',5,'研发人员确认','未确认' ) as 确认类型,
  215. (select 显示名
  216. from 基础编码
  217. where 分类ID =
  218. 'CEDA4B34-83F3-4E76-A38D-AC40EDF01D6D'
  219. and 代码 = z.当前环节) 问题环节,
  220. decode(z.是否终止,1,'正常',2,'终止',3,'回退')||','||decode(z.是否解决,1,'未解决',2,'已解决')是否解决 from 问题记录 z where 产品问题=1 &wheresql";
  221. // and 是否终止=1 and 是否解决=1
  222. string replacestr = string.Empty;
  223. if (!String.IsNullOrEmpty(DJRID))
  224. {
  225. replacestr += " and 登记人ID='" + DJRID + "'";
  226. }
  227. replacestr += " order by 编号 asc";
  228. if (String.IsNullOrEmpty(replacestr))
  229. {
  230. sql = sql.Replace("&wheresql", "");
  231. }
  232. else
  233. {
  234. sql = sql.Replace("&wheresql", replacestr);
  235. }
  236. return this.SqlBuilder.SqlText(sql)
  237. .Paging(page, rows)
  238. .Select(out total);
  239. }
  240. /// <summary>
  241. /// 迭代信息
  242. /// </summary>
  243. /// <returns></returns>
  244. public DataTable GetLterationList()
  245. {
  246. return SelectBuilder.From("问题迭代信息").Columns("ID,名称||'['||简码||']' as 名称").Where("状态 !=4").Select();
  247. }
  248. /// <summary>
  249. /// 医院管理员处理问题时,判读是否给卫计委审核
  250. /// </summary>
  251. /// <param name="personID"></param>
  252. /// <returns></returns>
  253. public DataTable SfSh(string personID)
  254. {
  255. string sql = "select 机构内处理 from 问题记录 where 登记人ID =:登记人ID";
  256. return this.SqlBuilder.SqlText(sql).Parameters("登记人ID", personID)
  257. .Select();
  258. }
  259. /// <summary>
  260. /// 4医院管理员 自己机构(站点信息)的数据
  261. /// </summary>
  262. /// <param name="model"></param>
  263. /// <param name="page"></param>
  264. /// <param name="rows"></param>
  265. public DataTable ProjectZdyCxZd(string DJRID, int page, int rows, out int total)
  266. {
  267. string sql = @"select z.编号,
  268. z.标题,
  269. z.id,
  270. z.问题描述,
  271. (select 显示名
  272. from 基础编码
  273. where 分类ID =
  274. 'AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73'
  275. and 代码 = z.性质) 性质,
  276. (select 名称
  277. from 产品系统配置
  278. where ID = z.产品ID) 产品,
  279. z.版本号 版本,
  280. (select 显示名
  281. from 基础编码
  282. where 分类ID =
  283. 'A10D6027-DEDD-4B6D-9549-33830DE52AEA'
  284. and 代码 = z.紧急程度) 优先级,
  285. (select 名称 from 项目信息 where ID = z.项目ID) 项目,
  286. (select 名称 from 站点信息 where ID = z.机构ID) 机构,
  287. z.登记人 反馈人,
  288. decode((select 确认类型 from 产品问题过程 x
  289. where x.问题id = z.ID
  290. and x.记录时间 = (select max(记录时间) from 产品问题过程 b where b.问题id =x.问题id)
  291. ) ,1,'机构确认',2,'卫计委确认',3,'项目人员确认',4,'技术支持确认',5,'研发人员确认','未确认' ) as 确认类型,
  292. (select 显示名
  293. from 基础编码
  294. where 分类ID =
  295. 'CEDA4B34-83F3-4E76-A38D-AC40EDF01D6D'
  296. and 代码 = z.当前环节) 问题环节,
  297. decode(z.是否终止,1,'正常',2,'终止',3,'回退')||','||decode(z.是否解决,1,'未解决',2,'已解决')是否解决 from 问题记录 z where 产品问题=1 &wheresql";
  298. // and 是否终止=1 and 是否解决=1
  299. string replacestr = string.Empty;
  300. if (!String.IsNullOrEmpty(DJRID))
  301. {
  302. replacestr += " and 机构ID=( select ID from 站点信息 where ID=(select 站点ID from 人员信息 t where ID='" + DJRID + "'))";
  303. }
  304. if (String.IsNullOrEmpty(replacestr))
  305. {
  306. sql = sql.Replace("&wheresql", "");
  307. }
  308. else
  309. {
  310. sql = sql.Replace("&wheresql", replacestr);
  311. }
  312. return this.SqlBuilder.SqlText(sql)
  313. .Paging(page, rows)
  314. .Select(out total);
  315. }
  316. /// <summary>
  317. /// 卫计委,本部,渠道人员根据渠道id查询数据权限
  318. /// </summary>
  319. /// <param name="model"></param>
  320. /// <param name="channel"></param>
  321. /// <param name="page"></param>
  322. /// <param name="rows"></param>
  323. public DataTable ProjectZdyCxInfoQKW(string channel, int page, int rows, out int total)
  324. {
  325. string sql = @"select z.编号,
  326. z.标题,
  327. z.id,
  328. z.问题描述,
  329. (select 显示名
  330. from 基础编码
  331. where 分类ID =
  332. 'AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73'
  333. and 代码 = z.性质) 性质,
  334. (select 名称
  335. from 产品系统配置
  336. where ID = z.产品ID) 产品,
  337. z.版本号 版本,
  338. (select 显示名
  339. from 基础编码
  340. where 分类ID =
  341. 'A10D6027-DEDD-4B6D-9549-33830DE52AEA'
  342. and 代码 = z.紧急程度) 优先级,
  343. (select 名称 from 项目信息 where ID = z.项目ID) 项目,
  344. (select 名称 from 站点信息 where ID = z.机构ID) 机构,
  345. z.登记人 反馈人,
  346. decode((select 确认类型 from 产品问题过程 x
  347. where x.问题id = z.ID
  348. and x.记录时间 = (select max(记录时间) from 产品问题过程 b where b.问题id =x.问题id)
  349. ) ,1,'机构确认',2,'卫计委确认',3,'项目人员确认',4,'技术支持确认',5,'研发人员确认','未确认' ) as 确认类型,
  350. (select 显示名
  351. from 基础编码
  352. where 分类ID =
  353. 'CEDA4B34-83F3-4E76-A38D-AC40EDF01D6D'
  354. and 代码 = z.当前环节) 问题环节,
  355. decode(z.是否终止,1,'正常',2,'终止',3,'回退')||','||decode(z.是否解决,1,'未解决',2,'已解决')是否解决 from 问题记录 z where 产品问题=1 &wheresql";
  356. string replacestr = string.Empty;
  357. // and 是否终止=1 and 是否解决=1
  358. if (!String.IsNullOrEmpty(channel))
  359. {
  360. replacestr += " and 渠道ID in (select * from table(f_split_string('" + channel + "',','))) ";
  361. // and 渠道ID in (select * from table(f_split_string('4A9B2065-65AB-4411-B528-968D26737EAE',',')))
  362. }
  363. if (String.IsNullOrEmpty(replacestr))
  364. {
  365. sql = sql.Replace("&wheresql", "");
  366. }
  367. else
  368. {
  369. sql = sql.Replace("&wheresql", replacestr);
  370. }
  371. return this.SqlBuilder.SqlText(sql)
  372. .Paging(page, rows)
  373. .Select(out total);
  374. }
  375. public string GetCPID(string id)
  376. {
  377. return SelectBuilder.From("问题记录").Columns("产品ID").Where("ID", id).Select().Rows[0]["产品ID"].ToString();
  378. }
  379. /// <summary>
  380. /// 获取基础编码
  381. /// </summary>
  382. /// <param name="type"></param>
  383. /// <returns></returns>
  384. public DataTable GetBaseCode(string type)
  385. {
  386. return SelectBuilder.From("基础编码").Where("分类id", type).Columns("*").Select();
  387. }
  388. /// <summary>
  389. /// 根据编号获取问题ID
  390. /// </summary>
  391. /// <param name="id"></param>
  392. /// <returns></returns>
  393. public string GetProblemID(object id)
  394. {
  395. return SelectBuilder.From("问题记录").Where("编号", id).Columns("ID").Select().Rows[0]["ID"].ToString();
  396. }
  397. /// <summary>
  398. /// 删除附件
  399. /// </summary>
  400. /// <param name="id"></param>
  401. /// <returns></returns>
  402. public int Delete_Img(string id)
  403. {
  404. return DeleteBulider.Delete("产品问题附件").Where("附件ID", id).Execute();
  405. }
  406. /// <summary>
  407. /// 快速查询
  408. /// </summary>
  409. /// <param name="ksCx"></param>
  410. /// <param name="StartNumbers"></param>
  411. /// <param name="Endnumbers"></param>
  412. /// <param name="total"></param>
  413. /// <returns></returns>
  414. public DataTable KsSelect(string ksCx, int StartNumbers, int Endnumbers, out int total)
  415. {
  416. string sql = @"select z.编号,
  417. z.标题,
  418. z.id,
  419. z.问题描述,
  420. (select 显示名
  421. from 基础编码
  422. where 分类ID =
  423. 'AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73'
  424. and 代码 = z.性质) 性质,
  425. (select 名称
  426. from 产品系统配置
  427. where ID = z.产品ID) 产品,
  428. z.版本号 版本,
  429. (select 显示名
  430. from 基础编码
  431. where 分类ID =
  432. 'A10D6027-DEDD-4B6D-9549-33830DE52AEA'
  433. and 代码 = z.紧急程度) 优先级,
  434. (select 名称 from 项目信息 where ID = z.项目ID) 项目,
  435. (select 名称 from 站点信息 where ID = z.机构ID) 机构,
  436. z.登记人 反馈人,
  437. decode((select 确认类型 from 产品问题过程 x
  438. where x.问题id = z.ID
  439. and x.记录时间 = (select max(记录时间) from 产品问题过程 b where b.问题id =x.问题id)
  440. ) ,1,'机构确认',2,'卫计委确认',3,'项目人员确认',4,'技术支持确认',5,'研发人员确认','未确认' ) as 确认类型,
  441. (select 显示名
  442. from 基础编码
  443. where 分类ID =
  444. 'CEDA4B34-83F3-4E76-A38D-AC40EDF01D6D'
  445. and 代码 = z.当前环节) 问题环节,
  446. decode(z.是否终止,1,'正常',2,'终止',3,'回退')||','||decode(z.是否解决,1,'未解决',2,'已解决')是否解决 from 问题记录 z where 产品问题=1 and &wheresql";
  447. string replacestr = string.Empty;
  448. bool flag = Regex.IsMatch(ksCx, @"\b\d\w*");
  449. if (flag == true)
  450. {
  451. replacestr += " 编号= '" + ksCx + "' ";
  452. }
  453. else
  454. {
  455. replacestr += " 标题= '" + ksCx + "' ";
  456. }
  457. if (String.IsNullOrEmpty(replacestr))
  458. {
  459. sql = sql.Replace("&wheresql", "");
  460. }
  461. else
  462. {
  463. sql = sql.Replace("&wheresql", replacestr);
  464. }
  465. return this.SqlBuilder.SqlText(sql)
  466. .Paging(StartNumbers, Endnumbers)
  467. .Select(out total);
  468. }
  469. public string DoBHGet(string path, string uname, string pwd)
  470. {
  471. using (HttpClient client = new HttpClient())
  472. {
  473. //client.BaseAddress = new Uri(bhuri);
  474. var authenticationHeaderValue = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(uname + ":" + pwd)));
  475. client.DefaultRequestHeaders.Authorization = authenticationHeaderValue;
  476. var response = client.GetAsync(path).Result;
  477. var responseContent = response.Content.ReadAsStringAsync().Result;
  478. if (!response.IsSuccessStatusCode)
  479. {
  480. //throw new Exception($"调用外部接口异常: 发送get请求失败,请检查配置的ip地址是否正确");
  481. Logger.Instance.Warn($"调用BH接口异常 path:{path} uname:{uname} pwd:{pwd}");
  482. throw new Exception($"调用BH接口异常");
  483. }
  484. return responseContent;
  485. }
  486. }
  487. public DataTable GetProjectProducct(object id)
  488. {
  489. return base.SelectBuilder.From("项目产品模块").Columns("*").Where("ID", id).Select();
  490. }
  491. /// <summary>
  492. /// 获取项目产品
  493. /// </summary>
  494. /// <param name="xmID"></param>
  495. /// <returns></returns>
  496. public object XmCp(string xmID)
  497. {
  498. string sql = "select ID, 名称 产品名称 from 产品系统配置 where ID in (select 产品ID from 项目产品模块 where 项目ID =:项目ID)";
  499. return this.SqlBuilder.SqlText(sql).Parameters("项目ID", xmID).Select();
  500. }
  501. /// <summary>
  502. /// 获取项目机构信息
  503. /// </summary>
  504. /// <param name="jgID"></param>
  505. /// <returns></returns>
  506. public DataTable XmJgs(string jgID)
  507. {
  508. string sql = "select ID,名称 机构名称 from 站点信息 where 项目ID=:项目ID";
  509. return this.SqlBuilder.SqlText(sql).Parameters("项目ID", jgID).Select();
  510. }
  511. /// <summary>
  512. /// 获取渠道项目
  513. /// </summary>
  514. /// <param name="qdID"></param>
  515. /// <returns></returns>
  516. public DataTable QdXm(string qdID)
  517. {
  518. string sql = "select ID,名称 from 项目信息 where 渠道ID=:渠道ID and 启用=1";
  519. return this.SqlBuilder.SqlText(sql).Parameters("渠道ID", qdID)
  520. .Select();
  521. }
  522. /// <summary>
  523. /// 获取渠道信息
  524. /// </summary>
  525. /// <param name="channel"></param>
  526. /// <returns></returns>
  527. public DataTable GETQDinfo(string channel)
  528. {
  529. var dt = this.ProcedureBuilder.Procedure("B_问题记录.P_授权渠道信息Select")
  530. .Paramter("渠道列表_in", channel)
  531. .ParamterOut("Resultlist", true);
  532. dt.Execute();
  533. return dt.ParameterValue<DataTable>("Resultlist");
  534. }
  535. /// <summary>
  536. /// 获取项目信息
  537. /// </summary>
  538. /// <param name="channel"></param>
  539. /// <returns></returns>
  540. public DataTable GETXMinfo(string channel)
  541. {
  542. var dt = this.ProcedureBuilder.Procedure("B_问题记录.P_授权项目信息Select")
  543. .Paramter("渠道列表_in", channel)
  544. .ParamterOut("Resultlist", true);
  545. dt.Execute();
  546. return dt.ParameterValue<DataTable>("Resultlist");
  547. }
  548. //根据项目iD和产品iD加载产品
  549. public DataTable GetCpwtjlByID(string xmid, string cpid)
  550. {
  551. return SelectBuilder.From("项目产品模块").Columns("*").Where("产品ID", cpid).Where("项目ID", xmid).Select();
  552. }
  553. /// <summary>
  554. /// 获取机构信息
  555. /// </summary>
  556. /// <returns></returns>
  557. public DataTable GETJGinfo(string project)
  558. {
  559. var dt = this.ProcedureBuilder.Procedure("B_问题记录.P_授权机构Select")
  560. .Paramter("项目列表_in", project)
  561. .ParamterOut("Resultlist", true);
  562. dt.Execute();
  563. return dt.ParameterValue<DataTable>("Resultlist");
  564. }
  565. /// <summary>
  566. /// 获取问题登记时的过程ID
  567. /// </summary>
  568. /// <param name="problemid"></param>
  569. /// <returns></returns>
  570. public string GetNewProcessID(string problemid)
  571. {
  572. return SelectBuilder.From("问题记录过程").Columns("ID").Where("问题ID", problemid).Where("状态", 1).Select().Rows[0]["ID"].ToString();
  573. }
  574. /// <summary>
  575. /// 获取产品信息
  576. /// </summary>
  577. /// <returns></returns>
  578. public DataTable GETCPinfo(string project)
  579. {
  580. var dt = this.ProcedureBuilder.Procedure("B_问题记录.P_授权产品Select")
  581. .Paramter("项目列表_in", project)
  582. .ParamterOut("Resultlist", true);
  583. dt.Execute();
  584. return dt.ParameterValue<DataTable>("Resultlist");
  585. }
  586. /// <summary>
  587. /// 获取性质信息
  588. /// </summary>
  589. /// <returns></returns>
  590. public DataTable GETXZinfo()
  591. {
  592. string sql = "select 代码 id, 显示名 问题性质 from 基础编码 where 分类ID = 'AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73'";
  593. var dt = this.SqlBuilder.SqlText(sql).Select();
  594. return dt;
  595. }
  596. /// <summary>
  597. /// 获取紧急程度信息
  598. /// </summary>
  599. /// <returns></returns>
  600. public DataTable GETJJCDinfo()
  601. {
  602. string sql = "select 代码 id,显示名 紧急程度 from 基础编码 where 分类ID = 'A10D6027-DEDD-4B6D-9549-33830DE52AEA'";
  603. var dt = this.SqlBuilder.SqlText(sql).Select();
  604. return dt;
  605. }
  606. /// <summary>
  607. ///获取问题流程信息
  608. /// </summary>
  609. /// <returns></returns>
  610. public DataTable GEDQHJinfo(int PersonProperty)
  611. {
  612. return null;
  613. }
  614. /// <summary>
  615. /// 获取关键字
  616. /// </summary>
  617. /// <returns></returns>
  618. public DataTable GEDGJZinfo(string channel)
  619. {
  620. var dt = this.ProcedureBuilder.Procedure("B_问题记录.P_关键字Select")
  621. .Paramter("项目列表_in", channel)
  622. .ParamterOut("Resultlist", true);
  623. dt.Execute();
  624. return dt.ParameterValue<DataTable>("Resultlist");
  625. }
  626. public DataTable SfShWjW(string personID)
  627. {
  628. string sql = "select 卫计委处理 from 问题记录 where 登记人ID =:登记人ID";
  629. return this.SqlBuilder.SqlText(sql).Parameters("登记人ID", personID)
  630. .Select();
  631. }
  632. #endregion
  633. #region 公共方法
  634. public string GetId(string tableName)
  635. {
  636. return SqlBuilder.SqlText("select ZLCHS.f_Next_Id(':Name') as ID from dual").Parameters("Name", tableName).Select().Rows[0]["ID"].ToString();
  637. }
  638. #endregion
  639. #region 信息查询
  640. /// <summary>
  641. /// 获取数据库时间
  642. /// </summary>
  643. /// <returns></returns>
  644. public DateTime GetDatabaseTime()
  645. {
  646. return DataBaseBuilder.GetDateTime;
  647. }
  648. //获取研发人员
  649. public DataTable GetAssignPerson()
  650. {
  651. return SqlBuilder.SqlText("select ID,姓名 from 人员信息 where (职务=11 or 职务=10) and 是否删除=0").Select();
  652. }
  653. //获取当前用户所在环节Id
  654. public int GetUserLinkId(int PersonProperty, string JobCode)
  655. {
  656. var SelectBuilder = this.SqlBuilder;
  657. var sqlText = @"Select t.ID from 问题流程环节 t where t.人员性质=:人员性质";
  658. SelectBuilder.Parameters("人员性质", PersonProperty);
  659. ///如果为本部人员
  660. if (PersonProperty == 1)
  661. {
  662. sqlText += @" and Exists
  663. (select column_value from table(Select f_Split_String(x.职务代码1, ',') from 问题流程环节 x
  664. where id = t.Id)
  665. where Column_Value =:职务) ";
  666. SelectBuilder.Parameters("职务", Convert.ToInt32(JobCode));
  667. }
  668. SelectBuilder.SqlText(sqlText);
  669. return SelectBuilder.Select<int>();
  670. }
  671. //获取所有模块
  672. public DataTable GetAllModual()
  673. {
  674. return SelectBuilder.From("产品模块功能").Columns("ID").Columns("名称").Select();
  675. }
  676. //获取所有反馈人
  677. public DataTable GetFKR(string text,string CompanyID)
  678. {
  679. string sql = "select ID,z.姓名||'['||z.简码||']' as 姓名, '远程数据' as 是否缓存 FROM 人员信息 z where 是否删除=0 and z.状态=1 and z.渠道id='" + CompanyID+"'";
  680. DataTable dt = SqlBuilder.SqlText(sql).Select();
  681. if (!string.IsNullOrWhiteSpace(text))
  682. {
  683. var arry = text.Split(',');
  684. var sql2 = $@"Select *
  685. From ((Select ID, z.姓名 || '[' || z.简码 || ']' As 姓名, '远程数据' As 是否缓存 From 人员信息 z Where 是否删除 = 0 and z.状态=1) Union
  686. (Select ID, z.姓名 || '[' || z.简码 || ']' As 姓名, '缓存数据' As 是否缓存
  687. From 人员信息 z
  688. Where 是否删除 = 0 and z.状态=1 And ID In ({text.Substring(0, text.Length - 1)})) order by 是否缓存)";
  689. return SqlBuilder.SqlText(sql2).Select();
  690. }
  691. return dt;
  692. }
  693. //获取用户信息
  694. public DataTable GetUserInfo(UserInfo user)
  695. {
  696. return SelectBuilder.From("用户信息").Columns("*").Where("ID", user.PersonID).Select();
  697. }
  698. //根据流程ID获取问题工作流程信息
  699. public DataTable SelectJboFlowInfo(string id)
  700. {
  701. return SelectBuilder.From("问题工作流程").Columns("来源ID").Columns("环节ID").Columns("目标ID").Columns("目录ID").Where("ID", id).Select();
  702. }
  703. //获取问题来源(用户机构卫计委)
  704. public DataTable GetProblemSource(int personProperty, string code)
  705. {
  706. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("代码", code).Where("分类ID", "2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB").Where("启用", 1).Select();
  707. }
  708. //获取问题来源(中联本部)
  709. public DataTable GetProblemSource(int personProperty)
  710. {
  711. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("分类ID", "2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB").Where("启用", 1).Select();
  712. }
  713. //问题性质(用户机构卫计委)
  714. public DataTable GetProblemNature(int personProperty, string code)
  715. {
  716. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("代码", code).Where("分类ID", "AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73").Where("启用", 1).Select();
  717. }
  718. //问题性质(中联本部)
  719. public DataTable GetProblemNature(int personProperty)
  720. {
  721. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("分类ID", "AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73").Where("启用", 1).Select();
  722. }
  723. //根据性质ID返回性质代码
  724. public DataTable SelectNature(string wTXZ)
  725. {
  726. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("ID", wTXZ).Where("启用", 1).Select();
  727. }
  728. //根据项目获取对应的渠道
  729. public DataTable GetChannelByInfo(string id)
  730. {
  731. if (string.IsNullOrEmpty(id))
  732. {
  733. return this.SelectBuilder.From("渠道信息").Columns("ID,名称").Select();
  734. }
  735. else
  736. {
  737. return this.SelectBuilder.From("项目信息 a,渠道信息 b").Columns("b.ID,b.名称").Where("a.渠道ID=b.ID").Where("a.ID", id).Select();
  738. }
  739. }
  740. //获取总部的人员信息
  741. public DataTable GetUserInfoByChannelId()
  742. {
  743. return base.SqlBuilder.SqlText("select id,姓名||'['||简码||']' as 姓名 from 人员信息 where 渠道id='4A9B2065-65AB-4411-B528-968D26737EAE' and 是否删除=0 and 状态 =1").Select();
  744. }
  745. //获取关注的产品信息
  746. public DataTable GetMyConfig(string myconfig, string id)
  747. {
  748. return SelectBuilder.From("项目产品模块").Columns("ID").Where("产品ID", myconfig).Where("项目ID", id).Select();
  749. }
  750. //获取关注的模块信息
  751. public DataTable GetMyConfigModual(string myconfig, string CPID)
  752. {
  753. CPID = SelectBuilder.From("项目产品模块").Columns("产品ID").Where("ID", CPID).Select().Rows[0]["产品ID"].ToString();
  754. int r = SelectBuilder.From("产品模块功能").Columns("id").Where("产品ID", CPID).Where("ID", myconfig).Select().Rows.Count;
  755. if (r > 0)
  756. {
  757. return SelectBuilder.From("产品模块功能").Columns("*").Where("ID", myconfig).Select();
  758. }
  759. return null;
  760. }
  761. //根据登录人员信息获取对应的项目(其他人员)
  762. public DataTable GetProjectByInfo(UserInfo user)
  763. {
  764. string sql = "select ID,名称||'['||简码||']' as 名称 from 项目信息 where ID in (select * from table(f_split_string(:companyID,','))) and 启用=1";
  765. if (user.PersonProperty == 2)
  766. {
  767. //string companyID = SelectBuilder.From("系统账户权限").Where("账户ID", user.ID).Columns("项目ID").Select().Rows[0]["项目ID"].ToString();
  768. //return SqlBuilder.SqlText(sql).Parameters("companyID", companyID).Select();
  769. if(user.AuthorizeAll==1)//此权限控制不授权,就可以访问渠道下面所有项目
  770. {
  771. sql = @"select ID, 名称 || '[' || 简码 || ']' as 名称 from 项目信息 where 渠道ID =:CompanyID";
  772. return SqlBuilder.SqlText(sql).Parameters("CompanyID", user.CompanyID).Select();
  773. }
  774. else
  775. {
  776. sql = @"select ID, 名称 || '[' || 简码 || ']' as 名称 from 项目信息 where ID in(select * from table(f_split_string(
  777. (select q.项目ID from 系统账户权限 q where q.账户id = :账户ID and ROWNUM =1) ,',')))and 启用 = 1";
  778. // sql = @"select ID, 名称 || '[' || 简码 || ']' as 名称 from 项目信息 where ID in(select * from table(f_split_string(
  779. //(select wm_concat(q.项目ID) from 系统账户权限 q where q.账户id = :账户ID) ,',')))and 启用 = 1";
  780. return SqlBuilder.SqlText(sql).Parameters("账户ID", user.ID).Select();
  781. }
  782. }
  783. return SqlBuilder.SqlText(sql).Parameters("companyID", user.DefaultProjectID).Select();
  784. }
  785. //根据登录人员信息获取对应的项目(本部人员)
  786. public DataTable GetProjectByInfo()
  787. {
  788. string sql = "select ID,名称||'['||简码||']' as 名称 from 项目信息 where 启用=1";
  789. return SqlBuilder.SqlText(sql).Select();
  790. }
  791. //项目产品模块信息
  792. public DataTable SelectProjectModualInfo(string CPID)
  793. {
  794. return SelectBuilder.From("项目产品模块").Columns("产品ID").Columns("版本").Where("ID", CPID).Select();
  795. }
  796. //问题紧急程度
  797. public DataTable GetEmergencylevel()
  798. {
  799. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("分类ID", "A10D6027-DEDD-4B6D-9549-33830DE52AEA").Where("启用", 1).Select();
  800. }
  801. //根据问题编号获取问题信息
  802. public DataTable GetInfolByBH(int id)
  803. {
  804. //return SelectBuilder.From("问题记录").Columns("*").Where("编号", id).Select();
  805. var exe = this.ProcedureBuilder
  806. .Procedure("B_问题管理.p_获取问题详情")
  807. .Paramter("问题编号_In", id)
  808. .ParamterOut("Resultlist", true);
  809. exe.Execute();
  810. var dt = exe.ParameterValue<DataTable>("Resultlist");
  811. return dt;
  812. }
  813. //根据登录人员获取人员信息
  814. public DataTable GetPersonInfoByID(string PersonID)
  815. {
  816. return SelectBuilder.From("人员信息").Columns("ID").Columns("姓名").Where("ID", PersonID).Select();
  817. }
  818. //获取唯一问题序列编号
  819. public DataTable GetSequence()
  820. {
  821. string sql = "select 产品问题记录_编号.nextval from dual";
  822. return SqlBuilder.SqlText(sql).Select();
  823. }
  824. //根据产品ID获取产品模块
  825. public DataTable GetModualByCPID(string id)
  826. {
  827. DataTable dt = SelectBuilder.From("项目产品模块").Columns("产品ID").Where("ID", id).Select();
  828. if (dt.Rows.Count == 0)
  829. {
  830. return null;
  831. }
  832. string CPID = dt.Rows[0]["产品ID"].ToString();
  833. return SelectBuilder.From("产品模块功能").Columns("*").Where("产品ID", CPID).Select();
  834. }
  835. //根据项目获取对应的机构
  836. public DataTable GetStationByID(string id)
  837. {
  838. string sql = "select ID,名称||'['||简码||']' as 名称 from 站点信息 where 项目ID=:id";
  839. return SqlBuilder.SqlText(sql).Parameters("id", id).Select();
  840. }
  841. //根据项目ID获取产品信息
  842. public DataTable GetProductByID(string defaultProjectID)
  843. {
  844. var exe = this.ProcedureBuilder
  845. .Procedure("p_基础管理_渠道项目机构.p_项目产品模块_Select")
  846. .Paramter("项目id_In", defaultProjectID)
  847. .ParamterOut("Resultlist", true);
  848. exe.Execute();
  849. var dt = exe.ParameterValue<DataTable>("Resultlist");
  850. return dt;
  851. }
  852. #endregion
  853. #region 问题登记
  854. //用户机构卫计委登记问题【状态:登记】
  855. /// <summary>
  856. ///
  857. /// </summary>
  858. /// <param name="model"></param>
  859. /// <param name="user"></param>
  860. /// <param name="id"></param>
  861. /// <returns></returns>
  862. public ProblemStateModel RegisterProblem(ProblemBusinessModel model, UserInfo user, string id)
  863. {
  864. using (var tran = this.DBTransaction.BeginTrans())
  865. {
  866. ProblemStateModel state = new ProblemStateModel();
  867. try
  868. {
  869. //根据项目产品模块ID获取产品ID
  870. string CPID = SelectProjectModualInfo(model.CPID).Rows[0]["产品ID"].ToString();
  871. state.Count = 0;
  872. int ProjectDeal = 0;
  873. int FlowID;//流程ID
  874. int Step;//环节ID
  875. var FKR = string.Empty;//反馈人
  876. //问题性质
  877. int Nature = SelectNature(model.WTXZ).Rows[0]["代码"].ToInt32();
  878. //读取紧急程度
  879. DataTable dt = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.JJDM).Select();
  880. string JJCD = dt.Rows[0]["代码"].ToString();
  881. //反馈人
  882. if (model.FKR.Length > 0)
  883. {
  884. DataTable dd = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.FKR).Select();
  885. if (dd.Rows.Count == 0)
  886. {
  887. FKR = model.FKR;
  888. }
  889. else
  890. {
  891. FKR = dd.Rows[0]["姓名"].ToString();
  892. }
  893. }
  894. //来源代码
  895. int FromID = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.JJDM).Select().Rows[0]["代码"].ToInt32();
  896. //工作流目录ID
  897. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID", model.JGID).Select();
  898. int CatalogID = 1;
  899. //如果没有设置审核流程则默认为常规流程
  900. if (dt.Rows.Count > 0)
  901. {
  902. CatalogID = int.Parse((dt.Rows[0]["工作流目录ID"].ToString()));
  903. }
  904. //如果是常规流程或是中联提交流程则【项目处理=1】
  905. //如果是机构处理流程并且操作人员是卫计委则【项目处理=1】
  906. //如果是卫计委处理流程并且操作人员是机构管理员则【项目处理=1】
  907. if (CatalogID == 1 || CatalogID == 5 || (CatalogID == 2 && user.PersonProperty == 5) || (CatalogID == 3 && user.PersonProperty == 5) || (CatalogID == 3 && user.PersonProperty == 4))
  908. {
  909. ProjectDeal = 1;
  910. }
  911. //当登记人员为机构或卫计委时走不同的流程
  912. if (user.PersonProperty == 4)
  913. {
  914. //问题工作流程
  915. DataTable dz = SelectBuilder.From("问题工作流程").Columns("ID").Columns("环节ID").Where("目录ID", CatalogID).Where("序号", 2).Select();
  916. FlowID = dz.Rows[0]["ID"].ToInt32();//流程ID
  917. Step = dz.Rows[0]["环节ID"].ToInt32();//环节ID
  918. }
  919. else if (user.PersonProperty == 5)
  920. {
  921. //问题工作流程
  922. DataTable dz = SelectBuilder.From("问题工作流程").Columns("ID").Columns("环节ID").Where("目录ID", CatalogID).Where("序号", 3).Select();
  923. FlowID = dz.Rows[0]["ID"].ToInt32();//流程ID
  924. Step = dz.Rows[0]["环节ID"].ToInt32();//环节ID
  925. }
  926. else
  927. {
  928. //问题工作流程
  929. DataTable dz = SelectBuilder.From("问题工作流程").Columns("ID").Columns("环节ID").Where("目录ID", CatalogID).Where("序号", 1).Select();
  930. FlowID = dz.Rows[0]["ID"].ToInt32();//流程ID
  931. Step = dz.Rows[0]["环节ID"].ToInt32();//环节ID
  932. }
  933. //保存前判断问题编号是否已经使用
  934. if (SelectBuilder.From("问题记录").Columns("编号").Where("编号", model.BH).Select().Rows.Count > 0)
  935. {
  936. model.BH = int.Parse(GetSequence().Rows[0]["nextval"].ToString());
  937. }
  938. var XZWTID = model.CFWTID;
  939. //是否为重复问题
  940. if (!String.IsNullOrEmpty(model.CFWTID))
  941. {
  942. model.CFWTID = CheckProIsRepeat(model.CFWTID);
  943. }
  944. var time = this.DataBaseBuilder.GetDateTime;
  945. //添加数据到问题记录表中
  946. state.Count = InsertBuilder.Insert("问题记录")
  947. .Column("ID", id)
  948. .Column("编号", model.BH)
  949. .Column("模块ID", model.MKID)
  950. .Column("项目ID", model.XMID)
  951. .Column("渠道ID", model.QDID)
  952. .Column("产品ID", CPID)
  953. .Column("机构ID", model.JGID)
  954. .Column("紧急代码", JJCD)
  955. .Column("紧急描述", model.JJMS)
  956. .Column("要求时间", model.YQSJ)
  957. .Column("问题类型", 1)
  958. .Column("登记人", user.Name)
  959. .Column("登记人ID", user.PersonID)
  960. .Column("版本号", model.BBH)
  961. .Column("问题描述", model.WTMS)
  962. .Column("登记日期", time)
  963. .Column("反馈日期", model.DJRJ)
  964. .Column("问题标题", model.WTBT)
  965. .Column("反馈人", FKR)
  966. .Column("技术支持", 0)
  967. .Column("研发协助", 0)
  968. .Column("项目处理", ProjectDeal)
  969. .Column("是否终止", 0)
  970. .Column("是否解决", 0)
  971. .Column("环节ID", Step)
  972. .Column("来源代码", FromID)
  973. .Column("问题性质", Nature)
  974. .Column("是否受理", 0)
  975. .Column("流程ID", FlowID)
  976. .Column("重复问题ID", model.CFWTID)
  977. .Column("选择重复ID", XZWTID)
  978. .Column("迭代ID", model.DDID)
  979. .Execute(tran);
  980. string ID = Guid.NewGuid().ToString();
  981. state.ID = ID;
  982. state.ProblemProcessID = ID;
  983. state.Count = InsertBuilder.Insert("问题记录过程")
  984. .Column("ID", ID)
  985. .Column("问题ID", id)
  986. .Column("记录人ID", user.PersonID)
  987. .Column("记录时间", time)
  988. .Column("当前流程ID", FlowID)
  989. .Column("状态", 1)
  990. .Column("耗时", 0)
  991. .Column("描述", "登记问题")
  992. .Execute(tran);
  993. //返回工作流目录ID
  994. state.CatalogID = CatalogID;
  995. tran.CommitTrans();
  996. return state;
  997. }
  998. catch (Exception ex)
  999. {
  1000. tran.Rollback();
  1001. Logger.Instance.Error("调用RegisterProblem时发生异常错误", ex);
  1002. state.Count = 0;
  1003. return state;
  1004. }
  1005. }
  1006. }
  1007. //中联人员登记问题
  1008. public ProblemStateModel RegisterProblemByZL(ProblemBusinessModel model, UserInfo user, string id)
  1009. {
  1010. using (var tran = this.DBTransaction.BeginTrans())
  1011. {
  1012. ProblemStateModel state = new ProblemStateModel();
  1013. try
  1014. {
  1015. //根据项目产品模块ID获取产品ID
  1016. string CPID = SelectProjectModualInfo(model.CPID).Rows[0]["产品ID"].ToString();
  1017. state.Count = 0;
  1018. int FlowID = 0;//流程ID
  1019. int RingID = 0;//环节ID
  1020. int Support = 0;//技术支持
  1021. var FKR = string.Empty;//反馈人
  1022. //问题性质
  1023. int Nature = SelectNature(model.WTXZ).Rows[0]["代码"].ToInt32();
  1024. //读取紧急程度
  1025. DataTable dt = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.JJDM).Select();
  1026. string JJCD = dt.Rows[0]["代码"].ToString();
  1027. //反馈人
  1028. if (model.FKR.Length > 0)
  1029. {
  1030. DataTable dd = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.FKR).Select();
  1031. if (dd.Rows.Count == 0)
  1032. {
  1033. FKR = model.FKR;
  1034. }
  1035. else
  1036. {
  1037. FKR = dd.Rows[0]["姓名"].ToString();
  1038. }
  1039. }
  1040. int? FromID = null;
  1041. if (!string.IsNullOrEmpty(model.LYDM))
  1042. { //来源代码
  1043. FromID = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.LYDM).Select().Rows[0]["代码"]
  1044. .ToInt32();
  1045. }
  1046. //登记问题是否选择机构
  1047. if (model.JGID.Length > 0)
  1048. {
  1049. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID", model.JGID).Select();
  1050. }
  1051. else
  1052. {
  1053. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID is null").Select();
  1054. }
  1055. //工作流目录ID
  1056. int CatalogID = 1;
  1057. if (dt.Rows.Count > 0)
  1058. {
  1059. CatalogID = int.Parse((dt.Rows[0]["工作流目录ID"].ToString()));
  1060. }
  1061. //如果操作人员为渠道人员
  1062. if (user.PersonProperty == 2)
  1063. {
  1064. //常规流程
  1065. if (CatalogID == 1)
  1066. {
  1067. FlowID = 2;
  1068. RingID = 3;
  1069. Support = 0;
  1070. }
  1071. //机构内处理流程
  1072. if (CatalogID == 2)
  1073. {
  1074. FlowID = 7;
  1075. RingID = 3;
  1076. Support = 0;
  1077. }
  1078. //卫计委处理流程
  1079. if (CatalogID == 3)
  1080. {
  1081. FlowID = 12;
  1082. RingID = 3;
  1083. Support = 0;
  1084. }
  1085. //机构和卫计委流程
  1086. if (CatalogID == 4)
  1087. {
  1088. FlowID = 18;
  1089. RingID = 3;
  1090. Support = 0;
  1091. }
  1092. //中联流程
  1093. if (CatalogID == 5)
  1094. {
  1095. FlowID = 21;
  1096. RingID = 3;
  1097. Support = 0;
  1098. }
  1099. }
  1100. else
  1101. {
  1102. //常规流程
  1103. if (CatalogID == 1)
  1104. {
  1105. FlowID = 3;
  1106. RingID = 4;
  1107. Support = 1;
  1108. }
  1109. //机构内处理流程
  1110. if (CatalogID == 2)
  1111. {
  1112. FlowID = 8;
  1113. RingID = 4;
  1114. Support = 1;
  1115. }
  1116. //卫计委处理流程
  1117. if (CatalogID == 3)
  1118. {
  1119. FlowID = 13;
  1120. RingID = 4;
  1121. Support = 1;
  1122. }
  1123. //机构和卫计委流程
  1124. if (CatalogID == 4)
  1125. {
  1126. FlowID = 19;
  1127. RingID = 4;
  1128. Support = 1;
  1129. }
  1130. //中联提交流程
  1131. if (CatalogID == 5)
  1132. {
  1133. FlowID = 22;
  1134. RingID = 4;
  1135. Support = 1;
  1136. }
  1137. }
  1138. //是否为重复问题
  1139. var XZWTID = model.CFWTID;
  1140. if (!String.IsNullOrEmpty(model.CFWTID))
  1141. {
  1142. model.CFWTID = CheckProIsRepeat(model.CFWTID);
  1143. }
  1144. var time = this.DataBaseBuilder.GetDateTime;
  1145. //添加数据到问题记录表中
  1146. state.Count = InsertBuilder.Insert("问题记录")
  1147. .Column("ID", id)
  1148. .Column("编号", model.BH)
  1149. .Column("模块ID", model.MKID)
  1150. .Column("项目ID", model.XMID)
  1151. .Column("渠道ID", model.QDID)
  1152. .Column("产品ID", CPID)
  1153. .Column("机构ID", model.JGID)
  1154. .Column("紧急代码", JJCD)
  1155. .Column("紧急描述", model.JJMS)
  1156. .Column("要求时间", model.YQSJ)
  1157. .Column("问题类型", 1)
  1158. .Column("登记人", user.Name)
  1159. .Column("登记人ID", user.PersonID)
  1160. .Column("版本号", model.BBH)
  1161. .Column("问题描述", model.WTMS)
  1162. .Column("登记日期", time)
  1163. .Column("反馈日期", model.DJRJ)
  1164. .Column("问题标题", model.WTBT)
  1165. .Column("反馈人", FKR)
  1166. .Column("技术支持", Support)
  1167. .Column("研发协助", 0)
  1168. .Column("项目处理", 1)
  1169. .Column("是否终止", 0)
  1170. .Column("是否解决", 0)
  1171. .Column("环节ID", RingID)
  1172. .Column("来源代码", FromID)
  1173. .Column("问题性质", Nature)
  1174. .Column("是否受理", 0)
  1175. .Column("流程ID", FlowID)
  1176. .Column("重复问题ID", model.CFWTID)
  1177. .Column("选择重复ID", XZWTID)
  1178. .Column("迭代ID", model.DDID)
  1179. .Execute(tran);
  1180. string ID = Guid.NewGuid().ToString();
  1181. state.ProblemProcessID = ID;
  1182. state.Count = InsertBuilder.Insert("问题记录过程")
  1183. .Column("ID", ID)
  1184. .Column("问题ID", id)
  1185. .Column("记录人ID", user.PersonID)
  1186. .Column("记录时间", time)
  1187. .Column("当前流程ID", FlowID)
  1188. .Column("状态", 1)
  1189. .Column("耗时", 0)
  1190. .Column("描述", "登记问题")
  1191. .Execute(tran);
  1192. //返回工作流目录ID
  1193. state.CatalogID = 5;
  1194. //是否直接处理
  1195. if (model.RegisterType == 2)
  1196. {
  1197. UpdateBuilder.Update("问题记录")
  1198. .Where("ID", id)
  1199. .Column("是否解决", 1)
  1200. .Column("是否受理", 1)
  1201. .Column("解决方案", model.JJFA)
  1202. .Column("分类ID", model.TYID)
  1203. .Column("受理时间", DataBaseBuilder.GetDateTime)
  1204. .Column("受理人", user.Name)
  1205. .Column("受理人ID", user.PersonID)
  1206. .Execute(tran);
  1207. var dealtime = this.DataBaseBuilder.GetDateTime;
  1208. InsertBuilder.Insert("问题记录过程")
  1209. .Column("ID", Guid.NewGuid().ToString())
  1210. .Column("问题ID", id)
  1211. .Column("记录人ID", user.PersonID)
  1212. .Column("记录时间", dealtime.AddSeconds(1))
  1213. .Column("结束时间", dealtime.AddSeconds(1))
  1214. .Column("当前流程ID", FlowID)
  1215. .Column("状态", 7)
  1216. .Column("耗时", 0)
  1217. .Column("描述", model.JJFA)
  1218. .Execute(tran);
  1219. UpdateBuilder.Update("问题记录过程").Column("结束时间", dealtime.AddSeconds(1)).Where("ID", state.ProblemProcessID).Execute(tran);
  1220. }
  1221. tran.CommitTrans();
  1222. return state;
  1223. }
  1224. catch (Exception ex)
  1225. {
  1226. tran.Rollback();
  1227. Logger.Instance.Error("调用RegisterProblemByZL时发生异常错误", ex);
  1228. state.Count = 0;
  1229. return state;
  1230. }
  1231. }
  1232. }
  1233. //用户提交问题【状态:提交】
  1234. public int PostProblem(string id, string flowID, UserInfo user, string ProcessID)
  1235. {
  1236. using (var tran = this.DBTransaction.BeginTrans())
  1237. {
  1238. try
  1239. {
  1240. int x = 0;
  1241. //根据当前流程ID获取环节ID
  1242. int Step = SelectJboFlowInfo(flowID).Rows[0]["环节ID"].ToInt32();
  1243. int FromID = SelectJboFlowInfo(flowID).Rows[0]["来源ID"].ToInt32();
  1244. //添加数据到问题记录表中
  1245. x = UpdateBuilder.Update("问题记录")
  1246. .Where("ID", id)
  1247. .Column("流程ID", flowID)
  1248. .Column("环节ID", Step)
  1249. .Execute(tran);
  1250. var time = this.DataBaseBuilder.GetDateTime;
  1251. x = InsertBuilder.Insert("问题记录过程")
  1252. .Column("ID", Guid.NewGuid().ToString())
  1253. .Column("问题ID", id)
  1254. .Column("记录人ID", user.PersonID)
  1255. .Column("记录时间", time.AddSeconds(1))
  1256. .Column("当前流程ID", flowID)
  1257. .Column("状态", 5)
  1258. .Column("耗时", 0)
  1259. .Column("描述", "提交问题")
  1260. .Column("来源流程ID", FromID)
  1261. .Execute(tran);
  1262. UpdateBuilder.Update("问题记录过程").Column("结束时间", time.AddSeconds(1)).Where("ID", ProcessID).Execute(tran);
  1263. tran.CommitTrans();
  1264. return x;
  1265. }
  1266. catch (Exception ex)
  1267. {
  1268. tran.Rollback();
  1269. Logger.Instance.Error("调用PostProblem时发生异常错误", ex);
  1270. return -1;
  1271. }
  1272. }
  1273. }
  1274. //中联人员直接提交问题
  1275. public ProblemStateModel RegisterSubitProblem(ProblemBusinessModel model, UserInfo user, string id)
  1276. {
  1277. using (var tran = this.DBTransaction.BeginTrans())
  1278. {
  1279. ProblemStateModel state = new ProblemStateModel();
  1280. try
  1281. {
  1282. //根据项目产品模块ID获取产品ID
  1283. string CPID = SelectProjectModualInfo(model.CPID).Rows[0]["产品ID"].ToString();
  1284. state.Count = 0;
  1285. int FlowID = 0;//流程ID
  1286. int RingID = 0;//环节ID
  1287. int Support = 0;//技术支持
  1288. int Development = 0;//研发协助
  1289. var FKR = string.Empty;//反馈人
  1290. //问题性质
  1291. int Nature = SelectNature(model.WTXZ).Rows[0]["代码"].ToInt32();
  1292. //读取紧急程度
  1293. DataTable dt = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.JJDM).Select();
  1294. string JJCD = dt.Rows[0]["代码"].ToString();
  1295. //反馈人
  1296. if (model.FKR.Length > 0)
  1297. {
  1298. DataTable dd = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.FKR).Select();
  1299. if (dd.Rows.Count == 0)
  1300. {
  1301. FKR = model.FKR;
  1302. }
  1303. else
  1304. {
  1305. FKR = dd.Rows[0]["姓名"].ToString();
  1306. }
  1307. }
  1308. //来源代码
  1309. int FromID = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.JJDM).Select().Rows[0]["代码"]
  1310. .ToInt32();
  1311. //登记问题是否选择机构
  1312. if (model.JGID.Length > 0)
  1313. {
  1314. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID", model.JGID).Select();
  1315. }
  1316. else
  1317. {
  1318. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID is null").Select();
  1319. }
  1320. //工作流目录ID
  1321. int CatalogID = 1;
  1322. if (dt.Rows.Count > 0)
  1323. {
  1324. CatalogID = int.Parse((dt.Rows[0]["工作流目录ID"].ToString()));
  1325. }
  1326. //如果操作人员为渠道人员
  1327. if (user.PersonProperty == 2)
  1328. {
  1329. //常规流程
  1330. if (CatalogID == 1)
  1331. {
  1332. FlowID = 2;
  1333. RingID = 3;
  1334. Support = 0;
  1335. }
  1336. //机构内处理流程
  1337. if (CatalogID == 2)
  1338. {
  1339. FlowID = 7;
  1340. RingID = 3;
  1341. Support = 0;
  1342. }
  1343. //卫计委处理流程
  1344. if (CatalogID == 3)
  1345. {
  1346. FlowID = 12;
  1347. RingID = 3;
  1348. Support = 0;
  1349. }
  1350. //机构和卫计委流程
  1351. if (CatalogID == 4)
  1352. {
  1353. FlowID = 18;
  1354. RingID = 3;
  1355. Support = 0;
  1356. }
  1357. //中联流程
  1358. if (CatalogID == 5)
  1359. {
  1360. FlowID = 21;
  1361. RingID = 3;
  1362. Support = 0;
  1363. }
  1364. }
  1365. else
  1366. {
  1367. //常规流程
  1368. if (CatalogID == 1)
  1369. {
  1370. FlowID = 3;
  1371. RingID = 4;
  1372. Support = 1;
  1373. }
  1374. //机构内处理流程
  1375. if (CatalogID == 2)
  1376. {
  1377. FlowID = 8;
  1378. RingID = 4;
  1379. Support = 1;
  1380. }
  1381. //卫计委处理流程
  1382. if (CatalogID == 3)
  1383. {
  1384. FlowID = 13;
  1385. RingID = 4;
  1386. Support = 1;
  1387. }
  1388. //机构和卫计委流程
  1389. if (CatalogID == 4)
  1390. {
  1391. FlowID = 19;
  1392. RingID = 4;
  1393. Support = 1;
  1394. }
  1395. //中联提交流程
  1396. if (CatalogID == 5)
  1397. {
  1398. FlowID = 22;
  1399. RingID = 4;
  1400. Support = 1;
  1401. }
  1402. }
  1403. var XZWTID = model.CFWTID;
  1404. //是否为重复问题
  1405. if (!String.IsNullOrEmpty(model.CFWTID))
  1406. {
  1407. model.CFWTID = CheckProIsRepeat(model.CFWTID);
  1408. }
  1409. string ID = Guid.NewGuid().ToString();
  1410. var time = this.DataBaseBuilder.GetDateTime;
  1411. //添加数据到问题记录表中
  1412. state.Count = InsertBuilder.Insert("问题记录")
  1413. .Column("ID", id)
  1414. .Column("编号", model.BH)
  1415. .Column("模块ID", model.MKID)
  1416. .Column("项目ID", model.XMID)
  1417. .Column("渠道ID", model.QDID)
  1418. .Column("产品ID", CPID)
  1419. .Column("机构ID", model.JGID)
  1420. .Column("紧急代码", JJCD)
  1421. .Column("紧急描述", model.JJMS)
  1422. .Column("要求时间", model.YQSJ)
  1423. .Column("问题类型", 1)
  1424. .Column("登记人", user.Name)
  1425. .Column("登记人ID", user.PersonID)
  1426. .Column("版本号", model.BBH)
  1427. .Column("问题描述", model.WTMS)
  1428. .Column("登记日期", time)
  1429. .Column("反馈日期", model.DJRJ)
  1430. .Column("问题标题", model.WTBT)
  1431. .Column("反馈人", FKR)
  1432. .Column("技术支持", Support)
  1433. .Column("研发协助", 0)
  1434. .Column("项目处理", 1)
  1435. .Column("是否终止", 0)
  1436. .Column("是否解决", 0)
  1437. .Column("环节ID", RingID)
  1438. .Column("来源代码", FromID)
  1439. .Column("问题性质", Nature)
  1440. .Column("是否受理", 0)
  1441. .Column("流程ID", FlowID)
  1442. .Column("重复问题ID", model.CFWTID)
  1443. .Column("选择重复ID", XZWTID)
  1444. .Column("迭代ID", model.DDID)
  1445. .Execute(tran);
  1446. if (state.Count == 1)
  1447. {
  1448. state.ProblemProcessID = ID;
  1449. state.Count = InsertBuilder.Insert("问题记录过程")
  1450. .Column("ID", ID)
  1451. .Column("问题ID", id)
  1452. .Column("记录人ID", user.PersonID)
  1453. .Column("记录时间", time)
  1454. .Column("当前流程ID", FlowID)
  1455. .Column("状态", 1)
  1456. .Column("耗时", 0)
  1457. .Column("描述", "登记问题")
  1458. .Execute(tran);
  1459. //返回工作流目录ID
  1460. state.CatalogID = 5;
  1461. }
  1462. //提交问题操作
  1463. //根据当前流程ID获取下个流程ID以及环节ID
  1464. dt = SelectBuilder.From("问题工作流程").Where("ID", FlowID).Columns("目标ID").Select();
  1465. int NextFlowID = dt.Rows[0]["目标ID"].ToInt32();
  1466. dt = SelectBuilder.From("问题工作流程").Where("ID", NextFlowID).Columns("环节ID").Select();
  1467. int NextRingID = dt.Rows[0]["环节ID"].ToInt32();
  1468. //如果环节是研发协助
  1469. if (NextFlowID == 5)
  1470. {
  1471. Development = 1;
  1472. }
  1473. //如果是医院管理员或者卫计委走的常规流程
  1474. if ((user.PersonProperty == 4 || user.PersonProperty == 5) && CatalogID == 1)
  1475. {
  1476. NextRingID = RingID;
  1477. NextFlowID = FlowID;
  1478. Support = 0;
  1479. Development = 0;
  1480. }
  1481. //修改问题记录信息
  1482. UpdateBuilder.Update("问题记录")
  1483. .Where("ID", id)
  1484. .Column("技术支持", Support)
  1485. .Column("研发协助", Development)
  1486. .Column("环节ID", NextRingID)
  1487. .Column("流程ID", NextFlowID)
  1488. .Execute(tran);
  1489. //增加一条提交过程
  1490. DateTime submittime = this.DataBaseBuilder.GetDateTime;
  1491. InsertBuilder.Insert("问题记录过程")
  1492. .Column("ID", Guid.NewGuid().ToString())
  1493. .Column("问题ID", id)
  1494. .Column("记录人ID", user.PersonID)
  1495. .Column("记录时间", submittime.AddSeconds(1))
  1496. .Column("当前流程ID", NextFlowID)
  1497. .Column("来源流程ID", FlowID)
  1498. .Column("状态", 5)
  1499. .Column("耗时", 0)
  1500. .Column("描述", "直接提交")
  1501. .Execute(tran);
  1502. UpdateBuilder.Update("问题记录过程").Where("ID", state.ProblemProcessID).Column("结束时间", submittime.AddSeconds(1)).Execute(tran);
  1503. tran.CommitTrans();
  1504. return state;
  1505. }
  1506. catch (Exception ex)
  1507. {
  1508. tran.Rollback();
  1509. Logger.Instance.Error("调用RegisterSubitProblem时发生异常错误", ex);
  1510. state.Count = 0;
  1511. return state;
  1512. }
  1513. }
  1514. }
  1515. //上传附件
  1516. public int FileUpload(string problemID, string annexID, string name, string fileType, string id)
  1517. {
  1518. try
  1519. {
  1520. int r = 0;
  1521. //判断文件类型
  1522. if (fileType == "image/png" || fileType == "image/jpeg")
  1523. {
  1524. r = this.InsertBuilder
  1525. .Insert("产品问题附件")
  1526. .Column("ID", Guid.NewGuid().ToString())
  1527. .Column("问题ID", problemID)
  1528. .Column("类型", "1")
  1529. .Column("附件ID", annexID)
  1530. .Column("添加时间", this.DataBaseBuilder.GetDateTime)
  1531. .Column("添加人", name)
  1532. .Column("过程ID", id)
  1533. .Execute();
  1534. }
  1535. else
  1536. {
  1537. r = this.InsertBuilder
  1538. .Insert("产品问题附件")
  1539. .Column("ID", Guid.NewGuid().ToString())
  1540. .Column("问题ID", problemID)
  1541. .Column("类型", "2")
  1542. .Column("附件ID", annexID)
  1543. .Column("添加时间", this.DataBaseBuilder.GetDateTime)
  1544. .Column("添加人", name)
  1545. .Column("过程ID", id)
  1546. .Execute();
  1547. }
  1548. return r;
  1549. }
  1550. catch (Exception ex)
  1551. {
  1552. Logger.Instance.Error("调用FileUpload时发生异常错误", ex);
  1553. return 0;
  1554. }
  1555. }
  1556. //判断项目的审核流程是否允许用户反馈问题
  1557. public int CheckApprovalProcess(string QDID, string XMID, string JGID)
  1558. {
  1559. return SelectBuilder.From("项目问题流程").Columns("ID").Where("渠道ID", QDID).Where("项目ID", XMID).Where("机构ID", JGID).Where("工作流目录ID", 5).Select().Rows.Count;
  1560. }
  1561. //检查问题是否为重复问题并返回对应的重复问题ID字段
  1562. public string CheckProIsRepeat(string WTID)
  1563. {
  1564. string NewID = "";
  1565. DataTable dt = SqlBuilder.SqlText("select 重复问题ID from 问题记录 where ID=:WTID").Parameters("WTID", WTID).Select();
  1566. if (!String.IsNullOrWhiteSpace(dt.Rows[0]["重复问题ID"].ToString()))
  1567. {
  1568. return dt.Rows[0]["重复问题ID"].ToString();
  1569. }
  1570. else
  1571. {
  1572. NewID = Guid.NewGuid().ToString();
  1573. UpdateBuilder.Update("问题记录").Column("重复问题ID", NewID).Where("ID", WTID).Execute();
  1574. return NewID;
  1575. }
  1576. }
  1577. #endregion
  1578. #region 问题修改
  1579. //修改问题操作
  1580. public int UpdateProblem(ProblemBusinessModel model, UserInfo user)
  1581. {
  1582. try
  1583. {
  1584. var FKR = string.Empty;//反馈人
  1585. //根据项目产品模块ID获取产品ID
  1586. DataTable dt = SelectBuilder.From("项目产品模块").Columns("产品ID").Where("ID", model.CPID).Select();
  1587. string CPID = dt.Rows[0]["产品ID"].ToString();
  1588. var dt_FKR = SelectBuilder.From("问题记录").Columns("反馈人").Where("编号", model.BH).Select().Rows[0]["反馈人"].ToString();
  1589. //判断是否修改反馈人
  1590. if (model.FKR.Length > 0)
  1591. {
  1592. if (model.FKR == dt_FKR)
  1593. {
  1594. FKR = dt_FKR;
  1595. }
  1596. else
  1597. {
  1598. if (model.FKR.Length == 36)
  1599. {
  1600. FKR = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.FKR).Select().Rows[0]["姓名"].ToString();
  1601. }
  1602. else
  1603. {
  1604. FKR = model.FKR;
  1605. }
  1606. }
  1607. }
  1608. if(model.YFCLRID.IsNullOrEmpty())//获取研发人员
  1609. {
  1610. model.YFCLR = "";
  1611. }
  1612. else
  1613. {
  1614. model.YFCLR =SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.YFCLRID).Select().Rows[0]["姓名"].ToString();
  1615. }
  1616. if (model.CSCLRID.IsNullOrEmpty())//获取测试人员
  1617. {
  1618. model.CSCLR = "";
  1619. }
  1620. else
  1621. {
  1622. model.CSCLR = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.CSCLRID).Select().Rows[0]["姓名"].ToString();
  1623. }
  1624. var current = SqlBuilder.SqlText("select 重复问题ID from 问题记录 where 编号=:BH").Parameters("BH", model.BH).Select();
  1625. string CFWTID = model.CFWTID;
  1626. //判断重复问题ID是否一致
  1627. if (model.CFWTID != current.Rows[0]["重复问题ID"].ToString())
  1628. {
  1629. //是否为重复问题
  1630. if (!String.IsNullOrWhiteSpace(model.CFWTID))
  1631. {
  1632. model.CFWTID = CheckProIsRepeat(model.CFWTID);
  1633. }
  1634. }
  1635. return UpdateBuilder.Update("问题记录")
  1636. .Where("编号", model.BH)
  1637. .Column("模块ID", model.MKID)
  1638. .Column("项目ID", model.XMID)
  1639. .Column("渠道ID", model.QDID)
  1640. .Column("机构ID", model.JGID)
  1641. .Column("产品ID", CPID)
  1642. .Column("问题性质", model.WTXZ)
  1643. .Column("来源代码", model.LYDM)
  1644. .Column("紧急代码", model.JJDM)
  1645. .Column("紧急描述", model.JJMS)
  1646. .Column("要求时间", model.YQSJ)
  1647. .Column("反馈日期", model.DJRJ)
  1648. .Column("版本号", model.BBH)
  1649. .Column("问题描述", model.WTMS)
  1650. .Column("问题标题", model.WTBT)
  1651. .Column("反馈人", FKR)
  1652. .Column("迭代ID", model.DDID)
  1653. .Column("研发处理人ID", model.YFCLRID)
  1654. .Column("研发处理人", model.YFCLR)
  1655. .Column("测试处理人ID", model.CSCLRID)
  1656. .Column("测试处理人", model.CSCLR)
  1657. .Column("解决版本状态", model.JJBBZT)
  1658. .Column("重复问题ID", model.CFWTID)
  1659. .Column("选择重复ID", CFWTID)
  1660. .Column("解决版本", model.JJBB)
  1661. .Execute();
  1662. }
  1663. catch (Exception ex)
  1664. {
  1665. Logger.Instance.Error("调用UpdateProblem时发生异常错误", ex);
  1666. return -1;
  1667. }
  1668. }
  1669. //获取问题附件
  1670. public DataTable GetAttachment(string id)
  1671. {
  1672. var UID = SelectBuilder.From("问题记录").Columns("ID").Where("编号", id).Select().Rows[0]["ID"].ToString();
  1673. return SelectBuilder.From("产品问题附件").Where("问题ID", UID).Columns("附件ID").Columns("类型").Select();
  1674. }
  1675. //返回问题是否有受理人
  1676. public int GetAccept(string id)
  1677. {
  1678. int r = SelectBuilder.From("问题记录").Where("ID", id).Columns("ID").Where("受理人 is null").Select().Rows.Count;
  1679. return r;
  1680. }
  1681. /// <summary>
  1682. /// 获取问题记录信息
  1683. /// </summary>
  1684. /// <param name="id"></param>
  1685. /// <returns></returns>
  1686. public DataTable GetProblemInfo(string id)
  1687. {
  1688. var r = SelectBuilder.From("问题记录").Where("ID", id).Columns("*").Select();
  1689. return r;
  1690. }
  1691. #endregion
  1692. #region 删除问题
  1693. public int Delete_Problem(string id)
  1694. {
  1695. using (var tran = this.DBTransaction.BeginTrans())
  1696. {
  1697. try
  1698. {
  1699. UpdateBuilder.Update("问题记录").Column("是否删除", -1).Where("ID", id).Execute(tran);
  1700. var dt = SqlBuilder.SqlText("select * from 问题记录 where id=:ID").Parameters("ID", id).Select();
  1701. if (!string.IsNullOrEmpty(dt.Rows[0]["关联ID"].ToString()))
  1702. {
  1703. var count = SqlBuilder.SqlText("select 关联数量 from 问题记录 where id=:ID").Parameters("ID", dt.Rows[0]["关联ID"].ToString()).Select().Rows[0]["关联数量"].ToInt32();
  1704. UpdateBuilder.Update("问题记录").Column("关联数量", count - 1).Where("ID", dt.Rows[0]["关联ID"].ToString()).Execute(tran);
  1705. }
  1706. tran.CommitTrans();
  1707. return 1;
  1708. }
  1709. catch (Exception ex)
  1710. {
  1711. tran.Rollback();
  1712. Logger.Instance.Error("调用Delete_Problem时发生异常错误", ex);
  1713. return 0;
  1714. }
  1715. }
  1716. }
  1717. //判断是否可以删除或修改
  1718. public DataTable CheckState(string id)
  1719. {
  1720. return SelectBuilder.From("问题记录").Columns("是否终止").Columns("登记人ID").Columns("是否解决").Where("ID", id).Select();
  1721. }
  1722. //获取问题状态
  1723. public bool GetProblemState(string id, UserInfo model)
  1724. {
  1725. try
  1726. {
  1727. //获取过程条数
  1728. var count = this.SqlBuilder.SqlText("select Count(1) from 问题记录过程 gc where gc.问题id=:id").Parameters("id", id).Select<int>();
  1729. //获取问题记录
  1730. var dt = this.SqlBuilder.SqlText("select 是否受理,环节ID,受理人ID from 问题记录 where id=:id").Parameters("id", id).Select();
  1731. var IsAccept = dt.Rows[0].GetValueByName<int>("是否受理");
  1732. var AcceptId = dt.Rows[0].GetValueByName<string>("受理人ID");
  1733. var CurrentLinkId = dt.Rows[0].GetValueByName<int>("环节ID");
  1734. //获取当前用户所在环节Id
  1735. var RegisLinkId = GetUserLinkId(model.PersonProperty, model.JobCode);
  1736. return ((RegisLinkId >= CurrentLinkId || count <= 2) && (IsAccept == 0 || AcceptId == model.PersonID));
  1737. }
  1738. catch (Exception ex)
  1739. {
  1740. Logger.Instance.Error("获取问题状态出错", ex);
  1741. return false;
  1742. }
  1743. }
  1744. #endregion
  1745. #region 向上提交
  1746. //提交操作
  1747. public int Submit(string id, UserInfo user, string CodeID)
  1748. {
  1749. try
  1750. {
  1751. int r = 0;
  1752. //得到问题的当前流程ID
  1753. int FlowID = SelectBuilder.From("问题记录").Columns("流程ID").Where("ID", id).Select().Rows[0]["流程ID"].ToInt32();
  1754. //得到下个流程ID
  1755. DataTable dt = SelectBuilder.From("问题工作流程").Columns("目标ID").Columns("环节ID").Where("ID", FlowID).Select();
  1756. int CatalogID = dt.Rows[0]["环节ID"].ToInt32();
  1757. int TargetID = dt.Rows[0]["目标ID"].ToInt32();
  1758. //修改问题状态
  1759. r = UpdateBuilder.Update("问题记录").Column("流程ID", TargetID).Column("环节ID", CatalogID).Where("ID", id).Execute();
  1760. //增加问题记录过程
  1761. var time = this.DataBaseBuilder.GetDateTime;
  1762. if (r == 1)
  1763. {
  1764. r = InsertBuilder.Insert("问题记录过程")
  1765. .Column("ID", Guid.NewGuid().ToString())
  1766. .Column("问题ID", id)
  1767. .Column("记录人ID", user.PersonID)
  1768. .Column("记录时间", time)
  1769. .Column("当前流程ID", TargetID)
  1770. .Column("状态", 5)
  1771. .Column("耗时", 0)
  1772. .Column("附件ID", CodeID)
  1773. .Column("描述", "提交问题")
  1774. .Column("来源流程ID", FlowID)
  1775. .Execute();
  1776. }
  1777. return r;
  1778. }
  1779. catch (Exception ex)
  1780. {
  1781. Logger.Instance.Error("调用Submit时发生异常错误", ex);
  1782. return -1;
  1783. }
  1784. }
  1785. #endregion
  1786. #region 查看问题
  1787. public DataTable CheckProblem(string id)
  1788. {
  1789. var exe = this.ProcedureBuilder
  1790. .Procedure("B_问题处理.P_查看问题")
  1791. .Paramter("问题ID_In", id)
  1792. .ParamterOut("Resultlist", true);
  1793. exe.Execute();
  1794. return exe.ParameterValue<DataTable>("Resultlist");
  1795. }
  1796. #endregion
  1797. #region 问题过程修改
  1798. //问题过程的附件上传
  1799. public int ProcessFileUpload(string problemID, string data, string name, string fileType, string processID)
  1800. {
  1801. try
  1802. {
  1803. int r = 0;
  1804. //判断文件类型
  1805. if (fileType == "image/png" || fileType == "image/jpeg")
  1806. {
  1807. r = this.InsertBuilder
  1808. .Insert("产品问题附件")
  1809. .Column("ID", Guid.NewGuid().ToString())
  1810. .Column("问题ID", problemID)
  1811. .Column("类型", "1")
  1812. .Column("附件ID", data)
  1813. .Column("添加时间", this.DataBaseBuilder.GetDateTime)
  1814. .Column("添加人", name)
  1815. .Column("过程ID", processID)
  1816. .Execute();
  1817. }
  1818. else
  1819. {
  1820. r = this.InsertBuilder
  1821. .Insert("产品问题附件")
  1822. .Column("ID", Guid.NewGuid().ToString())
  1823. .Column("问题ID", problemID)
  1824. .Column("类型", "2")
  1825. .Column("附件ID", data)
  1826. .Column("添加时间", this.DataBaseBuilder.GetDateTime)
  1827. .Column("添加人", name)
  1828. .Column("过程ID", processID)
  1829. .Execute();
  1830. }
  1831. return r;
  1832. }
  1833. catch (Exception ex)
  1834. {
  1835. Logger.Instance.Error("调用ProcessFileUpload时发生异常错误", ex);
  1836. return 0;
  1837. }
  1838. }
  1839. #endregion
  1840. #region 处理问题
  1841. //编辑资源信息
  1842. public int SaveResource(ResourceBusinessModels model)
  1843. {
  1844. bool flag = model.ID == null;
  1845. int result;
  1846. if (flag)
  1847. {
  1848. result = base.InsertBuilder.Insert("问题资源").Column("ID", this.GetId("问题资源")).Column("实例类型", model.SL).Column("序号", model.XH).Column("类型", model.LX).Column("问题ID", model.WTID).Column("资源ID", model.ZYID).Column("内容", model.NR).Column("添加时间", base.DataBaseBuilder.GetDateTime).Column("添加人ID", model.TJRID).Execute();
  1849. }
  1850. else
  1851. {
  1852. result = base.UpdateBuilder.Update("问题资源").Where("ID", model.ID).Column("实例类型", model.SL).Column("序号", model.XH).Column("类型", model.LX).Column("资源ID", model.ZYID).Column("内容", model.NR).Execute();
  1853. }
  1854. return result;
  1855. }
  1856. //删除资源信息
  1857. public int DelResource(string id)
  1858. {
  1859. string sql = "delete from 问题资源 where id=:id";
  1860. return this.SqlBuilder.SqlText(sql).Parameters("id", id).Execute();
  1861. }
  1862. //获取序号
  1863. public int GetNumber(string id)
  1864. {
  1865. string sql = "select max(序号) as 序号 from 问题资源 where 问题id=:id";
  1866. var dt = this.SqlBuilder.SqlText(sql).Parameters("id", id).Select();
  1867. return dt.Rows.Count > 0 ? dt.Rows[0][0].ToInt32() : 1;
  1868. }
  1869. //获取问题的资源列表
  1870. public DataTable ResourceData(string proid)
  1871. {
  1872. return base.SqlBuilder.SqlText("select t.id,t.问题id,t.资源id,t.内容,t.类型,o.显示名 as decode类型 ,t.添加时间,t.序号,t.实例类型 from 问题资源 t left join 基础编码 o on o.代码=t.类型 and o.分类id='D715D19D-DE63-4E34-A84C-40DC08827D52' where t.问题id=:ID order by t.序号 desc").Parameters("ID", proid).Select();
  1873. }
  1874. public object ResourceData_Layui(string proid)
  1875. {
  1876. return base.SqlBuilder.SqlText("select w.id,w.问题id as WTID,w.资源id as ZYID,w.内容 as NR,w.类型 as LX ,o.显示名 as DecodeLX,w.序号 as XH,w.实例类型 as SL from 问题资源 w left join 基础编码 o on o.代码=w.类型 and o.分类id='D715D19D-DE63-4E34-A84C-40DC08827D52' where w.问题ID=:ID order by w.序号 desc").Parameters("ID", proid).Select().ToList<ResourceBusinessModels>();
  1877. }
  1878. //返回产品对应的版本
  1879. public DataTable GetVersionById(string id, int type)
  1880. {
  1881. string text = "select id,版本号 from 产品版本配置 where 产品id=:id ";
  1882. bool flag = type == 1;
  1883. if (flag)
  1884. {
  1885. id = base.SqlBuilder.SqlText("select 产品id from 问题记录 where id=:id").Parameters("id", id).Select().Rows[0]["产品id"].ToString();
  1886. text += " and 状态!=5 ";
  1887. }
  1888. else
  1889. {
  1890. bool flag2 = type == 2;
  1891. if (flag2)
  1892. {
  1893. id = base.SqlBuilder.SqlText("select 产品id from 项目产品模块 where id=:id").Parameters("id", id).Select().Rows[0]["产品id"].ToString();
  1894. text += " and 状态!=5 ";
  1895. }
  1896. else if (type == 3)//只查询未发布版本
  1897. {
  1898. text += " and 状态!=5 ";
  1899. }
  1900. }
  1901. text += " order by 版本号 desc";
  1902. return base.SqlBuilder.SqlText(text).Parameters("id", id).Select();
  1903. }
  1904. public void GetDevTest(string id, out string dev, out string test)
  1905. {
  1906. DataTable dataTable = base.SqlBuilder.SqlText("select 研发处理人ID,测试处理人ID from 问题记录 where id=:ID").Parameters("ID", id).Select();
  1907. dev = dataTable.Rows[0][0].ToString();
  1908. test = dataTable.Rows[0][1].ToString();
  1909. }
  1910. public int ChangeVersionState(string id, int state)
  1911. {
  1912. return base.UpdateBuilder.Update("问题记录").Column("解决版本状态", state).Where("id", id).Execute();
  1913. }
  1914. //变更底线问题
  1915. public int Bottomlineissues(string id, int state)
  1916. {
  1917. return base.UpdateBuilder.Update("问题记录").Column("常见问题", state).Where("id", id).Execute();
  1918. }
  1919. public bool CheckRepeat(string id)
  1920. {
  1921. return base.SqlBuilder.SqlText("select id from 项目个性化 where 来源问题=:bh").Parameters("bh", id).Select().Rows.Count > 0;
  1922. }
  1923. #endregion
  1924. #region 保存研发/测试处理人
  1925. public int SaveDevTest(string id, string dev, string test)
  1926. {
  1927. try
  1928. {
  1929. var YFRY = "";
  1930. if (!dev.IsNullOrEmpty())//获取研发人员
  1931. {
  1932. YFRY = this.SelectBuilder.From("人员信息").Columns("姓名").Where("ID", dev).Select().Rows[0]["姓名"].ToString();
  1933. }
  1934. var CSCLR = "";
  1935. if (!test.IsNullOrEmpty())//获取测试人员
  1936. {
  1937. CSCLR = this.SelectBuilder.From("人员信息").Columns("姓名").Where("ID", test).Select().Rows[0]["姓名"].ToString();
  1938. }
  1939. return base.UpdateBuilder.Update("问题记录").Column("研发处理人ID", dev).Column("测试处理人ID", test).Column("研发处理人", YFRY).Column("测试处理人", CSCLR).Where("ID", id).Execute();
  1940. }
  1941. catch (Exception ex)
  1942. {
  1943. Logger.Instance.Error("保存研发/测试处理人发生异常错误", ex);
  1944. }
  1945. return 1;//固定返回
  1946. }
  1947. #endregion
  1948. }
  1949. }