ProductDBservice.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. using QWPlatform.IService;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using PMS.BusinessModels.Account;
  8. using PMS.BusinessModels.Problem;
  9. using System.Data;
  10. using QWPlatform.SystemLibrary.LogManager;
  11. using QWPlatform.SystemLibrary;
  12. using PMS.EntityModels.Problem;
  13. using PMS.Plugins.Common;
  14. namespace PMS.DBService.ProductManager
  15. {
  16. public class ProductDBservice : DataServiceBase
  17. {
  18. protected override void DBFctory(string conName)
  19. {
  20. base.DBFctory(conName);
  21. }
  22. //登记产品问题
  23. public ProblemStateModel RegisterProductProblem(ProblemBusinessModel model, UserInfo user, string id)
  24. {
  25. ProblemStateModel state = new ProblemStateModel();
  26. try
  27. {
  28. //根据项目产品模块ID获取产品ID
  29. string CPID = SelectProjectModualInfo(model.CPID).Rows[0]["产品ID"].ToString();
  30. state.Count = 0;
  31. //问题性质
  32. int Nature = SelectNature(model.WTXZ).Rows[0]["代码"].ToInt32();
  33. //读取紧急程度
  34. DataTable dt = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.JJDM).Select();
  35. string JJCD = dt.Rows[0]["代码"].ToString();
  36. var FKR = string.Empty;//反馈人
  37. if (!string.IsNullOrEmpty(model.FKR) && model.FKR.Length > 0)
  38. {
  39. DataTable dd = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.FKR).Select();
  40. if (dd.Rows.Count == 0)
  41. {
  42. FKR = model.FKR;
  43. }
  44. else
  45. {
  46. FKR = dd.Rows[0]["姓名"].ToString();
  47. }
  48. }
  49. if (model.YFCLRID.IsNullOrEmpty())//获取研发人员
  50. {
  51. model.YFCLR = "";
  52. }
  53. else
  54. {
  55. model.YFCLR = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.YFCLRID).Select().Rows[0]["姓名"].ToString();
  56. }
  57. if (model.CSCLRID.IsNullOrEmpty())//获取测试人员
  58. {
  59. model.CSCLR = "";
  60. }
  61. else
  62. {
  63. model.CSCLR = SelectBuilder.From("人员信息").Columns("姓名").Where("ID", model.CSCLRID).Select().Rows[0]["姓名"].ToString();
  64. }
  65. int? FromID = null;
  66. if (!string.IsNullOrEmpty(model.LYDM))
  67. { //来源代码
  68. FromID = SelectBuilder.From("基础编码").Columns("代码").Where("ID", model.LYDM).Select().Rows[0]["代码"]
  69. .ToInt32();
  70. }
  71. //登记问题是否选择机构
  72. if (!model.JGID.IsNullOrEmpty())
  73. {
  74. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID", model.JGID).Select();
  75. }
  76. else
  77. {
  78. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Where("机构ID is null").Select();
  79. }
  80. if(dt==null)
  81. {
  82. dt = SelectBuilder.From("项目问题流程").Columns("工作流目录ID").Where("项目ID", model.XMID).Select();
  83. }
  84. //工作流目录ID
  85. int CatalogID = int.Parse((dt.Rows[0]["工作流目录ID"].ToString()));
  86. DataTable dz = SelectBuilder.From("问题工作流程").Columns("ID").Columns("环节ID").Where("目录ID", CatalogID).Where("名称", "研发处理").Select();
  87. int FlowID = dz.Rows[0]["ID"].ToInt32();//流程ID
  88. int RingID = dz.Rows[0]["环节ID"].ToInt32();//环节ID
  89. var time = this.DataBaseBuilder.GetDateTime;
  90. //添加数据到问题记录表中
  91. state.Count = InsertBuilder.Insert("问题记录")
  92. .Column("ID", id)
  93. .Column("编号", model.BH)
  94. .Column("模块ID", model.MKID)
  95. .Column("项目ID", model.XMID)
  96. .Column("渠道ID", model.QDID)
  97. .Column("产品ID", CPID)
  98. .Column("机构ID", model.JGID)
  99. .Column("紧急代码", JJCD)
  100. .Column("紧急描述", model.JJMS)
  101. .Column("要求时间", model.YQSJ)
  102. .Column("问题类型", model.WTLX == null ? 1 : model.WTLX)
  103. .Column("登记人", user.Name)
  104. .Column("登记人ID", user.PersonID)
  105. .Column("版本号", model.BBH)
  106. .Column("问题描述", model.WTMS)
  107. .Column("登记日期", time)
  108. .Column("反馈日期", model.DJRJ)
  109. .Column("问题标题", model.WTBT)
  110. .Column("反馈人", FKR)
  111. .Column("技术支持", 1)
  112. .Column("研发协助", 1)
  113. .Column("项目处理", 1)
  114. .Column("是否终止", 0)
  115. .Column("是否解决", 0)
  116. .Column("环节ID", RingID)
  117. .Column("来源代码", FromID)
  118. .Column("问题性质", Nature)
  119. .Column("是否受理", 1)
  120. .Column("流程ID", FlowID)
  121. .Column("解决版本", model.JJBB)
  122. .Column("受理人", model.SLR)
  123. .Column("受理人ID", model.SLRID)
  124. .Column("受理时间", time)
  125. .Column("BH编号", model.BHBH)
  126. .Column("BH版本", model.BHBB)
  127. .Column("是否发布", model.SFFB == null ? 0 : model.SFFB)
  128. .Column("常见问题", string.IsNullOrEmpty(model.CJWT) ? 0 : 1)
  129. .Column("需要培训", model.XYPX == null ? 0 : model.XYPX)
  130. .Column("内部产品问题", model.NBWT == null ? 0 : model.NBWT)
  131. .Column("修改说明", model.XGSM)
  132. .Column("升级说明", model.SJSM)
  133. .Column("测试说明", model.CSSM)
  134. .Column("关联ID", model.GLID)
  135. .Column("迭代ID", model.DDID)
  136. .Column("研发处理人ID", model.YFCLRID)
  137. .Column("测试处理人ID", model.CSCLRID)
  138. .Column("研发处理人", model.YFCLR)
  139. .Column("测试处理人", model.CSCLR)
  140. .Execute();
  141. if (state.Count == 1)
  142. {
  143. //问题记录过程ID
  144. state.ProblemProcessID = Guid.NewGuid().ToString();
  145. state.Count = InsertBuilder.Insert("问题记录过程")
  146. .Column("ID", state.ProblemProcessID)
  147. .Column("问题ID", id)
  148. .Column("记录人ID", user.PersonID)
  149. .Column("记录时间", time)
  150. .Column("当前流程ID", FlowID)
  151. .Column("状态", 1)
  152. .Column("耗时", 0)
  153. .Column("描述", "登记问题")
  154. .Execute();
  155. }
  156. //是否直接处理
  157. if (model.RegisterType == 2)
  158. {
  159. UpdateBuilder.Update("问题记录")
  160. .Where("ID", id)
  161. .Column("是否解决", 1)
  162. .Column("解决方案", model.JJFA)
  163. .Column("受理人", user.Name)
  164. .Column("是否受理", 1)
  165. .Column("受理人ID", user.PersonID)
  166. .Execute();
  167. var dealtime = this.DataBaseBuilder.GetDateTime;
  168. InsertBuilder.Insert("问题记录过程")
  169. .Column("ID", Guid.NewGuid().ToString())
  170. .Column("问题ID", id)
  171. .Column("记录人ID", user.PersonID)
  172. .Column("记录时间", dealtime.AddSeconds(1))
  173. .Column("结束时间", dealtime.AddSeconds(1))
  174. .Column("当前流程ID", FlowID)
  175. .Column("状态", 7)
  176. .Column("耗时", 0)
  177. .Column("描述", model.JJFA)
  178. .Execute();
  179. UpdateBuilder.Update("问题记录过程").Where("ID", state.ProblemProcessID).Column("结束时间", dealtime.AddSeconds(1)).Execute();
  180. }
  181. return state; ;
  182. }
  183. catch (Exception ex)
  184. {
  185. Logger.Instance.Error("执行RegisterProductProblem出错", ex);
  186. state.Count = 0;
  187. return state;
  188. }
  189. }
  190. //项目产品模块信息
  191. public DataTable SelectProjectModualInfo(string CPID)
  192. {
  193. return SelectBuilder.From("项目产品模块").Columns("产品ID").Columns("版本").Where("ID", CPID).Select();
  194. }
  195. //根据性质ID返回性质代码
  196. public DataTable SelectNature(string wTXZ)
  197. {
  198. return SelectBuilder.From("基础编码").Columns("代码").Columns("显示名").Columns("ID").Where("ID", wTXZ).Where("启用", 1).Select();
  199. }
  200. #region 新处理版本
  201. /// <summary>
  202. /// 获取产品版本
  203. /// </summary>
  204. /// <param name="proid"></param>
  205. /// <returns></returns>
  206. public DataTable GetVersion(string pid)
  207. {
  208. var dt = SqlBuilder.SqlText("select 产品ID,解决版本 from 问题记录 where id=:ID").Parameters("ID", GetFirstId(pid)).Select();
  209. string sql = @" select p.id, p.版本号
  210. from 产品版本配置 p,
  211. (select 解决版本
  212. from 问题记录 x
  213. where x.id =:glid and 是否删除 = 0
  214. and 是否终止 = 0
  215. and 是否回退 = 0) w
  216. where p.产品id = :cpid
  217. and p.版本号 not in
  218. ((select 解决版本
  219. from 问题记录 w
  220. where w.关联id =:glid
  221. and 是否删除 = 0
  222. and 是否终止 = 0
  223. and 是否回退 = 0))
  224. and p.版本号 !=(decode(w.解决版本,null,'无',w.解决版本)) and 状态!=5";
  225. return SqlBuilder.SqlText(sql).Parameters("glid", GetFirstId(pid)).Parameters("cpid", dt.Rows[0]["产品ID"].ToString()).Select();
  226. }
  227. //获取唯一问题序列编号
  228. public DataTable GetSequence()
  229. {
  230. string sql = "select 产品问题记录_编号.nextval from dual";
  231. return SqlBuilder.SqlText(sql).Select();
  232. }
  233. /// <summary>
  234. /// 保存
  235. /// </summary>
  236. /// <param name="pid"></param>
  237. /// <param name="version">版本号</param>
  238. /// <param name="productid">产品ID</param>
  239. /// <param name="user"></param>
  240. /// <returns></returns>
  241. public int SaveVersion(string pid, string version, string productid, UserInfo user)
  242. {
  243. using (var tran = this.DBTransaction.BeginTrans())
  244. {
  245. try
  246. {
  247. var model = SqlBuilder.SqlText("select * from 问题记录 where id=:ID").Parameters("ID", pid).Select().Rows[0];
  248. ProblemBusinessModel proModel = new ProblemBusinessModel();
  249. proModel.GLID = GetFirstId(pid);
  250. if (!string.IsNullOrEmpty(model["产品ID"].ToString()))
  251. {
  252. if (!string.IsNullOrEmpty(productid))
  253. {
  254. model["产品ID"] = productid;
  255. }
  256. proModel.CPID = SqlBuilder.SqlText("select id from 项目产品模块 where 产品id=:CPID").Parameters("CPID", model["产品ID"].ToString()).Select().Rows[0]["id"].ToString();
  257. }
  258. if (!string.IsNullOrEmpty(model["反馈人"].ToString()))
  259. {
  260. var fkr = SqlBuilder.SqlText("select id from 人员信息 where 姓名=:XM").Parameters("XM", model["反馈人"].ToString()).Select();
  261. if(fkr.Rows.Count > 0)
  262. {
  263. proModel.FKR = fkr.Rows[0]["id"].ToString();
  264. }
  265. }
  266. if (!string.IsNullOrEmpty(model["来源代码"].ToString()))
  267. {
  268. proModel.LYDM = GetBaseID("2DDA172A-499A-40CC-BA6A-29AB0FAEEDCB", model["来源代码"].ToString());
  269. }
  270. //proModel.QDID = model["渠道ID"].ToString();
  271. //proModel.XMID = model["项目ID"].ToString();
  272. proModel.QDID = user.CompanyID;//由于维保管控,复制的问题对应项目没有维保记录,所以挂总部渠道,内部登记项目上面
  273. proModel.XMID = "f40e3a7d-f4cf-4f34-aa65-11f06206d7a8";//内部登记
  274. proModel.MKID = model["模块ID"].ToString();
  275. proModel.JJMS = model["紧急描述"].ToString();
  276. proModel.WTBT = model["问题标题"].ToString();
  277. //proModel.JGID = model["机构ID"].ToString();
  278. proModel.NBWT = model["内部产品问题"].ToInt32();
  279. proModel.BBH = version;
  280. proModel.JJDM = GetBaseID("A10D6027-DEDD-4B6D-9549-33830DE52AEA", model["紧急代码"].ToString());
  281. proModel.WTXZ = GetBaseID("AFBA7E41-A62E-4AB0-B861-40BAB5DA6F73", model["问题性质"].ToString());
  282. proModel.DJR = user.Name;
  283. proModel.DJRID = user.PersonID;
  284. proModel.BH = int.Parse(GetSequence().Rows[0]["NEXTVAL"].ToString());
  285. proModel.DJRJ = DataBaseBuilder.GetDateTime;
  286. proModel.RegisterType = 1;
  287. proModel.SLR = model["受理人"].ToString();
  288. proModel.SLRID = model["受理人ID"].ToString();
  289. proModel.WTMS= model["问题描述"].ToString();
  290. var state = RegisterProductProblem(proModel, user, Guid.NewGuid().ToString());
  291. if (state.Count > 0)
  292. {
  293. var count = SqlBuilder.SqlText("select 关联数量 from 问题记录 where id=:ID").Parameters("ID", GetFirstId(pid)).Select().Rows[0]["关联数量"].ToString();
  294. UpdateBuilder.Update("问题记录").Where("ID", GetFirstId(pid)).Column("关联数量", String.IsNullOrEmpty(count) ? 1 : count.ToInt32() + 1).Execute(tran);
  295. }
  296. tran.CommitTrans();
  297. return 1;
  298. }
  299. catch (Exception ex)
  300. {
  301. tran.Rollback();
  302. Logger.Instance.Error("调用SaveVersion时发生异常错误", ex);
  303. return 0;
  304. }
  305. }
  306. }
  307. //递归查原始被关联的问题ID
  308. public string GetFirstId(string pid)
  309. {
  310. var dt = SqlBuilder.SqlText("select id,关联id from 问题记录 where id=:ID").Parameters("ID", pid).Select();
  311. if (!String.IsNullOrEmpty(dt.Rows[0]["关联id"].ToString()))
  312. {
  313. return GetFirstId(dt.Rows[0]["关联id"].ToString());
  314. }
  315. else
  316. {
  317. return dt.Rows[0]["id"].ToString();
  318. }
  319. }
  320. public string GetBaseID(string type, string id)
  321. {
  322. return SqlBuilder.SqlText("select id from 基础编码 where 分类id=:type and 代码=:code").Parameters("type", type).Parameters("code", id).Select().Rows[0]["id"].ToString();
  323. }
  324. //返回关联子版本
  325. public DataTable ShowConnect(string id)
  326. {
  327. return SqlBuilder.SqlText("select '['||编号||'] '||解决版本 as 编号版本 from 问题记录 where 关联id=:ID and 是否删除 = 0 and 是否终止 = 0 and 是否回退 = 0").Parameters("ID", id).Select();
  328. }
  329. #endregion
  330. }
  331. }