McaSecVMstDal.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. using Cksoft.Data;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using DllEapEntity.Dtos;
  6. using System.Linq;
  7. using Cksoft.Unity;
  8. namespace DllEapDal
  9. {
  10. /// <summary>
  11. /// 机台事件主档
  12. /// </summary>
  13. public class McaSecVMstDal
  14. {
  15. public McaSecVMstDal(IDatabase db)
  16. {
  17. CurrDb = db;
  18. }
  19. private IDatabase CurrDb;
  20. /// <summary>
  21. /// 机台某一时间段报警统计(柱状图)
  22. /// </summary>
  23. /// <param name="startTime"></param>
  24. /// <param name="endTime"></param>
  25. /// <returns></returns>
  26. public ChartDto CreateCategory(string filter)
  27. {
  28. var dto = GetAlarmAnalysis(filter, "name", "asc");
  29. var chartDto = new ChartDto
  30. {
  31. text = "机台报警统计",
  32. legend = new string[] { "报警次数" },
  33. xdata = dto.Select(c => c.name).ToArray(),
  34. ydata = dto.Select(c => (float)c.count).ToArray()
  35. };
  36. return chartDto;
  37. }
  38. /// <summary>
  39. /// 机台报警次数分析
  40. /// </summary>
  41. /// <param name="startTime"></param>
  42. /// <param name="endTime"></param>
  43. /// <returns></returns>
  44. public IEnumerable<AnalysisDto> GetAlarmAnalysis(string filter, string sort = "name", string order = "asc")
  45. {
  46. if (string.IsNullOrEmpty(sort) || sort == "null")
  47. sort = "name";
  48. if (string.IsNullOrEmpty(order) || order == "null")
  49. order = "asc";
  50. string sql = "select McaCode as name,sum(1) as count,c.FName as macname,a.McaCode as maccode,c.FModel as macmodel,d.PCode from McaSecVMst a "
  51. + "left join McaSecTime b on a.ID = b.PreID "
  52. + "left join Machine c on a.McaCode = c.FCode "
  53. + "left join MacTProcess d on c.ID = d.MacID "
  54. + "left join TProcess e on d.PCode = e.FCode "
  55. + $"where 1=1 {filter} and a.EventCode='C00007' "
  56. + $"group by McaCode,c.FName,c.FCode,c.FModel,d.PCode order by {sort} {order} ";
  57. var dtos = CurrDb.FindList<AnalysisDto>(sql);
  58. return dtos;
  59. }
  60. /// <summary>
  61. /// 报警代码分析
  62. /// </summary>
  63. /// <param name="startTime"></param>
  64. /// <param name="endTime"></param>
  65. /// <param name="macModel"></param>
  66. /// <param name="pCode"></param>
  67. /// <returns></returns>
  68. public IEnumerable<AnalysisDto> GetAlarmCodeAnalysis(string filter, string sort = "name", string order = "asc")
  69. {
  70. if (string.IsNullOrEmpty(sort) || sort == "null")
  71. sort = "name";
  72. if (string.IsNullOrEmpty(order) || order == "null")
  73. order = "asc";
  74. string sql = "select f.FVal as name,g.Fval as description,SUM(1) as count from McaSecVMst a "
  75. + "left join McaSecTime b on a.ID = b.PreID "
  76. + "left join Machine c on a.McaCode = c.FCode "
  77. + "left join MacModel d on c.FModel = d.FCode "
  78. + "left join MacTProcess e on c.ID = e.MacID "
  79. + "left join (select * from McaSecVDetail where FNum=2) f on a.ID=f.PreID "
  80. + "left join (select * from McaSecVDetail where FNum=3) g on a.ID=g.PreID "
  81. + $"where 1=1 {filter} and a.EventCode = 'C00007' "
  82. + filter
  83. + $"group by f.FVal,g.FVal order by {sort} {order}";
  84. var dtos = CurrDb.FindList<AnalysisDto>(sql);
  85. return dtos;
  86. }
  87. /// <summary>
  88. /// 根据报警代码进行统计分析
  89. /// </summary>
  90. /// <param name="startTime"></param>
  91. /// <param name="endTime"></param>
  92. /// <param name="macModel"></param>
  93. /// <param name="pCode"></param>
  94. /// <returns></returns>
  95. public ChartDto CreateAlarmCat(string filter)
  96. {
  97. var dto = this.GetAlarmCodeAnalysis(filter);
  98. var chartDto = new ChartDto
  99. {
  100. text = "报警统计",
  101. legend = new string[] { "报警次数" },
  102. xdata = dto.Select(c => c.name).ToArray(),
  103. ydata = dto.Select(c => (float)c.count).ToArray()
  104. };
  105. return chartDto;
  106. }
  107. /// <summary>
  108. /// 获取报警代码详情
  109. /// </summary>
  110. /// <param name="filter"></param>
  111. /// <param name="sort"></param>
  112. /// <param name="order"></param>
  113. /// <returns></returns>
  114. public IEnumerable<AlarmCode> GetAramCodeDetail(string filter, int start, int end, string sort = "b.ptime", string order = "desc")
  115. {
  116. if (string.IsNullOrEmpty(sort) || sort == "null")
  117. sort = "b.ptime";
  118. if (string.IsNullOrEmpty(order) || order == "null")
  119. order = "desc";
  120. string sql = $"select * from(select row_number() over (order by {sort} {order}) as rowNum,a.McaCode as maccode,c.FName as macname,f.FVal as name,h.FVal as description,e.Pcode,g.FName as pname,c.Fmodel as macmodel,b.ptime from McaSecVMst a "
  121. + "left join McaSecTime b on a.ID = b.PreID "
  122. + "left join Machine c on a.McaCode = c.FCode "
  123. + "left join MacModel d on c.FModel = d.FCode "
  124. + "left join MacTProcess e on c.ID = e.MacID "
  125. + "left join (select * from McaSecVDetail where FNum=2) f on a.ID=f.PreID "
  126. + "left join (select * from McaSecVDetail where FNum=3) h on a.ID=h.PreID "
  127. + "left join TProcess g on e.Pcode=g.FCode "
  128. + $"where 1=1 {filter} and a.EventCode = 'C00007' "
  129. + filter
  130. + $" ) t where t.rowNum>={start} and t.rowNum<{end}";
  131. return CurrDb.FindList<AlarmCode>(sql);
  132. }
  133. public int GetAralrCodeCount(string filter)
  134. {
  135. string sql = "select count(1) from McaSecVMst a "
  136. + "left join McaSecTime b on a.ID = b.PreID "
  137. + "left join Machine c on a.McaCode = c.FCode "
  138. + "left join MacModel d on c.FModel = d.FCode "
  139. + "left join MacTProcess e on c.ID = e.MacID "
  140. + "left join (select * from McaSecVDetail where FNum=3) h on a.ID=h.PreID "
  141. + "left join TProcess g on e.Pcode=g.FCode "
  142. + $"where 1=1 {filter} and a.EventCode = 'C00007' "
  143. + filter;
  144. return Convert.ToInt32(CurrDb.FindList<string>(sql).FirstOrDefault() ?? "0");
  145. }
  146. public IEnumerable<AlarmCode> GetMsts(string filter)
  147. {
  148. string sql = "select a.McaCode as maccode,c.FName as macname,f.FVal as name,h.FVal as description,e.Pcode,g.FName as pname,c.Fmodel as macmodel,a.EventCode,b.ptime,d.FName as macmodelname " +
  149. " from McaSecVMst a "
  150. + "left join McaSecTime b on a.ID = b.PreID "
  151. + "left join Machine c on a.McaCode = c.FCode "
  152. + "left join MacModel d on c.FModel = d.FCode "
  153. + "left join MacTProcess e on c.ID = e.MacID "
  154. + "left join (select * from McaSecVDetail where FNum=2) f on a.ID=f.PreID "
  155. + "left join (select * from McaSecVDetail where FNum=3) h on a.ID=h.PreID "
  156. + "left join TProcess g on e.Pcode=g.FCode "
  157. + $" where a.EventCode='C00007' or a.EventCode='C00008' {filter}";
  158. var msts = CurrDb.FindList<AlarmCode>(sql).OrderBy(c => c.name);
  159. return msts;
  160. }
  161. /// <summary>
  162. /// 分析报警代码记录获取报警开始时间和结束时间
  163. /// </summary>
  164. /// <param name="msts"></param>
  165. /// <returns></returns>
  166. public IEnumerable<McaVMstADto> AppendTime(IList<AlarmCode> msts, string type)
  167. {
  168. var mstStarts = msts.Where(c => c.eventCode == "C00007"); //报警开始的记录
  169. // var mstEnds = msts.Where(c => c.EventCode == "C00008"); //报警解除的记录
  170. List<McaVMstADto> dtos = new List<McaVMstADto>();
  171. switch (type)
  172. {
  173. case "machine":
  174. dtos.AddRange(mstStarts.Select(c => new McaVMstADto()
  175. {
  176. Name = c.macname,
  177. StartTime = c.ptime,
  178. Desc = c.description,
  179. FCode = c.maccode,
  180. ErrorCode = c.name
  181. }));
  182. foreach (var item in dtos)
  183. {
  184. var endItem = msts.Where(c => c.maccode == item.FCode && c.eventCode == "C00008" && c.ptime > item.StartTime).OrderBy(c => c.ptime).FirstOrDefault();
  185. if (endItem == null)
  186. {
  187. continue;
  188. }
  189. item.EndTime = endItem.ptime;
  190. }
  191. break;
  192. case "macmodel":
  193. dtos.AddRange(mstStarts.Select(c => new McaVMstADto()
  194. {
  195. Name = c.macmodelname,
  196. StartTime = c.ptime,
  197. Desc = c.description,
  198. FCode = c.macmodel,
  199. ErrorCode = c.name
  200. }));
  201. foreach (var item in dtos)
  202. {
  203. var endItem = msts.Where(c => c.macmodel == item.FCode && c.eventCode == "C00008" && c.ptime > item.StartTime).OrderBy(c => c.ptime).FirstOrDefault();
  204. if (endItem == null)
  205. {
  206. continue;
  207. }
  208. item.EndTime = endItem.ptime;
  209. }
  210. break;
  211. case "process":
  212. dtos.AddRange(mstStarts.Select(c => new McaVMstADto()
  213. {
  214. Name = c.pname,
  215. StartTime = c.ptime,
  216. Desc = c.description,
  217. FCode = c.pcode,
  218. ErrorCode = c.name
  219. }));
  220. foreach (var item in dtos)
  221. {
  222. var endItem = msts.Where(c => c.macmodel == item.FCode && c.eventCode == "C00008" && c.ptime > item.StartTime).OrderBy(c => c.ptime).FirstOrDefault();
  223. if (endItem == null)
  224. {
  225. continue;
  226. }
  227. item.EndTime = endItem.ptime;
  228. }
  229. break;
  230. }
  231. return dtos.Where(c => c.EndTime != null);
  232. }
  233. /// <summary>
  234. /// 获取MTBF统计
  235. /// </summary>
  236. /// <param name="mcaVMsts"></param>
  237. /// <returns></returns>
  238. public IEnumerable<MTBFDto> GetMTBFs(string filter, string type)
  239. {
  240. var msts = GetMsts(filter).ToList();
  241. var mcaVMsts = AppendTime(msts, type);
  242. var groups = mcaVMsts.GroupBy(c => new { c.FCode, c.Name });
  243. var list = new List<MTBFDto>();
  244. foreach (var item in groups)
  245. {
  246. var mtbf = new MTBFDto()
  247. {
  248. name = item.Key.Name,
  249. count = item.Count(),
  250. code = item.Key.FCode,
  251. minutes = item.Sum(c =>
  252. {
  253. return (float)(c.EndTime - c.StartTime).Value.Seconds / 60f;
  254. })
  255. };
  256. mtbf.MTBF = mtbf.count / mtbf.minutes;
  257. list.Add(mtbf);
  258. }
  259. return list;
  260. }
  261. /// <summary>
  262. /// 组装返回客户端的最终数据
  263. /// </summary>
  264. /// <param name="filter"></param>
  265. /// <param name="type"></param>
  266. /// <returns></returns>
  267. public LineDateDto GetAlarmTimeDtos(string filter, string type)
  268. {
  269. var dtos = GetDatasFromDb(filter, type);
  270. if (dtos == null || dtos.Count() == 0)
  271. return null;
  272. var dateStart = dtos.Min(c => c.Time); //统计开始时间
  273. var dateEnd = dtos.Max(c => c.Time); //统计结束时间
  274. TimeSpan timeSpan = dateEnd - dateStart;
  275. var days = (int)Math.Ceiling(timeSpan.TotalDays);
  276. var groups = dtos.GroupBy(c => c.Name);
  277. var series = new List<LineSeries>();
  278. if (groups != null && groups.Count() > 0)
  279. {
  280. foreach (var item in groups)
  281. {
  282. var temps = dtos.Where(c => c.Name == item.Key).ToList();
  283. for (var i = 0; i <= days; i++)
  284. {
  285. if (temps.FirstOrDefault(c => c.Time == dateStart.AddDays(i)) == null)
  286. {
  287. temps.Add(new AlarmTimeDto()
  288. {
  289. Name = item.Key,
  290. Count = 0,
  291. Time = dateStart.AddMinutes(i)
  292. });
  293. }
  294. }
  295. series.Add(new LineSeries()
  296. {
  297. Name = item.Key,
  298. AlarmTimeDtos = temps.OrderBy(c => c.Time)
  299. });
  300. }
  301. }
  302. var dates = new List<DateTime>();
  303. for (var j = 0; j <= days; j++)
  304. {
  305. dates.Add(dateStart.AddDays(j));
  306. }
  307. var lineDateDto = new LineDateDto()
  308. {
  309. LineSeries = series,
  310. Dates = dates
  311. };
  312. return lineDateDto;
  313. }
  314. /// <summary>
  315. /// 从数据库中读取原始统计数据
  316. /// </summary>
  317. /// <param name="filter"></param>
  318. /// <param name="type"></param>
  319. /// <returns></returns>
  320. private IEnumerable<AlarmTimeDto> GetDatasFromDb(string filter, string type)
  321. {
  322. string sql = string.Empty;
  323. switch (type)
  324. {
  325. case "machine":
  326. sql = $" select mcacode as name,SUM(1) as count,SUBSTRING(CONVERT(varchar(50),b.ptime,20),0,11) time from McaSecVMst a "
  327. + "left join McaSecTime b on a.ID = b.PreID "
  328. + "where mcacode in (select top 10 mcacode from McaSecVMst where EventCode = 'C00007' group by McaCode order by count(1) desc) "
  329. + $"and EventCode = 'C00007' {filter} "
  330. + "group by McaCode,SUBSTRING(CONVERT(varchar(50), b.ptime, 20), 0, 11) order by McaCode,SUBSTRING(CONVERT(varchar(50), b.ptime, 20), 0, 11) ";
  331. break;
  332. case "macmodel":
  333. sql = $" select c.FModel as name,SUM(1) as count,SUBSTRING(CONVERT(varchar(50),b.ptime,20),0,11) time from McaSecVMst a "
  334. + "left join McaSecTime b on a.ID = b.PreID "
  335. + "left join Machine c on a.mcacode=c.FCode "
  336. + "where c.FModel in (select top 10 FModel from McaSecVMst e,Machine f where e.mcacode=f.Fcode and e.EventCode = 'C00007' " +
  337. "group by f.FModel order by count(1) desc) "
  338. + $"and EventCode = 'C00007' {filter} "
  339. + "group by c.FModel,SUBSTRING(CONVERT(varchar(50), b.ptime, 20), 0, 11) order by c.FModel,SUBSTRING(CONVERT(varchar(50), b.ptime, 20), 0, 11) ";
  340. break;
  341. case "process":
  342. sql = $" select e.FName as name,SUM(1) as count,SUBSTRING(CONVERT(varchar(50),b.ptime,20),0,11) time from McaSecVMst a "
  343. + "left join McaSecTime b on a.ID = b.PreID "
  344. + "left join Machine c on a.mcacode=c.FCode "
  345. + "left join MacTProcess d on c.ID = d.MacID "
  346. + "left join TProcess e on d.PCode =e.FCode "
  347. + "where d.PCode in (select top 10 PCode from McaSecVMst h "
  348. + "left join Machine i on h.mcacode=i.Fcode "
  349. + "left join MacTProcess j on i.ID=j.MacID "
  350. + " where h.EventCode = 'C00007' "
  351. + "group by j.PCode order by count(1) desc) "
  352. + $"and EventCode = 'C00007' {filter} "
  353. + "group by e.FName,SUBSTRING(CONVERT(varchar(50), b.ptime, 20), 0, 11) order by e.FName,SUBSTRING(CONVERT(varchar(50), b.ptime, 20), 0, 11) ";
  354. break;
  355. }
  356. IEnumerable<AlarmTimeDto> dtos = CurrDb.FindList<AlarmTimeDto>(sql);
  357. return dtos;
  358. }
  359. /// <summary>
  360. /// 获取数据库中所有的机台的运行开始结束时间
  361. /// </summary>
  362. /// <param name="filter"></param>
  363. /// <returns></returns>
  364. private IEnumerable<McaEffiencyEntity> GetEffiencyEntities(string filter)
  365. {
  366. string sql = @"
  367. select MAX(b.ptime) as endTime,MIN(b.ptime) as startTime,a.mcacode,c.FModel as MacModel,
  368. d.FName as MacModelName,e.PCode,f.FName as PName
  369. from McaSecVMst a
  370. left join McaSecTime b on a.ID=b.PreID
  371. left join Machine c on a.McaCode=c.FCode
  372. left join MacModel d on c.FModel=d.FCode
  373. left join MacTProcess e on c.ID=e.MacID
  374. left join TProcess f on e.PCode=f.FCode "
  375. + $" where 1=1 {filter}"
  376. + " group by a.McaCode,c.FModel,d.FName,e.PCOde,f.FName";
  377. return CurrDb.FindList<McaEffiencyEntity>(sql);
  378. }
  379. /// <summary>
  380. /// 获取以机台为基准的效率统计列表
  381. /// </summary>
  382. /// <param name="filter"></param>
  383. /// <returns></returns>
  384. public IEnumerable<MachineEfficiency> GetMachineEfficienciesGroupByMcaCode(string filter)
  385. {
  386. var datas = GetEffiencyEntities(filter);
  387. var list = new List<MachineEfficiency>();
  388. int j = 0;
  389. foreach (var item in datas)
  390. {
  391. list.Add(new MachineEfficiency
  392. {
  393. Index = ++j,
  394. Count = 1,
  395. Name = item.McaCode,
  396. // RunTime = (item.EndTime - item.StartTime).Value.TotalMinutes,
  397. Key = item.McaCode,
  398. HasChildren = false,
  399. Type = "machine"
  400. });
  401. }
  402. return list;
  403. }
  404. /// <summary>
  405. /// 以机型为基准的效率统计列表
  406. /// </summary>
  407. /// <param name="filter"></param>
  408. /// <returns></returns>
  409. public IEnumerable<MachineEfficiency> GetMachineEfficienciesGroupByMacModel(string filter)
  410. {
  411. var datas = GetEffiencyEntities(filter);
  412. var list = new List<MachineEfficiency>();
  413. var groups = datas.GroupBy(c => new { c.MacModel, c.MacModelName });
  414. int j = 0;
  415. foreach (var item in groups)
  416. {
  417. list.Add(new MachineEfficiency
  418. {
  419. Index = ++j,
  420. Name = item.Key.MacModelName,
  421. Count = item.Count(),
  422. // RunTime = item.Sum(c => (c.EndTime - c.StartTime).Value.TotalMinutes),
  423. Key = item.Key.MacModel,
  424. HasChildren = true,
  425. Type = "macmodel"
  426. });
  427. }
  428. return list;
  429. }
  430. /// <summary>
  431. /// 以制程为基准的效率统计列表
  432. /// </summary>
  433. /// <param name="filter"></param>
  434. /// <returns></returns>
  435. public IEnumerable<MachineEfficiency> GetMachineEfficienciesGroupByPcode(string filter)
  436. {
  437. var datas = GetEffiencyEntities(filter);
  438. var list = new List<MachineEfficiency>();
  439. var groups = datas.GroupBy(c => new { c.PCode, c.PName });
  440. int j = 0;
  441. foreach (var item in groups)
  442. {
  443. list.Add(new MachineEfficiency
  444. {
  445. Index = ++j,
  446. Name = item.Key.PName,
  447. Count = item.Count(),
  448. // RunTime = item.Sum(c => (c.EndTime - c.StartTime).Value.TotalMinutes),
  449. Key = item.Key.PCode,
  450. HasChildren = true,
  451. Type = "pcode"
  452. });
  453. }
  454. return list;
  455. }
  456. //添加采集数据主档
  457. //public McaSecVMst BatMcaSecVMst(McaSecVMst mst,List<McaSecVDetail> details,UInt32 orgnum, string usercode, ref string errorinfo)
  458. //{
  459. // try
  460. // {
  461. // McaSecVMst tempmst = JudgeEventSame(mst, details, ref errorinfo);
  462. // if(!string.IsNullOrEmpty(errorinfo))
  463. // {
  464. // return null;
  465. // }
  466. // if(tempmst!=null)
  467. // {
  468. // mst = tempmst;
  469. // }
  470. // else
  471. // {
  472. // mst = IMcaSecVMst(mst, usercode, ref errorinfo);
  473. // if (mst == null)
  474. // return null;
  475. // }
  476. // McaSecTime entity = IMcaSecTime(mst.ID, mst.ptime, orgnum, usercode, ref errorinfo);
  477. // if (entity == null)
  478. // return null;
  479. // if(details!=null)
  480. // {
  481. // foreach (var item in details)
  482. // item.PreID = mst.ID;
  483. // int result = CurrDb.InsertFor<McaSecVDetail>(details, usercode);
  484. // if (result < 0)
  485. // return null;
  486. // }
  487. // //计算数量
  488. // string sqlstr = $@"update mcasecvmst
  489. // set fcount = (SELECT count(id) FROM mcasectime where preid = {mst.ID})
  490. // where id = {mst.ID}";
  491. // CurrDb.ExecuteBySql(sqlstr);
  492. // return mst;
  493. // }
  494. // catch (Exception e)
  495. // {
  496. // errorinfo = e.Message;
  497. // return null;
  498. // }
  499. //}
  500. public McaSecVMst BatMcaSecVMst(McaSecVMst mst, List<McaSecVDetail> details, UInt32 orgnum, string usercode, ref string errorinfo)
  501. {
  502. try
  503. {
  504. mst = IMcaSecVMst(mst, usercode, ref errorinfo);
  505. if (mst == null)
  506. return null;
  507. McaSecTime entity = IMcaSecTime(mst.ID, mst.ptime, orgnum, usercode, ref errorinfo);
  508. if (entity == null)
  509. return null;
  510. if (details != null)
  511. {
  512. foreach (var item in details)
  513. item.PreID = mst.ID;
  514. int result = CurrDb.InsertFor<McaSecVDetail>(details, usercode);
  515. if (result < 0)
  516. return null;
  517. }
  518. //计算数量
  519. string sqlstr = $@"update mcasecvmst
  520. set fcount = (SELECT count(id) FROM mcasectime where preid = {mst.ID})
  521. where id = {mst.ID}";
  522. CurrDb.ExecuteBySql(sqlstr);
  523. return mst;
  524. }
  525. catch (Exception e)
  526. {
  527. errorinfo = e.ToString();
  528. return null;
  529. }
  530. }
  531. //判断该机台最后事件与当前事件是否相同
  532. private McaSecVMst JudgeEventSame(McaSecVMst mst, List<McaSecVDetail> details,ref string errorinfo)
  533. {
  534. try
  535. {
  536. string condition = $" and a.id=(SELECT max(id) FROM mcasecvmst where McaCode='{mst.McaCode}')";
  537. List<McaSecVMst> temps = CurrDb.FindListForCondition<McaSecVMst>(condition, ref errorinfo).ToList();
  538. if (temps.Count <= 0)
  539. return null;
  540. //小于0,则无需比较参数
  541. if (mst.FType <= 0 && mst.FType == temps[0].FType && mst.FStatus == temps[0].FStatus)
  542. return temps[0];
  543. if (details == null)
  544. return null;
  545. if (mst.FType > 0 && mst.FType == temps[0].FType && mst.FStatus == temps[0].FStatus&&mst.EventCode==temps[0].EventCode)
  546. {
  547. //比较参数
  548. condition = $" and a.preid={temps[0].ID}";
  549. List<McaSecVDetail> orgdetails = CurrDb.FindListForCondition<McaSecVDetail>(condition, ref errorinfo).ToList();
  550. if (details.Count != orgdetails.Count)
  551. return null;
  552. for(int i=0;i<details.Count;i++)
  553. {
  554. if (details[i].FCode != orgdetails[i].FCode || details[i].FVal != orgdetails[i].FVal)
  555. return null;
  556. }
  557. return temps[0];
  558. }
  559. else
  560. {
  561. return null;
  562. }
  563. }
  564. catch(Exception ex)
  565. {
  566. errorinfo = ex.Message.ToString();
  567. return null;
  568. }
  569. }
  570. //添加采集数据主档
  571. public McaSecVMst IMcaSecVMst(McaSecVMst mst, string usercode, ref string errorinfo)
  572. {
  573. try
  574. {
  575. int result = 0;
  576. int id = mst.ID;
  577. result = CurrDb.InsertFor(mst, usercode);
  578. if (result < 0)
  579. {
  580. return null;
  581. }
  582. object objid = CurrDb.FindObject("select @@IDENTITY");
  583. if (objid.ToString() == "")
  584. {
  585. return null;
  586. }
  587. id = int.Parse(objid.ToString());
  588. mst = CurrDb.FindEntityFor<McaSecVMst>(id);
  589. return mst;
  590. }
  591. catch (Exception e)
  592. {
  593. errorinfo = e.Message;
  594. return null;
  595. }
  596. }
  597. public McaSecTime IMcaSecTime(int mstid,DateTime ptime,UInt32 orgnum, string usercode, ref string errorinfo)
  598. {
  599. try
  600. {
  601. McaSecTime entity = new McaSecTime();
  602. entity.PreID = mstid;
  603. entity.ptime = ptime;
  604. entity.OrgFNum = orgnum;
  605. int result = CurrDb.InsertFor(entity, usercode);
  606. if (result < 0)
  607. {
  608. return null;
  609. }
  610. object objid = CurrDb.FindObject("select @@IDENTITY");
  611. if (objid.ToString() == "")
  612. {
  613. return null;
  614. }
  615. int id = int.Parse(objid.ToString());
  616. entity = CurrDb.FindEntityFor<McaSecTime>(id);
  617. return entity;
  618. }
  619. catch (Exception e)
  620. {
  621. errorinfo = e.Message;
  622. return null;
  623. }
  624. }
  625. }
  626. }