TmtnPushMsgResultRepository.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using Microsoft.Extensions.Primitives;
  2. using Newtonsoft.Json;
  3. using Ropin.Inspection.Model;
  4. using Ropin.Inspection.Model.Entities;
  5. using Ropin.Inspection.Model.ViewModel.DEV;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace Ropin.Inspection.Repository
  12. {
  13. public class TmtnPushMsgResultRepository : RepositoryBase<TMTN_PushMsgResult, string>, ITmtnPushMsgResultRepository
  14. {
  15. public TmtnPushMsgResultRepository(InspectionDbContext DbContext) : base(DbContext)
  16. {
  17. }
  18. public Task<IEnumerable<TMTN_PushMsgResultModel>> GetConditionAsync(TmtnPushMsgResultSearchModel searchModel)
  19. {
  20. MySqlConnector.MySqlParameter[] parameters = new[] {
  21. new MySqlConnector.MySqlParameter("PushMsgToCode", searchModel.C_PushMsgToCode),
  22. new MySqlConnector.MySqlParameter("MsgTypeCode", searchModel.C_MsgTypeCode),
  23. new MySqlConnector.MySqlParameter("status", searchModel.C_Status),
  24. new MySqlConnector.MySqlParameter("generationType", searchModel.I_GenerationType),
  25. new MySqlConnector.MySqlParameter("name", "%"+searchModel.C_Content+"%"),
  26. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  27. new MySqlConnector.MySqlParameter("StoreCode", searchModel.C_StoreCode),
  28. new MySqlConnector.MySqlParameter("Id ", searchModel.C_ID?.ToString()),
  29. new MySqlConnector.MySqlParameter("start ", searchModel.D_Start?.ToString("yyyy-MM-dd")),
  30. new MySqlConnector.MySqlParameter("end ", searchModel.D_End?.ToString("yyyy-MM-dd"))
  31. };
  32. StringBuilder sql = new StringBuilder();
  33. sql.Append(@"select * from (
  34. select p.*,d.C_StoreCode,b.C_Name as C_MsgTypeName ,m.I_GenerationType,m.I_MsgStatus,
  35. (select COUNT(1) from TMTN_AlarmShadowRecord where C_PushMsgResultCode=p.C_ID) as IsVideo
  36. from TMTN_PushMsgResult p
  37. LEFT JOIN TDEV_DevStore d on (p.C_DevStoreCode=d.C_ID)
  38. LEFT JOIN TBDM_CodeDetail b on (b.C_Code=p.C_MsgTypeCode)
  39. LEFT JOIN TSYS_Message m on (p.C_MessageCode=m.C_ID)
  40. )tab where 1=1");
  41. if (!string.IsNullOrEmpty(searchModel.C_PushMsgToCode))
  42. {
  43. sql.Append(" AND C_PushMsgToCode=@PushMsgToCode ");
  44. }
  45. if (!string.IsNullOrEmpty(searchModel.C_Status))
  46. {
  47. sql.Append(" and C_Status=@status ");
  48. }
  49. if (!string.IsNullOrEmpty(searchModel.C_MsgTypeCode))
  50. {
  51. sql.Append($" and (C_MsgTypeCode=@MsgTypeCode or C_Content like '%\"C_MsgTypeCode\":\"{searchModel.C_MsgTypeCode}\"%') ");
  52. }
  53. if (searchModel.MsgTypeList!=null&&searchModel.MsgTypeList.Count>0)
  54. {
  55. StringBuilder contsql= new StringBuilder();
  56. foreach (var item in searchModel.MsgTypeList)
  57. {
  58. contsql.Append($" C_Content like '%\"C_MsgTypeCode\":\"{item}\"%' or ");
  59. }
  60. sql.Append($" and ({contsql.ToString()} C_MsgTypeCode in ('{String.Join("','", searchModel.MsgTypeList)}') ) ");
  61. }
  62. if (!string.IsNullOrEmpty(searchModel.C_ID))
  63. {
  64. sql.Append(" and C_ID = @Id ");
  65. }
  66. if (!string.IsNullOrEmpty(searchModel.C_Content))
  67. {
  68. sql.Append(" and C_Content like @name ");
  69. }
  70. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  71. {
  72. sql.Append(" and C_DevStoreCode=@DevStoreCode");
  73. }
  74. if (!string.IsNullOrEmpty(searchModel.C_StoreCode))
  75. {
  76. sql.Append(" and C_StoreCode=@StoreCode");
  77. }
  78. if (searchModel.I_GenerationType!=null)
  79. {
  80. sql.Append(" and I_GenerationType=@generationType ");
  81. }
  82. if (searchModel.MsgStatus != null&& searchModel.MsgStatus.Count>0)
  83. {
  84. string msgStarus=string.Join(",", searchModel.MsgStatus);
  85. sql.Append($" and I_MsgStatus in ({msgStarus}) ");
  86. }
  87. if (searchModel.D_Start != null && searchModel.D_End != null)
  88. {
  89. sql.Append(" and date_format(D_CreateOn,'%Y-%m-%d') BETWEEN @start AND @end ");
  90. }
  91. //sql.Append(" group by C_PushMsgToCode,C_Content,C_DevStoreCode ");
  92. sql.Append(" order by D_CreateOn desc ");
  93. IEnumerable<TMTN_PushMsgResultModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<TMTN_PushMsgResultModel>(DbContext.Database, sql.ToString(), parameters);
  94. return Task.FromResult(recordItemlist);
  95. }
  96. /// <summary>
  97. /// 消息报警天数计量
  98. /// </summary>
  99. /// <param name="searchModel"></param>
  100. /// <returns></returns>
  101. public Task<DevAlarmCount> GetPushMsgResultContentAsync(TmtnPushMsgResultSearchModel searchModel)
  102. {
  103. MySqlConnector.MySqlParameter[] parameters = new[] {
  104. new MySqlConnector.MySqlParameter("MsgTypeCode", searchModel.C_MsgTypeCode),
  105. new MySqlConnector.MySqlParameter("name", "%"+searchModel.C_Content+"%"),
  106. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  107. new MySqlConnector.MySqlParameter("start ", searchModel.D_Start),
  108. };
  109. StringBuilder sql = new StringBuilder();
  110. sql.Append($"select C_Content,D_CreateOn from SH_HB.TMTN_PushMsgResult where C_Content like '%\"C_MsgTypeCode\":\"MSG_TYPE_011\",\"Subject\":\"设备开启关闭报警\"%' ");
  111. if (!string.IsNullOrEmpty(searchModel.C_Content))
  112. {
  113. sql.Append(" and C_Content like @name ");
  114. }
  115. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  116. {
  117. sql.Append(" and C_DevStoreCode=@DevStoreCode");
  118. }
  119. if (searchModel.D_Start != null)
  120. {
  121. sql.Append(" and D_CreateOn> @start ");
  122. }
  123. sql.Append(" order by D_CreateOn asc ");
  124. IEnumerable<TMTN_PushMsgResultModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<TMTN_PushMsgResultModel>(DbContext.Database, sql.ToString(), parameters);
  125. DateTime? time1=null, time2 = null;
  126. int day = 0; int Hour = 0;int minutes=0;
  127. int dayTotal = 0; int HourTotal = 0; int minutesTotal = 0;
  128. int dayStop = 0; int HourStop = 0; int minutesStop = 0;
  129. int dayStopTotal = 0; int HourStopTotal = 0; int minutesStopTotal = 0;
  130. string FistTime=null,LastTime=null;
  131. foreach (var item in recordItemlist)
  132. {
  133. var msgMode= JsonConvert.DeserializeObject<TpushMsgModel>(item.C_Content);
  134. if (msgMode.Msg== "开启")
  135. {
  136. time1 = string.IsNullOrEmpty(msgMode.CreateOn)?null:Convert.ToDateTime(msgMode.CreateOn);
  137. if (time2!=null&& time1!=null)
  138. {
  139. int dateCompare = DateTime.Compare(time1.Value, time2.Value);
  140. if (dateCompare > 0)//time2小于time1
  141. {
  142. TimeSpan diff = (time1.Value).Subtract(time2.Value);
  143. dayStop = diff.Days;
  144. HourStop= diff.Hours;
  145. minutesStop= diff.Minutes;
  146. minutesStopTotal = minutesStopTotal + minutesStop;
  147. if (minutesStopTotal>=60)
  148. {
  149. HourStopTotal++;
  150. minutesStopTotal = minutesStopTotal - 60;
  151. }
  152. HourStopTotal = HourStopTotal + HourStop;
  153. if (HourStopTotal>=24)
  154. {
  155. dayStopTotal++;
  156. HourStopTotal = HourStopTotal - 24;
  157. }
  158. dayStopTotal = dayStopTotal + dayStop;
  159. }
  160. }
  161. time2 = null;
  162. if (FistTime==null)
  163. {
  164. FistTime = msgMode.CreateOn;
  165. }
  166. }
  167. else if (msgMode.Msg == "关闭"&& time1!=null)
  168. {
  169. LastTime = msgMode.CreateOn;
  170. time2 = string.IsNullOrEmpty(msgMode.CreateOn) ? null : Convert.ToDateTime(msgMode.CreateOn);
  171. TimeSpan timeDiff = (time2.Value).Subtract(time1.Value);
  172. day = timeDiff.Days;
  173. Hour=timeDiff.Hours;
  174. minutes=timeDiff.Minutes;
  175. minutesTotal = minutesTotal + minutes;
  176. if (minutesTotal>=60)
  177. {
  178. HourTotal++;
  179. minutesTotal = minutesTotal - 60;
  180. }
  181. HourTotal = HourTotal + Hour;
  182. if (HourTotal>=24)
  183. {
  184. dayTotal++;
  185. HourTotal = HourTotal - 24;
  186. }
  187. dayTotal = dayTotal + day;
  188. }
  189. }
  190. DevAlarmCount alarmCount = new DevAlarmCount();
  191. alarmCount.FiratOnDate = FistTime;
  192. alarmCount.LastOffDate = LastTime;
  193. alarmCount.nowTime = day + "." + Hour + "." + minutes;
  194. alarmCount.TotalTime = dayTotal + "." + HourTotal + "." + minutesTotal;
  195. alarmCount.nowSpotTime = dayStop + "." + HourStop + "." + minutesStop;
  196. alarmCount.TotalSpotTime = dayStopTotal + "." + HourStopTotal + "." + minutesStopTotal;
  197. return Task.FromResult(alarmCount);
  198. }
  199. }
  200. }