LGSLargeScreenRepository.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. using Ropin.Inspection.Model;
  2. using Ropin.Inspection.Model.Entities;
  3. using Ropin.Inspection.Model.SearchModel.LGS;
  4. using Ropin.Inspection.Model.ViewModel;
  5. using Ropin.Inspection.Model.ViewModel.LGS;
  6. using Ropin.Inspection.Repository.LGS.Interface;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace Ropin.Inspection.Repository.LGS
  13. {
  14. public class LGSLargeScreenRepository : RepositoryBase<TLGS_LargeScreen, string>, ILGSLargeScreenRepository
  15. {
  16. public LGSLargeScreenRepository(InspectionDbContext dbContext) : base(dbContext)
  17. {
  18. }
  19. public Task<IEnumerable<LargeScreenViewModel>> GetConditionAsync(LargeScreenSearch searchModel)
  20. {
  21. MySqlConnector.MySqlParameter[] parameters = new[] {
  22. new MySqlConnector.MySqlParameter("Status", searchModel?.C_Status),
  23. new MySqlConnector.MySqlParameter("name", "%"+searchModel?.C_Name+"%"),
  24. new MySqlConnector.MySqlParameter("StoreCode", searchModel?.C_StoreCode),
  25. new MySqlConnector.MySqlParameter("Id ", searchModel?.C_ID)
  26. };
  27. StringBuilder sql = new StringBuilder();
  28. sql.Append(@"select * from (
  29. select l.*,s.C_Name as C_StoreName
  30. from TLGS_LargeScreen l
  31. LEFT JOIN TPNT_Store s on (l.C_StoreCode=s.C_Code)
  32. ) tab where 1=1");
  33. if (!string.IsNullOrEmpty(searchModel.C_Status))
  34. {
  35. sql.Append(" and C_Status=@Status ");
  36. }
  37. if (!string.IsNullOrEmpty(searchModel.C_Name))
  38. {
  39. sql.Append(" and C_Name like @name");
  40. }
  41. if (!string.IsNullOrEmpty(searchModel.C_StoreCode))
  42. {
  43. sql.Append(" and C_StoreCode=@StoreCode ");
  44. }
  45. if (!string.IsNullOrEmpty(searchModel.C_ID))
  46. {
  47. sql.Append(" and C_ID=@Id ");
  48. }
  49. sql.Append(" order by D_CreateOn desc ");
  50. IEnumerable<LargeScreenViewModel> recordItemlist = EntityFrameworkCoreExtensions.GetList<LargeScreenViewModel>(DbContext.Database, sql.ToString(), parameters);
  51. searchModel.TotalCount = recordItemlist.First() != null ? recordItemlist.ToList().Count : 0;
  52. if (recordItemlist.Count() == 1 && recordItemlist.First() == null)
  53. {
  54. recordItemlist = null;
  55. }
  56. return Task.FromResult(searchModel.IsPagination ? recordItemlist?.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : recordItemlist);
  57. }
  58. #region 大屏数据接口
  59. /// <summary>
  60. /// 设备维修、维保、点检 30天统计
  61. /// </summary>
  62. /// <param name="DevStoreCode"></param>
  63. /// <returns></returns>
  64. public Task<IEnumerable<DevOpsRepairISPDaysStatistics>> DevOpsRepairISP30DaysStatistics(string DevStoreCode)
  65. {
  66. MySqlConnector.MySqlParameter[] parameters = new[] {
  67. new MySqlConnector.MySqlParameter("devStoreCode", DevStoreCode)};
  68. string sql = @"SELECT date_format(click_date,'%Y%m%d') AS SpecificDay,
  69. SUM(if(B.C_Status='4',1,0)) AS DevOpsNormal, SUM(if(B.C_Status='3',1,0)) AS DevOpsAbnormal, count(B.C_ID) as DevOpsTotal,
  70. SUM(if(B1.C_Status='4',1,0)) AS RepairOrderNormal, SUM(if(B1.C_Status='3',1,0)) AS RepairOrderAbnormal, count(B1.C_ID) as RepairOrderTotal,
  71. SUM(if(B2.C_Status='1',1,0)) AS ISPNormal, SUM(if(B2.C_Status='2',1,0)) AS ISPAbnormal, count(B2.C_ID) as ISPTotal
  72. from(
  73. SELECT DATE_SUB(CURDATE(), INTERVAL 30 day) AS click_date UNION ALL
  74. SELECT DATE_SUB(CURDATE(), INTERVAL 29 day) AS click_date UNION ALL
  75. SELECT DATE_SUB(CURDATE(), INTERVAL 28 day) AS click_date UNION ALL
  76. SELECT DATE_SUB(CURDATE(), INTERVAL 27 day) AS click_date UNION ALL
  77. SELECT DATE_SUB(CURDATE(), INTERVAL 26 day) AS click_date UNION ALL
  78. SELECT DATE_SUB(CURDATE(), INTERVAL 25 day) AS click_date UNION ALL
  79. SELECT DATE_SUB(CURDATE(), INTERVAL 24 day) AS click_date UNION ALL
  80. SELECT DATE_SUB(CURDATE(), INTERVAL 23 day) AS click_date UNION ALL
  81. SELECT DATE_SUB(CURDATE(), INTERVAL 22 day) AS click_date UNION ALL
  82. SELECT DATE_SUB(CURDATE(), INTERVAL 21 day) AS click_date UNION ALL
  83. SELECT DATE_SUB(CURDATE(), INTERVAL 20 day) AS click_date UNION ALL
  84. SELECT DATE_SUB(CURDATE(), INTERVAL 19 day) AS click_date UNION ALL
  85. SELECT DATE_SUB(CURDATE(), INTERVAL 18 day) AS click_date UNION ALL
  86. SELECT DATE_SUB(CURDATE(), INTERVAL 17 day) AS click_date UNION ALL
  87. SELECT DATE_SUB(CURDATE(), INTERVAL 16 day) AS click_date UNION ALL
  88. SELECT DATE_SUB(CURDATE(), INTERVAL 15 day) AS click_date UNION ALL
  89. SELECT DATE_SUB(CURDATE(), INTERVAL 14 day) AS click_date UNION ALL
  90. SELECT DATE_SUB(CURDATE(), INTERVAL 13 day) AS click_date UNION ALL
  91. SELECT DATE_SUB(CURDATE(), INTERVAL 12 day) AS click_date UNION ALL
  92. SELECT DATE_SUB(CURDATE(), INTERVAL 11 day) AS click_date UNION ALL
  93. SELECT DATE_SUB(CURDATE(), INTERVAL 10 day) AS click_date UNION ALL
  94. SELECT DATE_SUB(CURDATE(), INTERVAL 9 day) AS click_date UNION ALL
  95. SELECT DATE_SUB(CURDATE(), INTERVAL 8 day) AS click_date UNION ALL
  96. SELECT DATE_SUB(CURDATE(), INTERVAL 7 day) AS click_date UNION ALL
  97. SELECT DATE_SUB(CURDATE(), INTERVAL 6 day) AS click_date UNION ALL
  98. SELECT DATE_SUB(CURDATE(), INTERVAL 5 day) AS click_date UNION ALL
  99. SELECT DATE_SUB(CURDATE(), INTERVAL 4 day) AS click_date UNION ALL
  100. SELECT DATE_SUB(CURDATE(), INTERVAL 3 day) AS click_date UNION ALL
  101. SELECT DATE_SUB(CURDATE(), INTERVAL 2 day) AS click_date UNION ALL
  102. SELECT DATE_SUB(CURDATE(), INTERVAL 1 day) AS click_date UNION ALL
  103. SELECT DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date
  104. ) A
  105. LEFT JOIN ( SELECT * FROM TMTN_DevOps WHERE C_Status!='0' AND C_SpotCode in (select C_SpotCode from TDEV_DevSpot where C_DevStoreCode=@devStoreCode )
  106. ) B ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B.D_CreateOn, '%Y-%m-%d')
  107. LEFT JOIN ( SELECT * FROM TMTN_RepairOrder WHERE C_Status!='0' AND C_DevStoreCode =@devStoreCode
  108. ) B1 ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B1.D_CreateOn, '%Y-%m-%d')
  109. LEFT JOIN ( select * from TISP_Record WHERE C_Status!='0' AND C_SpotCode in (select C_SpotCode from TDEV_DevSpot where C_DevStoreCode=@devStoreCode )
  110. ) B2 ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B2.D_CreateOn, '%Y-%m-%d')
  111. GROUP BY DATE_FORMAT(A.click_date, '%Y-%m-%d')";
  112. IEnumerable<DevOpsRepairISPDaysStatistics> recordlist;
  113. recordlist = EntityFrameworkCoreExtensions.GetList<DevOpsRepairISPDaysStatistics>(DbContext.Database, sql, parameters);
  114. return Task.FromResult(recordlist);
  115. }
  116. /// <summary>
  117. /// 设备维修、维保、点检 7天统计
  118. /// </summary>
  119. /// <param name="DevStoreCode"></param>
  120. /// <returns></returns>
  121. public Task<IEnumerable<DevOpsRepairISPDaysStatistics>> DevOpsRepairISP7DaysStatistics(string DevStoreCode)
  122. {
  123. MySqlConnector.MySqlParameter[] parameters = new[] {
  124. new MySqlConnector.MySqlParameter("devStoreCode", DevStoreCode)};
  125. string sql = @"SELECT date_format(click_date,'%Y%m%d') AS SpecificDay,
  126. SUM(if(B.C_Status='4',1,0)) AS DevOpsNormal, SUM(if(B.C_Status='3',1,0)) AS DevOpsAbnormal, count(B.C_ID) as DevOpsTotal,
  127. SUM(if(B1.C_Status='4',1,0)) AS RepairOrderNormal, SUM(if(B1.C_Status='3',1,0)) AS RepairOrderAbnormal, count(B1.C_ID) as RepairOrderTotal,
  128. SUM(if(B2.C_Status='1',1,0)) AS ISPNormal, SUM(if(B2.C_Status='2',1,0)) AS ISPAbnormal, count(B2.C_ID) as ISPTotal
  129. from(
  130. SELECT DATE_SUB(CURDATE(), INTERVAL 6 day) AS click_date UNION ALL
  131. SELECT DATE_SUB(CURDATE(), INTERVAL 5 day) AS click_date UNION ALL
  132. SELECT DATE_SUB(CURDATE(), INTERVAL 4 day) AS click_date UNION ALL
  133. SELECT DATE_SUB(CURDATE(), INTERVAL 3 day) AS click_date UNION ALL
  134. SELECT DATE_SUB(CURDATE(), INTERVAL 2 day) AS click_date UNION ALL
  135. SELECT DATE_SUB(CURDATE(), INTERVAL 1 day) AS click_date UNION ALL
  136. SELECT DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date
  137. ) A
  138. LEFT JOIN ( SELECT * FROM TMTN_DevOps WHERE C_Status!='0' AND C_SpotCode in (select C_SpotCode from TDEV_DevSpot where C_DevStoreCode=@devStoreCode )
  139. ) B ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B.D_CreateOn, '%Y-%m-%d')
  140. LEFT JOIN ( SELECT * FROM TMTN_RepairOrder WHERE C_Status!='0' AND C_DevStoreCode =@devStoreCode
  141. ) B1 ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B1.D_CreateOn, '%Y-%m-%d')
  142. LEFT JOIN ( select * from TISP_Record WHERE C_Status!='0' AND C_SpotCode in (select C_SpotCode from TDEV_DevSpot where C_DevStoreCode=@devStoreCode )
  143. ) B2 ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B2.D_CreateOn, '%Y-%m-%d')
  144. GROUP BY DATE_FORMAT(A.click_date, '%Y-%m-%d')";
  145. IEnumerable<DevOpsRepairISPDaysStatistics> recordlist;
  146. recordlist = EntityFrameworkCoreExtensions.GetList<DevOpsRepairISPDaysStatistics>(DbContext.Database, sql, parameters);
  147. return Task.FromResult(recordlist);
  148. }
  149. /// <summary>
  150. /// 设备维保-天状态统计
  151. /// </summary>
  152. /// <param name="DevStoreCode"></param>
  153. /// <returns></returns>
  154. public Task<IEnumerable<DaysStatusStatistics>> DevOpsDaysStatistics(string DevStoreCode,int days)
  155. {
  156. MySqlConnector.MySqlParameter[] parameters = new[] {
  157. new MySqlConnector.MySqlParameter("devStoreCode", DevStoreCode)};
  158. StringBuilder sql = new StringBuilder();
  159. sql.Append(@"SELECT date_format(click_date,'%Y%m%d') AS SpecificDay,
  160. SUM(if(B.C_Status='1',1,0)) AS Status1,
  161. SUM(if(B.C_Status='2',1,0)) AS Status2,
  162. SUM(if(B.C_Status='3',1,0)) AS Status3,
  163. SUM(if(B.C_Status='4',1,0)) AS Status4,
  164. SUM(if(B.C_Status='5',1,0)) AS Status5,
  165. SUM(if(B.C_Status='6',1,0)) AS Status6,
  166. SUM(if(B.C_Status='7',1,0)) AS Status7,
  167. count(B.C_ID) as StatusTotal
  168. from( ");
  169. if (days > 0)
  170. {
  171. for (int i = days; i >=0; i-- )
  172. {
  173. if (i == 0)
  174. {
  175. sql.Append($" SELECT DATE_SUB(CURDATE(), INTERVAL {i} day) AS click_date ");
  176. }
  177. else
  178. {
  179. sql.Append($" SELECT DATE_SUB(CURDATE(), INTERVAL {i} day) AS click_date UNION ALL ");
  180. }
  181. }
  182. }
  183. else
  184. {
  185. sql.Append(@" SELECT DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date ");
  186. }
  187. sql.Append(@") A
  188. LEFT JOIN ( SELECT * FROM TMTN_DevOps WHERE C_Status!='0' AND C_SpotCode in (select C_SpotCode from TDEV_DevSpot where C_DevStoreCode=@devStoreCode )
  189. ) B ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B.D_CreateOn, '%Y-%m-%d')
  190. GROUP BY DATE_FORMAT(A.click_date, '%Y-%m-%d')");
  191. IEnumerable<DaysStatusStatistics> recordlist;
  192. recordlist = EntityFrameworkCoreExtensions.GetList<DaysStatusStatistics>(DbContext.Database, sql.ToString(), parameters);
  193. return Task.FromResult(recordlist);
  194. }
  195. /// <summary>
  196. /// 设备维修-天状态统计
  197. /// </summary>
  198. /// <param name="DevStoreCode"></param>
  199. /// <returns></returns>
  200. public Task<IEnumerable<DaysStatusStatistics>> RepairOrderDaysStatistics(string DevStoreCode, int days)
  201. {
  202. MySqlConnector.MySqlParameter[] parameters = new[] {
  203. new MySqlConnector.MySqlParameter("devStoreCode", DevStoreCode)};
  204. StringBuilder sql = new StringBuilder();
  205. sql.Append(@"SELECT date_format(click_date,'%Y%m%d') AS SpecificDay,
  206. SUM(if(B.C_Status='1',1,0)) AS Status1,
  207. SUM(if(B.C_Status='2',1,0)) AS Status2,
  208. SUM(if(B.C_Status='3',1,0)) AS Status3,
  209. SUM(if(B.C_Status='4',1,0)) AS Status4,
  210. SUM(if(B.C_Status='5',1,0)) AS Status5,
  211. SUM(if(B.C_Status='6',1,0)) AS Status6,
  212. SUM(if(B.C_Status='7',1,0)) AS Status7,
  213. count(B.C_ID) as StatusTotal
  214. from( ");
  215. if (days > 0)
  216. {
  217. for (int i = days; i >= 0; i--)
  218. {
  219. if (i == 0)
  220. {
  221. sql.Append($" SELECT DATE_SUB(CURDATE(), INTERVAL {i} day) AS click_date ");
  222. }
  223. else
  224. {
  225. sql.Append($" SELECT DATE_SUB(CURDATE(), INTERVAL {i} day) AS click_date UNION ALL ");
  226. }
  227. }
  228. }
  229. else
  230. {
  231. sql.Append(@" SELECT DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date ");
  232. }
  233. sql.Append(@" ) A
  234. LEFT JOIN ( SELECT * FROM TMTN_RepairOrder WHERE C_Status!='0' AND C_DevStoreCode =@devStoreCode
  235. ) B ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B.D_CreateOn, '%Y-%m-%d')
  236. GROUP BY DATE_FORMAT(A.click_date, '%Y-%m-%d')");
  237. IEnumerable<DaysStatusStatistics> recordlist;
  238. recordlist = EntityFrameworkCoreExtensions.GetList<DaysStatusStatistics>(DbContext.Database, sql.ToString(), parameters);
  239. return Task.FromResult(recordlist);
  240. }
  241. /// <summary>
  242. /// 设备点检-天状态统计
  243. /// </summary>
  244. /// <param name="DevStoreCode"></param>
  245. /// <returns></returns>
  246. public Task<IEnumerable<DaysStatusStatistics>> ISPDaysStatistics(string DevStoreCode, int days)
  247. {
  248. MySqlConnector.MySqlParameter[] parameters = new[] {
  249. new MySqlConnector.MySqlParameter("devStoreCode", DevStoreCode)};
  250. StringBuilder sql = new StringBuilder();
  251. sql.Append(@"SELECT date_format(click_date,'%Y%m%d') AS SpecificDay,
  252. SUM(if(B.C_Status='1',1,0)) AS Status1,
  253. SUM(if(B.C_Status='2',1,0)) AS Status2,
  254. SUM(if(B.C_Status='3',1,0)) AS Status3,
  255. count(B.C_ID) as StatusTotal
  256. from( ");
  257. if (days > 0)
  258. {
  259. for (int i = days; i >= 0; i--)
  260. {
  261. if (i == 0)
  262. {
  263. sql.Append($" SELECT DATE_SUB(CURDATE(), INTERVAL {i} day) AS click_date ");
  264. }
  265. else
  266. {
  267. sql.Append($" SELECT DATE_SUB(CURDATE(), INTERVAL {i} day) AS click_date UNION ALL ");
  268. }
  269. }
  270. }
  271. else
  272. {
  273. sql.Append(@" SELECT DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date ");
  274. }
  275. sql.Append(@" ) A
  276. LEFT JOIN ( select * from TISP_Record WHERE C_Status!='0' AND C_SpotCode in (select C_SpotCode from TDEV_DevSpot where C_DevStoreCode=@devStoreCode )
  277. ) B ON DATE_FORMAT(A.click_date, '%Y-%m-%d') = DATE_FORMAT(B.D_CreateOn, '%Y-%m-%d')
  278. GROUP BY DATE_FORMAT(A.click_date, '%Y-%m-%d')");
  279. IEnumerable<DaysStatusStatistics> recordlist;
  280. recordlist = EntityFrameworkCoreExtensions.GetList<DaysStatusStatistics>(DbContext.Database, sql.ToString(), parameters);
  281. return Task.FromResult(recordlist);
  282. }
  283. /// <summary>
  284. /// 维保饼图状态统计
  285. /// </summary>
  286. /// <param name="devCode"></param>
  287. /// <param name="months"></param>
  288. /// <returns></returns>
  289. public Task<RepairStatistics> GeDevOpsStatisticsMonthPieAsync(string devCode, int months)
  290. {
  291. MySqlConnector.MySqlParameter[] parameters = new[] {
  292. new MySqlConnector.MySqlParameter("devCode", devCode),
  293. new MySqlConnector.MySqlParameter("months", months)
  294. };
  295. StringBuilder sql = new StringBuilder();
  296. sql.Append(@"SELECT CASE WHEN ISNULL(SUM(if(C_Status='1',1,0))) THEN 0 ELSE SUM(if(C_Status='1',1,0)) END AS Approval,
  297. CASE WHEN ISNULL(SUM(if(C_Status='2',1,0))) THEN 0 ELSE SUM(if(C_Status='2',1,0)) END AS Confirm ,
  298. CASE WHEN ISNULL(SUM(if(C_Status='3',1,0))) THEN 0 ELSE SUM(if(C_Status='3',1,0)) END AS RepairOn ,
  299. CASE WHEN ISNULL(SUM(if(C_Status='4',1,0))) THEN 0 ELSE SUM(if(C_Status='4',1,0)) END AS Complete,
  300. CASE WHEN ISNULL(SUM(if(C_Status='5',1,0))) THEN 0 ELSE SUM(if(C_Status='5',1,0)) END AS Cancel,
  301. CASE WHEN ISNULL(SUM(if(C_Status='6',1,0))) THEN 0 ELSE SUM(if(C_Status='6',1,0)) END AS RepairRework,
  302. CASE WHEN ISNULL(SUM(if(C_Status='7',1,0))) THEN 0 ELSE SUM(if(C_Status='7',1,0)) END AS RepairCompleted
  303. FROM (
  304. SELECT ops.D_CreateOn as RecordTime,CAST(ops.C_Status as SIGNED) C_Status,ops.C_ID Id
  305. FROM TMTN_DevOps ops -- 维保工单
  306. LEFT JOIN TDEV_DevSpot spot on spot.C_SpotCode = ops.C_SpotCode -- 业主设备运维点表
  307. LEFT JOIN TDEV_DevStore store on store .C_ID =spot.C_DevStoreCode -- 业主设备表
  308. WHERE ops.C_Status!='0' and store.C_Status != '0'
  309. ");
  310. if (!string.IsNullOrEmpty(devCode))
  311. {
  312. sql.Append(" AND spot.C_DevStoreCode =@devCode ");
  313. }
  314. if (months > 0)
  315. {
  316. sql.Append(" AND ops.D_CreateOn >= date_sub(NOW(),INTERVAL @months MONTH) ");
  317. }
  318. sql.Append(")D");
  319. RepairStatistics record;
  320. record = EntityFrameworkCoreExtensions.SqlQuery<RepairStatistics>(DbContext.Database, sql.ToString(), parameters).FirstOrDefault();
  321. return Task.FromResult(record);
  322. }
  323. /// <summary>
  324. /// 维修饼图状态统计
  325. /// </summary>
  326. /// <param name="devCode"></param>
  327. /// <param name="months"></param>
  328. /// <returns></returns>
  329. public Task<RepairStatistics> GeRepairOrderStatisticsMonthPieAsync(string devCode, int months)
  330. {
  331. MySqlConnector.MySqlParameter[] parameters = new[] {
  332. new MySqlConnector.MySqlParameter("devCode", devCode),
  333. new MySqlConnector.MySqlParameter("months", months)
  334. };
  335. StringBuilder sql = new StringBuilder();
  336. sql.Append(@"SELECT CASE WHEN ISNULL(SUM(if(C_Status='1',1,0))) THEN 0 ELSE SUM(if(C_Status='1',1,0)) END AS Approval,
  337. CASE WHEN ISNULL(SUM(if(C_Status='2',1,0))) THEN 0 ELSE SUM(if(C_Status='2',1,0)) END AS Confirm ,
  338. CASE WHEN ISNULL(SUM(if(C_Status='3',1,0))) THEN 0 ELSE SUM(if(C_Status='3',1,0)) END AS RepairOn ,
  339. CASE WHEN ISNULL(SUM(if(C_Status='4',1,0))) THEN 0 ELSE SUM(if(C_Status='4',1,0)) END AS Complete,
  340. CASE WHEN ISNULL(SUM(if(C_Status='5',1,0))) THEN 0 ELSE SUM(if(C_Status='5',1,0)) END AS Cancel,
  341. CASE WHEN ISNULL(SUM(if(C_Status='6',1,0))) THEN 0 ELSE SUM(if(C_Status='6',1,0)) END AS RepairRework,
  342. CASE WHEN ISNULL(SUM(if(C_Status='7',1,0))) THEN 0 ELSE SUM(if(C_Status='7',1,0)) END AS RepairCompleted
  343. FROM (
  344. SELECT A.* FROM TMTN_RepairOrder A -- 维修工单
  345. LEFT JOIN TDEV_DevStore store on store .C_ID =A.C_DevStoreCode -- 业主设备表
  346. WHERE A.C_Status!='0' and store.C_Status != '0'
  347. ");
  348. if (!string.IsNullOrEmpty(devCode))
  349. {
  350. sql.Append(" AND A.C_DevStoreCode =@devCode ");
  351. }
  352. if (months > 0)
  353. {
  354. sql.Append(" AND A.D_CreateOn >= date_sub(NOW(),INTERVAL @months MONTH) ");
  355. }
  356. sql.Append(")D");
  357. RepairStatistics record;
  358. record = EntityFrameworkCoreExtensions.SqlQuery<RepairStatistics>(DbContext.Database, sql.ToString(), parameters).FirstOrDefault();
  359. return Task.FromResult(record);
  360. }
  361. #endregion
  362. }
  363. }