DataCenterController.cs 72 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374
  1. using AutoMapper;
  2. using Cksoft.Data;
  3. using Cksoft.Data.Repository;
  4. using Cksoft.Unity;
  5. using DllEapDal;
  6. using DllEapDal.OFILM;
  7. using DllEapEntity.Dtos;
  8. using DllEapEntity.OFILM;
  9. using Microsoft.AspNetCore.Authorization;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Microsoft.Extensions.Configuration;
  12. using Microsoft.Extensions.Logging;
  13. using System;
  14. using System.IO;
  15. using System.Collections.Generic;
  16. using System.Data;
  17. using System.Linq;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using ChartDto = DllEapEntity.OFILM.ChartDto;
  21. using Series = DllEapEntity.OFILM.Series;
  22. using DllEapCommon.NPOI;
  23. namespace DllEapBll.OFILM
  24. {
  25. /// <summary>
  26. /// 机台数据
  27. /// </summary>
  28. [Route("eap/api/[controller]/[action]")]
  29. [ApiController]
  30. [Authorize]
  31. public class DataCenterController :ControllerBase
  32. {
  33. ILogger<DataCenterDal> logger;
  34. private IMapper _mapper;
  35. public IConfiguration Configuration { get; set; }
  36. public DataCenterController(ILogger<DataCenterDal> logg, IConfiguration configuration, IMapper mapper)
  37. {
  38. Configuration = configuration;
  39. this.logger = logg;
  40. _mapper = mapper;
  41. }
  42. #region 设备及费用
  43. [HttpGet]
  44. public MacAndChargeDto GetMacCount()
  45. {
  46. using (IDatabase db = DbFactory.Base("ccmrpt"))
  47. {
  48. var dal = new DataCenterDal(db, logger);
  49. var list = dal.GetMacCount();
  50. //list.ToList().ForEach(item => { item.Name = item.Name.Replace("2", "二").Replace("3", "三"); });
  51. //var response = new MacAndChargeDto { Data = list.ToList().OrderBy(item => item.Name).ToList() };
  52. var response = new MacAndChargeDto();
  53. response.Data.Add(new ChartEntity { Name = "未来城园区A1栋", Value = list.Where(item => item.Name.Contains("未来城")).FirstOrDefault().Value });
  54. response.Data.Add(new ChartEntity { Name = "二号园区A栋", Value = list.Where(item => item.Name.Contains("2号")).FirstOrDefault().Value });
  55. response.Data.Add(new ChartEntity { Name = "二号园区B栋", Value = list.Where(item => item.Name.Contains("3号")).FirstOrDefault().Value });
  56. return response;
  57. }
  58. }
  59. [HttpGet]
  60. public MacAndChargeDto GetMacCharge()
  61. {
  62. using (IDatabase db = DbFactory.Base("ccmrpt"))
  63. {
  64. var dal = new DataCenterDal(db, logger);
  65. var list = dal.GetMacChargeFirst();
  66. //list.ToList().ForEach(item => { item.Name = item.Name.Replace("2", "二").Replace("3", "三"); });
  67. list.ToList().ForEach(item => item.Value = Math.Abs(item.Value));
  68. //var response = new MacAndChargeDto { Data = list.ToList() };
  69. var response = new MacAndChargeDto();
  70. response.Data.Add(new ChartEntity { Name = "未来城园区A1栋", Value = list.Where(item => item.Name.Contains("未来城")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("未来城")).FirstOrDefault().Value });
  71. response.Data.Add(new ChartEntity { Name = "二号园区A栋", Value = list.Where(item => item.Name.Contains("2号")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("2号")).FirstOrDefault().Value });
  72. response.Data.Add(new ChartEntity { Name = "二号园区B栋", Value = list.Where(item => item.Name.Contains("3号")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("3号")).FirstOrDefault().Value });
  73. return response;
  74. }
  75. }
  76. /// <summary>
  77. /// 设备查询
  78. /// </summary>
  79. /// <param name="pageIndex"></param>
  80. /// <param name="pageSize"></param>
  81. /// <param name="filter"></param>
  82. /// <param name="sort"></param>
  83. /// <param name="order"></param>
  84. /// <returns></returns>
  85. public LayuiModel<MacEntity> GetMacList(int pageIndex = 1, int pageSize = 10, string filter = "", string sort = "FACTORY", string order = "ASC")
  86. {
  87. if (string.IsNullOrEmpty(sort) || sort.ToString().ToLower() == "null")
  88. sort = "FACTORY";
  89. if (order == "descend")
  90. order = "desc";
  91. else
  92. {
  93. order = "asc";
  94. }
  95. IEnumerable<MacEntity> list = null;
  96. filter = filter ?? " ";
  97. using (IDatabase db = DbFactory.Base("ccmrpt"))
  98. {
  99. var dal = new DataCenterDal(db, logger);
  100. int start = (pageIndex - 1) * pageSize + 1;
  101. int end = start + pageSize;
  102. string errorinfo = string.Empty;
  103. int total = 0;
  104. list = dal.GetMacList(start, end, filter, sort, order, out total, ref errorinfo);
  105. var responseData = new LayuiModel<MacEntity>()
  106. {
  107. code = 0,
  108. count = total,
  109. data = list,
  110. msg = ""
  111. };
  112. return responseData;
  113. }
  114. }
  115. /// <summary>
  116. /// 设备查询导出
  117. /// </summary>
  118. /// <param name="filterInfo"></param>
  119. /// <returns></returns>
  120. [HttpPost]
  121. public async Task<IActionResult> ExportMacList(IDictionary<string, string> filterInfo)
  122. {
  123. int pageIndex = 1; int pageSize = 100000; string filter =string.Empty, sort = string.Empty; string order = string.Empty;
  124. if (filterInfo.ContainsKey("pageIndex"))
  125. {
  126. pageIndex = Convert.ToInt32(filterInfo["pageIndex"]);
  127. }
  128. if (filterInfo.ContainsKey("pageSize"))
  129. {
  130. pageSize = Convert.ToInt32(filterInfo["pageSize"]);
  131. }
  132. if (filterInfo.ContainsKey("filter"))
  133. {
  134. filter = filterInfo["filter"];
  135. }
  136. if (filterInfo.ContainsKey("sort"))
  137. {
  138. sort = filterInfo["sort"];
  139. }
  140. if (filterInfo.ContainsKey("order"))
  141. {
  142. order = filterInfo["order"];
  143. }
  144. var roles = GetMacList(pageIndex, pageSize, filter, null, null).data;
  145. var list = _mapper.Map<IEnumerable<ExportMacEntity>>(roles).ToList();
  146. var book = DataExportHelper.EntityToExcel(list);
  147. MemoryStream ms = new MemoryStream();
  148. ms.Position = 0;
  149. book.Write(ms);
  150. ms.Dispose();
  151. ms.Close();
  152. await Task.CompletedTask;
  153. return File(ms.ToArray(), "application/octet-stream");
  154. }
  155. /// <summary>
  156. /// /设备维修费用详情
  157. /// </summary>
  158. /// <param name="pageIndex"></param>
  159. /// <param name="pageSize"></param>
  160. /// <param name="filter"></param>
  161. /// <param name="sort"></param>
  162. /// <param name="order"></param>
  163. /// <returns></returns>
  164. public LayuiModel<MacChargeEntity> GetMacChargeList(int pageIndex = 1, int pageSize = 10, string filter = "", string sort = "FACTORY", string order = "ASC")
  165. {
  166. if (string.IsNullOrEmpty(sort) || sort.ToString().ToLower() == "null")
  167. sort = "FACTORY";
  168. if (order == "descend")
  169. order = "desc";
  170. else
  171. {
  172. order = "asc";
  173. }
  174. IEnumerable<MacChargeEntity> listUseCharge = null;//领用费用
  175. IEnumerable<MacChargeEntity> listStockCharge = null;//库存费用
  176. filter = filter ?? " ";
  177. using (IDatabase db = DbFactory.Base("ccmrpt"))
  178. {
  179. var dal = new DataCenterDal(db, logger);
  180. pageSize = 100;
  181. int start = (pageIndex - 1) * pageSize + 1;
  182. int end = start + pageSize;
  183. string errorinfo = string.Empty;
  184. int total = 0;
  185. //listUseCharge = dal.GetMacChargeList(start, end, filter, sort, order, out total, 1, ref errorinfo);
  186. //listStockCharge = dal.GetMacChargeList(start, end, filter, sort, order, out total, 2, ref errorinfo);
  187. //foreach (var item in listStockCharge)
  188. //{
  189. // var macChargeEntity = listUseCharge.Where(c => c.Factory == item.Factory && c.Floor == item.Floor).FirstOrDefault();
  190. // item.UseCharge = macChargeEntity != null ? macChargeEntity.StockCharge : 0;
  191. // item.UseCharge = Math.Abs(item.UseCharge);
  192. // item.TotalCharge = item.StockCharge + item.UseCharge;
  193. //}
  194. //listUseCharge = dal.GetMacChargeList(start, end, filter, sort, order, out total, 1, ref errorinfo);
  195. listStockCharge = dal.GetMacChargeUserList(start, end, filter, sort, order, out total, 2, ref errorinfo);
  196. var responseData = new LayuiModel<MacChargeEntity>()
  197. {
  198. code = 0,
  199. count = total,
  200. data = listStockCharge,
  201. msg = ""
  202. };
  203. return responseData;
  204. }
  205. }
  206. #endregion
  207. #region 设备状态
  208. public MacStatusDto GetMacStatusCount()
  209. {
  210. using (IDatabase db = DbFactory.Base("eapslave"))
  211. {
  212. var dal = new DataCenterDal(db, logger);
  213. var list = dal.GetMacStatusList();
  214. var response = new MacStatusDto();
  215. response.RunData = new List<ChartEntity>
  216. {
  217. new ChartEntity{ Name="稼动",Value=list.Where(m => m.StatusID == 4).Count()},
  218. new ChartEntity{ Name="其它",Value=list.Where(m => m.StatusID != 4).Count()},
  219. };
  220. response.WaitData = new List<ChartEntity>
  221. {
  222. new ChartEntity{ Name="待机",Value=list.Where(m => m.StatusID == 3).Count()},
  223. new ChartEntity{ Name="其它",Value=list.Where(m => m.StatusID != 3).Count()},
  224. };
  225. response.AlarmData = new List<ChartEntity>
  226. {
  227. new ChartEntity{ Name="报警",Value=list.Where(m => m.StatusID == 6).Count()},
  228. new ChartEntity{ Name="其它",Value=list.Where(m => m.StatusID != 6).Count()},
  229. };
  230. response.DisConnData = new List<ChartEntity>
  231. {
  232. new ChartEntity{ Name="离线",Value=list.Where(m => m.StatusID == 1).Count()},
  233. new ChartEntity{ Name="其它",Value=list.Where(m => m.StatusID != 1).Count()},
  234. };
  235. // response.FactoryMacStatusData = new List<FactoryMacStatus>();
  236. var factoryGroups = list.GroupBy(c => new { c.FactoryId, c.Factory });
  237. var facList = new List<FactoryMacStatus>();
  238. if (factoryGroups != null && factoryGroups.Count() > 0)
  239. {
  240. foreach (var fac in factoryGroups)
  241. {
  242. var facTemp = new FactoryMacStatus
  243. {
  244. Factory = fac.Key.Factory,
  245. FactoryId = fac.Key.FactoryId,
  246. Total = fac.Count()
  247. };
  248. var plantStatuses = new List<PlantMacStatus>();
  249. var plantGroups = fac.GroupBy(c => new { c.PlantId, c.Plant });
  250. if (plantGroups != null && plantGroups.Count() > 0)
  251. {
  252. foreach (var plant in plantGroups)
  253. {
  254. var temp = new PlantMacStatus
  255. {
  256. PlantId = plant.Key.PlantId,
  257. Plant = plant.Key.Plant,
  258. Total = plant.Count()
  259. };
  260. var statusList = new List<FactoryMacStatusEntity>();
  261. var statusGroups = plant.GroupBy(c => new { c.StatusID, c.StatusName });
  262. if (statusGroups != null && statusGroups.Count() > 0)
  263. {
  264. statusList = statusGroups.Select(c => new FactoryMacStatusEntity
  265. {
  266. StatusId = c.Key.StatusID,
  267. StatusName = c.Key.StatusName,
  268. Color = c.First().Color,
  269. Count = c.Count(),
  270. Rate = ((decimal)c.Count() / plant.Count() * 100).ToString("f2"),
  271. }).OrderByDescending(c => c.Count).ToList();
  272. }
  273. temp.Data = statusList;
  274. plantStatuses.Add(temp);
  275. }
  276. }
  277. facTemp.PlantMacStatuses = plantStatuses;
  278. facList.Add(facTemp);
  279. }
  280. }
  281. response.FactoryMacStatusData = facList;
  282. //var factoryList = list.Where(m => m.FactoryId == 8);
  283. //var runList = factoryList.Where(m => m.StatusID == 4);
  284. //var waitList = factoryList.Where(m => m.StatusID == 3);
  285. //var alarmList = factoryList.Where(m => m.StatusID == 6);
  286. //var disConnList = factoryList.Where(m => m.StatusID == 1);
  287. //int otherCount = factoryList.Count() - runList.Count() - waitList.Count() - alarmList.Count() - disConnList.Count();
  288. // var floorRunList = runList?.GroupBy(m => m.Floor).OrderByDescending(m => m.Count()).FirstOrDefault();
  289. //response.FactoryMacStatusData.Add(new FactoryMacStatus
  290. //{
  291. // Factory = "未来城园区",
  292. // FactoryId = 8,
  293. // Total = factoryList.Count(),
  294. // Data = new List<FactoryMacStatusEntity>
  295. // {
  296. // new FactoryMacStatusEntity{ StatusName="设备总数",Count=factoryList.Count() },
  297. // new FactoryMacStatusEntity{ StatusName="稼动",Count=runList.Count(), Rate=(Convert.ToDouble(runList.Count()*100)/factoryList.Count()).ToString("f2")+"%" },
  298. // new FactoryMacStatusEntity{ StatusName="待机",Count=waitList.Count() ,Rate=(Convert.ToDouble(waitList.Count()*100)/factoryList.Count()).ToString("f2")+"%"},
  299. // new FactoryMacStatusEntity{ StatusName="报警",Count=alarmList.Count(), Rate=(Convert.ToDouble(alarmList.Count()*100)/factoryList.Count()).ToString("f2")+"%"},
  300. // new FactoryMacStatusEntity{ StatusName="离线",Count=disConnList.Count(),Rate=(Convert.ToDouble(disConnList.Count()*100)/factoryList.Count()).ToString("f2")+"%" },
  301. // new FactoryMacStatusEntity{ StatusName="其它",Count=otherCount,Rate=(Convert.ToDouble(otherCount*100)/factoryList.Count()).ToString("f2")+"%" }
  302. // },
  303. // WorkShopData = new WorkShop { Name = floorRunList?.Key, Count = floorRunList?.Count(), Rate = (Convert.ToDouble(floorRunList?.Count() * 100) / runList?.Count())?.ToString("f2") + "%" }
  304. //});
  305. //factoryList = list.Where(m => m.FactoryId == 6);
  306. //runList = factoryList.Where(m => m.StatusID == 4);
  307. //waitList = factoryList.Where(m => m.StatusID == 3);
  308. //alarmList = factoryList.Where(m => m.StatusID == 6);
  309. //disConnList = factoryList.Where(m => m.StatusID == 1);
  310. //otherCount = factoryList.Count() - runList.Count() - waitList.Count() - alarmList.Count() - disConnList.Count();
  311. //// floorRunList = runList?.GroupBy(m => m.Floor).OrderByDescending(m => m.Count()).FirstOrDefault();
  312. //response.FactoryMacStatusData.Add(new FactoryMacStatus
  313. //{
  314. // Factory = "二号园区",
  315. // FactoryId = 6,
  316. // Total = factoryList.Count(),
  317. // Data = new List<FactoryMacStatusEntity>
  318. // {
  319. // new FactoryMacStatusEntity{ StatusName="设备总数",Count=factoryList.Count() },
  320. // new FactoryMacStatusEntity{ StatusName="稼动",Count=runList.Count(), Rate=(Convert.ToDouble(runList.Count()*100)/factoryList.Count()).ToString("f2")+"%" },
  321. // new FactoryMacStatusEntity{ StatusName="待机",Count=waitList.Count() ,Rate=(Convert.ToDouble(waitList.Count()*100)/factoryList.Count()).ToString("f2")+"%"},
  322. // new FactoryMacStatusEntity{ StatusName="报警",Count=alarmList.Count(), Rate=(Convert.ToDouble(alarmList.Count()*100)/factoryList.Count()).ToString("f2")+"%"},
  323. // new FactoryMacStatusEntity{ StatusName="离线",Count=disConnList.Count(),Rate=(Convert.ToDouble(disConnList.Count()*100)/factoryList.Count()).ToString("f2")+"%" },
  324. // new FactoryMacStatusEntity{ StatusName="其它",Count=otherCount,Rate=(Convert.ToDouble(otherCount*100)/factoryList.Count()).ToString("f2")+"%" }
  325. // },
  326. // WorkShopData = new WorkShop { Name = floorRunList?.Key, Count = floorRunList?.Count(), Rate = (Convert.ToDouble((floorRunList?.Count() ?? 0) * 100) / runList?.Count()).Value.ToString("f2") + "%" }
  327. //});
  328. //factoryList = list.Where(m => m.FactoryId == 122);
  329. //runList = factoryList.Where(m => m.StatusID == 4);
  330. //waitList = factoryList.Where(m => m.StatusID == 3);
  331. //alarmList = factoryList.Where(m => m.StatusID == 6);
  332. //disConnList = factoryList.Where(m => m.StatusID == 1);
  333. //otherCount = factoryList.Count() - runList.Count() - waitList.Count() - alarmList.Count() - disConnList.Count();
  334. //// floorRunList = runList?.GroupBy(m => m.Floor).OrderByDescending(m => m.Count())?.FirstOrDefault();
  335. //double workShopRunRate = 0;
  336. //if (runList != null && runList.Count() > 0)
  337. //{
  338. // workShopRunRate = Convert.ToDouble(((floorRunList == null ? 0 : floorRunList.Count()) * 100) / runList.Count());
  339. //}
  340. //response.FactoryMacStatusData.Add(new FactoryMacStatus
  341. //{
  342. // Factory = "三号园区",
  343. // FactoryId = 122,
  344. // Total = factoryList?.Count() == null ? 0 : factoryList.Count(),
  345. // Data = new List<FactoryMacStatusEntity>
  346. // {
  347. // new FactoryMacStatusEntity{ StatusName="设备总数",Count=factoryList.Count() },
  348. // new FactoryMacStatusEntity{ StatusName="稼动",Count=runList?.Count()==null?0:runList.Count(), Rate=(Convert.ToDouble((runList==null?0:runList.Count())*100)/factoryList.Count()).ToString("f2") + "%" },
  349. // new FactoryMacStatusEntity { StatusName = "待机", Count = waitList.Count(), Rate = (Convert.ToDouble(waitList?.Count() * 100) / factoryList.Count()).ToString("f2") + "%" },
  350. // new FactoryMacStatusEntity { StatusName = "报警", Count = alarmList.Count(), Rate = (Convert.ToDouble(alarmList?.Count() * 100) / factoryList.Count()).ToString("f2") + "%" },
  351. // new FactoryMacStatusEntity { StatusName = "离线", Count = disConnList.Count(), Rate = (Convert.ToDouble(disConnList?.Count() * 100) / factoryList.Count()).ToString("f2") + "%" },
  352. // new FactoryMacStatusEntity { StatusName = "其它", Count = otherCount, Rate = (Convert.ToDouble(otherCount * 100) / factoryList.Count()).ToString("f2") + "%" }
  353. // },
  354. // WorkShopData = new WorkShop { Name = floorRunList?.Key == null ? "暂无" : floorRunList.Key, Count = floorRunList?.Count() == null ? 0 : floorRunList.Count(), Rate = workShopRunRate.ToString("f2") + "%" }
  355. //});
  356. return response;
  357. }
  358. }
  359. #endregion
  360. #region 设备MTBA
  361. public ChartDto GetMacMtbaCount()
  362. {
  363. using (IDatabase db = DbFactory.Base("eapslave"))
  364. {
  365. MacAndChargeDto resp = new MacAndChargeDto();
  366. var dal = new DataCenterDal(db, logger);
  367. var list = dal.GetMacMTBA().ToList();
  368. var chartDto = new ChartDto();
  369. List<string> legendDatas = new List<string>();
  370. List<ChartEntity> factoryList = new List<ChartEntity>();
  371. var groupfactory = list.GroupBy(c => new { c.FactoryId, c.Factory });
  372. if (groupfactory != null && groupfactory.Count() > 0)
  373. {
  374. foreach (var item in groupfactory)
  375. {
  376. var groupplant = item.GroupBy(c => new { c.PlantId, c.Plant });
  377. if (groupplant != null && groupplant.Count() > 0)
  378. {
  379. foreach (var plant in groupplant)
  380. {
  381. legendDatas.Add(plant.Key.Plant);
  382. factoryList.Add(new ChartEntity { Name = item.Key.Factory + plant.Key.Plant, Value = plant.Key.PlantId });
  383. }
  384. }
  385. }
  386. }
  387. foreach (var factory in factoryList)
  388. {
  389. List<decimal> dataList = new List<decimal>();
  390. for (int i = 6; i >= 0; i--)
  391. {
  392. var dateFactoryList = list.Where(m => m.PlantId == factory.Value && m.StartTime == DateTime.Today.AddDays(-i)).ToList();
  393. var run = dateFactoryList.Where(m => m.EventCode == "C00012").FirstOrDefault();
  394. var alarm = dateFactoryList.Where(m => m.EventCode == "C00007").FirstOrDefault();
  395. dataList.Add(Math.Round((run != null ? run.TimeSpan : 0) / (alarm != null ? alarm.Count : 1) / 60, 2));
  396. }
  397. chartDto.SeriesData.Add(new Series { Name = factory.Name, Type = "line", Data = dataList });
  398. }
  399. for (int i = 6; i >= 0; i--)
  400. {
  401. chartDto.XData.Add(DateTime.Today.AddDays(-i).ToString("MM-dd"));
  402. }
  403. //***********************************
  404. //chartDto.LegendData = new List<string> { "未来城园区", "二号园区", "三号园区" };
  405. //List<ChartEntity> factoryList = new List<ChartEntity>
  406. //{
  407. // new ChartEntity { Name = "未来城园区", Value =8 },
  408. // new ChartEntity { Name = "二号园区", Value =6 },
  409. // new ChartEntity { Name = "三号园区", Value =122 }
  410. //};
  411. //foreach (var factory in factoryList)
  412. //{
  413. // List<decimal> dataList = new List<decimal>();
  414. // for (int i = 6; i >= 0; i--)
  415. // {
  416. // var dateFactoryList = list.Where(m => m.FactoryId == factory.Value && m.StartTime == DateTime.Today.AddDays(-i)).ToList();
  417. // var run = dateFactoryList.Where(m => m.EventCode == "C00012").FirstOrDefault();
  418. // var alarm = dateFactoryList.Where(m => m.EventCode == "C00007").FirstOrDefault();
  419. // dataList.Add(Math.Round((run != null ? run.TimeSpan : 0) / (alarm != null ? alarm.Count : 1) / 60, 2));
  420. // }
  421. // chartDto.SeriesData.Add(new Series { Name = factory.Name, Type = "line", Data = dataList });
  422. //}
  423. //for (int i = 6; i >= 0; i--)
  424. //{
  425. // chartDto.XData.Add(DateTime.Today.AddDays(-i).ToString("MM-dd"));
  426. //}
  427. //**************************************
  428. //chartDto.SeriesData = new List<Series>();
  429. //chartDto.SeriesData.Add(new Series { Name = "未来城园区", Type = "line", Data = new List<decimal> { 60, 75, 87, 60, 75, 87, 90 } });
  430. //chartDto.SeriesData.Add(new Series { Name = "二号园区", Type = "line", Data = new List<decimal> { 75, 87, 99, 75, 87, 99, 88 } });
  431. //chartDto.SeriesData.Add(new Series { Name = "三号园区", Type = "line", Data = new List<decimal> { 78, 80, 90, 70, 80, 91, 81 } });
  432. return chartDto;
  433. }
  434. }
  435. /// <summary>
  436. /// 机台MTBA报表数据查询
  437. /// </summary>
  438. /// <param name="startTime"></param>
  439. /// <param name="endTime"></param>
  440. /// <param name="filter"></param>
  441. /// <param name="sub"></param>
  442. /// <param name="tablename"></param>
  443. /// <param name="pageIndex"></param>
  444. /// <param name="pageSize"></param>
  445. /// <param name="sort"></param>
  446. /// <param name="order"></param>
  447. /// <returns></returns>
  448. public EapResponse GetMacMtbaList(DateTime startTime, DateTime endTime, string filter, string sub = "", string tablename = "", int pageIndex = 1, int pageSize = 20, string sort = "FactoryName", string order = "descend")
  449. {
  450. try
  451. {
  452. if (string.IsNullOrEmpty(sort))
  453. {
  454. sort = "FactoryName";
  455. }
  456. if (string.IsNullOrEmpty(order))
  457. {
  458. order = "descend";
  459. }
  460. if (order == "descend")
  461. {
  462. order = "desc";
  463. }
  464. else
  465. {
  466. order = "asc";
  467. }
  468. int start, end;
  469. start = (pageIndex - 1) * pageSize;
  470. end = start + pageSize;
  471. string errorinfo = string.Empty;
  472. int total = 0;
  473. var res = new EapResponse() { Code = 1, Msg = string.Empty };
  474. using (IDatabase db = DbFactory.Base("eapslave"))
  475. {
  476. int days = endTime.Subtract(startTime).Days;
  477. var dal = new DataCenterDal(db, logger);
  478. string subfilter = string.Empty;
  479. var machineDal = new MachineDal(db);
  480. //var macFilter = filter?.Replace("c.", "a.");
  481. total = machineDal.GetCount(filter);
  482. List<MtbaDay> mtbaDays = new List<MtbaDay>();
  483. if (string.IsNullOrEmpty(tablename))
  484. {
  485. string mtbatemp = Configuration["mtbatemp"];
  486. tablename = dal.CheckTable(startTime, endTime, filter, subfilter, sub, ref mtbaDays, mtbatemp);
  487. logger.LogError(mtbaDays.ToJson());
  488. }
  489. else
  490. {
  491. mtbaDays = dal.GetMtbaDays(startTime, endTime);
  492. }
  493. //var macList = machineDal.Get(start, pageSize, order, sort, filter, errorinfo).ToList();
  494. var macList = dal.Get(startTime, endTime, start, pageSize, order, sort, filter, sub, tablename, errorinfo).ToList();
  495. var maccodes = macList.Select(c => c.FCode).ToList();
  496. StringBuilder sb = new StringBuilder();
  497. if (maccodes != null && maccodes.Count > 0)
  498. {
  499. sb.Append(" ( ");
  500. for (int i = 0; i < maccodes.Count; i++)
  501. {
  502. //主要判断是否是最后一个条件
  503. if (maccodes.Count - 1 == i)
  504. {
  505. sb.Append(" '" + maccodes[i] + "' ");
  506. }
  507. else
  508. {
  509. sb.Append(" '" + maccodes[i] + "'" + " ,");
  510. }
  511. }
  512. sb.Append(" )");
  513. subfilter = $" and MacCode in {sb.ToString()}";
  514. }
  515. var mtbaList = dal.GetMacMTBADetail(tablename).ToList();
  516. subfilter = "";
  517. //var mtbaListTotal = dal.GetMacMTBADetailTotal(startTime, endTime, filter, subfilter, sub).ToList();
  518. var mtbaListTotal = dal.GetMacMTBADetailTotal(tablename, subfilter).ToList();
  519. AntdComplexTableDto data = new AntdComplexTableDto();
  520. DataTable dt = new DataTable();
  521. dt.Columns.Add("园区");
  522. dt.Columns.Add("厂房");
  523. dt.Columns.Add("楼层");
  524. dt.Columns.Add("设备类型");
  525. dt.Columns.Add("设备名称");
  526. dt.Columns.Add("设备编号");
  527. dt.Columns.Add("机台编号");
  528. //dt.Columns.Add("排名");
  529. dt.Columns.Add("故障");
  530. dt.Columns.Add("非故障");
  531. dt.Columns.Add("汇总");
  532. foreach (var item in mtbaDays)
  533. {
  534. var date = item.DayTime.ToString("yyyy-MM-dd");// startTime.AddDays(i).ToString("yyyy-MM-dd");
  535. dt.Columns.Add(date);
  536. dt.Columns[date].DataType = typeof(decimal);
  537. }
  538. foreach (var mac in macList)
  539. {
  540. DataRow row = dt.NewRow();
  541. row["园区"] = mac.FactoryName;
  542. row["厂房"] = mac.PlantName;
  543. row["楼层"] = mac.FloorName;
  544. row["设备类型"] = mac.MModeCode;
  545. row["设备名称"] = mac.FName;
  546. row["设备编号"] = mac.FCode;
  547. row["机台编号"] = mac.macnumber;
  548. //row["排名"] = "";
  549. var macMtbaList = mtbaList?.Where(m => m.MacCode == mac.FCode).ToList();
  550. var runList = macMtbaList.Any() ? macMtbaList.Where(m => m.EventCode == "C00012").ToList() : null;
  551. var alarmList = macMtbaList.Any() ? macMtbaList.Where(m => m.EventCode == "C00007").ToList() : null;
  552. var runTimeSpan = runList != null && runList.Any() ? runList.Sum(m => m.TimeSpan) : 0;
  553. var alarmCount = alarmList != null && alarmList.Any() ? alarmList.Sum(m => m.Count) : 1;
  554. var alarmCountOne = alarmList != null && alarmList.Any() ? alarmList.Sum(m => m.CountOne) : 1;
  555. var alarmCountTwo = alarmList != null && alarmList.Any() ? alarmList.Sum(m => m.CountTwo) : 1;
  556. alarmCount = alarmCount == 0 ? 1 : alarmCount;
  557. alarmCountOne = alarmCountOne == 0 ? 1 : alarmCountOne;
  558. alarmCountTwo = alarmCountTwo == 0 ? 1 : alarmCountTwo;
  559. row["汇总"] = (runTimeSpan / alarmCount / 60).ToString("f2");
  560. if (string.IsNullOrEmpty(sub) || sub.Contains("1"))
  561. {
  562. row["故障"] = alarmCountOne == 0 ? (runTimeSpan / 60).ToString("f2") : (runTimeSpan / alarmCountOne / 60).ToString("f2");
  563. }
  564. else
  565. {
  566. row["故障"] = "0.00";
  567. }
  568. if (string.IsNullOrEmpty(sub) || sub.Contains("2"))
  569. {
  570. row["非故障"] = alarmCountTwo == 0 ? (runTimeSpan / 60).ToString("f2") : (runTimeSpan / alarmCountTwo / 60).ToString("f2");
  571. }
  572. else
  573. {
  574. row["非故障"] = "0.00";
  575. }
  576. //for (int i = 0; i <= mtbaDays.Count(); i++)
  577. //{
  578. foreach (var item in mtbaDays)
  579. {
  580. var date = item.DayTime.ToString("yyyy-MM-dd");//startTime.AddDays(i).ToString("yyyy-MM-dd");
  581. var dayRunList = runList != null ? runList.Where(m => m.StartTime == Convert.ToDateTime(date)).ToList() : null;
  582. var dayAlarmList = alarmList != null ? alarmList.Where(m => m.StartTime == Convert.ToDateTime(date)).ToList() : null;
  583. var dayRunTimeSpan = dayRunList != null && dayRunList.Any() ? dayRunList.Sum(m => m.TimeSpan) : 0;
  584. var dayAlarmCount = dayAlarmList != null && dayAlarmList.Any() ? dayAlarmList.Sum(m => m.Count) : 1;
  585. row[date] = (dayRunTimeSpan / dayAlarmCount / 60).ToString("f2");
  586. }
  587. dt.Rows.Add(row);
  588. }
  589. DataTable dtNew = dt.Clone();
  590. dtNew.Columns["汇总"].DataType = typeof(decimal);//指定Age为Int类型
  591. dtNew.Columns["故障"].DataType = typeof(decimal);
  592. dtNew.Columns["非故障"].DataType = typeof(decimal);
  593. foreach (DataRow s in dt.Rows)
  594. {
  595. dtNew.ImportRow(s);//导入旧数据
  596. }
  597. dtNew.DefaultView.Sort = "汇总 desc";
  598. dtNew = dtNew.DefaultView.ToTable();
  599. DataTable dtTotal = new DataTable();
  600. var header = new List<AntdColumn>();
  601. if (dt != null && dt.Columns.Count > 0)
  602. {
  603. foreach (DataColumn item in dt.Columns)
  604. {
  605. header.Add(new AntdColumn { ColName = item.ColumnName });
  606. }
  607. #region 排序
  608. //dt.DefaultView.Sort = " 汇总 desc";
  609. //dt = dt.DefaultView.ToTable();
  610. #endregion
  611. #region 汇总数据
  612. dtTotal.Columns.Add("汇总");
  613. dtTotal.Columns["汇总"].DataType = typeof(decimal);
  614. //for (int i = 0; i <= days; i++)
  615. //{
  616. // var date = startTime.AddDays(i).ToString("yyyy-MM-dd");
  617. // dtTotal.Columns.Add(date);
  618. //}
  619. foreach (var item in mtbaDays)
  620. {
  621. var date = item.DayTime.ToString("yyyy-MM-dd");// startTime.AddDays(i).ToString("yyyy-MM-dd");
  622. dtTotal.Columns.Add(date);
  623. dtTotal.Columns[date].DataType = typeof(decimal);
  624. }
  625. var runList = mtbaListTotal.Any() ? mtbaListTotal.Where(m => m.EventCode == "C00012").ToList() : null;
  626. var alarmList = mtbaListTotal.Any() ? mtbaListTotal.Where(m => m.EventCode == "C00007").ToList() : null;
  627. var runTimeSpan = runList != null && runList.Any() ? runList.Sum(m => m.TimeSpan) : 0;
  628. var alarmCount = alarmList != null && alarmList.Any() ? alarmList.Sum(m => m.Count) : 1;
  629. alarmCount = alarmCount == 0 ? 1 : alarmCount;
  630. DataRow row = dtTotal.NewRow();
  631. row["汇总"] = (runTimeSpan / alarmCount / 60).ToString("f2");
  632. //for (int i = 0; i <= days; i++)
  633. //{
  634. foreach (var item in mtbaDays)
  635. {
  636. var date = item.DayTime.ToString("yyyy-MM-dd");
  637. var dayRunList = runList != null ? runList.Where(m => m.StartTime == Convert.ToDateTime(date)).ToList() : null;
  638. var dayAlarmList = alarmList != null ? alarmList.Where(m => m.StartTime == Convert.ToDateTime(date)).ToList() : null;
  639. var dayRunTimeSpan = dayRunList != null && dayRunList.Any() ? dayRunList.Sum(m => m.TimeSpan) : 0;
  640. var dayAlarmCount = dayAlarmList != null && dayAlarmList.Any() ? dayAlarmList.Sum(m => m.Count) : 1;
  641. row[date] = (dayRunTimeSpan / dayAlarmCount / 60).ToString("f2");
  642. }
  643. dtTotal.Rows.Add(row);
  644. #endregion
  645. }
  646. data.Columns = header;
  647. data.Datas = dtNew;
  648. data.TotalData = dtTotal;
  649. res.Data = data;
  650. res.Total = total;
  651. res.Msg = tablename;
  652. return res;
  653. }
  654. }
  655. catch (Exception ex)
  656. {
  657. return null;
  658. }
  659. }
  660. [HttpPost]
  661. public async Task<IActionResult> ExportMacMtbaList(IDictionary<string, string> filterInfo)
  662. {
  663. DateTime startTime=Convert.ToDateTime(DateTime.Now.AddDays(-6).ToString("yyyy-MM-dd 00:00:00")), endTime=DateTime.Now;
  664. string filter=string.Empty, sub = "", tablename = "",sort = "FactoryName", order = "descend";
  665. int pageIndex = 1, pageSize = 100000;
  666. if (filterInfo.ContainsKey("filter"))
  667. {
  668. filter = filterInfo["filter"];
  669. }
  670. if (filterInfo.ContainsKey("sub"))
  671. {
  672. sub = filterInfo["sub"];
  673. }
  674. if (filterInfo.ContainsKey("tablename"))
  675. {
  676. tablename = filterInfo["tablename"];
  677. }
  678. if (filterInfo.ContainsKey("sort"))
  679. {
  680. sort = filterInfo["sort"];
  681. }
  682. if (filterInfo.ContainsKey("order"))
  683. {
  684. order = filterInfo["order"];
  685. }
  686. if (filterInfo.ContainsKey("startTime"))
  687. {
  688. startTime =Convert.ToDateTime( filterInfo["startTime"]);
  689. }
  690. if (filterInfo.ContainsKey("endTime"))
  691. {
  692. endTime =Convert.ToDateTime( filterInfo["endTime"]);
  693. }
  694. if (filterInfo.ContainsKey("pageIndex"))
  695. {
  696. pageIndex = Convert.ToInt32(filterInfo["pageIndex"]);
  697. }
  698. if (filterInfo.ContainsKey("pageSize"))
  699. {
  700. pageSize = Convert.ToInt32(filterInfo["pageSize"]);
  701. }
  702. var data= GetMacMtbaList(startTime, endTime, filter, sub, tablename, pageIndex, pageSize, sort, order);
  703. AntdComplexTableDto roles = (AntdComplexTableDto)data.Data;
  704. int plens = data.Total;
  705. var book = DataExportHelper.MtbaToExcel(roles, plens);
  706. MemoryStream ms = new MemoryStream();
  707. ms.Position = 0;
  708. book.Write(ms);
  709. ms.Dispose();
  710. ms.Close();
  711. await Task.CompletedTask;
  712. return File(ms.ToArray(), "application/octet-stream");
  713. }
  714. #endregion
  715. #region 设备报警
  716. public MacAndChargeDto GetMacAlarmCount()
  717. {
  718. using (IDatabase db = DbFactory.Base("eapslave"))
  719. {
  720. MacAndChargeDto resp = new MacAndChargeDto();
  721. var dal = new DataCenterDal(db, logger);
  722. resp.Data = dal.GetMacAlarm().ToList();
  723. return resp;
  724. }
  725. }
  726. #endregion
  727. #region 设备月别总费用 首页
  728. public ChartDto GetMacTotalCharge()
  729. {
  730. string filter = "";
  731. DateTime dt = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date;//当月第一天0时0分0秒:
  732. string end = dt.ToString("yyyy-MM-dd 00:00:00");
  733. string start = dt.AddMonths(-1).ToString("yyyy-MM-dd 00:00:00");
  734. filter = filter + $"AND CREATED between to_date('{start}','yyyy-mm-dd hh24:mi:ss') and to_date('{end}','yyyy-mm-dd hh24:mi:ss')";
  735. using (IDatabase db = DbFactory.Base("ccmrpt"))
  736. {
  737. var dal = new DataCenterDal(db, logger);
  738. var list = dal.GetMacChargeNew(filter).Where(l => l.Name != null).OrderBy(l => l.Name);
  739. list.ToList().ForEach(item => { item.Value = Math.Abs(item.Value); });
  740. List<ChartEntity> orderList = new List<ChartEntity>();
  741. //orderList = list.ToList();
  742. orderList.Add(new ChartEntity { Name = "设备一课", Value = list.Where(item => item.Name.Contains("设备一课")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("设备一课")).FirstOrDefault().Value });
  743. orderList.Add(new ChartEntity { Name = "设备二课", Value = list.Where(item => item.Name.Contains("设备二课")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("设备二课")).FirstOrDefault().Value });
  744. orderList.Add(new ChartEntity { Name = "设备三课", Value = list.Where(item => item.Name.Contains("设备三课")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("设备三课")).FirstOrDefault().Value });
  745. orderList.Add(new ChartEntity { Name = "设备四课", Value = list.Where(item => item.Name.Contains("设备四课")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("设备四课")).FirstOrDefault().Value });
  746. orderList.Add(new ChartEntity { Name = "设备五课", Value = list.Where(item => item.Name.Contains("设备五课")).FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("设备五课")).FirstOrDefault().Value });
  747. orderList.Add(new ChartEntity { Name = "中央仓库", Value = (list.Where(item => item.Name.Contains("中央仓库"))?.FirstOrDefault() == null ? 0 : list.Where(item => item.Name.Contains("中央仓库")).FirstOrDefault().Value) });
  748. var chartDto = new ChartDto();
  749. chartDto.LegendData = new List<string> { "消耗费用", "库存费用" };
  750. //chartDto.XData = orderList.Select(m => m.Name).ToList();
  751. chartDto.SeriesData = new List<Series>();
  752. chartDto.SeriesData.Add(new Series { Name = "消耗费用", Visible = false, Type = "column", Data = orderList.Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  753. filter = "";
  754. filter = filter + $" AND a.CREATED < to_date('{end}','yyyy-mm-dd hh24:mi:ss')";
  755. var chargeList = dal.GetMacChargeStock(filter).Where(l => l.Name != null).OrderBy(l => l.Name);
  756. chartDto.XData = new List<string>() { "设备一课", "设备二课", "设备三课", "设备四课", "设备五课", "中央仓库" };//orderList.Select(m => m.Name).ToList().Union(chargeList.Select(m => m.Name).ToList()).ToList();
  757. //chartDto.XData.Sort();
  758. // chartDto.XData.Sort((x, y) => x.CompareTo(y));
  759. orderList = new List<ChartEntity>();
  760. orderList.Add(new ChartEntity { Name = "设备一课", Value = chargeList.Where(item => item.Name.Contains("设备一课")).FirstOrDefault() == null ? 0 : chargeList.Where(item => item.Name.Contains("设备一课")).FirstOrDefault().Value });
  761. orderList.Add(new ChartEntity { Name = "设备二课", Value = chargeList.Where(item => item.Name.Contains("设备二课")).FirstOrDefault() == null ? 0 : chargeList.Where(item => item.Name.Contains("设备二课")).FirstOrDefault().Value });
  762. orderList.Add(new ChartEntity { Name = "设备三课", Value = chargeList.Where(item => item.Name.Contains("设备三课")).FirstOrDefault() == null ? 0 : chargeList.Where(item => item.Name.Contains("设备三课")).FirstOrDefault().Value });
  763. orderList.Add(new ChartEntity { Name = "设备四课", Value = chargeList.Where(item => item.Name.Contains("设备四课")).FirstOrDefault() == null ? 0 : chargeList.Where(item => item.Name.Contains("设备四课")).FirstOrDefault().Value });
  764. orderList.Add(new ChartEntity { Name = "设备五课", Value = chargeList.Where(item => item.Name.Contains("设备五课")).FirstOrDefault() == null ? 0 : chargeList.Where(item => item.Name.Contains("设备五课")).FirstOrDefault().Value });
  765. orderList.Add(new ChartEntity { Name = "中央仓库", Value = (chargeList.Where(item => item.Name.Contains("中央仓库"))?.FirstOrDefault() == null ? 0 : chargeList.Where(item => item.Name.Contains("中央仓库")).FirstOrDefault().Value) });
  766. chartDto.SeriesData.Add(new Series { Name = "库存费用", YAxis = 1, Type = "column", Data = orderList.Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  767. return chartDto;
  768. }
  769. }
  770. public ChartDto GetMacTotalChargeList(string filter, string sublter)
  771. {
  772. using (IDatabase db = DbFactory.Base("ccmrpt"))
  773. {
  774. var dal = new DataCenterDal(db, logger);
  775. var list = dal.GetMacChargeNew(filter);
  776. list.ToList().ForEach(item => item.Value = Math.Abs(item.Value));
  777. List<ChartEntity> orderList = new List<ChartEntity>();
  778. orderList = list.ToList();
  779. var chartDto = new ChartDto();
  780. chartDto.LegendData = new List<string> { "消耗费用", "库存费用" };
  781. //chartDto.XData = orderList.Select(m => m.Name).ToList();
  782. chartDto.SeriesData = new List<Series>();
  783. chartDto.SeriesData.Add(new Series { Name = "消耗费用", Type = "column", Data = orderList.Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  784. var chargeList = dal.GetMacChargeStock(sublter);
  785. orderList = new List<ChartEntity>();
  786. orderList = chargeList.Where(l => l.Name != null).ToList();
  787. chartDto.XData = orderList.Select(m => m.Name).ToList().Union(chargeList.Select(m => m.Name).ToList()).ToList();
  788. chartDto.SeriesData.Add(new Series { Name = "库存费用", Type = "column", Data = orderList.Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  789. return chartDto;
  790. }
  791. }
  792. /// <summary>
  793. /// 领用费用
  794. /// </summary>
  795. /// <param name="starttime"></param>
  796. /// <param name="endtime"></param>
  797. /// <returns></returns>
  798. public ChartDto GetMacTotalChargeListUser(string starttime, string endtime)
  799. {
  800. string filter = "";
  801. starttime = Convert.ToDateTime(starttime).ToString("yyyy-MM") + " 01";//当月第一天0时0分0秒:
  802. endtime = Convert.ToDateTime(endtime).AddDays(1 - DateTime.Now.Day).Date.ToString("yyyy-MM-dd");//当月第一天0时0分0秒:
  803. filter = $@" AND t.CREATED >= to_date( '{starttime}', 'yyyy-mm-dd' ) AND t.CREATED < to_date( '{endtime}', 'yyyy-mm-dd hh24:mi:ss' ) ";
  804. using (IDatabase db = DbFactory.Base("ccmrpt"))
  805. {
  806. var dal = new DataCenterDal(db, logger);
  807. var chartDto = new ChartDto();
  808. var chargeList = dal.GetMacChargeUser(filter);
  809. var orderList = new List<ChartEntity>();
  810. orderList = chargeList.Where(l => l.Name != null).ToList();
  811. chartDto.XData = orderList.Where((x, i) => orderList.FindIndex(n => (n.Mon == x.Mon)) == i).Select(m => m.Mon).ToList();
  812. List<string> xdata = new List<string>();
  813. chartDto.XData.ForEach((item) =>
  814. {
  815. xdata.Add(Convert.ToDateTime(item).ToString("yyyy-MM"));
  816. });
  817. chartDto.XData = xdata;
  818. chartDto.XData.Sort();
  819. var list = orderList.Where((x, i) => orderList.FindIndex(n => (n.Name == x.Name)) == i).ToList();
  820. //chartDto.SeriesData.Add(new Series { Name = "库存费用", Type = "line", Data = orderList.Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  821. List<string> ls = new List<string>() { "设备一课", "设备二课", "设备三课", "设备四课", "设备五课", "中央仓库" };
  822. foreach (var item in ls)
  823. {
  824. chartDto.SeriesData.Add(new Series { Name = item, Data = orderList.Where(l => l.Name == item).Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  825. }
  826. //foreach (var item in list)8
  827. // chartDto.SeriesData.Add(new Series { Name = item.Name, Data = orderList.Where(l => l.Name == item.Name).Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  828. //}
  829. return chartDto;
  830. }
  831. }
  832. /// <summary>
  833. /// 库存费用推移图
  834. /// </summary>
  835. /// <param name="filter"></param>
  836. /// <param name="sublter"></param>
  837. /// <returns></returns>
  838. public ChartDto GetMacTotalChargeListTwo(string starttime, string endtime)
  839. {
  840. string filter = "";
  841. starttime = Convert.ToDateTime(starttime).ToString("yyyy-MM") + " 01";//当月第一天0时0分0秒:
  842. endtime = Convert.ToDateTime(endtime).AddDays(1 - DateTime.Now.Day).Date.ToString("yyyy-MM-dd");//当月第一天0时0分0秒:
  843. filter = $@" and mon>=to_date('{starttime}' , 'yyyy-mm-dd hh24:mi:ss')
  844. and mon<to_date('{endtime}' , 'yyyy-mm-dd hh24:mi:ss')";
  845. using (IDatabase db = DbFactory.Base("ccmrpt"))
  846. {
  847. var dal = new DataCenterDal(db, logger);
  848. var chartDto = new ChartDto();
  849. var chargeList = dal.GetMacChargeStockMonth(starttime, endtime);
  850. var orderList = new List<ChartEntity>();
  851. orderList = chargeList.Where(l => l.Name != null).OrderBy(c => c.Mon).ToList();
  852. chartDto.XData = orderList.Where((x, i) => orderList.FindIndex(n => (n.Mon == x.Mon)) == i).OrderBy(l => l.Mon).Select(m => m.Mon).ToList();
  853. List<string> xdata = new List<string>();
  854. chartDto.XData.ForEach((item) =>
  855. {
  856. xdata.Add(Convert.ToDateTime(item).ToString("yyyy-MM"));
  857. });
  858. chartDto.XData = xdata;
  859. chartDto.XData.Sort();
  860. var list = orderList.Where((x, i) => orderList.FindIndex(n => (n.Name == x.Name)) == i).ToList();
  861. //chartDto.SeriesData.Add(new Series { Name = "库存费用", Type = "line", Data = orderList.Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  862. List<string> ls = new List<string>() { "设备一课", "设备二课", "设备三课", "设备四课", "设备五课", "中央仓库" };
  863. foreach (var item in ls)
  864. {
  865. chartDto.SeriesData.Add(new Series { Name = item, Data = orderList.Where(l => l.Name == item).OrderBy(l => l.Mon).Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  866. }
  867. //foreach (var item in list)
  868. //{
  869. // chartDto.SeriesData.Add(new Series { Name = item.Name, Data = orderList.Where(l => l.Name == item.Name).Select(m => Math.Round(m.Value / 10000, 2)).ToList() });
  870. //}
  871. return chartDto;
  872. }
  873. }
  874. #endregion
  875. #region 设备良率
  876. /// <summary>
  877. /// 一次良率
  878. /// </summary>
  879. /// <returns></returns>
  880. [HttpGet]
  881. public ChartDto GetMacGoodRate()
  882. {
  883. var chartDto = new ChartDto();
  884. chartDto.LegendData = new List<string> { "未来城A1栋3楼EOL一次良率", "未来城A1栋1楼EOL一次良率" };
  885. chartDto.XData = new List<string>();
  886. List<string> dd = new List<string>();
  887. List<string> dts = new List<string>();
  888. for (int i = 7; i >= 1; i--)
  889. {
  890. chartDto.XData.Add(DateTime.Today.AddDays(-i).ToString("MM-dd"));
  891. dts.Add(DateTime.Today.AddDays(-i).ToString("yyyy-MM-dd"));
  892. }
  893. using (IDatabase db = DbFactory.Base("ees"))
  894. {
  895. DateTime dt = DateTime.Now;
  896. var dal = new DataCenterDal(db, logger);
  897. IEnumerable<MacGoodRateDto> mgrt = dal.GetMacGoodRate(dt.AddDays(-8).ToString("yyyy-MM-dd"), dt.AddDays(-1).ToString("yyyy-MM-dd"));
  898. //IEnumerable<MacGoodRateDto> shoujian = dal.GetShouJian(dt.AddDays(-8).ToString("yyyy-MM-dd"), dt.AddDays(-1).ToString("yyyy-MM-dd"));
  899. //chartDto.XData = new List<string> { "未来城园区", "二号园区","三号园区" };
  900. chartDto.SeriesData = new List<Series>();
  901. #region
  902. /*var sjgroup = shoujian?.GroupBy(c => c.Factroy);
  903. if (sjgroup != null)
  904. {
  905. foreach (var item in sjgroup)
  906. {
  907. List<decimal> des = new List<decimal>();
  908. foreach (var it in dts)
  909. {
  910. decimal rate = shoujian.Where(c => c.Factroy == item.Key && c.PDate == it).Select(l => Convert.ToDecimal(l.Rate)).FirstOrDefault();
  911. des.Add(rate);
  912. }
  913. chartDto.SeriesData.Add(new Series { Name = item.Key + "COB首件通过率", Type = "column", Data = des });
  914. //shoujian.Where(c => c.Factroy == item.Key).Select(l => Convert.ToDecimal(l.Rate)).ToList() });
  915. }
  916. }*/
  917. #endregion
  918. var group = mgrt?.GroupBy(c => c.Floor);
  919. if (group != null)
  920. {
  921. foreach (var item in group)
  922. {
  923. if (item.Key == "1楼EOL")
  924. continue;
  925. List<decimal> des = new List<decimal>();
  926. foreach (var it in dts)
  927. {
  928. decimal rate = mgrt.Where(c => c.Floor == item.Key && c.PDate == it).Select(l => Convert.ToDecimal(l.Rate)).FirstOrDefault();
  929. des.Add(rate);
  930. }
  931. chartDto.SeriesData.Add(new Series { Name = "未来城园区A1栋" + item.Key + "一次良率", YAxis = 0, Type = "line", Data = des });
  932. //mgrt.Where(c=>c.Factroy==item.Key).Select(l=>Convert.ToDecimal( l.Rate)).ToList()
  933. }
  934. }
  935. //chartDto.SeriesData.Add(new Series { Name = "未来城园区COB首件通过率", Type = "column", Data = new List<decimal> { 60, 75, 87, 60, 75, 87, 90 } });
  936. //chartDto.SeriesData.Add(new Series { Name = "二号园区COB首件通过率", Type = "column", Data = new List<decimal> { 75, 87, 99, 75, 87, 99, 88 } });
  937. //chartDto.SeriesData.Add(new Series { Name = "三号园区COB首件通过率", Type = "column", Data = new List<decimal> { 75, 87, 99, 75, 87, 99, 88 } });
  938. //chartDto.SeriesData.Add(new Series { Name = "未来城园区EOL一次良率", Type = "line", Data = new List<decimal> { 70, 37, 59, 65, 77, 89, 98 } });
  939. //chartDto.SeriesData.Add(new Series { Name = "二号园区EOL一次良率", Type = "line", Data = new List<decimal> { 78, 80, 90, 70, 80, 91, 81 } });
  940. //chartDto.SeriesData.Add(new Series { Name = "三号园区EOL一次良率", Type = "line", Data = new List<decimal> { 65, 57, 69, 75, 87, 99, 88 } });
  941. }
  942. return chartDto;
  943. }
  944. /// <summary>
  945. /// 首件合格率
  946. /// </summary>
  947. /// <returns></returns>
  948. [HttpGet]
  949. public ChartDto GetShouJianRate()
  950. {
  951. var chartDto = new ChartDto();
  952. chartDto.LegendData = new List<string> { "未来城园区A1-3FCOB首件通过率", "未来城园区A1-1/2FCOB首件通过率" };
  953. chartDto.XData = new List<string>();
  954. List<string> dd = new List<string>();
  955. List<string> dts = new List<string>();
  956. for (int i = 7; i >= 1; i--)
  957. {
  958. chartDto.XData.Add(DateTime.Today.AddDays(-i).ToString("MM-dd"));
  959. dts.Add(DateTime.Today.AddDays(-i).ToString("yyyy-MM-dd"));
  960. }
  961. using (IDatabase db = DbFactory.Base("ccmrpt"))
  962. {
  963. DateTime dt = DateTime.Now;
  964. var dal = new DataCenterDal(db, logger);
  965. IEnumerable<MacGoodRateDto> shoujian = dal.GetShouJian(dt.AddDays(-8).ToString("yyyy-MM-dd"), dt.AddDays(-1).ToString("yyyy-MM-dd"));
  966. //chartDto.XData = new List<string> { "未来城园区", "二号园区","三号园区" };
  967. chartDto.SeriesData = new List<Series>();
  968. var sjgroup = shoujian?.GroupBy(c => c.Factroy);
  969. if (sjgroup != null)
  970. {
  971. foreach (var item in sjgroup)
  972. {
  973. List<decimal> des = new List<decimal>();
  974. foreach (var it in dts)
  975. {
  976. decimal rate = shoujian.Where(c => c.Factroy == item.Key && c.PDate == it).Select(l => Convert.ToDecimal(l.Rate)).FirstOrDefault();
  977. des.Add(rate);
  978. }
  979. chartDto.SeriesData.Add(new Series { Name = item.Key + "COB首件通过率", Type = "line", Data = des });
  980. //shoujian.Where(c => c.Factroy == item.Key).Select(l => Convert.ToDecimal(l.Rate)).ToList() });
  981. }
  982. }
  983. }
  984. return chartDto;
  985. }
  986. /// <summary>
  987. /// 一次良率详情
  988. /// </summary>
  989. /// <param name="starttime"></param>
  990. /// <param name="endtime"></param>
  991. /// <param name="filter"></param>
  992. /// <param name="pageIndex"></param>
  993. /// <param name="pageSize"></param>
  994. /// <param name="sort"></param>
  995. /// <param name="order"></param>
  996. /// <returns></returns>
  997. public EapResponse GetMacGoodRateDetail(string starttime, string endtime, string filter, int pageIndex = 1, int pageSize = 20, string sort = "Factroy", string order = "descend")
  998. {
  999. if (string.IsNullOrEmpty(sort))
  1000. {
  1001. sort = "Factroy";
  1002. }
  1003. if (string.IsNullOrEmpty(order))
  1004. {
  1005. order = "descend";
  1006. }
  1007. if (order == "descend")
  1008. {
  1009. order = "desc";
  1010. }
  1011. else
  1012. {
  1013. order = "asc";
  1014. }
  1015. int start, end;
  1016. start = (pageIndex - 1) * pageSize + 1;
  1017. end = start + pageSize;
  1018. string errorinfo = string.Empty;
  1019. int total = 0;
  1020. var res = new EapResponse() { Code = 1, Msg = string.Empty };
  1021. using (IDatabase db = DbFactory.Base("ees"))
  1022. {
  1023. var dal = new DataCenterDal(db, logger);
  1024. total = dal.GetMacGoodDetailCount(filter, starttime, endtime);
  1025. var Equipmentmodels = dal.GetMacGoodDetail(starttime, endtime, start, end, order, sort, filter);//获取机型,园区,楼层
  1026. AntdComplexTableDto data = new AntdComplexTableDto();
  1027. DataTable dt = new DataTable();
  1028. dt = Equipmentmodels;
  1029. DataTable dtTotal = new DataTable();
  1030. var header = new List<AntdColumn>();
  1031. if (dt != null && dt.Columns.Count > 0)
  1032. {
  1033. foreach (DataColumn item in dt.Columns)
  1034. {
  1035. if (item.ColumnName != "ROWNO" && item.ColumnName != "FactoryRowSpan" && item.ColumnName != "PartNameRowSpan" && item.ColumnName != "PlantRowSpan" && item.ColumnName != "FloorRowSpan")
  1036. header.Add(new AntdColumn { ColName = item.ColumnName });
  1037. }
  1038. }
  1039. data.Columns = header;
  1040. data.Datas = dt;
  1041. data.TotalData = dtTotal;
  1042. res.Data = data;
  1043. res.Total = total;
  1044. return res;
  1045. }
  1046. }
  1047. /// <summary>
  1048. /// 首件详情
  1049. /// </summary>
  1050. /// <param name="factory"></param>
  1051. /// <param name="shift"></param>
  1052. /// <param name="start"></param>
  1053. /// <param name="endtime"></param>
  1054. /// <returns></returns>
  1055. public LayuiModel<MacGoodRateDto> GetShouJianRateDatil(string factory, string shift, DateTime? start, DateTime? end)
  1056. {
  1057. using (IDatabase db = DbFactory.Base("ccmrpt"))
  1058. {
  1059. ChartDto dto = new ChartDto();
  1060. if (!start.HasValue)
  1061. start = DateTime.Now.AddDays(-1);
  1062. if (!end.HasValue)
  1063. end = DateTime.Now.AddDays(-1);
  1064. for (var i = start.Value; i <= end.Value; i = i.AddDays(1))
  1065. {
  1066. dto.XData.Add(i.ToString("yyyy-MM-dd"));
  1067. }
  1068. var dal = new DataCenterDal(db);
  1069. var d = start.Value.AddDays(1) < end.Value ? start.Value.AddDays(1).ToString("yyyy-MM-dd") : end.Value.ToString("yyyy-MM-dd");
  1070. var data = dal.GetShouJianDatil(factory, shift, start, end);
  1071. //var data2 = dal.GetShouJianCharDto(factory, shift, start, endtime);
  1072. var sjgroup = data?.GroupBy(c => c.Factroy);
  1073. if (sjgroup != null)
  1074. {
  1075. foreach (var item in sjgroup)
  1076. {
  1077. if (item.Key != "total")
  1078. {
  1079. List<decimal> des = new List<decimal>();
  1080. foreach (var it in dto.XData)
  1081. {
  1082. decimal rate = data.Where(c => c.Factroy == item.Key && c.PDate == it).Select(l => Convert.ToDecimal(l.Rate)).FirstOrDefault();
  1083. des.Add(rate);
  1084. }
  1085. dto.SeriesData.Add(new Series { Name = item.Key + "COB首件通过率", Type = "line", Data = des });
  1086. }
  1087. //shoujian.Where(c => c.Factroy == item.Key).Select(l => Convert.ToDecimal(l.Rate)).ToList() });
  1088. }
  1089. }
  1090. return new LayuiModel<MacGoodRateDto>()
  1091. {
  1092. code = 1,
  1093. data = data,
  1094. extraObject = dto
  1095. };
  1096. }
  1097. }
  1098. public IEnumerable<SelectDto<string>> GetFactory()
  1099. {
  1100. using (IDatabase db = DbFactory.Base("ccmrpt"))
  1101. {
  1102. var dal = new DataCenterDal(db);
  1103. var data = dal.GetFactory();
  1104. return data;
  1105. }
  1106. }
  1107. /// <summary>
  1108. /// 园区
  1109. /// </summary>
  1110. /// <param name="filter"></param>
  1111. /// <returns></returns>
  1112. public IEnumerable<SelectDto<string>> GetMultipalFactroySelects(string filter)
  1113. {
  1114. using (IDatabase db = DbFactory.Base("ees"))
  1115. {
  1116. var dal = new DataCenterDal(db, logger);
  1117. return dal.GetMultipleFactorySelects(filter).OrderBy(c => c.Label);
  1118. }
  1119. }
  1120. /// <summary>
  1121. /// 厂房
  1122. /// </summary>
  1123. /// <param name="filter"></param>
  1124. /// <returns></returns>
  1125. public IEnumerable<SelectDto<string>> GetMultipalPlantSelects(string filter)
  1126. {
  1127. using (IDatabase db = DbFactory.Base("ees"))
  1128. {
  1129. var dal = new DataCenterDal(db, logger);
  1130. return dal.GetMultiplePlantSelects(filter).OrderBy(c => c.Label);
  1131. }
  1132. }
  1133. /// <summary>
  1134. /// 楼层
  1135. /// </summary>
  1136. /// <param name="filter"></param>
  1137. /// <returns></returns>
  1138. [HttpGet]
  1139. public IEnumerable<SelectDto<string>> GetMultipalFloorSelects(string filter)
  1140. {
  1141. using (IDatabase db = DbFactory.Base("ees"))
  1142. {
  1143. var dal = new DataCenterDal(db, logger);
  1144. return dal.GetMultipleFloorSelects(filter).OrderBy(c => c.Label);
  1145. }
  1146. }
  1147. /// <summary>
  1148. /// 机种
  1149. /// </summary>
  1150. /// <param name="filter"></param>
  1151. /// <returns></returns>
  1152. [HttpGet]
  1153. public IEnumerable<SelectDto<string>> GetMultiplePartNameSelects(string filter)
  1154. {
  1155. using (IDatabase db = DbFactory.Base("ees"))
  1156. {
  1157. var dal = new DataCenterDal(db, logger);
  1158. return dal.GetMultiplePartNameSelects(filter).OrderBy(c => c.Label);
  1159. }
  1160. }
  1161. /// <summary>
  1162. /// 工序
  1163. /// </summary>
  1164. /// <param name="filter"></param>
  1165. /// <returns></returns>
  1166. [HttpGet]
  1167. public IEnumerable<SelectDto<string>> GetMultipleStepNameSelects(string filter)
  1168. {
  1169. using (IDatabase db = DbFactory.Base("ees"))
  1170. {
  1171. var dal = new DataCenterDal(db, logger);
  1172. return dal.GetMultipleStepNameSelects(filter).OrderBy(c => c.Label);
  1173. }
  1174. }
  1175. #endregion
  1176. #region 保养计划达成率
  1177. [HttpGet]
  1178. public ChartDto GetMacTakecareRate()
  1179. {
  1180. var chartDto = new ChartDto();
  1181. chartDto.LegendData = new List<string> { "已保养", "全部", "达成率" };
  1182. chartDto.XData = new List<string> { "未来城1楼COB", "未来城3楼COB", "未来城2楼EOL", "未来城3楼EOL", "二号园区1楼COB", "三号园区2楼COB" };
  1183. chartDto.SeriesData = new List<Series>();
  1184. chartDto.SeriesData.Add(new Series { Name = "已保养", Type = "column", Data = new List<decimal> { 50, 55, 42, 45, 68, 100 } });
  1185. chartDto.SeriesData.Add(new Series { Name = "全部", Type = "column", Data = new List<decimal> { 67, 65, 56, 50, 90, 100 } });
  1186. chartDto.SeriesData.Add(new Series { Name = "达成率", Type = "column", Data = new List<decimal> { 75, 85, 75, 90, 76, 100 } });
  1187. return chartDto;
  1188. }
  1189. #endregion
  1190. #region 查询车间
  1191. [HttpGet]
  1192. public IEnumerable<object> GetLocationSelect(string factory)
  1193. {
  1194. using (IDatabase db = DbFactory.Base("ccmrpt"))
  1195. {
  1196. var dal = new DataCenterDal(db, logger);
  1197. return dal.GetLocationSelect(factory).Select(c => new { Label = c.Value, Value = c.Value });
  1198. }
  1199. }
  1200. [HttpGet]
  1201. public IEnumerable<object> GetWarehouseSelect(string factory)
  1202. {
  1203. using (IDatabase db = DbFactory.Base("ccmrpt"))
  1204. {
  1205. var dal = new DataCenterDal(db, logger);
  1206. return dal.GetWarehouseSelect(factory).Select(c => new { Label = c.Value, Value = c.Value });
  1207. }
  1208. }
  1209. #endregion
  1210. /// <summary>
  1211. /// ME出勤率
  1212. /// </summary>
  1213. /// <returns></returns>
  1214. [HttpGet]
  1215. public ChartDto GetMEAttendance()
  1216. {
  1217. using(IDatabase db = DbFactory.Base("ofilmEmp"))
  1218. {
  1219. ChartDto dto = new ChartDto();
  1220. var dal = new DataCenterDal(db);
  1221. var time = DateTime.Now.AddDays(-1);
  1222. dto.LegendData = new List<string> { "系统人力", "出勤人力", "出勤率" };
  1223. var data = dal.GetMEAttendance(time);
  1224. List<decimal> y1 = new List<decimal>();
  1225. List<decimal> y2 = new List<decimal>();
  1226. List<decimal> y3 = new List<decimal>();
  1227. foreach (var item in data)
  1228. {
  1229. dto.XData.Add(item.DeptName);
  1230. y1.Add(Convert.ToDecimal(item.OnWorkNum));
  1231. y2.Add(Convert.ToDecimal(item.OnJobNum));
  1232. y3.Add(Convert.ToDecimal(item.Rate));
  1233. }
  1234. dto.SeriesData = new List<Series>();
  1235. dto.SeriesData.Add(new Series { Name = "系统人力", Type = "column", Data = y1 });
  1236. dto.SeriesData.Add(new Series { Name = "出勤人力", Type = "column", Data = y2 });
  1237. dto.SeriesData.Add(new Series { Name = "出勤率", Type = "line", Data = y3 });
  1238. return dto;
  1239. }
  1240. }
  1241. /// <summary>
  1242. /// ME出勤率详情
  1243. /// </summary>
  1244. /// <param name="deptname"></param>
  1245. /// <param name="shift"></param>
  1246. /// <param name="start"></param>
  1247. /// <returns></returns>
  1248. [HttpGet]
  1249. public LayuiModel<MEAttendanceseDtail> GetMEAttendanceDatil(string deptname, string shift, DateTime? start)
  1250. {
  1251. using (IDatabase db = DbFactory.Base("ofilmEmp"))
  1252. {
  1253. var dal = new DataCenterDal(db);
  1254. if (!start.HasValue)
  1255. start = DateTime.Now.AddDays(-1);
  1256. var data1 = dal.GetMEAttendanceDatil(deptname, shift, "员工", start);
  1257. var data2 = dal.GetMEAttendanceDatil(deptname, shift, "职员", start);
  1258. var data3 = dal.GetMEAttendanceDatil(deptname, shift, "", start);
  1259. var data = new List<MEAttendanceseDtail>();
  1260. var dao = new ChartDto();
  1261. dao.LegendData = new List<string>() { "员工出勤率", "职工出勤率", "部门出勤率" };
  1262. List<decimal> y1 = new List<decimal>();
  1263. List<decimal> y2 = new List<decimal>();
  1264. List<decimal> y3 = new List<decimal>();
  1265. if (data3 != null && data3.Count > 1)
  1266. {
  1267. foreach (var i in data3)
  1268. {
  1269. var m = new MEAttendanceseDtail() { DeptOnJobNum = "0", OnJobNum = "0", EmpOnJobNum = "0", DeptOnWorkNum = "0", OnWorkNum = "0", EmpOnWorkNum = "0", DeptRate = "0", Rate = "0", EmpRate = "0" };
  1270. m.DeptName = i.DeptName;
  1271. m.Time = i.Time;
  1272. m.DeptOnJobNum = i.OnJobNum;
  1273. m.DeptOnWorkNum = i.OnWorkNum;
  1274. m.DeptRate = i.Rate;
  1275. if (data1 != null && data1.Count > 1)
  1276. {
  1277. foreach (var j in data1)
  1278. {
  1279. if (j.DeptName == m.DeptName)
  1280. {
  1281. m.OnJobNum = j.OnJobNum;
  1282. m.OnWorkNum = j.OnWorkNum;
  1283. m.Rate = j.Rate;
  1284. }
  1285. }
  1286. }
  1287. if (data2 != null && data2.Count > 1)
  1288. {
  1289. foreach (var k in data2)
  1290. {
  1291. if (k.DeptName == m.DeptName)
  1292. {
  1293. m.EmpOnJobNum = k.OnJobNum;
  1294. m.EmpOnWorkNum = k.OnWorkNum;
  1295. m.EmpRate = k.Rate;
  1296. }
  1297. }
  1298. }
  1299. if (m.DeptName != "小计")
  1300. {
  1301. dao.XData.Add(m.DeptName);
  1302. y1.Add(Convert.ToDecimal(m.Rate));
  1303. y2.Add(Convert.ToDecimal(m.EmpRate));
  1304. y3.Add(Convert.ToDecimal(m.DeptRate));
  1305. }
  1306. data.Add(m);
  1307. }
  1308. }
  1309. dao.SeriesData = new List<Series>()
  1310. {
  1311. new Series { Name = "员工出勤率", Type = "column", Data = y1 },
  1312. new Series { Name = "职工出勤率", Type = "column", Data = y2 },
  1313. new Series { Name = "部门出勤率", Type = "column", Data = y3 },
  1314. };
  1315. return new LayuiModel<MEAttendanceseDtail>()
  1316. {
  1317. code = 1,
  1318. data = data,
  1319. extraObject = dao
  1320. };
  1321. }
  1322. }
  1323. }
  1324. }