TmtnDevOpsRecordRepository.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. using FluentEmail.Core;
  2. using Newtonsoft.Json;
  3. using Ropin.Inspection.Model;
  4. using Ropin.Inspection.Model.Entities;
  5. using Ropin.Inspection.Model.ViewModel;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data.SqlTypes;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace Ropin.Inspection.Repository
  13. {
  14. public class TmtnDevOpsRepository : RepositoryBase<TMTN_DevOps, string>, ITmtnDevOpsRepository
  15. {
  16. public TmtnDevOpsRepository(InspectionDbContext DbContext) : base(DbContext)
  17. {
  18. }
  19. public Task<IEnumerable<TispRecord30DaysStatistics>> GetRecords30DaysStatisticsAsync(string storeCode)
  20. {
  21. MySqlConnector.MySqlParameter[] parameters = new[] {
  22. new MySqlConnector.MySqlParameter("storeCode", storeCode)};
  23. string sql = @"SELECT date_format(click_date,'%Y%m%d') AS SpecificDay, SUM(if(C_Status='4',1,0)) AS Normal, SUM(if(C_Status='3',1,0)) AS Abnormal, count(C_ID) as Total from(
  24. SELECT
  25. DATE_SUB(CURDATE(), INTERVAL 31 day) AS click_date UNION ALL
  26. SELECT
  27. DATE_SUB(CURDATE(), INTERVAL 30 day) AS click_date UNION ALL
  28. SELECT
  29. DATE_SUB(CURDATE(), INTERVAL 29 day) AS click_date UNION ALL
  30. SELECT
  31. DATE_SUB(CURDATE(), INTERVAL 28 day) AS click_date UNION ALL
  32. SELECT
  33. DATE_SUB(CURDATE(), INTERVAL 27 day) AS click_date UNION ALL
  34. SELECT
  35. DATE_SUB(CURDATE(), INTERVAL 26 day) AS click_date UNION ALL
  36. SELECT
  37. DATE_SUB(CURDATE(), INTERVAL 25 day) AS click_date UNION ALL
  38. SELECT
  39. DATE_SUB(CURDATE(), INTERVAL 24 day) AS click_date UNION ALL
  40. SELECT
  41. DATE_SUB(CURDATE(), INTERVAL 23 day) AS click_date UNION ALL
  42. SELECT
  43. DATE_SUB(CURDATE(), INTERVAL 22 day) AS click_date UNION ALL
  44. SELECT
  45. DATE_SUB(CURDATE(), INTERVAL 21 day) AS click_date UNION ALL
  46. SELECT
  47. DATE_SUB(CURDATE(), INTERVAL 20 day) AS click_date UNION ALL
  48. SELECT
  49. DATE_SUB(CURDATE(), INTERVAL 19 day) AS click_date UNION ALL
  50. SELECT
  51. DATE_SUB(CURDATE(), INTERVAL 18 day) AS click_date UNION ALL
  52. SELECT
  53. DATE_SUB(CURDATE(), INTERVAL 17 day) AS click_date UNION ALL
  54. SELECT
  55. DATE_SUB(CURDATE(), INTERVAL 16 day) AS click_date UNION ALL
  56. SELECT
  57. DATE_SUB(CURDATE(), INTERVAL 15 day) AS click_date UNION ALL
  58. SELECT
  59. DATE_SUB(CURDATE(), INTERVAL 14 day) AS click_date UNION ALL
  60. SELECT
  61. DATE_SUB(CURDATE(), INTERVAL 13 day) AS click_date UNION ALL
  62. SELECT
  63. DATE_SUB(CURDATE(), INTERVAL 12 day) AS click_date UNION ALL
  64. SELECT
  65. DATE_SUB(CURDATE(), INTERVAL 11 day) AS click_date UNION ALL
  66. SELECT
  67. DATE_SUB(CURDATE(), INTERVAL 10 day) AS click_date UNION ALL
  68. SELECT
  69. DATE_SUB(CURDATE(), INTERVAL 9 day) AS click_date UNION ALL
  70. SELECT
  71. DATE_SUB(CURDATE(), INTERVAL 8 day) AS click_date UNION ALL
  72. SELECT
  73. DATE_SUB(CURDATE(), INTERVAL 7 day) AS click_date UNION ALL
  74. SELECT
  75. DATE_SUB(CURDATE(), INTERVAL 6 day) AS click_date UNION ALL
  76. SELECT
  77. DATE_SUB(CURDATE(), INTERVAL 5 day) AS click_date UNION ALL
  78. SELECT
  79. DATE_SUB(CURDATE(), INTERVAL 4 day) AS click_date UNION ALL
  80. SELECT
  81. DATE_SUB(CURDATE(), INTERVAL 3 day) AS click_date UNION ALL
  82. SELECT
  83. DATE_SUB(CURDATE(), INTERVAL 2 day) AS click_date UNION ALL
  84. SELECT
  85. DATE_SUB(CURDATE(), INTERVAL 1 day) AS click_date UNION ALL
  86. SELECT
  87. DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date
  88. ) A LEFT JOIN (
  89. SELECT B.* FROM TISP_Spot A
  90. INNER JOIN TMTN_DevOps B ON B.C_SpotCode = A.C_Code WHERE A.C_StoreCode = @storeCode AND A.C_Status = '1'
  91. ) B ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B.D_CreateOn, '%Y-%m-%d') GROUP BY DATE_FORMAT(A.click_date, '%Y-%m-%d')";
  92. IEnumerable<TispRecord30DaysStatistics> recordlist;
  93. recordlist = EntityFrameworkCoreExtensions.GetList<TispRecord30DaysStatistics>(DbContext.Database, sql, parameters);
  94. return Task.FromResult(recordlist);
  95. }
  96. public Task<IEnumerable<DevOpsFullScreenRecord>> GetDevOpsFullScreenByDevIdAsync(DevOpsItemSearchModel searchModel)
  97. {
  98. MySqlConnector.MySqlParameter[] parameters = new[] {
  99. new MySqlConnector.MySqlParameter("devStoreCode", searchModel.C_DevStoreCode)};
  100. string sql = @"SELECT 2 as ""Type"",store.C_Name as StoreName,ops.D_CreateOn as RecordTime,us.C_Name UserName,CAST(ops.C_Status as SIGNED) Status,ops.C_ID Id
  101. FROM TMTN_DevOps ops -- 维保工单
  102. -- inner JOIN TMTN_DevOpsRecord record on ops.C_ID =record.C_DevOpsCode -- 维保记录
  103. LEFT JOIN TDEV_DevSpot spot on spot.C_SpotCode = ops.C_SpotCode -- 业主设备运维点表
  104. LEFT JOIN TDEV_DevStore store on store .C_ID =spot.C_DevStoreCode -- 业主设备表
  105. LEFT JOIN TSYS_User us on us .C_UserID = ops.C_CreateBy -- 用户表
  106. WHERE 1=1";
  107. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  108. {
  109. sql += " AND spot.C_DevStoreCode = @devStoreCode";
  110. }
  111. sql += " AND ops.C_Status <> '0' ORDER BY ops.D_LastUpdatedOn DESC";
  112. var recordlist = EntityFrameworkCoreExtensions.GetList<DevOpsFullScreenRecord>(DbContext.Database, sql, parameters);
  113. return Task.FromResult(recordlist);
  114. }
  115. public Task<IEnumerable<DevOpsFullScreenRecord>> GetDevRepairFullScreenByDevIdAsync(DevOpsItemSearchModel searchModel)
  116. {
  117. MySqlConnector.MySqlParameter[] parameters = new[] {
  118. new MySqlConnector.MySqlParameter("devStoreCode", searchModel.C_DevStoreCode)};
  119. string sql = @" SELECT 3 as ""Type"",b.C_Name as StoreName,a.D_CreateOn as RecordTime,f.C_Name UserName,CAST(a.C_Status as SIGNED) Status,a.C_ID Id
  120. FROM TMTN_RepairOrder a
  121. LEFT JOIN TDEV_DevStore b on a.C_DevStoreCode =b.C_ID
  122. LEFT JOIN TSYS_User f on f.C_UserID = a.C_LastUpdatedBy
  123. WHERE 1=1 ";
  124. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  125. {
  126. sql += " AND a.C_DevStoreCode = @devStoreCode";
  127. }
  128. sql += " ORDER BY a.D_LastUpdatedOn DESC";
  129. var recordlist = EntityFrameworkCoreExtensions.GetList<DevOpsFullScreenRecord>(DbContext.Database, sql, parameters);
  130. return Task.FromResult(recordlist);
  131. //searchModel.TotalCount = recordlist.First() != null ? recordlist.ToList().Count : 0;
  132. //return Task.FromResult(searchModel.IsPagination ? recordlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : recordlist);
  133. }
  134. public Task<IEnumerable<DevOpsFullScreenRecord>> GetISPRecordAsync(DevOpsItemSearchModel searchModel)
  135. {
  136. MySqlConnector.MySqlParameter[] parameters = new[] {
  137. new MySqlConnector.MySqlParameter("devStoreCode", searchModel.C_DevStoreCode)};
  138. string sql = @"SELECT 1 as ""Type"",store.C_Name as StoreName,record.D_CreateOn as RecordTime,f.C_Name UserName,CAST(record.C_Status as SIGNED) Status,CAST(record.C_ID as char) Id
  139. FROM TISP_Record record
  140. LEFT JOIN TISP_Spot spot ON record.C_SpotCode =spot.C_Code
  141. LEFT JOIN TDEV_DevSpot devSpot on devSpot.C_SpotCode = spot.C_Code -- 业主设备运维点表
  142. LEFT JOIN TDEV_DevStore store on store .C_ID =devSpot.C_DevStoreCode -- 业主设备表
  143. LEFT JOIN TSYS_User f on f.C_UserID = record .C_CreateBy
  144. WHERE 1=1 ";
  145. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  146. {
  147. sql += " AND devSpot.C_DevStoreCode = @devStoreCode";
  148. }
  149. sql += " ORDER BY record.C_CreateBy DESC";
  150. var recordlist = EntityFrameworkCoreExtensions.GetList<DevOpsFullScreenRecord>(DbContext.Database, sql, parameters);
  151. return Task.FromResult(recordlist);
  152. }
  153. public Task<IEnumerable<Record12MonthStatistics>> GetRecord12MonthStatisticsAsync(string storeCode)
  154. {
  155. MySqlConnector.MySqlParameter[] parameters = new[] {
  156. new MySqlConnector.MySqlParameter("storeCode", storeCode)};
  157. string sql = @"SELECT date_format(click_date,'%m') AS SpecificMonth, SUM(CASE C_Status WHEN 4 THEN 1 ELSE 0 END) AS RecordCount from(
  158. SELECT
  159. DATE_SUB(CURDATE(), INTERVAL 12 month) AS click_date UNION ALL
  160. SELECT
  161. DATE_SUB(CURDATE(), INTERVAL 11 month) AS click_date UNION ALL
  162. SELECT
  163. DATE_SUB(CURDATE(), INTERVAL 10 month) AS click_date UNION ALL
  164. SELECT
  165. DATE_SUB(CURDATE(), INTERVAL 9 month) AS click_date UNION ALL
  166. SELECT
  167. DATE_SUB(CURDATE(), INTERVAL 8 month) AS click_date UNION ALL
  168. SELECT
  169. DATE_SUB(CURDATE(), INTERVAL 7 month) AS click_date UNION ALL
  170. SELECT
  171. DATE_SUB(CURDATE(), INTERVAL 6 month) AS click_date UNION ALL
  172. SELECT
  173. DATE_SUB(CURDATE(), INTERVAL 5 month) AS click_date UNION ALL
  174. SELECT
  175. DATE_SUB(CURDATE(), INTERVAL 4 month) AS click_date UNION ALL
  176. SELECT
  177. DATE_SUB(CURDATE(), INTERVAL 3 month) AS click_date UNION ALL
  178. SELECT
  179. DATE_SUB(CURDATE(), INTERVAL 2 month) AS click_date UNION ALL
  180. SELECT
  181. DATE_SUB(CURDATE(), INTERVAL 1 month) AS click_date UNION ALL
  182. SELECT
  183. DATE_SUB(CURDATE(), INTERVAL 0 month) AS click_date
  184. ) A LEFT JOIN (SELECT B.D_CreateOn,B.C_Status,B.C_ID from TMTN_DevOps B INNER JOIN TISP_Spot C ON C.C_Code = B.C_SpotCode WHERE C.C_StoreCode =@storeCode AND C.C_Status = '1') B ON DATE_FORMAT(A.click_date, '%Y-%m') = DATE_FORMAT(B.D_CreateOn, '%Y-%m') GROUP BY DATE_FORMAT(A.click_date, '%Y-%m')";
  185. IEnumerable<Record12MonthStatistics> recordlist;
  186. recordlist = EntityFrameworkCoreExtensions.GetList<Record12MonthStatistics>(DbContext.Database, sql, parameters);
  187. return Task.FromResult(recordlist);
  188. }
  189. public Task<IEnumerable<TmtnDevOpsWithImageViewModel>> GetDevOpsWithImageAsync(TmtnDevOpsOrderSearchModel searchModel)
  190. {
  191. MySqlConnector.MySqlParameter[] parameters = new[] {
  192. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  193. new MySqlConnector.MySqlParameter("StoreCode", searchModel.C_StoreCode),
  194. new MySqlConnector.MySqlParameter("Status", searchModel.C_Status)};
  195. // string sql = @"SELECT H.C_ID, A.*,B.C_Url
  196. //FROM TMTN_DevOps A
  197. //LEFT JOIN TMTN_DevOpsRecordApp B ON B.C_DevOpsContentCode = A.C_ID
  198. //LEFT JOIN TISP_Spot C ON C.C_Code = A.C_SpotCode
  199. //LEFT JOIN TDEV_DevSpot D ON D.C_SpotCode = C.C_Code
  200. //LEFT JOIN TDEV_DevStore H ON H.C_ID = D.C_DevStoreCode
  201. //WHERE 1=1";
  202. string sql = @"SELECT A.*,H.C_ID AS DevStoreCode,H.C_Name AS DevStoreName,H.C_NumberCode AS DevStoreNumberCode,C.C_Name AS SpotName,G.C_Name AS UserName,H.C_Url AS DevUrl
  203. FROM TMTN_DevOps A
  204. LEFT JOIN TISP_Spot C ON C.C_Code = A.C_SpotCode
  205. LEFT JOIN TDEV_DevSpot D ON D.C_SpotCode = C.C_Code
  206. LEFT JOIN TDEV_DevStore H ON H.C_ID = D.C_DevStoreCode
  207. LEFT JOIN TSYS_User G ON G.C_UserID = A.C_CreateBy
  208. WHERE 1=1";
  209. if (!string.IsNullOrEmpty(searchModel.C_StoreCode))
  210. {
  211. sql += " AND H.C_StoreCode = @StoreCode";
  212. }
  213. if (!string.IsNullOrEmpty(searchModel.C_Status))
  214. {
  215. sql += " AND A.C_Status = @Status";
  216. }
  217. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  218. {
  219. sql += " AND H.C_ID = @DevStoreCode";
  220. }
  221. //if (searchModel.Start != DateTime.MinValue && searchModel.End != DateTime.MinValue)
  222. //{
  223. // sql += " AND A.D_CreateOn BETWEEN @Start AND @End";
  224. //}
  225. sql += " ORDER BY A.D_CreateOn DESC";
  226. IEnumerable<TmtnDevOpsWithImageViewModel> spotlist = EntityFrameworkCoreExtensions.GetList<TmtnDevOpsWithImageViewModel>(DbContext.Database, sql, parameters);
  227. searchModel.TotalCount = spotlist.First() != null ? spotlist.ToList().Count : 0;
  228. return Task.FromResult(searchModel.IsPagination ? spotlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : spotlist);
  229. }
  230. }
  231. public class TmtnDevOpsRecordRepository : RepositoryBase<TMTN_DevOpsRecord, Guid>, ITmtnDevOpsRecordRepository
  232. {
  233. public TmtnDevOpsRecordRepository(InspectionDbContext DbContext) : base(DbContext)
  234. {
  235. }
  236. public Task<IEnumerable<TmtnDevOpsDetailViewModel>> GetDevOpsAsync(TmtnDevOpsDetailSearchModel searchModel)
  237. {
  238. MySqlConnector.MySqlParameter[] parameters = new[] {
  239. new MySqlConnector.MySqlParameter("spotCode", searchModel.C_SpotID),
  240. new MySqlConnector.MySqlParameter("userCode", searchModel.C_UserID),
  241. new MySqlConnector.MySqlParameter("areaCode", searchModel.C_AreaCode),
  242. new MySqlConnector.MySqlParameter("StoreCode", searchModel.C_StoreCode),
  243. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  244. new MySqlConnector.MySqlParameter("Status", searchModel.C_Status),
  245. new MySqlConnector.MySqlParameter("DevOpsCode", "%" +searchModel.C_DevOpsCode+"%"),
  246. new MySqlConnector.MySqlParameter("Start", searchModel.Start),
  247. new MySqlConnector.MySqlParameter("End", searchModel.End),
  248. new MySqlConnector.MySqlParameter("devOpsStatus", searchModel.DevOpsStatus),
  249. new MySqlConnector.MySqlParameter("name", "%" +searchModel.C_Name+"%")
  250. };
  251. // string sql = @"SELECT C.C_DevStoreCode,H.C_Name AS DevStoreName,H.C_NumberCode AS DevStoreNumberCode, A.*,B.C_GPS,B.C_Name,B.C_Number,B.C_Position,B.C_QRCode,B.C_Remark,B.C_ImageUrl, D.C_Name AS C_CreateByName,E.C_Name AS C_LastUpdatedByName
  252. //FROM TMTN_DevOpsRecord A
  253. //LEFT JOIN TMTN_SpotDevOpsContent F ON F.C_DevOpsContentCode = A.C_SpotDevOpsContentCode
  254. //LEFT JOIN TISP_Spot B ON B.C_Code = F.C_SpotCode
  255. //LEFT JOIN TDEV_DevSpot C ON C.C_SpotCode = B.C_Code
  256. //LEFT JOIN TDEV_DevStore H ON H.C_ID = C.C_DevStoreCode
  257. //LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  258. //LEFT JOIN TSYS_User E ON E.C_UserID = A.C_LastUpdatedBy
  259. //WHERE B.C_StoreCode = @StoreCode";
  260. string sql = @"SELECT G.C_ID AS C_DevOpsCode,G.C_Name AS DevOpsName,G.C_Status AS DevOpsStatus, C.C_DevStoreCode,H.C_Name AS DevStoreName,H.C_NumberCode AS DevStoreNumberCode,H.C_OpsTempCode,H.C_PlanTempCode,H.C_RepairTempCode,H.C_RunTempCode, A.*,B.C_GPS,B.C_Name,B.C_Number,B.C_Position,B.C_QRCode,B.C_Remark,B.C_ImageUrl, D.C_Name AS C_CreateByName,E.C_Name AS C_LastUpdatedByName
  261. FROM TMTN_DevOpsRecord A
  262. LEFT JOIN TMTN_SpotDevOpsContent F ON F.C_DevOpsContentCode = A.C_SpotDevOpsContentCode
  263. LEFT JOIN TISP_Spot B ON B.C_Code = F.C_SpotCode
  264. LEFT JOIN TDEV_DevSpot C ON C.C_SpotCode = B.C_Code
  265. LEFT JOIN TDEV_DevStore H ON H.C_ID = C.C_DevStoreCode
  266. LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  267. LEFT JOIN TSYS_User E ON E.C_UserID = A.C_LastUpdatedBy
  268. INNER JOIN TMTN_DevOps G ON G.C_ID = A.C_DevOpsCode
  269. WHERE 1=1";
  270. if (!string.IsNullOrEmpty(searchModel.C_StoreCode))
  271. {
  272. sql += " AND B.C_StoreCode = @StoreCode";
  273. }
  274. if (!string.IsNullOrEmpty(searchModel.C_Status))
  275. {
  276. sql += " AND A.C_Status = @Status";
  277. }
  278. if (!string.IsNullOrEmpty(searchModel.DevOpsStatus))
  279. {
  280. if (searchModel.DevOpsStatus=="!1")
  281. {
  282. sql += " AND G.C_Status!=1 ";
  283. }
  284. else
  285. {
  286. sql += " AND G.C_Status=@devOpsStatus ";
  287. }
  288. }
  289. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  290. {
  291. //sql += " AND C.C_DevStoreCode = @DevStoreCode";
  292. sql += " AND (B.C_QRCode = @DevStoreCode OR H.C_ID = @DevStoreCode)";//可能扫到设备码或维保点的二维码
  293. }
  294. if (!string.IsNullOrEmpty(searchModel.C_SpotID))
  295. {
  296. sql += " AND (B.C_Code = @spotCode OR H.C_ID = @spotCode)";
  297. }
  298. //if (searchModel.Abnormal)
  299. //{
  300. // sql += " AND A.C_LastUpdatedBy IS NOT NULL";
  301. //}
  302. if (!string.IsNullOrEmpty(searchModel.C_AreaCode))
  303. {
  304. sql += " AND B.C_AreaCode = @areaCode";
  305. }
  306. if (searchModel.Start != DateTime.MinValue && searchModel.End != DateTime.MinValue)
  307. {
  308. sql += " AND A.D_CreateOn BETWEEN @Start AND @End";
  309. }
  310. if (!string.IsNullOrEmpty(searchModel.C_DevOpsCode))
  311. {
  312. sql += " And G.C_ID Like @DevOpsCode";
  313. }
  314. if (!string.IsNullOrEmpty(searchModel.C_Name))
  315. {
  316. sql += " And B.C_Name Like @name";
  317. }
  318. sql += " GROUP BY A.C_DevOpsCode ORDER BY A.D_CreateOn DESC";
  319. IEnumerable<TmtnDevOpsDetailViewModel> spotlist = EntityFrameworkCoreExtensions.GetList<TmtnDevOpsDetailViewModel>(DbContext.Database, sql, parameters);
  320. searchModel.TotalCount = spotlist.First() != null ? spotlist.ToList().Count : 0;
  321. return Task.FromResult(searchModel.IsPagination ? spotlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : spotlist);
  322. }
  323. public Task<IEnumerable<TmtnDevOpsRecordDetailViewModel>> GetRecordsConditionAsync(TmtnDevOpsRecordDetailSearchModel searchModel)
  324. {
  325. MySqlConnector.MySqlParameter[] parameters = new[] {
  326. //new MySqlConnector.MySqlParameter("start", searchModel.Start),
  327. //new MySqlConnector.MySqlParameter("end", searchModel.End),
  328. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  329. new MySqlConnector.MySqlParameter("DevOpsCode", searchModel.C_DevOpsCode),
  330. new MySqlConnector.MySqlParameter("spotCode", searchModel.C_SpotID),
  331. new MySqlConnector.MySqlParameter("userCode", searchModel.C_UserID),
  332. new MySqlConnector.MySqlParameter("areaCode", searchModel.C_AreaCode),
  333. new MySqlConnector.MySqlParameter("StoreCode", searchModel.C_StoreCode),
  334. new MySqlConnector.MySqlParameter("Start", searchModel.Start),
  335. new MySqlConnector.MySqlParameter("End", searchModel.End)};
  336. //SELECT A.*,B.C_GPS,B.C_Name,B.C_Number,B.C_Position,B.C_QRCode,B.C_Remark FROM TISP_Record A LEFT JOIN TISP_Spot B ON A.C_SpotCode = B.C_Code
  337. //string sql = "SELECT A.*,B.C_GPS,B.C_Name,B.C_Number,B.C_Position,B.C_QRCode,B.C_Remark,B.C_ImageUrl, D.C_Name AS C_CreateByName,E.C_Name AS C_LastUpdatedByName FROM TISP_Record A LEFT JOIN TISP_Spot B ON A.C_SpotCode = B.C_Code LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy LEFT JOIN TSYS_User E ON E.C_UserID = A.C_LastUpdatedBy LEFT JOIN TISP_SpotRoute F ON F.C_SpotCode = A.C_SpotCode WHERE 1=1 AND A.D_CreateOn between @start and @end";
  338. string sql = @"SELECT C.C_DevStoreCode,H.C_Name AS DevStoreName,H.C_NumberCode AS DevStoreNumberCode, A.*,B.C_GPS,B.C_Name,B.C_Number,B.C_Position,B.C_QRCode,B.C_Remark,B.C_ImageUrl, D.C_Name AS C_CreateByName,E.C_Name AS C_LastUpdatedByName
  339. FROM TMTN_DevOpsRecord A
  340. LEFT JOIN TMTN_SpotDevOpsContent F ON F.C_DevOpsContentCode = A.C_SpotDevOpsContentCode
  341. LEFT JOIN TISP_Spot B ON B.C_Code = F.C_SpotCode
  342. LEFT JOIN TDEV_DevSpot C ON C.C_SpotCode = B.C_Code
  343. LEFT JOIN TDEV_DevStore H ON H.C_ID = C.C_DevStoreCode
  344. LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  345. LEFT JOIN TSYS_User E ON E.C_UserID = A.C_LastUpdatedBy
  346. WHERE 1=1";
  347. //if (searchModel.bSolidWaste)
  348. //{
  349. // sql += "AND A.C_SolidWaste IS NOT NULL";
  350. //}
  351. if (!string.IsNullOrEmpty(searchModel.C_DevOpsCode))
  352. {
  353. sql += " AND A.C_DevOpsCode = @DevOpsCode";
  354. }
  355. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  356. {
  357. sql += " AND C.C_DevStoreCode = @DevStoreCode";
  358. }
  359. if (!string.IsNullOrEmpty(searchModel.C_SpotID))
  360. {
  361. sql += " AND B.C_SpotCode = @spotCode";
  362. }
  363. //if (searchModel.Abnormal)
  364. //{
  365. // sql += " AND A.C_LastUpdatedBy IS NOT NULL";
  366. //}
  367. if (!string.IsNullOrEmpty(searchModel.C_AreaCode))
  368. {
  369. sql += " AND B.C_AreaCode = @areaCode";
  370. }
  371. if (searchModel.Start != DateTime.MinValue && searchModel.End != DateTime.MinValue)
  372. {
  373. sql += " AND A.D_CreateOn BETWEEN @Start AND @End";
  374. }
  375. sql += " ORDER BY A.D_CreateOn DESC";
  376. IEnumerable<TmtnDevOpsRecordDetailViewModel> spotlist = EntityFrameworkCoreExtensions.GetList<TmtnDevOpsRecordDetailViewModel>(DbContext.Database, sql, parameters);
  377. searchModel.TotalCount = spotlist.First() != null ? spotlist.ToList().Count : 0;
  378. return Task.FromResult(searchModel.IsPagination ? spotlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : spotlist);
  379. }
  380. public Task<IEnumerable<TmtnDevOpsRecordDetailWithImageViewModel>> GetRecordItemsByRecordIdAsync(string recordId)
  381. {
  382. MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("recordId", recordId) };
  383. string sql = @"SELECT A.*,E.C_AlarmLevel,E.C_Name,C.C_ID AS C_RecordImageId ,C.C_Url AS C_ImageURL,C.C_Status AS RecordImageStatus,D.C_Name AS ReportUserName
  384. FROM TMTN_DevOpsRecord A
  385. LEFT JOIN TMTN_SpotDevOpsContent F ON F.C_DevOpsContentCode = A.C_SpotDevOpsContentCode
  386. LEFT JOIN TMTN_DevOpsContent E ON E.C_ID = F.C_DevOpsContentCode
  387. LEFT JOIN TISP_Spot B ON B.C_Code = F.C_SpotCode
  388. LEFT JOIN TMTN_DevOpsRecordApp C ON C.C_DevOpsContentCode = A.C_ID
  389. LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  390. WHERE A.C_DevOpsCode = @recordId ORDER BY A.D_CreateOn ASC ";
  391. IEnumerable<TmtnDevOpsRecordWithImageViewModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<TmtnDevOpsRecordWithImageViewModel>(DbContext.Database, sql, parameters);
  392. if (null == recordItemlist || recordItemlist.First() == null)
  393. {
  394. IEnumerable<TmtnDevOpsRecordDetailWithImageViewModel> recordItemDetail = null;
  395. return Task.FromResult(recordItemDetail);
  396. }
  397. //var recordContentItemlist = from s in recordItemlist
  398. // group s by s.C_ContentCode into g
  399. // select g;
  400. //List<List<TispRecordItemDetailViewModel>> recordContentItems = new List<List<TispRecordItemDetailViewModel>>() { };
  401. //foreach (var item in recordItemlist)
  402. //{
  403. var q = from b in recordItemlist
  404. group b by b.C_SpotDevOpsContentCode into g
  405. select new TmtnDevOpsRecordDetailWithImageViewModel
  406. {
  407. C_ID = g.Key,
  408. //C_RecordCode = g.First().C_RecordCode,
  409. //C_ContentCode = g.First().C_ContentCode,
  410. C_SpotDevOpsContentCode = g.First().C_SpotDevOpsContentCode,
  411. C_Record = g.First().C_Record,
  412. D_CreateOn = g.First().D_CreateOn,
  413. C_Remark = g.First().C_Remark,
  414. C_Status = g.First().C_Status,
  415. C_AlarmLevel = g.First().C_AlarmLevel,
  416. C_Name = g.First().C_Name,
  417. ReportUserName = g.First().ReportUserName,
  418. RecordImageList = (from c in g where c.C_RecordImageId != null select new MtnRecordImage { C_RecordImageId = c.C_RecordImageId, C_ImageURL = c.C_ImageURL, RecordImageStatus = c.RecordImageStatus, RecordImageName = c.RecordImageName })?.ToList<MtnRecordImage>()?.Distinct(new Compare())?.ToList(),
  419. };
  420. //}
  421. return Task.FromResult(q);
  422. }
  423. public Task<List<List<TmtnDevOpsRecordDetailWithImageViewModel>>> GetRecordItemsGroupByRecordIdAsync(string recordId)
  424. {
  425. MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("recordId", recordId) };
  426. string sql = @"SELECT A.*,E.C_AlarmLevel,E.C_Name,C.C_ID AS C_RecordImageId ,C.C_Url AS C_ImageURL,C.C_Status AS RecordImageStatus,C.C_Name AS RecordImageName,D.C_Name AS ReportUserName
  427. FROM TMTN_DevOpsRecord A
  428. LEFT JOIN TMTN_SpotDevOpsContent F ON F.C_DevOpsContentCode = A.C_SpotDevOpsContentCode
  429. LEFT JOIN TMTN_DevOpsContent E ON E.C_ID = F.C_DevOpsContentCode
  430. LEFT JOIN TISP_Spot B ON B.C_Code = F.C_SpotCode
  431. LEFT JOIN TMTN_DevOpsRecordApp C ON C.C_DevOpsContentCode = A.C_ID
  432. LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  433. WHERE A.C_DevOpsCode = @recordId ORDER BY A.D_CreateOn ASC ";
  434. IEnumerable<TmtnDevOpsRecordWithImageViewModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<TmtnDevOpsRecordWithImageViewModel>(DbContext.Database, sql, parameters);
  435. if (null == recordItemlist || recordItemlist.First() == null)
  436. {
  437. List<List<TmtnDevOpsRecordDetailWithImageViewModel>> recordItemDetail = null;
  438. return Task.FromResult(recordItemDetail);
  439. }
  440. var recordContentItemlist = from s in recordItemlist
  441. group s by s.C_SpotDevOpsContentCode into g
  442. select g;
  443. List<List<TmtnDevOpsRecordDetailWithImageViewModel>> recordContentItems = new List<List<TmtnDevOpsRecordDetailWithImageViewModel>>() { };
  444. foreach (var item in recordContentItemlist)
  445. {
  446. var q = from b in item
  447. group b by new{ b.C_Status,b.C_ID } into g
  448. select new TmtnDevOpsRecordDetailWithImageViewModel
  449. {
  450. C_ID = g.First().C_ID,//g.Key,
  451. //C_RecordCode = g.First().C_RecordCode,
  452. //C_ContentCode = g.First().C_ContentCode,
  453. C_SpotDevOpsContentCode = g.First().C_SpotDevOpsContentCode,
  454. C_Record = g.First().C_Record,
  455. D_CreateOn = g.First().D_CreateOn,
  456. C_Remark = g.First().C_Remark,
  457. C_Status = g.First().C_Status,
  458. C_AlarmLevel = g.First().C_AlarmLevel,
  459. C_Name = g.First().C_Name,
  460. ReportUserName = g.First().ReportUserName,
  461. DevOpsRecordSolidWaste = string.IsNullOrWhiteSpace(g.First().C_SolidWaste)?null:JsonConvert.DeserializeObject<SolidWaste>(g.First().C_SolidWaste),
  462. RecordImageList = (from c in g where c.C_RecordImageId != null select new MtnRecordImage { C_RecordImageId = c.C_RecordImageId, C_ImageURL = c.C_ImageURL, RecordImageStatus = c.RecordImageStatus, RecordImageName = c.RecordImageName })?.ToList<MtnRecordImage>()?.Distinct(new Compare())?.ToList()
  463. ,
  464. };
  465. recordContentItems.Add(q.ToList());
  466. }
  467. return Task.FromResult(recordContentItems);
  468. }
  469. public Task<IEnumerable<TMTN_DevOps>> GetDevOpsList(TmtnDevOpsDetailSearchModel searchModel)
  470. {
  471. MySqlConnector.MySqlParameter[] parameters = new[] {
  472. new MySqlConnector.MySqlParameter("spotCode", searchModel.C_SpotID),
  473. new MySqlConnector.MySqlParameter("userCode", searchModel.C_UserID),
  474. new MySqlConnector.MySqlParameter("areaCode", searchModel.C_AreaCode),
  475. new MySqlConnector.MySqlParameter("StoreCode", searchModel.C_StoreCode),
  476. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  477. new MySqlConnector.MySqlParameter("Status", searchModel.C_Status),
  478. new MySqlConnector.MySqlParameter("DevOpsCode", "%" +searchModel.C_DevOpsCode+"%"),
  479. new MySqlConnector.MySqlParameter("Start", searchModel.Start),
  480. new MySqlConnector.MySqlParameter("End", searchModel.End),
  481. new MySqlConnector.MySqlParameter("devOpsStatus", searchModel.DevOpsStatus),
  482. new MySqlConnector.MySqlParameter("name", "%" +searchModel.C_Name+"%")
  483. };
  484. string sql = @"select G.*,C.C_DevStoreCode from TMTN_DevOps G
  485. LEFT JOIN TDEV_DevSpot C ON G.C_SpotCode = C.C_SpotCode
  486. where 1=1";
  487. if (!string.IsNullOrEmpty(searchModel.C_Status))
  488. {
  489. sql += " and G.C_Status=@Status ";
  490. }
  491. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))
  492. {
  493. sql += " and C.C_DevStoreCode=@DevStoreCode ";
  494. }
  495. IEnumerable<TMTN_DevOps> spotlist = EntityFrameworkCoreExtensions.GetList<TMTN_DevOps>(DbContext.Database, sql, parameters);
  496. return Task.FromResult(spotlist);
  497. }
  498. }
  499. public class Compare : IEqualityComparer<MtnRecordImage>
  500. {
  501. public bool Equals(MtnRecordImage x, MtnRecordImage y)
  502. {
  503. return x.C_RecordImageId == y.C_RecordImageId;
  504. }
  505. public int GetHashCode(MtnRecordImage obj)
  506. {
  507. return obj.C_RecordImageId.GetHashCode();
  508. }
  509. }
  510. }