TmtnRepairOrderRepository.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. using Microsoft.EntityFrameworkCore;
  2. using Ropin.Inspection.Model;
  3. using Ropin.Inspection.Model.Entities;
  4. using Ropin.Inspection.Model.SearchModel;
  5. using Ropin.Inspection.Model.ViewModel;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Security.Cryptography.X509Certificates;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. namespace Ropin.Inspection.Repository
  13. {
  14. public class TmtnRepairOrderRepository : RepositoryBase<TMTN_RepairOrder, string>, ITmtnRepairOrderRepository
  15. {
  16. public TmtnRepairOrderRepository(InspectionDbContext DbContext) : base(DbContext)
  17. {
  18. }
  19. public Task<RepairStatistics> GetRepairStatisticsAsync(string storeCode)
  20. {
  21. MySqlConnector.MySqlParameter[] parameters = new[] {
  22. new MySqlConnector.MySqlParameter("storeCode", storeCode)};
  23. string sql = "";
  24. sql = @"SELECT CASE WHEN ISNULL(SUM(if(C_Status='1',1,0))) THEN 0 ELSE SUM(if(C_Status='1',1,0)) END AS Approval,
  25. CASE WHEN ISNULL(SUM(if(C_Status='2',1,0))) THEN 0 ELSE SUM(if(C_Status='2',1,0)) END AS Confirm ,
  26. CASE WHEN ISNULL(SUM(if(C_Status='3',1,0))) THEN 0 ELSE SUM(if(C_Status='3',1,0)) END AS RepairOn ,
  27. CASE WHEN ISNULL(SUM(if(C_Status='4',1,0))) THEN 0 ELSE SUM(if(C_Status='4',1,0)) END AS Complete,
  28. CASE WHEN ISNULL(SUM(if(C_Status='5',1,0))) THEN 0 ELSE SUM(if(C_Status='5',1,0)) END AS Cancel,
  29. CASE WHEN ISNULL(SUM(if(C_Status='6',1,0))) THEN 0 ELSE SUM(if(C_Status='6',1,0)) END AS RepairRework,
  30. CASE WHEN ISNULL(SUM(if(C_Status='7',1,0))) THEN 0 ELSE SUM(if(C_Status='7',1,0)) END AS RepairCompleted
  31. FROM (
  32. SELECT A.C_Status from TMTN_RepairOrder A
  33. INNER JOIN TDEV_DevStore B
  34. ON A.C_DevStoreCode = B.C_ID
  35. WHERE B.C_StoreCode = @storeCode AND B.C_Status != '0' AND A.D_CreateOn >= date_sub(NOW(),INTERVAL 6 MONTH)
  36. )C
  37. ";
  38. RepairStatistics record;
  39. record = EntityFrameworkCoreExtensions.SqlQuery<RepairStatistics>(DbContext.Database, sql, parameters).FirstOrDefault();
  40. return Task.FromResult(record);
  41. }
  42. public Task<IEnumerable<Record12MonthStatistics>> GetRecord12MonthStatisticsAsync(string storeCode)
  43. {
  44. MySqlConnector.MySqlParameter[] parameters = new[] {
  45. new MySqlConnector.MySqlParameter("storeCode", storeCode)};
  46. string sql = @"SELECT date_format(click_date,'%m') AS SpecificMonth, SUM(CASE C_Status WHEN 4 THEN 1 ELSE 0 END) AS RecordCount from(
  47. SELECT
  48. DATE_SUB(CURDATE(), INTERVAL 12 month) AS click_date UNION ALL
  49. SELECT
  50. DATE_SUB(CURDATE(), INTERVAL 11 month) AS click_date UNION ALL
  51. SELECT
  52. DATE_SUB(CURDATE(), INTERVAL 10 month) AS click_date UNION ALL
  53. SELECT
  54. DATE_SUB(CURDATE(), INTERVAL 9 month) AS click_date UNION ALL
  55. SELECT
  56. DATE_SUB(CURDATE(), INTERVAL 8 month) AS click_date UNION ALL
  57. SELECT
  58. DATE_SUB(CURDATE(), INTERVAL 7 month) AS click_date UNION ALL
  59. SELECT
  60. DATE_SUB(CURDATE(), INTERVAL 6 month) AS click_date UNION ALL
  61. SELECT
  62. DATE_SUB(CURDATE(), INTERVAL 5 month) AS click_date UNION ALL
  63. SELECT
  64. DATE_SUB(CURDATE(), INTERVAL 4 month) AS click_date UNION ALL
  65. SELECT
  66. DATE_SUB(CURDATE(), INTERVAL 3 month) AS click_date UNION ALL
  67. SELECT
  68. DATE_SUB(CURDATE(), INTERVAL 2 month) AS click_date UNION ALL
  69. SELECT
  70. DATE_SUB(CURDATE(), INTERVAL 1 month) AS click_date UNION ALL
  71. SELECT
  72. DATE_SUB(CURDATE(), INTERVAL 0 month) AS click_date
  73. ) A LEFT JOIN (SELECT R.D_CreateOn,R.C_Status from TMTN_RepairOrder R LEFT JOIN TDEV_DevStore D ON R.C_DevStoreCode = D.C_ID WHERE D.C_StoreCode = @storeCode) 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')";
  74. IEnumerable<Record12MonthStatistics> recordlist;
  75. recordlist = EntityFrameworkCoreExtensions.GetList<Record12MonthStatistics>(DbContext.Database, sql, parameters);
  76. return Task.FromResult(recordlist);
  77. }
  78. public Task<IEnumerable<TispRecord30DaysStatistics>> GetRecords30DaysStatisticsAsync(string storeCode)
  79. {
  80. MySqlConnector.MySqlParameter[] parameters = new[] {
  81. new MySqlConnector.MySqlParameter("storeCode", storeCode)};
  82. 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(
  83. SELECT
  84. DATE_SUB(CURDATE(), INTERVAL 31 day) AS click_date UNION ALL
  85. SELECT
  86. DATE_SUB(CURDATE(), INTERVAL 30 day) AS click_date UNION ALL
  87. SELECT
  88. DATE_SUB(CURDATE(), INTERVAL 29 day) AS click_date UNION ALL
  89. SELECT
  90. DATE_SUB(CURDATE(), INTERVAL 28 day) AS click_date UNION ALL
  91. SELECT
  92. DATE_SUB(CURDATE(), INTERVAL 27 day) AS click_date UNION ALL
  93. SELECT
  94. DATE_SUB(CURDATE(), INTERVAL 26 day) AS click_date UNION ALL
  95. SELECT
  96. DATE_SUB(CURDATE(), INTERVAL 25 day) AS click_date UNION ALL
  97. SELECT
  98. DATE_SUB(CURDATE(), INTERVAL 24 day) AS click_date UNION ALL
  99. SELECT
  100. DATE_SUB(CURDATE(), INTERVAL 23 day) AS click_date UNION ALL
  101. SELECT
  102. DATE_SUB(CURDATE(), INTERVAL 22 day) AS click_date UNION ALL
  103. SELECT
  104. DATE_SUB(CURDATE(), INTERVAL 21 day) AS click_date UNION ALL
  105. SELECT
  106. DATE_SUB(CURDATE(), INTERVAL 20 day) AS click_date UNION ALL
  107. SELECT
  108. DATE_SUB(CURDATE(), INTERVAL 19 day) AS click_date UNION ALL
  109. SELECT
  110. DATE_SUB(CURDATE(), INTERVAL 18 day) AS click_date UNION ALL
  111. SELECT
  112. DATE_SUB(CURDATE(), INTERVAL 17 day) AS click_date UNION ALL
  113. SELECT
  114. DATE_SUB(CURDATE(), INTERVAL 16 day) AS click_date UNION ALL
  115. SELECT
  116. DATE_SUB(CURDATE(), INTERVAL 15 day) AS click_date UNION ALL
  117. SELECT
  118. DATE_SUB(CURDATE(), INTERVAL 14 day) AS click_date UNION ALL
  119. SELECT
  120. DATE_SUB(CURDATE(), INTERVAL 13 day) AS click_date UNION ALL
  121. SELECT
  122. DATE_SUB(CURDATE(), INTERVAL 12 day) AS click_date UNION ALL
  123. SELECT
  124. DATE_SUB(CURDATE(), INTERVAL 11 day) AS click_date UNION ALL
  125. SELECT
  126. DATE_SUB(CURDATE(), INTERVAL 10 day) AS click_date UNION ALL
  127. SELECT
  128. DATE_SUB(CURDATE(), INTERVAL 9 day) AS click_date UNION ALL
  129. SELECT
  130. DATE_SUB(CURDATE(), INTERVAL 8 day) AS click_date UNION ALL
  131. SELECT
  132. DATE_SUB(CURDATE(), INTERVAL 7 day) AS click_date UNION ALL
  133. SELECT
  134. DATE_SUB(CURDATE(), INTERVAL 6 day) AS click_date UNION ALL
  135. SELECT
  136. DATE_SUB(CURDATE(), INTERVAL 5 day) AS click_date UNION ALL
  137. SELECT
  138. DATE_SUB(CURDATE(), INTERVAL 4 day) AS click_date UNION ALL
  139. SELECT
  140. DATE_SUB(CURDATE(), INTERVAL 3 day) AS click_date UNION ALL
  141. SELECT
  142. DATE_SUB(CURDATE(), INTERVAL 2 day) AS click_date UNION ALL
  143. SELECT
  144. DATE_SUB(CURDATE(), INTERVAL 1 day) AS click_date UNION ALL
  145. SELECT
  146. DATE_SUB(CURDATE(), INTERVAL 0 day) AS click_date
  147. ) A LEFT JOIN (
  148. SELECT B.* FROM TDEV_DevStore A
  149. INNER JOIN TMTN_RepairOrder B ON B.C_DevStoreCode = A.C_ID WHERE A.C_StoreCode = @storeCode AND A.C_Status = '1'
  150. ) 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')";
  151. IEnumerable<TispRecord30DaysStatistics> recordlist;
  152. recordlist = EntityFrameworkCoreExtensions.GetList<TispRecord30DaysStatistics>(DbContext.Database, sql, parameters);
  153. return Task.FromResult(recordlist);
  154. }
  155. public Task<IEnumerable<TmtnRepairOrderRecordDetailViewMode>> GetRecordsConditionAsync(TmtnRepairOrderRecordSearchModel searchModel, string licenseCode)
  156. {
  157. var sysUsers = DbContext.Set<TSYS_User>().AsNoTracking().Where(x=>x.C_Status == "1");
  158. var repairOrderItemSet = DbContext.Set<TMTN_RepairOrderItem>();
  159. MySqlConnector.MySqlParameter[] parameters = new[] {
  160. //new MySqlConnector.MySqlParameter("start", searchModel.Start),
  161. //new MySqlConnector.MySqlParameter("end", searchModel.End),
  162. new MySqlConnector.MySqlParameter("spotCode", searchModel.C_SpotID),
  163. new MySqlConnector.MySqlParameter("userCode", searchModel.C_UserID),
  164. new MySqlConnector.MySqlParameter("areaCode", searchModel.C_AreaCode),
  165. new MySqlConnector.MySqlParameter("StoreCode", searchModel.C_StoreCode),
  166. new MySqlConnector.MySqlParameter("DevStoreCode", searchModel.C_DevStoreCode),
  167. new MySqlConnector.MySqlParameter("Status", searchModel.C_Status),
  168. new MySqlConnector.MySqlParameter("RepairOrderCode", "%"+searchModel.C_RepairOrderCode+"%"),
  169. new MySqlConnector.MySqlParameter("name", "%"+searchModel.C_Name+"%"),
  170. new MySqlConnector.MySqlParameter("Start", searchModel.Start),
  171. new MySqlConnector.MySqlParameter("End", searchModel.End)};
  172. //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
  173. //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";
  174. // string sql = @"SELECT A.*,F.C_Name AS DevName,F.C_NumberCode AS DevNumberCode,F.C_OpsTempCode,F.C_PlanTempCode,F.C_RepairTempCode,F.C_RunTempCode,E.C_ImagePath AS DevTempImage, D.C_Name AS CreateByName,E.C_Name AS LastUpdatedByName
  175. //FROM TMTN_RepairOrder A
  176. //LEFT JOIN TDEV_DevStore F ON F.C_ID = A.C_DevStoreCode
  177. //LEFT JOIN TDEV_DeviceTemplate E ON E.C_ID = F.C_DevTempCode
  178. //LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  179. //LEFT JOIN TSYS_User C ON C.C_UserID = A.C_LastUpdatedBy
  180. //WHERE F.C_StoreCode = @StoreCode";
  181. string sql = @"
  182. SELECT A.*,F.C_Url AS DevStoreImage,F.C_Name AS DevName,F.C_NumberCode AS DevNumberCode,F.C_OpsTempCode,F.C_PlanTempCode,F.C_RepairTempCode,F.C_RunTempCode,E.C_ImagePath AS DevTempImage, E.C_Manufacturer,E.C_Parameter,E.C_Marker ,D.C_Name AS CreateByName,E.C_Name AS LastUpdatedByName
  183. FROM TMTN_RepairOrder A
  184. LEFT JOIN TDEV_DevStore F ON F.C_ID = A.C_DevStoreCode
  185. LEFT JOIN TDEV_DevSpot A0 ON A0.C_DevStoreCode = A.C_DevStoreCode INNER JOIN TISP_Spot B0 ON A0.C_SpotCode = B0.C_Code
  186. LEFT JOIN TDEV_DeviceTemplate E ON E.C_ID = F.C_DevTempCode
  187. LEFT JOIN TSYS_User D ON D.C_UserID = A.C_CreateBy
  188. LEFT JOIN TSYS_User C ON C.C_UserID = A.C_LastUpdatedBy
  189. WHERE F.C_StoreCode = @StoreCode
  190. ";
  191. if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode))//DevStoreCode OR C_QRCode
  192. {
  193. sql += " AND (A.C_DevStoreCode = @DevStoreCode OR B0.C_QRCode = @DevStoreCode)";
  194. }
  195. //if (searchModel.Abnormal)
  196. //{
  197. // sql += " AND A.C_LastUpdatedBy IS NOT NULL";
  198. //}
  199. //if (!string.IsNullOrEmpty(searchModel.C_AreaCode))
  200. //{
  201. // sql += " AND A.C_AreaCode = @areaCode";
  202. //}
  203. if (!string.IsNullOrEmpty(searchModel.C_Status))
  204. {
  205. if (searchModel.C_Status=="!1")
  206. {
  207. sql += " AND A.C_Status != 1 ";
  208. }
  209. else
  210. {
  211. sql += " AND A.C_Status = @Status ";
  212. }
  213. }
  214. if (!string.IsNullOrEmpty(searchModel.C_RepairOrderCode))
  215. {
  216. sql += " AND A.C_ID Like @RepairOrderCode";
  217. }
  218. if (!string.IsNullOrEmpty(searchModel.C_Name))
  219. {
  220. sql += " AND A.C_Name Like @name ";
  221. }
  222. if (searchModel.Start != DateTime.MinValue && searchModel.End != DateTime.MinValue)
  223. {
  224. sql += " AND A.D_CreateOn BETWEEN @Start AND @End";
  225. }
  226. sql += " GROUP BY A.C_ID ORDER BY A.D_CreateOn DESC";
  227. IEnumerable<TmtnRepairOrderRecordDetailViewMode> spotlist = EntityFrameworkCoreExtensions.GetList<TmtnRepairOrderRecordDetailViewMode>(DbContext.Database, sql, parameters);
  228. //foreach (var vm in spotlist)
  229. //{
  230. // if (vm == null)
  231. // continue;
  232. // var orderItem_group_datas = from orderItem in repairOrderItemSet.AsNoTracking().Where(t => t.C_RepairCode == vm.C_ID)
  233. // join user in sysUsers on orderItem.C_CreateBy equals user.C_UserID
  234. // where orderItem.C_RepairCode == vm.C_ID
  235. // orderby orderItem.D_CreateOn ascending
  236. // group orderItem by new { orderItem.C_ID,orderItem.C_Remark,orderItem.C_RepairRecord,orderItem.C_Status,orderItem.C_Url,orderItem.D_CreateOn, user.C_Name} into sg
  237. // select new RepairOrderItemViewMode
  238. // {
  239. // C_ID = sg.Key.C_ID,
  240. // D_CreateOn = sg.Key.D_CreateOn,
  241. // C_Remark = sg.Key.C_Remark,
  242. // C_Url = sg.Key.C_Url,
  243. // C_Status = sg.Key.C_Status,
  244. // C_RepairRecord = sg.Key.C_RepairRecord,
  245. // CreateUserName = sg.Key.C_Name,
  246. // };
  247. // vm.RepairOrderRecordItems = orderItem_group_datas;
  248. // var store_dev = (from devStore in DbContext.Set<TDEV_DevStore>().AsNoTracking().Where(t => t.C_ID == vm.C_DevStoreCode)
  249. // join store in DbContext.Set<TPNT_Store>().AsNoTracking() on devStore.C_StoreCode equals store.C_ID.ToString()
  250. // select new
  251. // {
  252. // store.C_LicenseCode,
  253. // store.C_Name,
  254. // devStore.D_CreateOn
  255. // }).FirstOrDefault();
  256. // vm.StoreName = store_dev.C_Name;
  257. // vm.DevCreateOn = store_dev.D_CreateOn;
  258. // var devUserName = (from user in sysUsers
  259. // join userRole in DbContext.Set<TSYS_UserRole>().AsNoTracking() on user.C_UserID equals userRole.C_UserCode
  260. // join role in DbContext.Set<TSYS_Role>().AsNoTracking().Where(t=>t.C_LicenseCode == store_dev.C_LicenseCode && t.C_Status == "1") on userRole.C_RoleCode equals role.C_Code
  261. // select new
  262. // {
  263. // RoleName = role.C_Name,
  264. // user.C_Name,
  265. // user.C_Mobile
  266. // }).ToList();
  267. // devUserName.ToList().ForEach(x=>{
  268. // if(x.RoleName.Contains("设备管理员"))
  269. // vm.DevManager += x.C_Name + " " + x.C_Mobile + " ";
  270. // if(x.RoleName.Contains("设备运维员"))
  271. // vm.DevOpser += x.C_Name + " " + x.C_Mobile + " ";
  272. // });
  273. //}
  274. searchModel.TotalCount = spotlist.First() != null ? spotlist.ToList().Count : 0;
  275. return Task.FromResult(searchModel.IsPagination ? spotlist.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize) : spotlist);
  276. }
  277. }
  278. public class TmtnRepairOrderRepositoryItemApp : RepositoryBase<TMTN_RepairOrderItemApp, string>, ITmtnRepairOrderItemAppRepository
  279. {
  280. public TmtnRepairOrderRepositoryItemApp(InspectionDbContext DbContext) : base(DbContext)
  281. {
  282. }
  283. }
  284. }