123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985 |
- using Cksoft.Data;
- using DllEapEntity;
- using DllEapEntity.Dtos;
- using DllEapEntity.OFILM;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- namespace DllEapDal.OFILM
- {
- public class ForecastDal
- {
- private IDatabase CurrDb = null;
- public ForecastDal(IDatabase db)
- {
- CurrDb = db;
- }
- /// <summary>
- /// 设备需求预测
- /// </summary>
- /// <param name="start"></param>
- /// <param name="length"></param>
- /// <param name="order"></param>
- /// <param name="sort"></param>
- /// <param name="filter"></param>
- /// <param name="errorinfo"></param>
- /// <returns></returns>
- public IEnumerable<ForecastDto> Get(int start, int length, string order, string sort, string filter, string errorinfo)
- {
- var sql = $@"
- select MAX(id) id,equipmentmodel,park,floor,MAX(score) score,IFNULL(MAX( number ),0) number
- FROM (
- SELECT MAX(t.id) id,equipmentmodel,park,floor,MAX(score) score,planTime,CEILING(SUM(CASE
- WHEN locate('FQC',assignmentContent) >0 THEN genfive(number)
- WHEN accounting='0.25' THEN
- gensecfive(number)
- WHEN accounting='0.5' THEN
- genfive(number)
- WHEN accounting='1' THEN CEILING(number)
- ELSE
- number
- END
- )) number
- FROM
- (
- SELECT tt.equipmentmodel,
- tt.id,
- tt.park,
- tt.floor,
- b.machineType,
- b.workshopSection,
- c.planTime,
- tt.score,
- c.dayPlan,
- b.assignmentContent,
- accounting,
- b.UPH,
- b.eropTurnoverRate,
- CASE b.workshopSection
- WHEN 'COB' THEN
- c.dayPlan/22/0.95/.97/ replace (b.eropTurnoverRate,'%','')*100 /b.UPH
- WHEN 'EOL' THEN
- c.dayPlan/22/0.95/ replace (b.eropTurnoverRate,'%','')*100/b.UPH
- ELSE
- 0
- END number
-
- from
- (
- (select id,equipmentmodel,accounting,'三号园区' as park,'2#1F' as floor,IFNULL(threeSecFir,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'未来城' as park,'A1#1F' as floor,IFNULL(futureCity,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'未来城' as park,'A1#3F' as floor,IFNULL(futureCityThird,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#1F' as floor,IFNULL(secfirstFir,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#2F' as floor,IFNULL(secFirstSec,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#3F' as floor,IFNULL(secFirstThird,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A2#1F' as floor,IFNULL(secSecFirst,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A2#2F' as floor,IFNULL(secSecSec,0) as score from equipmentnumber)
- ) tt
- LEFT JOIN workingprocedure b on tt.equipmentModel=b.equipmentModel and tt.park = b.park and tt.Floor=b.floor
- LEFT JOIN (SELECT park,floor,customer,planTime,SUM(dayPlan) dayPlan FROM productionplan WHERE planTime>=CURRENT_DATE() GROUP BY park, floor,customer,planTime) c ON c.customer=b.machineType
- and c.Floor = b.Floor
- WHERE 1=1
- {filter}
- order by equipmentmodel,tt.floor
- ) t
- GROUP BY equipmentmodel,park,floor,planTime
-
- ) e
- GROUP BY equipmentmodel,park,floor
- limit {start - 1},{length}
- ";
- var models = CurrDb.FindList<ForecastDto>(sql);
- return models;
- }
- /// <summary>
- /// 设备需求预测总数
- /// </summary>
- /// <param name="filter"></param>
- /// <returns></returns>
- public int GetCount(string filter)
- {
- string errorinfo = string.Empty;
- var sql = $@" select Count(*) Count
- FROM (
- SELECT equipmentmodel,park,floor
- FROM
- (
- SELECT tt.equipmentmodel,
- tt.park,
- tt.floor
-
- from
- (
- (select id,equipmentmodel,accounting,'三号园区' as park,'2#1F' as floor,IFNULL(threeSecFir,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'未来城' as park,'A1#1F' as floor,IFNULL(futureCity,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'未来城' as park,'A1#3F' as floor,IFNULL(futureCityThird,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#1F' as floor,IFNULL(secfirstFir,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#2F' as floor,IFNULL(secFirstSec,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#3F' as floor,IFNULL(secFirstThird,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A2#1F' as floor,IFNULL(secSecFirst,0) as score from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A2#2F' as floor,IFNULL(secSecSec,0) as score from equipmentnumber)
- ) tt
- LEFT JOIN workingprocedure b on tt.equipmentModel=b.equipmentModel and tt.park = b.park and tt.Floor=b.floor
- LEFT JOIN (SELECT park,floor,customer FROM productionplan WHERE planTime>=CURRENT_DATE() GROUP BY park, floor,customer) c ON c.customer=b.machineType
- WHERE 1=1 {filter}
- order by equipmentmodel,tt.floor
- ) t
- GROUP BY equipmentmodel,park,floor
- ) e
- ";
- var entities = CurrDb.FindList<ForecastDto>(sql).FirstOrDefault();
- if (entities != null)
- {
- return entities.Count;
- }
- return 0;
- }
- public IEnumerable<ForecastDto> getMainPlan()
- {
- string sql = "SELECT DISTINCT planTime FROM productionplan WHERE planTime like '%主计划%'";
- var model = CurrDb.FindList<ForecastDto>(sql);
- return model;
- }
- public IEnumerable<ForecastDto> getMaxPlan()
- {
- string sql = "SELECT max(STR_TO_DATE(planTime,'%Y-%m-%d') ) planTime FROM productionplan WHERE planTime not like '%主计划%'";
- var model = CurrDb.FindList<ForecastDto>(sql);
- return model;
- }
- public IEnumerable<ForecastDto> getMinPlan()
- {
- string sql = "SELECT min(STR_TO_DATE(planTime,'%Y-%m-%d') ) planTime FROM productionplan WHERE planTime not like '%主计划%'";
- var model = CurrDb.FindList<ForecastDto>(sql);
- return model;
- }
- public string getsql(string filter,string subfilter)
- {
- string sql = $@"
- SELECT equipmentmodel,park,floor,MAX(sore) score,CEILING(SUM(CASE accounting
- WHEN '0.25' THEN
- gensecfive(number)
- WHEN '0.5' THEN
- genfive(number)
- ELSE
- number
- END
- )) number
- FROM
- (
- SELECT tt.equipmentmodel,
- tt.park,
- tt.floor,
- b.machineType,
- tt.sore,
- c.dayPlan,
- accounting,
- c.planTime,
- b.eropTurnoverRate,
- CASE b.workshopSection
- WHEN 'COB' THEN
- c.dayPlan/28/22/0.95/.97/ replace (b.eropTurnoverRate,'%','')*100 /b.UPH
- WHEN 'EOL' THEN
- c.dayPlan/28/22/0.95/ replace (b.eropTurnoverRate,'%','')*100 /b.UPH
- ELSE
- 0
- END number
-
- from
- (
- (select id,equipmentmodel,accounting,'三号园区' as park,'2#1F' as floor,IFNULL(threeSecFir,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'未来城' as park,'A1#1F' as floor,IFNULL(futureCity,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'未来城' as park,'A1#3F' as floor,IFNULL(futureCityThird,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#1F' as floor,IFNULL(secfirstFir,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#2F' as floor,IFNULL(secFirstSec,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A1#3F' as floor,IFNULL(secFirstThird,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A2#1F' as floor,IFNULL(secSecFirst,0) as sore from equipmentnumber)
- UNION
- (select id,equipmentmodel,accounting,'二号园区' as park,'A2#2F' as floor,IFNULL(secSecSec,0) as sore from equipmentnumber)
- ) tt
- LEFT JOIN workingprocedure b on tt.equipmentModel=b.equipmentModel and tt.park = b.park and tt.Floor=b.floor
- LEFT JOIN (SELECT * FROM productionplan WHERE planTime = '{filter}') c ON c.customer=b.machineType
- WHERE 1=1 {subfilter}
-
- order by equipmentmodel,tt.floor
- -- limit 460,20
- ) t
- GROUP BY equipmentmodel,park,floor";
- return sql;
- }
- /// <summary>
- /// 预测详情总览
- /// </summary>
- /// <returns></returns>
- public IEnumerable<ForecastDto> getDetail(string filter)
- {
- string sql = $@"SELECT equipmentmodel,park,floor,MAX(sore) score,planTime,CEILING(SUM(CASE
- WHEN locate('FQC',assignmentContent) >0 THEN genfive(number)
- WHEN accounting='0.25' THEN
- gensecfive(number)
- WHEN accounting='0.5' THEN
- genfive(number)
- WHEN accounting='1' THEN CEILING(number)
- ELSE
- number
- END
- )) number
- FROM
- (
- SELECT tt.equipmentmodel,
- tt.park,
- tt.floor,
- b.machineType,
- tt.sore,
- b.assignmentContent,
- c.dayPlan,
- accounting,
- DATE_FORMAT(c.planTime, '%Y-%m-%d') planTime,
- b.eropTurnoverRate,
- CASE b.workshopSection
- WHEN 'COB' THEN
- c.dayPlan / 22 / 0.95 / .97 / replace(b.eropTurnoverRate, '%', '') *100 /b.UPH
- WHEN 'EOL' THEN
- c.dayPlan / 22 / 0.95 / replace(b.eropTurnoverRate, '%', '') *100 /b.UPH
- ELSE
- 0
- END number
- from
- (
- (select id, equipmentmodel, accounting, '三号园区' as park, '2#1F' as floor, IFNULL(threeSecFir, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '未来城' as park, 'A1#1F' as floor, IFNULL(futureCity, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '未来城' as park, 'A1#3F' as floor, IFNULL(futureCityThird, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A1#1F' as floor, IFNULL(secfirstFir, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A1#2F' as floor, IFNULL(secFirstSec, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A1#3F' as floor, IFNULL(secFirstThird, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A2#1F' as floor, IFNULL(secSecFirst, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A2#2F' as floor, IFNULL(secSecSec, 0) as sore from equipmentnumber)
- ) tt
- LEFT JOIN workingprocedure b on tt.equipmentModel = b.equipmentModel and tt.park = b.park and tt.Floor = b.floor
- LEFT JOIN(SELECT* FROM productionplan WHERE planTime not like '%主计划%') c ON c.customer = b.machineType
- and c.Floor = b.Floor
- WHERE 1 = 1 {filter}
- order by equipmentmodel,tt.floor
- ) t
- WHERE planTime is not null
- GROUP BY equipmentmodel,park,floor,planTime
- order by planTime";
- var model = CurrDb.FindList<ForecastDto>(sql);
- return model;
- }
- public IEnumerable<ForecastDto> getDetailTotal(string filter)
- {
- string sql = $@"SELECT sum(sore) score,planTime,CEILING(SUM(CASE
- WHEN locate('FQC',assignmentContent) >0 THEN genfive(number)
- WHEN accounting='0.25' THEN
- gensecfive(number)
- WHEN accounting='0.5' THEN
- genfive(number)
- WHEN accounting='1' THEN CEILING(number)
- ELSE
- number
- END
- )) number
- FROM
- (
- SELECT tt.equipmentmodel,
- tt.park,
- tt.floor,
- b.machineType,
- tt.sore,
- b.assignmentContent,
- c.dayPlan,
- accounting,
- DATE_FORMAT(c.planTime, '%Y-%m-%d') planTime,
- b.eropTurnoverRate,
- CASE b.workshopSection
- WHEN 'COB' THEN
- c.dayPlan / 22 / 0.95 / .97 / replace(b.eropTurnoverRate, '%', '') *100 /b.UPH
- WHEN 'EOL' THEN
- c.dayPlan / 22 / 0.95 / replace(b.eropTurnoverRate, '%', '') *100 /b.UPH
- ELSE
- 0
- END number
- from
- (
- (select id, equipmentmodel, accounting, '三号园区' as park, '2#1F' as floor, IFNULL(threeSecFir, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '未来城' as park, 'A1#1F' as floor, IFNULL(futureCity, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '未来城' as park, 'A1#3F' as floor, IFNULL(futureCityThird, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A1#1F' as floor, IFNULL(secfirstFir, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A1#2F' as floor, IFNULL(secFirstSec, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A1#3F' as floor, IFNULL(secFirstThird, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A2#1F' as floor, IFNULL(secSecFirst, 0) as sore from equipmentnumber)
- UNION
- (select id, equipmentmodel, accounting, '二号园区' as park, 'A2#2F' as floor, IFNULL(secSecSec, 0) as sore from equipmentnumber)
- ) tt
- LEFT JOIN workingprocedure b on tt.equipmentModel = b.equipmentModel and tt.park = b.park and tt.Floor = b.floor
- LEFT JOIN(SELECT* FROM productionplan WHERE planTime not like '%主计划%') c ON c.customer = b.machineType
- WHERE 1 = 1 {filter}
- order by equipmentmodel,tt.floor
- ) t
- WHERE planTime is not null
- GROUP BY planTime
- order by planTime";
- var model = CurrDb.FindList<ForecastDto>(sql);
- return model;
- }
- /// <summary>
- /// 预测详情总行数
- /// </summary>
- /// <param name="filter"></param>
- /// <returns></returns>
- public int GetEmCount(string filter)
- {
- string errorinfo = string.Empty;
- var sql = $@"select Count(1) Count from ( (select id,equipmentmodel,'三号园区' as park,'2#1F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'未来城' as park,'A1#1F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'未来城' as park,'A1#3F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'二号园区' as park,'A1#1F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'二号园区' as park,'A1#2F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'二号园区' as park,'A1#3F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'二号园区' as park,'A2#1F' as floor from equipmentnumber)
- UNION
- (select id,equipmentmodel,'二号园区' as park,'A2#2F' as floor from equipmentnumber) )tt
- where 1=1 {filter}
- ";
- var entities = CurrDb.FindList<ForecastDto>(sql).FirstOrDefault();
- if (entities != null)
- {
- return entities.Count;
- }
- return 0;
- }
- /// <summary>
- /// 获取园区
- /// </summary>
- /// <param name="filter"></param>
- /// <returns></returns>
- public IEnumerable<SelectDto<string>> GetMultipleSelects(string filter)
- {
- var sql = $@"select park value,park label
- FROM
- (
- (select '三号园区' as park)
- UNION
- (select '未来城' as park)
- UNION
- (select '二号园区' as park)
- ) t";
- var entities = CurrDb.FindList<SelectDto<string>>(sql);
- return entities;
- }
- /// <summary>
- /// 获取机种下拉框
- /// </summary>
- /// <param name="filter"></param>
- /// <returns></returns>
- public IEnumerable<SelectDto<string>> GetMultipleMacTypeSelects(string filter)
- {
- var sql = $@"select distinct MachineType value,MachineType label
- FROM WorkingProcedure where 1=1 {filter}";
- var entities = CurrDb.FindList<SelectDto<string>>(sql);
- return entities;
- }
- /// <summary>
- /// 获取楼层
- /// </summary>
- /// <param name="filter"></param>
- /// <returns></returns>
- public IEnumerable<SelectDto<string>> GetMultipleSelectsFloor(string filter)
- {
- var sql = $@"
- select DISTINCT floor value,floor label
- FROM
- (
- (select '三号园区' as park, '2#1F' as floor )
- UNION
- (select '未来城' as park, 'A1#1F' as floor )
- UNION
- (select '未来城' as park, 'A1#3F' as floor )
- UNION
- (select '二号园区' as park, 'A1#1F' as floor )
- UNION
- (select '二号园区' as park, 'A1#2F' as floor)
- UNION
- (select '二号园区' as park, 'A1#3F' as floor )
- UNION
- (select '二号园区' as park, 'A2#1F' as floor )
- UNION
- (select '二号园区' as park, 'A2#2F' as floor )
- ) t
- WHERE 1=1 {filter}";
- var entities = CurrDb.FindList<SelectDto<string>>(sql);
- return entities;
- }
- /// <summary>
- /// 预测详情转DataTable
- /// </summary>
- /// <param name="roles"></param>
- /// <returns></returns>
- public DataTable Getfor(IEnumerable<ForecastDto> roles)
- {
- string plantime = new ProductPlanDal(CurrDb).getMin().PlanTime;
- var plan = getMainPlan();
- DataTable dt = new DataTable();
- if (!string.IsNullOrEmpty(plantime))
- {
- string time = plantime;
- DateTime st = Convert.ToDateTime(time);
- dt.Columns.Add("设备型号");
- dt.Columns.Add("园区");
- dt.Columns.Add("楼层");
- dt.Columns.Add("现有数量");
- dt.Columns.Add("ParkRowSpan");
- dt.Columns.Add("ModelRowSpan");
- dt.Columns.Add(st.ToString("MM") + "月预测");
- for (int h = 1; h <= plan.Count(); h++)
- {
- dt.Columns.Add(st.AddMonths(h).ToString("MM") + "月预测");
- }
- dt.Columns.Add(st.ToString("MM") + "月利用率");
- for (int h = 1; h <= plan.Count(); h++)
- {
- dt.Columns.Add(st.AddMonths(h).ToString("MM") + "月利用率");
- }
- dt.Columns.Add("预警");
- if (dt != null && dt.Columns.Count > 0)
- {
- string subfilter = $" and tt.id in ( {string.Join(",", roles.Select(l => l.ID).ToArray())})";
- Dictionary<string, IEnumerable<ForecastDto>> dic = new Dictionary<string, IEnumerable<ForecastDto>>();
- foreach (var itemd in plan)
- {
- dic.Add(itemd.PlanTime, CurrDb.FindList<ForecastDto>(getsql(itemd.PlanTime, subfilter)));
- }
- string Equipmentmodel = "";
- var last = roles.LastOrDefault();
- foreach (var it in roles)
- {
- DataRow row = dt.NewRow();
- if (string.IsNullOrEmpty(Equipmentmodel))
- {
- Equipmentmodel = it.Equipmentmodel;
- #region
- row["设备型号"] = it.Equipmentmodel;
- row["园区"] = it.Park;
- row["楼层"] = it.Floor;
- row["现有数量"] = it.Score;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- row[st.ToString("MM") + "月预测"] = it.Number;
- int i = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == it.Equipmentmodel && l.Floor == it.Floor && l.Park == it.Park).Select(c => c.Number).FirstOrDefault();
- row[st.AddMonths(i + 1).ToString("MM") + "月预测"] = (number == null ? "0" : number);
- i++;
- }
- if (it.Score?.Trim() == "0" || string.IsNullOrEmpty(it.Score) || it.Score=="0")
- {
- row[st.ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.ToString("MM") + "月利用率"] = (Convert.ToDecimal(it.Number) / Convert.ToInt32(it.Score) * 100).ToString("0.00") + "%";
- }
- int m = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == it.Equipmentmodel && l.Floor == it.Floor && l.Park == it.Park).Select(c => c.Number).FirstOrDefault();
- if (number == "0" || string.IsNullOrEmpty(number) || it.Score=="0")
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = (Convert.ToDecimal(number) / Convert.ToInt32(it.Score) * 100).ToString("0.00") + "%";
- }
- m++;
- }
- row["预警"] = "88%";
- dt.Rows.Add(row);
- #endregion
- }
- else
- {
- if (Equipmentmodel != it.Equipmentmodel)
- {
- #region 合计
- string Scores = roles.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(p => Convert.ToInt32(p.Score)).ToString();
- string numbers = roles.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(p => Convert.ToInt32(p.Number)).ToString();
- row["设备型号"] = "合计";
- row["园区"] = "合计";
- row["楼层"] = "合计";
- row["现有数量"] = Scores;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- row[st.ToString("MM") + "月预测"] = numbers;
- int i = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(c => Convert.ToInt32(c.Number)).ToString();
- row[st.AddMonths(i + 1).ToString("MM") + "月预测"] = (number == null ? "0" : number);
- i++;
- }
- if (Scores == "0" || string.IsNullOrEmpty(Scores) || Scores=="0")
- {
- row[st.ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.ToString("MM") + "月利用率"] = (Convert.ToDecimal(numbers) / Convert.ToInt32(Scores) * 100).ToString("0.00") + "%";
- }
- int m = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(c => Convert.ToInt32(c.Number)).ToString();
- if (number == "0" || string.IsNullOrEmpty(number) || it.Score=="0")
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = (Convert.ToDecimal(number) / Convert.ToInt32(Scores) * 100).ToString("0.00") + "%";
- }
- m++;
- }
- row["预警"] = "88%";
- dt.Rows.Add(row);
- #endregion
- Equipmentmodel = it.Equipmentmodel;
- #region
- row = dt.NewRow();
- row["设备型号"] = it.Equipmentmodel;
- row["园区"] = it.Park;
- row["楼层"] = it.Floor;
- row["现有数量"] = it.Score;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- row[st.ToString("MM") + "月预测"] = it.Number;
- i = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == it.Equipmentmodel && l.Floor == it.Floor && l.Park == it.Park).Select(c => c.Number).FirstOrDefault();
- row[st.AddMonths(i + 1).ToString("MM") + "月预测"] = (number == null ? "0" : number);
- i++;
- }
- if (it.Score?.Trim() == "0" || string.IsNullOrEmpty(it.Score) || it.Score=="0")
- {
- row[st.ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.ToString("MM") + "月利用率"] = (Convert.ToDecimal(it.Number) / Convert.ToInt32(it.Score) * 100).ToString("0.00") + "%";
- }
- m = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == it.Equipmentmodel && l.Floor == it.Floor && l.Park == it.Park).Select(c => c.Number).FirstOrDefault();
- if (number == "0" || string.IsNullOrEmpty(number) || it.Score=="0")
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = (Convert.ToDecimal(number) / Convert.ToInt32(it.Score) * 100).ToString("0.00") + "%";
- }
- m++;
- }
- row["预警"] = "88%";
- dt.Rows.Add(row);
- #endregion
- }
- else
- {
- #region
- row["设备型号"] = it.Equipmentmodel;
- row["园区"] = it.Park;
- row["楼层"] = it.Floor;
- row["现有数量"] = it.Score;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- row[st.ToString("MM") + "月预测"] = it.Number;
- int i = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == it.Equipmentmodel && l.Floor == it.Floor && l.Park == it.Park).Select(c => c.Number).FirstOrDefault();
- row[st.AddMonths(i + 1).ToString("MM") + "月预测"] = (number == null ? "0" : number);
- i++;
- }
- if (it.Score?.Trim() == "0" || string.IsNullOrEmpty(it.Score) || it.Score=="0")
- {
- row[st.ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.ToString("MM") + "月利用率"] = (Convert.ToDecimal(it.Number) / Convert.ToInt32(it.Score) * 100).ToString("0.00") + "%";
- }
- int m = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == it.Equipmentmodel && l.Floor == it.Floor && l.Park == it.Park).Select(c => c.Number).FirstOrDefault();
- if (number == "0" || string.IsNullOrEmpty(number) || it.Score=="0")
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = (Convert.ToDecimal(number) / Convert.ToInt32(it.Score) * 100).ToString("0.00") + "%";
- }
- m++;
- }
- row["预警"] = "88%";
- dt.Rows.Add(row);
- #endregion
- }
- }
- }
- if (last != null)
- {
- DataRow row = dt.NewRow();
- #region 合计
- string Scores = roles.Where(l => l.Equipmentmodel == last.Equipmentmodel).Sum(p => Convert.ToInt32(p.Score)).ToString();
- string numbers = roles.Where(l => l.Equipmentmodel == last.Equipmentmodel).Sum(p => Convert.ToInt32(p.Number)).ToString();
- row["设备型号"] = "合计";
- row["园区"] = "合计";
- row["楼层"] = "合计";
- row["现有数量"] = Scores;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- row[st.ToString("MM") + "月预测"] = numbers;
- int i = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == last.Equipmentmodel).Sum(c => Convert.ToInt32(c.Number)).ToString();
- row[st.AddMonths(i + 1).ToString("MM") + "月预测"] = (number == null ? "0" : number);
- i++;
- }
- if (Scores == "0" || string.IsNullOrEmpty(Scores) || Scores=="0")
- {
- row[st.ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.ToString("MM") + "月利用率"] = (Convert.ToDecimal(numbers) / Convert.ToInt32(Scores) * 100).ToString("0.00") + "%";
- }
- int m = 0;
- foreach (var item in plan)
- {
- var planNew = dic[item.PlanTime];
- string number = planNew.Where(l => l.Equipmentmodel == last.Equipmentmodel).Sum(c => Convert.ToInt32(c.Number)).ToString();
- if (number == "0" || string.IsNullOrEmpty(number) || last.Score=="0")
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = "0.00%";
- }
- else
- {
- row[st.AddMonths(m + 1).ToString("MM") + "月利用率"] = (Convert.ToDecimal(number) / Convert.ToInt32(Scores) * 100).ToString("0.00") + "%";
- }
- m++;
- }
- row["预警"] = "88%";
- dt.Rows.Add(row);
- #endregion
- }
- }
- }
- var modelGroup = roles.GroupBy(c => c.Equipmentmodel);
- // 合并行数
- foreach (var model in modelGroup)
- {
- for (var i = 0; i < dt.Rows.Count; i++)
- {
- if (dt.Rows[i]["设备型号"].ToString() == model.Key)
- {
- dt.Rows[i]["ModelRowSpan"] = model.Count()+1;
- var parkGroup = roles.Where(l => l.Equipmentmodel == model.Key).GroupBy(c => c.Park);
- foreach (var it in parkGroup)
- {
- if (dt.Rows[i]["园区"].ToString() == it.Key)
- {
- dt.Rows[i]["ParkRowSpan"] = it.Count();
- }
- }
- }
- }
- }
- return dt;
- }
- /// <summary>
- /// 预测详情转DataTable
- /// </summary>
- /// <param name="macList"></param>
- /// <param name="Equipmentmodels"></param>
- /// <returns></returns>
- public DataTable GetForDetail(IEnumerable<ForecastDto> macList, IEnumerable<ForecastDto> Equipmentmodels)
- {
- DataTable dt = new DataTable();
- dt.Columns.Add("设备型号");
- dt.Columns.Add("园区");
- dt.Columns.Add("楼层");
- dt.Columns.Add("现有数量");
- dt.Columns.Add("ParkRowSpan");
- dt.Columns.Add("ModelRowSpan");
- DateTime dd = DateTime.Now.AddDays(1 - DateTime.Now.Day).Date.AddMonths(1).AddDays(-1);//当月最后一天
- DateTime maxplan = Convert.ToDateTime( getMaxPlan().FirstOrDefault().PlanTime);
- DateTime minplan = Convert.ToDateTime(getMinPlan().FirstOrDefault().PlanTime);
- int days = maxplan.Subtract(DateTime.Now).Days + 1;
- for (int i = 0; i <= days; i++)
- {
- var date = DateTime.Now.AddDays(i).ToString("MM月dd日");
- dt.Columns.Add(date);
- }
- string Equipmentmodel = "";
- var last = Equipmentmodels.LastOrDefault();
- if (Equipmentmodels != null)
- {
- foreach (var mac in Equipmentmodels)
- {
- DataRow row = dt.NewRow();
- if (string.IsNullOrEmpty(Equipmentmodel))
- {
- Equipmentmodel = mac.Equipmentmodel;
- #region
- row["设备型号"] = mac.Equipmentmodel;
- row["园区"] = mac.Park;
- row["楼层"] = mac.Floor;
- row["现有数量"] = mac.Score;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- for (int i = 0; i <= days; i++)
- {
- var date = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
- string number = macList.Where(m => m.PlanTime == date && m.Equipmentmodel == mac.Equipmentmodel && m.Floor == mac.Floor && m.Park == mac.Park).Select(l => l.Number).FirstOrDefault();
- row[DateTime.Now.AddDays(i).ToString("MM月dd日")] = (number == null ? "0" : number);
- }
- dt.Rows.Add(row);
- #endregion
- }
- else
- {
- if (Equipmentmodel != mac.Equipmentmodel)
- {
- #region 合计
- string Scores = Equipmentmodels.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(p => Convert.ToInt32(p.Score)).ToString();
- string numbers = Equipmentmodels.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(p => Convert.ToInt32(p.Number)).ToString();
- row["设备型号"] = "合计"; ;
- row["园区"] = "合计"; ;
- row["楼层"] = "合计"; ;
- row["现有数量"] = Scores;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- for (int i = 0; i <= days; i++)
- {
- var date = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
- string number = macList.Where(m => m.PlanTime == date && m.Equipmentmodel == Equipmentmodel).Sum(l => Convert.ToInt32(l.Number)).ToString();
- row[DateTime.Now.AddDays(i).ToString("MM月dd日")] = (number == null ? "0" : number);
- }
- dt.Rows.Add(row);
- #endregion
- Equipmentmodel = mac.Equipmentmodel;
- #region
- row = dt.NewRow();
- row["设备型号"] = mac.Equipmentmodel;
- row["园区"] = mac.Park;
- row["楼层"] = mac.Floor;
- row["现有数量"] = mac.Score;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- for (int i = 0; i <= days; i++)
- {
- var date = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
- string number = macList.Where(m => m.PlanTime == date && m.Equipmentmodel == mac.Equipmentmodel && m.Floor == mac.Floor && m.Park == mac.Park).Select(l => l.Number).FirstOrDefault();
- row[DateTime.Now.AddDays(i).ToString("MM月dd日")] = (number == null ? "0" : number);
- }
- dt.Rows.Add(row);
- #endregion
- }
- else
- {
- #region
- row["设备型号"] = mac.Equipmentmodel;
- row["园区"] = mac.Park;
- row["楼层"] = mac.Floor;
- row["现有数量"] = mac.Score;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- for (int i = 0; i <= days; i++)
- {
- var date = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
- string number = macList.Where(m => m.PlanTime == date && m.Equipmentmodel == mac.Equipmentmodel && m.Floor == mac.Floor && m.Park == mac.Park).Select(l => l.Number).FirstOrDefault();
- row[DateTime.Now.AddDays(i).ToString("MM月dd日")] = (number == null ? "0" : number);
- }
- dt.Rows.Add(row);
- #endregion
- }
- }
- }
- }
- if (last != null)
- {
- DataRow row = dt.NewRow();
- #region 合计
- string Scores = Equipmentmodels.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(p => Convert.ToInt32(p.Score)).ToString();
- string numbers = Equipmentmodels.Where(l => l.Equipmentmodel == Equipmentmodel).Sum(p => Convert.ToInt32(p.Number)).ToString();
- row["设备型号"] = "合计"; ;
- row["园区"] = "合计"; ;
- row["楼层"] = "合计"; ;
- row["现有数量"] = Scores;
- row["ParkRowSpan"] = "";
- row["ModelRowSpan"] = "";
- for (int i = 0; i <= days; i++)
- {
- var date = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd");
- string number = macList.Where(m => m.PlanTime == date && m.Equipmentmodel == last.Equipmentmodel).Sum(l => Convert.ToInt32(l.Number)).ToString();
- row[DateTime.Now.AddDays(i).ToString("MM月dd日")] = (number == null ? "0" : number);
- }
- dt.Rows.Add(row);
- #endregion
- }
- var modelGroup = Equipmentmodels.GroupBy(c => c.Equipmentmodel);
- foreach (var model in modelGroup)
- {
- for (var i = 0; i < dt.Rows.Count; i++)
- {
- if (dt.Rows[i]["设备型号"].ToString() == model.Key)
- {
- dt.Rows[i]["ModelRowSpan"] = model.Count()+1;
- var parkGroup = Equipmentmodels.Where(l => l.Equipmentmodel == model.Key).GroupBy(c => c.Park);
- foreach (var it in parkGroup)
- {
- if (dt.Rows[i]["园区"].ToString() == it.Key)
- {
- dt.Rows[i]["ParkRowSpan"] = it.Count();
- }
- }
- }
- }
- }
- return dt;
- }
- public AntdComplexTableDto GetComplexData(string filter, int start,
- int length)
- {
- string errorinfo = "";
- var model = Get(start, length, "", "", filter, errorinfo);
- var dt = Getfor(model);
- var headers = new List<AntdColumn>();
- if (dt != null && dt.Columns.Count > 0)
- {
- foreach (DataColumn item in dt.Columns)
- {
- if (item.ColumnName == "ParkRowSpan" || item.ColumnName == "ModelRowSpan")
- continue;
- headers.Add(new AntdColumn { ColName = item.ColumnName });
- }
- }
- var antdData = new AntdComplexTableDto();
- antdData.Columns = headers;
- antdData.Datas = dt;
- return antdData;
- }
- public AntdComplexTableDto GetComplexDataDetail(string filter, int start,
- int length)
- {
- var macList = getDetail(filter).ToList();//获取当月预测数据
- var en = new EquipmentnumberDal(CurrDb);
- var Equipmentmodels = en.getEquipmentmodel(start, length, "", "", filter);//获取机型,园区,楼层
- var dt = GetForDetail(macList, Equipmentmodels);
- var headers = new List<AntdColumn>();
- if (dt != null && dt.Columns.Count > 0)
- {
- foreach (DataColumn item in dt.Columns)
- {
- if (item.ColumnName == "ParkRowSpan" || item.ColumnName == "ModelRowSpan")
- continue;
- headers.Add(new AntdColumn { ColName = item.ColumnName });
- }
- }
- var antdData = new AntdComplexTableDto();
- antdData.Columns = headers;
- antdData.Datas = dt;
- return antdData;
- }
- }
- }
|