DataCenterDal.cs 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459
  1. using Cksoft.Data;
  2. using DllEapEntity.OFILM;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using DllEapEntity.Dtos;
  8. using System.Data;
  9. using DllEapEntity;
  10. using Microsoft.Extensions.Logging;
  11. namespace DllEapDal.OFILM
  12. {
  13. public class DataCenterDal
  14. {
  15. private IDatabase CurrDb = null;
  16. ILogger<DataCenterDal> logger;
  17. public DataCenterDal(IDatabase db)
  18. {
  19. CurrDb = db;
  20. }
  21. public DataCenterDal( IDatabase db, ILogger<DataCenterDal> logg)
  22. {
  23. CurrDb = db;
  24. this.logger = logg;
  25. }
  26. #region 设备及维修费用
  27. public IEnumerable<ChartEntity> GetMacCount()
  28. {
  29. string sql = @"select FACTORY as Name,count(1) as Value from ccmrpt.CCMMES_FIXED_ASSETS_V group by FACTORY order by FACTORY";
  30. return CurrDb.FindList<ChartEntity>(sql);
  31. }
  32. public IEnumerable<ChartEntity> GetMacCharge(int type = 1)
  33. {
  34. string filter = type == 1 ? " stock<0" : "stock>0";
  35. filter = filter + " and PART_TYPE='OR' ";
  36. DateTime dt = DateTime.Now;
  37. string end = dt.ToString("yyyy-MM-dd 23:59:59");
  38. string start = dt.AddDays(-7).ToString("yyyy-MM-dd 00:00:00");
  39. filter = filter + $"AND CREATED between to_date('{start}','yyyy-mm-dd hh24:mi:ss') and to_date('{end}','yyyy-mm-dd hh24:mi:ss')";
  40. string sql = $@"select FACTORY as Name,sum(stock*price) as Value from ccmrpt.CCMMES_SPARE_PRICE_V where {filter} group by FACTORY order by FACTORY";
  41. return CurrDb.FindList<ChartEntity>(sql);
  42. }
  43. public IEnumerable<ChartEntity> GetMacChargeNew(string filter)
  44. {
  45. string sql = $@" SELECT
  46. t.department Name,
  47. nvl(sum( t.stock * t.price ),0) AS Value
  48. FROM
  49. ccmrpt.CCMMES_SPARE_PRICE_V t
  50. WHERE
  51. 1 = 1
  52. {filter}
  53. AND t.PART_TYPE = 'OR'
  54. and t.department is not null
  55. GROUP BY
  56. t.department
  57. ORDER BY
  58. department ";
  59. return CurrDb.FindList<ChartEntity>(sql);
  60. }
  61. public IEnumerable<ChartEntity> GetMacChargeUser(string filter)
  62. {
  63. string sql = $@" SELECT
  64. trunc(t.CREATED, 'mm') Mon,
  65. t.department Name,
  66. nvl(sum( t.stock * t.price ),0) AS Value
  67. FROM
  68. ccmrpt.CCMMES_SPARE_PRICE_V t
  69. WHERE
  70. 1 = 1
  71. {filter}
  72. AND t.PART_TYPE = 'OR'
  73. and t.department is not null
  74. GROUP BY
  75. trunc(t.CREATED, 'mm'),
  76. t.department
  77. ORDER BY
  78. department , trunc(t.CREATED, 'mm') ";
  79. return CurrDb.FindList<ChartEntity>(sql);
  80. }
  81. public IEnumerable<ChartEntity> GetMacChargeStock(string filter)
  82. {
  83. string sql = $@" SELECT
  84. -- trunc(a.CREATED, 'dd') mon,
  85. (case when (a.factory = '2号园区' and a.warehouse in ('1F-COB', '1F-EOL')) then '设备一课'
  86. when (a.factory = '2号园区' and a.warehouse in ('2F-COB', '2F-EOL')) then '设备二课'
  87. when (a.factory = '2号园区' and a.warehouse in ('3F-COB', '3F-EOL')) then '设备三课'
  88. when (a.factory = '未来城' and a.warehouse in ('1F-COB', '2F-EOL', '3F-EOL')) then '设备四课'
  89. when (a.factory = '3号园区' and a.warehouse in ('1F-COB', '1F-EOL', '2F-EOL')) then '设备五课'
  90. when (a.factory = '未来城' and a.warehouse in ('中央仓库')) then '中央仓库' else null end) Name,
  91. nvl(sum( a.stock * a.price ),0) AS Value
  92. FROM
  93. ccmrpt.CCMMES_SPARE_PRICE_V a
  94. WHERE
  95. 1 = 1
  96. {filter}
  97. -- and a.department is not null
  98. GROUP BY
  99. -- trunc(a.CREATED, 'dd'),
  100. (case when (a.factory = '2号园区' and a.warehouse in ('1F-COB', '1F-EOL')) then '设备一课'
  101. when (a.factory = '2号园区' and a.warehouse in ('2F-COB', '2F-EOL')) then '设备二课'
  102. when (a.factory = '2号园区' and a.warehouse in ('3F-COB', '3F-EOL')) then '设备三课'
  103. when (a.factory = '未来城' and a.warehouse in ('1F-COB', '2F-EOL', '3F-EOL')) then '设备四课'
  104. when (a.factory = '3号园区' and a.warehouse in ('1F-COB', '1F-EOL', '2F-EOL')) then '设备五课'
  105. when (a.factory = '未来城' and a.warehouse in ('中央仓库')) then '中央仓库' else null end) ";
  106. return CurrDb.FindList<ChartEntity>(sql);
  107. }
  108. public IEnumerable<ChartEntity> GetMacChargeStockMonth(string starttime, string endtime)
  109. {
  110. DateTime dt1 = Convert.ToDateTime(endtime);
  111. DateTime dt2 = Convert.ToDateTime(starttime);
  112. int Year = dt2.Year - dt1.Year;
  113. int Month = (dt1.Year - dt2.Year) * 12 + (dt1.Month - dt2.Month);
  114. string sql = $@" SELECT
  115. '{dt1.AddMonths(-1).ToString("yyyy-MM-01")}' mon,
  116. (case when (a.factory = '2号园区' and a.warehouse in ('1F-COB', '1F-EOL')) then '设备一课'
  117. when (a.factory = '2号园区' and a.warehouse in ('2F-COB', '2F-EOL')) then '设备二课'
  118. when (a.factory = '2号园区' and a.warehouse in ('3F-COB', '3F-EOL')) then '设备三课'
  119. when (a.factory = '未来城' and a.warehouse in ('1F-COB', '2F-EOL', '3F-EOL')) then '设备四课'
  120. when (a.factory = '3号园区' and a.warehouse in ('1F-COB', '1F-EOL', '2F-EOL')) then '设备五课'
  121. when (a.factory = '未来城' and a.warehouse in ('中央仓库')) then '中央仓库' else null end) Name,
  122. nvl(sum( a.stock * a.price ),0) AS Value
  123. FROM
  124. ccmrpt.CCMMES_SPARE_PRICE_V a
  125. WHERE
  126. 1 = 1
  127. AND a.CREATED < to_date( '{dt1.AddMonths(1).ToString("yyyy-MM-dd HH:mm:ss")}', 'yyyy-mm-dd hh24:mi:ss' )
  128. GROUP BY
  129. (case when (a.factory = '2号园区' and a.warehouse in ('1F-COB', '1F-EOL')) then '设备一课'
  130. when (a.factory = '2号园区' and a.warehouse in ('2F-COB', '2F-EOL')) then '设备二课'
  131. when (a.factory = '2号园区' and a.warehouse in ('3F-COB', '3F-EOL')) then '设备三课'
  132. when (a.factory = '未来城' and a.warehouse in ('1F-COB', '2F-EOL', '3F-EOL')) then '设备四课'
  133. when (a.factory = '3号园区' and a.warehouse in ('1F-COB', '1F-EOL', '2F-EOL')) then '设备五课'
  134. when (a.factory = '未来城' and a.warehouse in ('中央仓库')) then '中央仓库' else null end) ";
  135. for (int i = 1; i < Month; i++)
  136. {
  137. sql += $@" union all SELECT
  138. '{dt1.AddMonths(-i - 1).ToString("yyyy-MM-01")}' mon,
  139. (case when (a.factory = '2号园区' and a.warehouse in ('1F-COB', '1F-EOL')) then '设备一课'
  140. when (a.factory = '2号园区' and a.warehouse in ('2F-COB', '2F-EOL')) then '设备二课'
  141. when (a.factory = '2号园区' and a.warehouse in ('3F-COB', '3F-EOL')) then '设备三课'
  142. when (a.factory = '未来城' and a.warehouse in ('1F-COB', '2F-EOL', '3F-EOL')) then '设备四课'
  143. when (a.factory = '3号园区' and a.warehouse in ('1F-COB', '1F-EOL', '2F-EOL')) then '设备五课'
  144. when (a.factory = '未来城' and a.warehouse in ('中央仓库')) then '中央仓库' else null end) Name,
  145. nvl(sum( a.stock * a.price ),0) AS Value
  146. FROM
  147. ccmrpt.CCMMES_SPARE_PRICE_V a
  148. WHERE
  149. 1 = 1
  150. AND a.CREATED < to_date( '{dt1.AddMonths(-i + 1).ToString("yyyy-MM-dd HH:mm:ss")}', 'yyyy-mm-dd hh24:mi:ss' )
  151. GROUP BY
  152. (case when (a.factory = '2号园区' and a.warehouse in ('1F-COB', '1F-EOL')) then '设备一课'
  153. when (a.factory = '2号园区' and a.warehouse in ('2F-COB', '2F-EOL')) then '设备二课'
  154. when (a.factory = '2号园区' and a.warehouse in ('3F-COB', '3F-EOL')) then '设备三课'
  155. when (a.factory = '未来城' and a.warehouse in ('1F-COB', '2F-EOL', '3F-EOL')) then '设备四课'
  156. when (a.factory = '3号园区' and a.warehouse in ('1F-COB', '1F-EOL', '2F-EOL')) then '设备五课'
  157. when (a.factory = '未来城' and a.warehouse in ('中央仓库')) then '中央仓库' else null end)
  158. ";
  159. }
  160. return CurrDb.FindList<ChartEntity>(sql);
  161. }
  162. public IEnumerable<ChartEntity> GetMacChargeFirst(int type = 1)
  163. {
  164. string filter = type == 1 ? " stock<0" : "stock>0";
  165. string sql = $@"select FACTORY as Name,sum(stock*price) as Value from ccmrpt.CCMMES_SPARE_PRICE_V where {filter} group by FACTORY order by FACTORY";
  166. return CurrDb.FindList<ChartEntity>(sql);
  167. }
  168. public IEnumerable<MacEntity> GetMacList(int start, int end, string filter, string sort, string order, out int total, ref string errorinfo)
  169. {
  170. string sql = $@"select * from (select rownum as row_number,FACTORY as Factory,LOCATION as Floor,ASSET_NAME as MacName,
  171. ASSET_MODEL as MacModel,ASSET_CODE as AssetCode,EQP_ID as MacCode,DAOCHANG_DATE as EnterDate,
  172. YANSHOU_DATE as CheckDate,YOUXIAO_DATE as ValidDate,ME_NAME as MEName,ME_NO as MENo,WORKSHOP_NAME as WorkShopName,WORKSHOP_NO as WorkShopNo
  173. from ccmrpt.CCMMES_FIXED_ASSETS_V
  174. where 1=1 {filter} order by {sort} {order}) t where t.row_number>={start} and t.row_number<{end}";
  175. string countSql = $"select count(1) from ccmrpt.CCMMES_FIXED_ASSETS_V where 1=1 {filter}";
  176. total = Convert.ToInt32(CurrDb.FindList<string>(countSql).FirstOrDefault() ?? "0");
  177. return CurrDb.FindList<MacEntity>(sql);
  178. }
  179. public IEnumerable<MacChargeEntity> GetMacChargeList(int start, int end, string filter, string sort, string order, out int total, int type, ref string errorinfo)
  180. {
  181. filter += (type == 1 ? " and stock<0" : " and stock>0");
  182. filter = filter + " and PART_TYPE='OR' ";
  183. string sql = $@"select rownum as row_number,t.* from(select FACTORY as Factory,warehouse as Floor,sum(stock*price) as StockCharge from ccmrpt.CCMMES_SPARE_PRICE_V
  184. where 1=1 {filter}
  185. group by FACTORY,warehouse
  186. order by {sort} {order}) t where rownum<{end} and rownum>={start}";
  187. string countSql = $"select count(1) from(select FACTORY,warehouse from ccmrpt.CCMMES_SPARE_PRICE_V where 1=1 {filter} group by FACTORY,warehouse)";
  188. //string sql = $@" select * from (select rownum as row_number,FACTORY as Factory,warehouse as Floor,ITEM as Item,ITEM_DESC as ItemDesc,
  189. // CREATED as CreateDate,stock*price as UseCharge
  190. // from ccmrpt.CCMMES_SPARE_PRICE_V
  191. // where stock*price>0 {filter} and rownum<{end} order by {sort} {order}) t
  192. // where row_number>={start}";
  193. //string countSql = $"select count(1) from ccmrpt.CCMMES_SPARE_PRICE_V where stock*price>0 {filter}";
  194. total = Convert.ToInt32(CurrDb.FindList<string>(countSql).FirstOrDefault() ?? "0");
  195. return CurrDb.FindList<MacChargeEntity>(sql);
  196. }
  197. public IEnumerable<MacChargeEntity> GetMacChargeUserList(int start, int end, string filter, string sort, string order, out int total, int type, ref string errorinfo)
  198. {
  199. filter = filter + " and PART_TYPE='OR' ";
  200. string sql = $@"select rownum as row_number,t.* from(SELECT
  201. t.department Floor,
  202. nvl(sum( t.stock * t.price ),0) AS UseCharge
  203. FROM
  204. ccmrpt.CCMMES_SPARE_PRICE_V t
  205. WHERE
  206. 1 = 1
  207. {filter}
  208. and t.department is not null
  209. GROUP BY
  210. t.department
  211. ORDER BY
  212. department ASC ) t where rownum<{end} and rownum>={start}";
  213. string countSql = $"select count(1) from(select FACTORY,warehouse from ccmrpt.CCMMES_SPARE_PRICE_V where 1=1 {filter} group by FACTORY,warehouse)";
  214. //string sql = $@" select * from (select rownum as row_number,FACTORY as Factory,warehouse as Floor,ITEM as Item,ITEM_DESC as ItemDesc,
  215. // CREATED as CreateDate,stock*price as UseCharge
  216. // from ccmrpt.CCMMES_SPARE_PRICE_V
  217. // where stock*price>0 {filter} and rownum<{end} order by {sort} {order}) t
  218. // where row_number>={start}";
  219. //string countSql = $"select count(1) from ccmrpt.CCMMES_SPARE_PRICE_V where stock*price>0 {filter}";
  220. // total = Convert.ToInt32(CurrDb.FindList<string>(countSql).FirstOrDefault() ?? "0");
  221. var models = CurrDb.FindList<MacChargeEntity>(sql);
  222. total = models.Count();
  223. return models;
  224. }
  225. #endregion
  226. #region 设备状态
  227. public IEnumerable<MacStatusEntity> GetMacStatusList()
  228. {
  229. string sql = @"SELECT a.id AS FactoryId,a.FName AS Factory,c.id AS FloorId,c.fname AS Floor,
  230. ms.StatusID,s.FName as StatusName,d.id as PlantId,d.FName as Plant,
  231. concat('rgb(',s.red,',',s.green,',',s.blue,')') as Color
  232. FROM machine m
  233. inner JOIN factoryregion a ON a.Id=m.FactoryId
  234. INNER JOIN factoryregion b ON b.Id=m.RegionId
  235. INNER JOIN factoryregion c ON c.Id=b.ParentId
  236. INNER JOIN factoryregion d ON d.Id=c.ParentId
  237. inner join macstatus01 ms ON ms.MacCode=m.FCode
  238. inner JOIN standardstatus s ON s.StatusVal=ms.StatusID
  239. WHERE FactoryId!=154";
  240. return CurrDb.FindList<MacStatusEntity>(sql);
  241. }
  242. #endregion
  243. #region 设备MTBA
  244. public IEnumerable<MacMTBAEntity> GetMacMTBA()
  245. {
  246. string sql = $@"SELECT me.StartTime,a.id AS FactoryId,a.FName AS Factory,d.id as PlantId,d.FName as Plant
  247. ,me.EventCode,SUM(me.timelen) AS TimeSpan,sum(me.count) AS Count
  248. from ( SELECT sum(timespan) as timelen,count(1) as count,mcacode,eventcode,DATE_FORMAT(StartTime,'%Y-%m-%d') as StartTime FROM mcaeventstatisticbyday e
  249. WHERE e.StartTime>='{DateTime.Today.AddDays(-6).ToString("yyyy-MM-dd")}'
  250. group by mcacode,eventcode,DATE_FORMAT(StartTime,'%Y-%m-%d')) me
  251. inner join machine mac on mac.FCode=me.McaCode
  252. inner JOIN factoryregion a ON a.Id=mac.FactoryId
  253. INNER JOIN factoryregion b ON b.Id=mac.RegionId
  254. INNER JOIN factoryregion c ON c.Id=b.ParentId
  255. INNER JOIN factoryregion d ON d.Id=c.ParentId
  256. WHERE mac.FactoryId!=154
  257. GROUP BY a.id,a.FName,d.id,d.FName,me.EventCode,me.StartTime";
  258. return CurrDb.FindList<MacMTBAEntity>(sql);
  259. }
  260. public List<MtbaDay> GetMtbaDays(DateTime startTime, DateTime endTime)
  261. {
  262. List<MtbaDay> mtbadays = new List<MtbaDay>();
  263. int days = endTime.Subtract(startTime).Days + 1;
  264. for (int i = 0; i <= days; i++)
  265. {
  266. MtbaDay mtbaDay = new MtbaDay();
  267. if (i == 0)
  268. {
  269. if (startTime < Convert.ToDateTime(startTime.ToString("yyyy-MM-dd") + " 08:30"))
  270. {
  271. mtbaDay.StartTime = startTime;
  272. mtbaDay.EndTime = Convert.ToDateTime(startTime.ToString("yyyy-MM-dd") + " 08:30");
  273. mtbaDay.DayTime = startTime.AddDays(-1);
  274. if (mtbaDay.EndTime > endTime)
  275. {
  276. mtbaDay.EndTime = endTime;
  277. mtbadays.Add(mtbaDay);
  278. break;
  279. }
  280. mtbadays.Add(mtbaDay);
  281. MtbaDay mtbaDay2 = new MtbaDay();
  282. mtbaDay2.StartTime = Convert.ToDateTime(startTime.ToString("yyyy-MM-dd") + " 08:30");
  283. mtbaDay2.EndTime = Convert.ToDateTime(startTime.AddDays(1).ToString("yyyy-MM-dd") + " 08:30");
  284. mtbaDay2.DayTime = startTime;
  285. if (mtbaDay2.EndTime > endTime)
  286. {
  287. mtbaDay2.EndTime = endTime;
  288. mtbadays.Add(mtbaDay2);
  289. break;
  290. }
  291. mtbadays.Add(mtbaDay2);
  292. }
  293. else
  294. {
  295. mtbaDay.StartTime = startTime;
  296. mtbaDay.EndTime = Convert.ToDateTime(startTime.AddDays(1).ToString("yyyy-MM-dd") + " 08:30");
  297. mtbaDay.DayTime = startTime;
  298. if (mtbaDay.EndTime >= endTime)
  299. {
  300. mtbaDay.EndTime = endTime;
  301. mtbadays.Add(mtbaDay);
  302. break;
  303. }
  304. mtbadays.Add(mtbaDay);
  305. }
  306. }
  307. else
  308. {
  309. mtbaDay.StartTime = Convert.ToDateTime(startTime.AddDays(i).ToString("yyyy-MM-dd") + " 08:30");
  310. mtbaDay.EndTime = Convert.ToDateTime(startTime.AddDays(i + 1).ToString("yyyy-MM-dd") + " 08:30");
  311. mtbaDay.DayTime = startTime.AddDays(i);
  312. if (mtbaDay.EndTime >= endTime)
  313. {
  314. mtbaDay.EndTime = endTime;
  315. mtbadays.Add(mtbaDay);
  316. break;
  317. }
  318. mtbadays.Add(mtbaDay);
  319. }
  320. }
  321. return mtbadays;
  322. }
  323. public string CheckTable(DateTime startTime, DateTime endTime, string filter, string subfilter, string sub,ref List<MtbaDay> mtbaDays,string mtbatemp)
  324. {
  325. DelTmp(mtbatemp);
  326. string tablename = GetTableName();
  327. //将数据添加到临时表
  328. // 获取时间区间集合
  329. var mtbadays = GetMtbaDays(startTime, endTime);
  330. mtbaDays = mtbadays;
  331. foreach (var items in mtbadays)
  332. {
  333. logger.LogError("开始获取mtba临时数据");
  334. // 获取当天mtba数据
  335. var mtbaListdetail = GetMacMTBADetail(items.StartTime, items.EndTime, filter, subfilter, sub).ToList();
  336. logger.LogError("完成获取mtba临时数据");
  337. if (mtbaListdetail != null)
  338. {
  339. logger.LogError("开始新增mtba临时数据");
  340. // 将数据插入临时表
  341. InsertMtbaTempory(mtbaListdetail, items.DayTime, tablename);
  342. logger.LogError("完成新增mtba临时数据");
  343. }
  344. }
  345. return tablename;
  346. }
  347. public string GetTableName()
  348. {
  349. string tablename = "mtbatemp" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
  350. string sql = $@"create table {tablename}(
  351. FactoryId int ,
  352. Factory VARCHAR(50),
  353. PlantId INT,
  354. Plant VARCHAR(50),
  355. EventCode VARCHAR(300),
  356. TimeSpan DECIMAL,
  357. Count int,
  358. CountOne int,
  359. CountTwo int,
  360. StartTime datetime,
  361. Floor VARCHAR(50),
  362. ModelCode VARCHAR(50),
  363. MacName VARCHAR(50),
  364. MacCode VARCHAR(50),
  365. name varchar(20)
  366. )Engine = InnoDB default charset utf8; ";
  367. CurrDb.ExecuteBySql(sql);
  368. return tablename;
  369. }
  370. public void DelTmp(string mtbatemp)
  371. {
  372. try
  373. {
  374. int mtba= Convert.ToInt32(mtbatemp);
  375. string sql = $@"SELECT
  376. TABLE_name
  377. FROM
  378. INFORMATION_SCHEMA.TABLES
  379. WHERE
  380. TABLE_SCHEMA = 'eap'
  381. AND TABLE_NAME like 'mtbatemp%'
  382. AND Create_Time <(NOW() - INTERVAL {mtba} HOUR);";
  383. var models = CurrDb.FindList<string>(sql).ToList();
  384. models.Remove("mtbacode");
  385. if (models.Count() > 0)
  386. {
  387. string tablename = String.Join(",", models);
  388. string delsql = $@" drop table {tablename};";
  389. CurrDb.ExecuteBySql(delsql);
  390. }
  391. }
  392. catch
  393. {
  394. }
  395. }
  396. public IEnumerable<MacMTBAEntity> GetMacMTBADetail(DateTime start, DateTime end, string filter, string subfilter, string sub)
  397. {
  398. List<MacMTBAEntity> models = new List<MacMTBAEntity>();
  399. try
  400. {
  401. var day = DateTime.Now.Subtract(start).Days;
  402. string sqls = "";
  403. string dbExist = "";
  404. string tableExist = "";
  405. //一个月内
  406. if (day <= 30)
  407. {
  408. sqls = $@"SELECT
  409. sum( timespan ) AS timelen,
  410. count( 1 ) AS count,
  411. mcacode,
  412. AlarmCode,
  413. eventcode,
  414. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  415. FROM
  416. mcaeventstatisticbyday e
  417. WHERE
  418. StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.ToString("yyyy-MM-dd HH:mm:ss")}' {subfilter}
  419. GROUP BY
  420. mcacode,
  421. eventcode,AlarmCode,
  422. DATE_FORMAT( StartTime, '%Y-%m-%d' ) ";
  423. }
  424. else
  425. {
  426. string table = "";
  427. // 判断时间是否一个月内数据 eap
  428. string year = start.ToString("yyyy");
  429. string month = start.ToString("MM");
  430. //
  431. if (start.ToString("yyyy") == end.ToString("yyyy"))
  432. {
  433. if (start.ToString("MM") == end.ToString("MM"))
  434. {
  435. table = $" eap{year}.mcaeventstatisticbyday{month}";
  436. dbExist = CurrDb.FindList<string>($@"select TABLE_NAME from INFORMATION_SCHEMA.TABLES where
  437. TABLE_SCHEMA = 'eap{year}' and TABLE_NAME = 'mcaeventstatisticbyday{month}'; ").FirstOrDefault();
  438. if (string.IsNullOrEmpty(dbExist))
  439. {
  440. return models;
  441. }
  442. sqls = $@"SELECT
  443. sum( timespan ) AS timelen,
  444. count( 1 ) AS count,
  445. mcacode,
  446. AlarmCode,
  447. eventcode,
  448. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  449. FROM
  450. {table} e
  451. WHERE
  452. StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.ToString("yyyy-MM-dd HH:mm:ss")}' {subfilter}
  453. GROUP BY
  454. mcacode,
  455. eventcode,AlarmCode,
  456. DATE_FORMAT( StartTime, '%Y-%m-%d' ) ";
  457. }
  458. else
  459. {
  460. dbExist = CurrDb.FindList<string>($@"select TABLE_NAME from INFORMATION_SCHEMA.TABLES where
  461. TABLE_SCHEMA = 'eap{year}' and TABLE_NAME = 'mcaeventstatisticbyday{month}'; ").FirstOrDefault();
  462. if (string.IsNullOrEmpty(dbExist))
  463. {
  464. return models;
  465. }
  466. sqls = $@"SELECT
  467. sum( timespan ) AS timelen,
  468. count( 1 ) AS count,
  469. mcacode,
  470. AlarmCode,
  471. eventcode,
  472. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  473. FROM
  474. eap{year}.mcaeventstatisticbyday{month} e
  475. WHERE
  476. StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.ToString("yyyy-MM-dd HH:mm:ss")}' {subfilter}
  477. GROUP BY
  478. mcacode,
  479. eventcode,AlarmCode,
  480. DATE_FORMAT( StartTime, '%Y-%m-%d' ) ";
  481. dbExist = CurrDb.FindList<string>($@"select TABLE_NAME from INFORMATION_SCHEMA.TABLES where
  482. TABLE_SCHEMA = 'eap{year}' and TABLE_NAME = 'mcaeventstatisticbyday{end.ToString("MM")}'; ").FirstOrDefault();
  483. if (!string.IsNullOrEmpty(dbExist))
  484. {
  485. sqls += $@"union all
  486. SELECT
  487. sum(timespan) AS timelen,
  488. count( 1 ) AS count,
  489. mcacode,
  490. AlarmCode,
  491. eventcode,
  492. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  493. FROM
  494. eap{ year}.mcaeventstatisticbyday{ end.ToString("MM")}
  495. e
  496. WHERE
  497. StartTime >= '{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.ToString("yyyy-MM-dd HH:mm:ss")}' { subfilter}
  498. GROUP BY
  499. mcacode,
  500. eventcode,AlarmCode,
  501. DATE_FORMAT(StartTime, '%Y-%m-%d')
  502. ";
  503. }
  504. }
  505. }
  506. else
  507. {
  508. dbExist = CurrDb.FindList<string>($@"select TABLE_NAME from INFORMATION_SCHEMA.TABLES where
  509. TABLE_SCHEMA = 'eap{start.ToString("yyyy")}' and TABLE_NAME = 'mcaeventstatisticbyday{start.ToString("MM")}'; ").FirstOrDefault();
  510. if (string.IsNullOrEmpty(dbExist))
  511. {
  512. return models;
  513. }
  514. sqls = $@"SELECT
  515. sum( timespan ) AS timelen,
  516. count( 1 ) AS count,
  517. mcacode,
  518. AlarmCode,
  519. eventcode,
  520. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  521. FROM
  522. eap{start.ToString("yyyy")}.mcaeventstatisticbyday{start.ToString("MM")} e
  523. WHERE
  524. StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.ToString("yyyy-MM-dd HH:mm:ss")}' {subfilter}
  525. GROUP BY
  526. mcacode,
  527. eventcode,AlarmCode,
  528. DATE_FORMAT( StartTime, '%Y-%m-%d' ) ";
  529. dbExist = CurrDb.FindList<string>($@"select TABLE_NAME from INFORMATION_SCHEMA.TABLES where
  530. TABLE_SCHEMA = 'eap{end.ToString("yyyy")}' and TABLE_NAME = 'mcaeventstatisticbyday{end.ToString("MM")}'; ").FirstOrDefault();
  531. if (!string.IsNullOrEmpty(dbExist))
  532. {
  533. sqls += $@" union all
  534. SELECT
  535. sum( timespan ) AS timelen,
  536. count( 1 ) AS count,
  537. mcacode,
  538. AlarmCode,
  539. eventcode,
  540. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  541. FROM
  542. eap{end.ToString("yyyy")}.mcaeventstatisticbyday{end.ToString("MM")} e
  543. WHERE
  544. StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.ToString("yyyy-MM-dd HH:mm:ss")}' {subfilter}
  545. GROUP BY
  546. mcacode,
  547. eventcode,AlarmCode,
  548. DATE_FORMAT( StartTime, '%Y-%m-%d' )
  549. ";
  550. }
  551. }
  552. }
  553. // 根据日期把分库分表的数据查询到临时表
  554. // 将临时表的数据和其他表进行关联
  555. #region
  556. //string sql = $@"SELECT me.StartTime,i.id AS FactoryId,i.FName AS Factory,k.id AS FloorId,k.fname AS Floor,
  557. // a.FCode AS MacCode,a.FName AS MacName,d.FCode AS ModelCode,me.EventCode,me.timelen AS TimeSpan,me.count AS Count
  558. // from ( SELECT sum(timespan) as timelen,count(1) as count,mcacode,eventcode,DATE_FORMAT(StartTime,'%Y-%m-%d') as StartTime FROM mcaeventstatisticbyday e
  559. // WHERE StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")}'
  560. // group by mcacode,eventcode,DATE_FORMAT(StartTime,'%Y-%m-%d') ) me
  561. // inner join machine a on a.FCode=me.McaCode
  562. // INNER JOIN macmodel d ON d.ID=a.MModeID
  563. // inner JOIN factoryregion i ON i.Id=a.FactoryId
  564. // INNER JOIN factoryregion j ON j.Id=a.RegionId
  565. // INNER JOIN factoryregion k ON k.Id=j.ParentId
  566. // INNER JOIN factoryregion l ON l.id=k.ParentId
  567. // WHERE (i.id<154 OR i.id>154) {filter} order by me.count desc";
  568. #endregion
  569. string sql = $@"SELECT IFNULL(StartTime,'{start.ToString("yyyy-MM-dd")}') StartTime,FactoryId,Factory,FloorId,Floor,MacCode,MacName,macnumber,ModelCode,EventCode,
  570. sum(TimeSpan) TimeSpan,SUM(Count) Count,
  571. sum( CASE WHEN faulttype=1 THEN Count WHEN faulttype='' THEN Count WHEN faulttype IS NULL THEN Count ELSE 0 END ) CountOne,
  572. sum( CASE faulttype WHEN 2 THEN Count ELSE 0 END ) CountTwo
  573. FROM(
  574. SELECT
  575. me.StartTime,
  576. i.id AS FactoryId,
  577. i.FName AS Factory,
  578. k.id AS FloorId,
  579. k.fname AS Floor,
  580. a.FCode AS MacCode,
  581. a.FName AS MacName,
  582. d.FCode AS ModelCode,
  583. machinenumber.macnumber macnumber,
  584. me.EventCode,
  585. me.timelen AS TimeSpan,
  586. me.count AS Count
  587. ,p.faulttype
  588. FROM
  589. (
  590. {sqls}
  591. ) me
  592. right JOIN machine a ON a.FCode = me.McaCode
  593. INNER JOIN macmodel d ON d.ID = a.MModeID
  594. left JOIN mtbacode p on p.MModeID = d.id and me.AlarmCode = p.AlarmCode
  595. left JOIN factoryregion i ON i.Id = a.FactoryId
  596. left JOIN factoryregion j ON j.Id = a.RegionId
  597. left JOIN factoryregion k ON k.Id = j.ParentId
  598. left JOIN factoryregion l ON l.id = k.ParentId
  599. left join machinenumber on a.id=machinenumber.macid
  600. WHERE
  601. 1=1 {filter} {sub}
  602. ORDER BY
  603. me.count DESC
  604. ) qq
  605. GROUP BY StartTime,FactoryId,Factory,FloorId,Floor,MacCode,MacName,macnumber,ModelCode,EventCode
  606. ";
  607. models = CurrDb.FindList<MacMTBAEntity>(sql).ToList();
  608. logger.LogError(sql) ;
  609. return models;
  610. }
  611. catch (Exception ex)
  612. {
  613. logger.LogError(ex.ToString());
  614. return models;
  615. }
  616. }
  617. public bool InsertMtbaTempory(IEnumerable<MacMTBAEntity> mtbaListdetail, DateTime DayTime, string tablename)
  618. {
  619. try
  620. {
  621. StringBuilder stringBuilder = new StringBuilder();
  622. string insert_sql = $@"insert into {tablename} (FactoryId,Factory,Floor,MacName,ModelCode,EventCode,TimeSpan,Count,CountOne,CountTwo,StartTime,MacCode)values";
  623. for (int i = 0; i < mtbaListdetail.Count(); i++)
  624. {
  625. var item = mtbaListdetail.ToList()[i];
  626. if (mtbaListdetail.Count() - 1 == i)
  627. {
  628. string value_sql = $@"({item.FactoryId},'{item.Factory}','{item.Floor}','{item.MacName}','{item.ModelCode}','{item.EventCode}',{item.TimeSpan},{item.Count},{item.CountOne},{item.CountTwo},'{DayTime.ToString("yyyy-MM-dd")}','{item.MacCode}') ";
  629. stringBuilder.AppendLine(value_sql);
  630. }
  631. else
  632. {
  633. string value_sql = $@"({item.FactoryId},'{item.Factory}','{item.Floor}','{item.MacName}','{item.ModelCode}','{item.EventCode}',{item.TimeSpan},{item.Count},{item.CountOne},{item.CountTwo},'{DayTime.ToString("yyyy-MM-dd")}','{item.MacCode}'), ";
  634. stringBuilder.AppendLine(value_sql);
  635. }
  636. }
  637. //foreach (var item in mtbaListdetail)
  638. //{
  639. // string value_sql=$@"({item.FactoryId},'{item.Factory}','{item.Floor}','{item.MacName}','{item.ModelCode}','{item.EventCode}',{item.TimeSpan},{item.Count},{item.CountOne},{item.CountTwo},'{item.StartTime}','{item.MacCode}'), ";
  640. // stringBuilder.AppendLine(value_sql);
  641. //}
  642. if (!string.IsNullOrEmpty(stringBuilder.ToString()))
  643. {
  644. //logger.LogError(insert_sql + stringBuilder.ToString());
  645. CurrDb.ExecuteBySql(insert_sql + stringBuilder.ToString());
  646. }
  647. return true;
  648. }
  649. catch (Exception ex)
  650. {
  651. logger.LogError(ex.ToString());
  652. return false;
  653. }
  654. }
  655. public IEnumerable<MacMTBAEntity> GetMacMTBADetail(string tablename)
  656. {
  657. string sql = $@"SELECT FactoryId,
  658. Factory ,
  659. PlantId ,
  660. Plant ,
  661. EventCode ,
  662. TimeSpan ,
  663. Count ,
  664. CountOne ,
  665. CountTwo ,
  666. StartTime ,
  667. Floor ,
  668. ModelCode ,
  669. MacName ,
  670. MacCode from {tablename} order by Count desc";
  671. return CurrDb.FindList<MacMTBAEntity>(sql);
  672. }
  673. public IEnumerable<MacMTBAEntity> GetMacMTBADetailTotal(string tablename,string subfilter)
  674. {
  675. string sql = $@"SELECT
  676. EventCode ,
  677. sum(TimeSpan) TimeSpan ,
  678. sum(Count) Count ,
  679. StartTime from
  680. (SELECT * from {tablename} where 1=1 {subfilter}) b group by EventCode,StartTime
  681. order by sum( TimeSpan ) / ( CASE WHEN sum( Count ) = 0 THEN 1 ELSE sum( Count ) END ) / 60 ";
  682. return CurrDb.FindList<MacMTBAEntity>(sql);
  683. }
  684. public IEnumerable<MacMTBAEntity> GetMacMTBADetailTotal(DateTime start, DateTime end, string filter, string subfilter, string sub)
  685. {
  686. string sql = $@"SELECT StartTime,EventCode,
  687. sum(TimeSpan) TimeSpan,SUM(Count) Count,
  688. sum( CASE WHEN faulttype=1 THEN Count WHEN faulttype='' THEN Count WHEN faulttype IS NULL THEN Count ELSE 0 END ) CountOne,
  689. sum( CASE faulttype WHEN 2 THEN Count ELSE 0 END ) CountTwo
  690. FROM(
  691. SELECT
  692. me.StartTime,
  693. i.id AS FactoryId,
  694. i.FName AS Factory,
  695. k.id AS FloorId,
  696. k.fname AS Floor,
  697. a.FCode AS MacCode,
  698. a.FName AS MacName,
  699. d.FCode AS ModelCode,
  700. me.EventCode,
  701. me.timelen AS TimeSpan,
  702. me.count AS Count
  703. ,p.faulttype
  704. FROM
  705. (
  706. SELECT
  707. sum( timespan ) AS timelen,
  708. count( 1 ) AS count,
  709. mcacode,
  710. AlarmCode,
  711. eventcode,
  712. DATE_FORMAT( StartTime, '%Y-%m-%d' ) AS StartTime
  713. FROM
  714. mcaeventstatisticbyday e
  715. WHERE
  716. StartTime>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and StartTime<'{end.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")}' {subfilter}
  717. GROUP BY
  718. mcacode,
  719. eventcode,AlarmCode,
  720. DATE_FORMAT( StartTime, '%Y-%m-%d' )
  721. ) me
  722. INNER JOIN machine a ON a.FCode = me.McaCode
  723. INNER JOIN macmodel d ON d.ID = a.MModeID
  724. left JOIN mtbacode p on p.MModeID = d.id and me.AlarmCode = p.AlarmCode
  725. INNER JOIN factoryregion i ON i.Id = a.FactoryId
  726. INNER JOIN factoryregion j ON j.Id = a.RegionId
  727. INNER JOIN factoryregion k ON k.Id = j.ParentId
  728. INNER JOIN factoryregion l ON l.id = k.ParentId
  729. WHERE
  730. ( i.id < 154 OR i.id > 154 ) {filter} {sub}
  731. ORDER BY
  732. me.count DESC
  733. ) qq
  734. GROUP BY StartTime,EventCode
  735. ";
  736. return CurrDb.FindList<MacMTBAEntity>(sql);
  737. }
  738. public IEnumerable<Machine> Get(DateTime startTime, DateTime endTime, int start, int length, string order, string sort, string filter, string sub, string tablename, string errorinfo)
  739. {
  740. #region
  741. // string sql = $@"SELECT
  742. // c.FCode,
  743. //FactoryName,
  744. //PlantName,
  745. //FloorName,
  746. //MModeCode,
  747. //FName,
  748. // c.timespan / c.count / 60 count,
  749. // timespan
  750. // FROM
  751. // (
  752. // SELECT
  753. // a.FCode,
  754. // i.FName FactoryName,
  755. // l.FName PlantName,
  756. // k.FName FloorName,
  757. // d.FCode MModeCode,
  758. // a.FName FName,
  759. // ifnull( b.timespan, '0' ) timespan,
  760. // ifnull( b.count, '0' ) count
  761. // FROM
  762. // machine a
  763. // LEFT JOIN (
  764. // SELECT
  765. // mcacode,
  766. // sum( CASE WHEN ( EventCode = 'C00007' ) THEN 1 ELSE 0 END ) AS count,
  767. // sum( CASE WHEN EventCode = 'C00012' THEN timespan ELSE 0 END ) AS timespan
  768. // FROM
  769. // mcaeventstatisticbyday
  770. // WHERE
  771. // starttime >= '{startTime.ToString("yyyy-MM-dd HH:mm:ss")}' and starttime<'{endTime.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")}'
  772. // GROUP BY
  773. // mcacode
  774. // ) b ON a.fcode = b.mcacode
  775. // left outer join macmodel d on a.MModeID =d.id
  776. // left outer join supplier e on d.SupplierID =e.id
  777. // left outer join mactprocess f on a.id =f.macid
  778. // left outer join tprocess g on f.PCode =g.FCode
  779. // left JOIN factoryregion i ON i.Id=a.FactoryId
  780. // left JOIN factoryregion j ON j.Id=a.RegionId
  781. // left JOIN factoryregion k ON k.Id=j.ParentId
  782. // left JOIN factoryregion l ON l.id=k.ParentId
  783. // where 1=1 {filter}
  784. // ) c
  785. // ORDER BY
  786. // c.timespan / (case when sum( c.count)=0 then 1 else sum( c.count) end) DESC limit {(start)},{length}";
  787. #endregion
  788. #region
  789. // string sql = $@"
  790. //SELECT
  791. // c.FCode,
  792. // FactoryName,
  793. // PlantName,
  794. // FloorName,
  795. // MModeCode,
  796. // FName,
  797. // sum( c.timespan) /(case when sum( c.count)=0 then 1 else sum( c.count) end) / 60 count,
  798. //SUM(c.count) allcount,
  799. //SUM(TimeSpan) TimeSpan,
  800. //sum( CASE WHEN faulttype=1 THEN Count WHEN faulttype='' THEN Count WHEN faulttype IS NULL THEN Count ELSE 0 END ) CountOne,
  801. //sum( CASE faulttype WHEN 2 THEN Count ELSE 0 END ) CountTwo
  802. //FROM
  803. // (
  804. // SELECT
  805. // a.FCode,
  806. // i.FName FactoryName,
  807. // l.FName PlantName,
  808. // k.FName FloorName,
  809. // d.FCode MModeCode,
  810. // a.FName FName,
  811. // ifnull( b.timespan, '0' ) timespan,
  812. // ifnull( b.count, '0' ) count
  813. // ,p.faulttype
  814. // FROM
  815. // machine a
  816. // LEFT JOIN (
  817. // SELECT
  818. // mcacode,AlarmCode,
  819. // sum( CASE WHEN ( EventCode = 'C00007' ) THEN 1 ELSE 0 END ) AS count,
  820. // sum( CASE WHEN EventCode = 'C00012' THEN timespan ELSE 0 END ) AS timespan
  821. // FROM
  822. // mcaeventstatisticbyday
  823. // WHERE
  824. // starttime >= '{startTime.ToString("yyyy-MM-dd HH:mm:ss")}' and starttime<'{endTime.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")}'
  825. // GROUP BY
  826. // mcacode ,AlarmCode
  827. // ) b ON a.fcode = b.mcacode
  828. // LEFT OUTER JOIN macmodel d ON a.MModeID = d.id
  829. // LEFT JOIN mtbacode p on p.MModeID = a.MModeID and b.AlarmCode = p.AlarmCode
  830. // LEFT OUTER JOIN supplier e ON d.SupplierID = e.id
  831. // LEFT OUTER JOIN mactprocess f ON a.id = f.macid
  832. // LEFT OUTER JOIN tprocess g ON f.PCode = g.FCode
  833. // INNER JOIN factoryregion i ON i.Id = a.FactoryId
  834. // INNER JOIN factoryregion j ON j.Id = a.RegionId
  835. // INNER JOIN factoryregion k ON k.Id = j.ParentId
  836. // INNER JOIN factoryregion l ON l.id = k.ParentId
  837. // WHERE
  838. // 1 = 1 {filter} {sub}
  839. // ) c
  840. // GROUP BY c.FCode,
  841. // FactoryName,
  842. // PlantName,
  843. // FloorName,
  844. // MModeCode,
  845. // FName
  846. //ORDER BY
  847. // sum( c.timespan) /(case when sum( c.count)=0 then 1 else sum( c.count) end) / 60 DESC
  848. //limit {(start)},{length}";
  849. #endregion
  850. string sql = $@"
  851. select
  852. i.FName FactoryName,
  853. l.FName PlantName,
  854. k.FName FloorName,
  855. d.FCode MModeCode,
  856. a.FName FName,
  857. a.FCode FCode
  858. ,machinenumber.macnumber macnumber, b.timespan /(case when b.count=0 then 1 else b.count end) / 60
  859. from
  860. machine a
  861. INNER JOIN(SELECT
  862. maccode MacCode,
  863. sum( CASE WHEN ( EventCode = 'C00007' ) THEN count ELSE 0 END ) AS count,
  864. sum( CASE WHEN EventCode = 'C00012' THEN timespan ELSE 0 END ) AS timespan
  865. FROM
  866. {tablename}
  867. GROUP BY
  868. maccode) b on a.FCode=b.MacCode
  869. LEFT OUTER JOIN macmodel d ON a.MModeID = d.id
  870. LEFT JOIN factoryregion i ON i.Id = a.FactoryId
  871. LEFT JOIN factoryregion j ON j.Id = a.RegionId
  872. LEFT JOIN factoryregion k ON k.Id = j.ParentId
  873. LEFT JOIN factoryregion l ON l.id = k.ParentId
  874. left join machinenumber on a.id=machinenumber.MacId
  875. ORDER BY b.timespan /(case when b.count=0 then 1 else b.count end) / 60 DESC
  876. limit {(start)},{length} ";
  877. var pros = CurrDb.FindList<Machine>(sql);
  878. //if (pros != null && pros.Count() > 0)
  879. //{
  880. // var regionDal = new FactoryRegionDal(CurrDb);
  881. // var allRegions = regionDal.Get(1, 10000, "ID", "asc", string.Empty, errorinfo);
  882. // foreach (var item in pros)
  883. // {
  884. // item.RegionName = regionDal.GetFullRegionName(item.RegionId, allRegions);
  885. // }
  886. //}
  887. return pros;
  888. }
  889. #endregion
  890. #region 设备报警
  891. public IEnumerable<ChartEntity> GetMacAlarm()
  892. {
  893. string sql = $@"SELECT mt.PCode AS Name,sum(me.count) AS Value
  894. from (SELECT count(1) as count,mcacode FROM mcaeventstatisticbyday e
  895. WHERE e.StartTime>='{DateTime.Today.ToString("yyyy-MM-dd")}' and e.EventCode='C00007'
  896. group by mcacode ) me
  897. inner join machine mac on mac.FCode=me.McaCode
  898. inner join mactprocess mt on mac.id=mt.macid
  899. WHERE mac.factoryid!=154
  900. GROUP BY mt.PCode
  901. ORDER BY Value DESC LIMIT 0,5";
  902. return CurrDb.FindList<ChartEntity>(sql);
  903. }
  904. #endregion
  905. #region 查询车间
  906. public IEnumerable<SelectDto<string>> GetLocationSelect(string factory)
  907. {
  908. string sql = $@"select LOCATION as Value from ccmrpt.CCMMES_FIXED_ASSETS_V where FACTORY='{factory}'
  909. group by LOCATION order by LOCATION";
  910. return CurrDb.FindList<SelectDto<string>>(sql);
  911. }
  912. public IEnumerable<SelectDto<string>> GetWarehouseSelect(string factory)
  913. {
  914. string sql = $@"select warehouse as Value from ccmrpt.CCMMES_SPARE_PRICE_V where FACTORY='{factory}'
  915. group by warehouse order by warehouse";
  916. return CurrDb.FindList<SelectDto<string>>(sql);
  917. }
  918. #endregion
  919. #region 设备良率
  920. /// <summary>
  921. /// 一次良率
  922. /// </summary>
  923. /// <param name="starttime"></param>
  924. /// <param name="endtime"></param>
  925. /// <returns></returns>
  926. public IEnumerable<MacGoodRateDto> GetMacGoodRate(string starttime, string endtime)
  927. {
  928. /*string sql = $@" select a.FACTORY Factroy,a.PDATE PDate,trunc( (a.INPUT-b.INPUT)/a.INPUT*100,2) as Rate
  929. from
  930. (select FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd') PDATE,SUM(INPUT) INPUT
  931. from ccmrpt.ccmmes_input_for_eap_v
  932. where
  933. PDATE>to_date('{starttime}','yyyy-mm-dd hh24:mi:ss')
  934. and PDATE<=to_date('{endtime}','yyyy-mm-dd hh24:mi:ss')
  935. GROUP BY FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd')
  936. ORDER BY FACTORY) a
  937. LEFT JOIN
  938. (select FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd') PDATE,SUM(first_defect_qty) INPUT
  939. from ccmrpt.ccmmes_first_defect_for_eap_v
  940. where
  941. PDATE>to_date('{starttime}','yyyy-mm-dd hh24:mi:ss')
  942. and PDATE<=to_date('{endtime}','yyyy-mm-dd hh24:mi:ss')
  943. GROUP BY FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd')
  944. ORDER BY FACTORY) b
  945. on a.FACTORY=b.FACTORY and a.PDATE=b.PDATE";*/
  946. string sql = $@"select FACTORY Factroy,PLANT Plant,FLOOR Floor,TO_CHAR(PDATE,'yyyy-MM-dd') PDate,SUM(INPUT) Input,SUM(OUTPUT) Output FROM CCMEES.EES_PDATE_GOOD_RATE2_V where FLOOR like '%EOL' and PLANT='A1' and PDATE>to_date('{starttime}','yyyy-mm-dd hh24:mi:ss')
  947. and PDATE<=to_date('{endtime}','yyyy-mm-dd hh24:mi:ss') GROUP BY FACTORY,PLANT,FLOOR,PDATE ";
  948. var data= CurrDb.FindList<MacGoodRateDto>(sql);
  949. foreach(var i in data)
  950. {
  951. i.Input = i.Input > 0 ? i.Input : 1;
  952. i.Rate = (Math.Round((i.Output / i.Input), 4) * 100).ToString();
  953. }
  954. return data;
  955. }
  956. /// <summary>
  957. /// 首件
  958. /// </summary>
  959. /// <param name="starttime"></param>
  960. /// <param name="endtime"></param>
  961. /// <returns></returns>
  962. public IEnumerable<MacGoodRateDto> GetShouJian(string starttime, string endtime)
  963. {
  964. /*string sql = $@"SELECT
  965. a.园区 Factroy,
  966. TO_CHAR( a.日期, 'yyyy-MM-dd' ) PDATE,
  967. nvl(round((a.合格数+b.合格数)/(a.count+b.count),4)*100, 0 ) Rate
  968. FROM(select 园区, 日期, nvl(合格数, 0) 合格数, 合格率,round(nvl(合格数, 0) / nvl(合格率, 1)) count from ccmrpt.IPQC_SHOUJIAN_OKRATE_V t where 班次 = '白班') a INNER JOIN(select 园区, 日期, nvl(合格数, 0)合格数, 合格率,round(nvl(合格数, 0) / nvl(合格率, 1)) count from ccmrpt.IPQC_SHOUJIAN_OKRATE_V t where 班次 = '晚班') b on a.园区 = b.园区 and a.日期 = b.日期 WHERE
  969. a.日期 > to_date('2021-10-29', 'yyyy-mm-dd hh24:mi:ss')
  970. AND a.日期 <= to_date('2021-11-05', 'yyyy-mm-dd hh24:mi:ss')
  971. ORDER BY
  972. a.日期";*/
  973. string sql = $@"SELECT
  974. 园区 Factroy,
  975. TO_CHAR(日期, 'yyyy-MM-dd' ) PDATE,
  976. nvl(SUM( 合格数 ) ,0) Input,
  977. nvl(SUM( 不合格数 ) ,0)Output
  978. FROM
  979. ccmrpt.IPQC_SHOUJIAN_OKRATE_V t
  980. WHERE
  981. 园区 like '未来城%' and 日期 > to_date('{starttime}', 'yyyy-mm-dd hh24:mi:ss')
  982. AND 日期 <= to_date('{endtime}', 'yyyy-mm-dd hh24:mi:ss')
  983. group by
  984. 园区,日期";
  985. var data = CurrDb.FindList<MacGoodRateDto>(sql);
  986. foreach (var i in data)
  987. {
  988. i.Output = i.Input+i.Output > 0 ? i.Input+i.Output : 1;
  989. i.Rate = (Math.Round((i.Input / i.Output), 4) * 100).ToString();
  990. }
  991. return data;
  992. }
  993. public IEnumerable<MacGoodRateDto> GetMacGoodDetai(string starttime, string endtime)
  994. {
  995. string sql = $@" select a.FACTORY Factroy,a.PDATE,a.PART_NAME partName,a.STEP_NAME stepName,trunc( (a.INPUT-b.INPUT)/a.INPUT*100,4) as Rate
  996. from
  997. (select FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd') PDATE,PART_NAME,STEP_NAME,SUM(INPUT) INPUT
  998. from ccmmes_input_for_eap_v
  999. where
  1000. PDATE>to_date('{starttime}','yyyy-mm-dd hh24:mi:ss')
  1001. and PDATE<=to_date('{endtime}','yyyy-mm-dd hh24:mi:ss')
  1002. GROUP BY FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd') ,PART_NAME,STEP_NAME
  1003. ORDER BY FACTORY) a
  1004. LEFT JOIN
  1005. (select FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd') PDATE,PART_NAME,STEP_NAME,SUM(first_defect_qty) INPUT
  1006. from ccmmes_first_defect_for_eap_v
  1007. where
  1008. PDATE>to_date('{starttime}','yyyy-mm-dd hh24:mi:ss')
  1009. and PDATE<to_date('{endtime}','yyyy-mm-dd hh24:mi:ss')
  1010. GROUP BY FACTORY,TO_CHAR(PDATE,'yyyy-MM-dd') ,PART_NAME,STEP_NAME
  1011. ORDER BY FACTORY) b
  1012. on a.FACTORY=b.FACTORY
  1013. and a.PDATE=b.PDATE
  1014. and a.STEP_NAME = b.STEP_NAME
  1015. and a.PART_NAME = b.PART_NAME";
  1016. return CurrDb.FindList<MacGoodRateDto>(sql);
  1017. }
  1018. public int GetMacGoodDetailCount(string filter, string starttime, string endtime)
  1019. {
  1020. string errorinfo = string.Empty;
  1021. string date = $",max(CASE WHEN PDate='{starttime}' THEN Rate ELSE 0 END) as \"{starttime}\"";
  1022. var sql = $@"select Count(1) Count from (SELECT
  1023. factroy 园区,
  1024. Plant 厂房,
  1025. FLOOR 楼层,
  1026. RECIPE 机种,
  1027. WORK_PROCESS 工序
  1028. {date}
  1029. FROM
  1030. (
  1031. SELECT
  1032. FACTORY Factroy,
  1033. PLANT Plant,
  1034. FLOOR Floor,
  1035. RECIPE,
  1036. WORK_PROCESS,
  1037. TO_CHAR(PDATE, 'yyyy-MM-dd') PDate,
  1038. SUM(INPUT) Input,
  1039. SUM(OUTPUT) Output,
  1040. ROUND(
  1041. SUM(input) / DECODE(SUM(input) + SUM(OUTPUT), 0, 1, SUM(input) + SUM(OUTPUT)) * 100,
  1042. 2
  1043. ) rate
  1044. FROM
  1045. CCMEES.EES_PDATE_GOOD_RATE2_V
  1046. WHERE 1=1
  1047. AND FLOOR LIKE '%EOL'
  1048. AND PDATE > to_date('{starttime}', 'yyyy-mm-dd hh24:mi:ss')
  1049. AND PDATE <= to_date('{endtime}', 'yyyy-mm-dd hh24:mi:ss')
  1050. {filter}
  1051. GROUP BY
  1052. FACTORY,
  1053. PLANT,
  1054. FLOOR,
  1055. PDATE,
  1056. RECIPE,
  1057. WORK_PROCESS
  1058. )
  1059. GROUP BY
  1060. Factroy,
  1061. PLANT,
  1062. FLOOR,
  1063. RECIPE,
  1064. WORK_PROCESS )
  1065. where 1=1
  1066. ";
  1067. var entities = CurrDb.FindList<MacGoodRateDto>(sql).FirstOrDefault();
  1068. if (entities != null)
  1069. {
  1070. return entities.Count;
  1071. }
  1072. return 0;
  1073. }
  1074. public DataTable GetMacGoodDetail(string starttime, string endtime, int start, int length, string order, string sort, string filter)
  1075. {
  1076. DateTime sdtime = Convert.ToDateTime(starttime);
  1077. DateTime edtime = Convert.ToDateTime(endtime);
  1078. int days = edtime.Subtract(sdtime).Days;
  1079. string pdate = "";
  1080. for (int i = 0; i <= days; i++)
  1081. {
  1082. var date = sdtime.AddDays(i).ToString("yyyy-MM-dd");
  1083. pdate += $" ,max(CASE WHEN PDate='{date}' THEN NVL(Rate,0) ELSE 0 END) as \"{ date}\" ";
  1084. }
  1085. /*string sql = $@"SELECT *
  1086. FROM (
  1087. select t.*,ROWNUM AS rowno from
  1088. (
  1089. select
  1090. Factroy 园区,partName 机种,stepName 工序 {pdate}
  1091. FROM(
  1092. select a.FACTORY Factroy, a.PDATE PDate, a.PART_NAME partName, a.STEP_NAME stepName, trunc((a.INPUT - b.INPUT) / a.INPUT * 100, 2) as Rate
  1093. from
  1094. (select FACTORY, TO_CHAR(PDATE, 'yyyy-MM-dd') PDATE, PART_NAME, STEP_NAME, SUM(INPUT) INPUT
  1095. from ccmrpt.ccmmes_input_for_eap_v
  1096. where
  1097. PDATE > to_date('{starttime}', 'yyyy-mm-dd hh24:mi:ss')
  1098. and PDATE <= to_date('{endtime}', 'yyyy-mm-dd hh24:mi:ss') {filter}
  1099. GROUP BY FACTORY, TO_CHAR(PDATE, 'yyyy-MM-dd'), PART_NAME, STEP_NAME
  1100. ) a
  1101. LEFT JOIN
  1102. (select FACTORY, TO_CHAR(PDATE, 'yyyy-MM-dd') PDATE, PART_NAME, STEP_NAME, SUM(first_defect_qty) INPUT
  1103. from ccmrpt.ccmmes_first_defect_for_eap_v
  1104. where
  1105. PDATE > to_date('{starttime}', 'yyyy-mm-dd hh24:mi:ss')
  1106. and PDATE < to_date('{endtime}', 'yyyy-mm-dd hh24:mi:ss')
  1107. {filter}
  1108. GROUP BY FACTORY, TO_CHAR(PDATE, 'yyyy-MM-dd'), PART_NAME, STEP_NAME
  1109. ) b
  1110. on a.FACTORY = b.FACTORY
  1111. and a.PDATE = b.PDATE
  1112. and a.STEP_NAME = b.STEP_NAME
  1113. and a.PART_NAME = b.PART_NAME
  1114. )tt
  1115. GROUP BY Factroy, partName, stepName
  1116. ORDER BY Factroy, partName, stepName
  1117. ) t
  1118. ) table_alias
  1119. WHERE table_alias.rowno between { start - 1} and {length} ";*/
  1120. string sql = $@"SELECT
  1121. *
  1122. FROM
  1123. (
  1124. SELECT
  1125. t.*,
  1126. ROWNUM AS rowno
  1127. FROM
  1128. (
  1129. SELECT
  1130. factroy 园区,
  1131. Plant 厂房,
  1132. FLOOR 楼层,
  1133. RECIPE 机种,
  1134. WORK_PROCESS 工序
  1135. {pdate}
  1136. FROM
  1137. (
  1138. SELECT
  1139. FACTORY Factroy,
  1140. PLANT Plant,
  1141. FLOOR Floor,
  1142. RECIPE,
  1143. WORK_PROCESS,
  1144. TO_CHAR(PDATE, 'yyyy-MM-dd') PDate,
  1145. SUM(INPUT) Input,
  1146. SUM(OUTPUT) Output,
  1147. ROUND(
  1148. SUM(input) / DECODE(SUM(input) + SUM(OUTPUT), 0, 1, SUM(input) + SUM(OUTPUT)) * 100,
  1149. 2
  1150. ) rate
  1151. FROM
  1152. CCMEES.EES_PDATE_GOOD_RATE2_V
  1153. WHERE 1=1
  1154. AND FLOOR LIKE '%EOL'
  1155. AND PDATE > to_date('{starttime}', 'yyyy-mm-dd hh24:mi:ss')
  1156. AND PDATE <= to_date('{endtime}', 'yyyy-mm-dd hh24:mi:ss')
  1157. {filter}
  1158. GROUP BY
  1159. FACTORY,
  1160. PLANT,
  1161. FLOOR,
  1162. PDATE,
  1163. RECIPE,
  1164. WORK_PROCESS
  1165. )
  1166. GROUP BY
  1167. Factroy,
  1168. PLANT,
  1169. FLOOR,
  1170. RECIPE,
  1171. WORK_PROCESS
  1172. ORDER BY
  1173. Factroy,
  1174. PLANT,
  1175. FLOOR,
  1176. RECIPE,
  1177. WORK_PROCESS
  1178. ) t
  1179. ) table_alias
  1180. WHERE table_alias.rowno between { start - 1} and {length}";
  1181. DataTable dt = CurrDb.FindTable(sql);
  1182. dt.Columns.Add("FactoryRowSpan");
  1183. dt.Columns.Add("PlantRowSpan");
  1184. dt.Columns.Add("FloorRowSpan");
  1185. dt.Columns.Add("PartNameRowSpan");
  1186. var query = dt.AsEnumerable().GroupBy(c => c.Field<string>("园区"));
  1187. foreach (var model in query)
  1188. {
  1189. for (var i = 0; i < dt.Rows.Count; i++)
  1190. {
  1191. if (dt.Rows[i]["园区"].ToString() == model.Key)
  1192. {
  1193. dt.Rows[i]["FactoryRowSpan"] = model.Count();
  1194. var plantGroup= dt.AsEnumerable().Where(l => l.Field<string>("园区")==model.Key).GroupBy( c=> c.Field<string>("厂房"));
  1195. foreach(var j in plantGroup)
  1196. {
  1197. if (dt.Rows[i]["厂房"].ToString() == j.Key)
  1198. {
  1199. dt.Rows[i]["PlantRowSpan"] = j.Count();
  1200. var floorGroup = dt.AsEnumerable().Where((l => l.Field<string>("园区") == model.Key && l.Field<string>("厂房") == j.Key)).GroupBy(c => c.Field<string>("楼层"));
  1201. foreach(var k in floorGroup)
  1202. {
  1203. if (dt.Rows[i]["楼层"].ToString() == k.Key)
  1204. {
  1205. dt.Rows[i]["FloorRowSpan"] = k.Count();
  1206. var parkGroup = dt.AsEnumerable().Where((l => l.Field<string>("园区") == model.Key && l.Field<string>("厂房") == j.Key && l.Field<string>("楼层") == k.Key)).GroupBy(c => c.Field<string>("机种"));
  1207. foreach (var it in parkGroup)
  1208. {
  1209. if (dt.Rows[i]["机种"].ToString() == it.Key)
  1210. {
  1211. dt.Rows[i]["PartNameRowSpan"] = it.Count();
  1212. }
  1213. }
  1214. }
  1215. }
  1216. }
  1217. }
  1218. }
  1219. }
  1220. }
  1221. if (dt == null || dt.Rows.Count <= 0)
  1222. return null;
  1223. return dt;
  1224. }
  1225. public IEnumerable<SelectDto<string>> GetFactory()
  1226. {
  1227. string sql = $@"select DISTINCT(园区) Value FROM CCMRPT.IPQC_SHOUJIAN_OKRATE_V";
  1228. var data = CurrDb.FindList<SelectDto<string>>(sql);
  1229. return data;
  1230. }
  1231. public List<MacGoodRateDto> GetShouJianDatil(string factory, string shift, DateTime? start, DateTime? endtime)
  1232. {
  1233. MacGoodRateDto total = new MacGoodRateDto() { Input = 0, Count = 0, Output = 0,goal= "99.00" };
  1234. string sql = $@"SELECT
  1235. 园区 Factroy,
  1236. TO_CHAR(日期, 'yyyy-MM-dd' ) PDATE,
  1237. nvl(SUM( 合格数 ) ,0) Input,
  1238. nvl(SUM( 不合格数 ) ,0)Output
  1239. FROM
  1240. ccmrpt.IPQC_SHOUJIAN_OKRATE_V t
  1241. WHERE 1=1
  1242. ";
  1243. if (!string.IsNullOrEmpty(factory))
  1244. sql += $@" and 园区='{factory}'";
  1245. if (!string.IsNullOrEmpty(shift))
  1246. sql += $@" and 班次='{shift}'";
  1247. if (start.HasValue)
  1248. sql += $@" and 日期>= TO_DATE('{start.Value.ToString("yyyy-MM-dd ")}','yyyy-mm-dd hh24:mi:ss')";
  1249. if (endtime.HasValue)
  1250. sql += $@" and 日期<= TO_DATE('{endtime.Value.ToString("yyyy-MM-dd ")}','yyyy-mm-dd hh24:mi:ss')";
  1251. sql += $@"group by
  1252. 园区,日期
  1253. ORDER BY 园区,日期 desc";
  1254. var data = CurrDb.FindList<MacGoodRateDto>(sql).ToList();
  1255. foreach(var item in data)
  1256. {
  1257. item.Count = Convert.ToInt32(item.Input + item.Output);
  1258. item.goal = "99.00";
  1259. item.Rate = (Math.Round((item.Input / (item.Count>0?item.Count:1)), 4) * 100).ToString();
  1260. total.Output += item.Output;
  1261. total.Input += item.Input;
  1262. total.Count += item.Count;
  1263. }
  1264. total.Factroy = "total";
  1265. total.Rate = (Math.Round((total.Input / (total.Count > 0 ? total.Count : 1)), 4) * 100).ToString();
  1266. data.Add(total);
  1267. data.Reverse();
  1268. return (data);
  1269. }
  1270. public IEnumerable<SelectDto<string>> GetMultipleFactorySelects(string filter)
  1271. {
  1272. var sql = $@"select distinct FACTORY value,FACTORY label from CCMEES.EES_PDATE_GOOD_RATE2_V";
  1273. var entities = CurrDb.FindList<SelectDto<string>>(sql);
  1274. return entities;
  1275. }
  1276. public IEnumerable<SelectDto<string>> GetMultiplePlantSelects(string filter)
  1277. {
  1278. var sql = $@"select distinct Plant value,Plant label from CCMEES.EES_PDATE_GOOD_RATE2_V where FLOOR like '%EOL' {filter}";
  1279. var entities = CurrDb.FindList<SelectDto<string>>(sql);
  1280. return entities;
  1281. }
  1282. public IEnumerable<SelectDto<string>> GetMultipleFloorSelects(string filter)
  1283. {
  1284. var sql = $@"select distinct FLOOR value,FLOOR label from CCMEES.EES_PDATE_GOOD_RATE2_V where FLOOR like '%EOL' {filter}";
  1285. var entities = CurrDb.FindList<SelectDto<string>>(sql);
  1286. return entities;
  1287. }
  1288. public IEnumerable<SelectDto<string>> GetMultiplePartNameSelects(string filter)
  1289. {
  1290. var sql = $@"select distinct RECIPE value,RECIPE label from CCMEES.EES_PDATE_GOOD_RATE2_V where FLOOR like '%EOL' and RECIPE is not null {filter}";
  1291. var entities = CurrDb.FindList<SelectDto<string>>(sql);
  1292. return entities;
  1293. }
  1294. public IEnumerable<SelectDto<string>> GetMultipleStepNameSelects(string filter)
  1295. {
  1296. var sql = $@"select distinct WORK_PROCESS value,WORK_PROCESS label from CCMEES.EES_PDATE_GOOD_RATE2_V where WORK_PROCESS is NOT NULL and FLOOR like '%EOL'";
  1297. var entities = CurrDb.FindList<SelectDto<string>>(sql);
  1298. return entities;
  1299. }
  1300. public List<MEAttendance> GetMEAttendance(DateTime? time)
  1301. {
  1302. string sql = $@"SELECT
  1303. DEPT_NAME DeptName,
  1304. ATTEND_DATE Time,
  1305. EMP_TYPE EmpType,
  1306. SUM( ONWORK_NUM ) OnWorkNum,
  1307. SUM( ONJOB_NUM ) OnJobNum,
  1308. round( SUM( ONJOB_NUM ) / SUM( ONWORK_NUM ), 4 ) * 100 Rate
  1309. FROM
  1310. SCOTT.V_SUM_ATTEND_RATE_CCM
  1311. WHERE
  1312. DEPT_NAME IN ('影像设备ME一课', '影像设备ME三课', '影像设备ME二课', '影像设备ME四课', '影像设备ME试产课', '影像设备资源管理课' )
  1313. AND EMP_TYPE = '员工' and ATTEND_DATE=TO_DATE('{time.Value.ToString("yyyy-MM-dd ")}','yyyy-mm-dd hh24:mi:ss')
  1314. GROUP BY
  1315. DEPT_NAME,
  1316. ATTEND_DATE,
  1317. EMP_TYPE
  1318. ORDER BY
  1319. decode(DEPT_NAME,'影像设备ME一课', 1,'影像设备ME二课',2, '影像设备ME三课',3, '影像设备ME四课',4, '影像设备ME试产课',5, '影像设备资源管理课',6,'影像设备改善课',7,'影像设备部',8)";
  1320. return CurrDb.FindList<MEAttendance>(sql).ToList();
  1321. }
  1322. public List<MEAttendance> GetMEAttendanceDatil(string deptname, string shift, string Type, DateTime? start)
  1323. {
  1324. string str = "";
  1325. string sql = $@"SELECT
  1326. DEPT_NAME DeptName,
  1327. ATTEND_DATE Time,
  1328. SUM( ONWORK_NUM ) OnWorkNum,
  1329. SUM( ONJOB_NUM ) OnJobNum,
  1330. round( SUM( ONJOB_NUM ) / SUM( ONWORK_NUM ), 4 ) * 100 Rate
  1331. FROM
  1332. SCOTT.V_SUM_ATTEND_RATE_CCM
  1333. WHERE 1=1 ";
  1334. if (!string.IsNullOrEmpty(deptname))
  1335. {
  1336. str += $@" and DEPT_NAME in ('{deptname}')";
  1337. }
  1338. else
  1339. {
  1340. str += $@" and DEPT_NAME IN ('影像设备ME一课', '影像设备ME三课', '影像设备ME二课', '影像设备ME四课', '影像设备ME试产课', '影像设备资源管理课','影像设备改善课','影像设备部') ";
  1341. }
  1342. if (!string.IsNullOrEmpty(shift))
  1343. {
  1344. str += $@" and WORKTYPE='{shift}'";
  1345. }
  1346. if (!string.IsNullOrEmpty(Type))
  1347. {
  1348. str += $@" and EMP_TYPE = '{Type}'";
  1349. }
  1350. if (start.HasValue)
  1351. str += $@" and ATTEND_DATE= TO_DATE('{start.Value.ToString("yyyy-MM-dd ")}','yyyy-mm-dd hh24:mi:ss')";
  1352. sql +=str+ $@"GROUP BY
  1353. DEPT_NAME,
  1354. ATTEND_DATE
  1355. ORDER BY
  1356. decode(DEPT_NAME,'影像设备ME一课', 1,'影像设备ME二课',2, '影像设备ME三课',3, '影像设备ME四课',4, '影像设备ME试产课',5, '影像设备资源管理课',6,'影像设备改善课',7,'影像设备部',8)";
  1357. var data= CurrDb.FindList<MEAttendance>(sql).ToList();
  1358. str = $@"SELECT
  1359. ATTEND_DATE Time,
  1360. SUM( ONWORK_NUM ) OnWorkNum,
  1361. SUM( ONJOB_NUM ) OnJobNum,
  1362. round( SUM( ONJOB_NUM ) / SUM( ONWORK_NUM ), 4 ) * 100 Rate
  1363. FROM
  1364. SCOTT.V_SUM_ATTEND_RATE_CCM where 1=1" + str + $@"GROUP BY
  1365. ATTEND_DATE";
  1366. var list = CurrDb.FindList<MEAttendance>(str).FirstOrDefault();
  1367. if (list != null)
  1368. list.DeptName = "小计";
  1369. data.Add(list);
  1370. return data;
  1371. }
  1372. #endregion
  1373. }
  1374. }