TmtnPushMsgResultRepository.cs 11 KB

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