123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- import { Component, ChangeDetectionStrategy, OnInit, ChangeDetectorRef, ElementRef } from '@angular/core';
- import { NzMessageService } from 'ng-zorro-antd';
- import { STColumn, XlsxService } from '@delon/abc';
- import { getTimeDistance } from '@delon/util';
- import { _HttpClient } from '@delon/theme';
- import { I18NService } from '@core';
- import { yuan } from '@shared';
- import { ProjectFileService } from 'app/services/projectFile/project-file.service';
- import { FbsWorkshopDispatchListService } from 'app/services/fbs/fbs-workshop-dispatch-list.service';
- import { FbsAbnormalWorkingHoursService } from 'app/services/fbs/fbs-abnormal-working-hours.service';
- import { FbsWorkshopDispatchList } from 'app/entity/fbs/fbs-workshop-dispatch-list';
- import { convertingNumbers } from '@shared/utils/shared';
- @Component({
- selector: 'app-dashboard-analysis',
- templateUrl: './analysis.component.html',
- styleUrls: ['./analysis.component.less'],
- styles:[
- `
- table{
- border-collapse:collapse;border:none;
- }
- th{
- border:solid#000 1px;
- }
- td{
- border:solid#000 1px;
- }
- .bolder{
- font-weight:bolder;
- }
-
- `
- ]
- // changeDetection: ChangeDetectionStrategy.OnPush,
- })
- export class DashboardAnalysisComponent implements OnInit {
- data: any = {};
- loading = true;
- date_range: Date[] = [];
- rankingListData: any[] = Array(7)
- .fill({})
- .map((item, i) => {
- return {
- title: this.i18n.fanyi('app.analysis.test', { no: i }),
- total: 323234,
- };
- });
- titleMap = {
- y1: this.i18n.fanyi('app.analysis.traffic'),
- y2: this.i18n.fanyi('app.analysis.payments'),
- };
- searchColumn: STColumn[] = [
- { title: '排名', i18n: 'app.analysis.table.rank', index: 'index' },
- {
- title: '搜索关键词',
- i18n: 'app.analysis.table.search-keyword',
- index: 'keyword',
- click: (item: any) => this.msg.success(item.keyword),
- },
- {
- type: 'number',
- title: '用户数',
- i18n: 'app.analysis.table.users',
- index: 'count',
- sorter: (a, b) => a.count - b.count,
- },
- {
- type: 'number',
- title: '周涨幅',
- i18n: 'app.analysis.table.weekly-range',
- index: 'range',
- render: 'range',
- sorter: (a, b) => a.range - b.range,
- },
- ];
- constructor(
- private http: _HttpClient,
- public msg: NzMessageService,
- private i18n: I18NService,
- private cdr: ChangeDetectorRef,
- private projectFileService: ProjectFileService,
- private fbsWorkshopDispatchListService:FbsWorkshopDispatchListService,
- private fbsAbnormalWorkingHoursService:FbsAbnormalWorkingHoursService,
- private xlsx: XlsxService
- ) { }
- ngOnInit() {
- // const offlineData: any[] = [];
- // for (let i = 0; i < 10; i += 1) {
- // offlineData.push({
- // name: `门店${i}`,
- // cvr: Math.ceil(Math.random() * 9) / 10,
- // });
- // };
- // offlineData.forEach((item: any, idx: number) => {
- // item.show = idx === 0;
- // item.chart = Object.assign([], offlineData);
- // });
- // this.http.get('/chart').subscribe((res: any) => {
- // res.offlineData.forEach((item: any, idx: number) => {
- // item.show = idx === 0;
- // item.chart = Object.assign([], res.offlineChartData);
- // });
- // this.data = res;
- // this.loading = false;
- // });
-
- this.getCircleChartData();
- this.feeTotal = `¥ ${this.feeData.reduce((pre, now) => now.y + pre, 0).toFixed(2)}`;
- this.alertTotal = `¥ ${this.feeData.reduce((pre, now) => now.y + pre, 0).toFixed(2)}`;
- this.getNow();
- this.getSumDispatchReport();
- this.getAbnormalWorkingHoursReport();
- this.getPlanningReport();
- }
- /**
- * @description: 获取数据
- * @param {type}
- * @author: 段亚鑫
- */
- isVisible = false;
- getCircleChartData() {
- this.projectFileService.queryStatusNum().then((response) => {
- this.projectFeeData = response.result.statusList;
- this.projectFeeTotal = response.result.sum;
- this.isVisible = true;
- this.loading = false;
- // this.chart.render();
- })
- }
- /**
- * @description: 渲染图表
- * @param {type}
- * @author: 段亚鑫
- */
- chart: any;
- render(el: ElementRef) {
- const data = [{
- item: '事例一',
- count: 40,
- percent: 0.4
- }, {
- item: '事例二',
- count: 21,
- percent: 0.21
- }, {
- item: '事例三',
- count: 17,
- percent: 0.17
- }, {
- item: '事例四',
- count: 13,
- percent: 0.13
- }, {
- item: '事例五',
- count: 9,
- percent: 0.09
- }];
- this.chart = new G2.Chart({
- container: el.nativeElement,
- forceFit: true,
- height: 450,
- animate: false
- });
- this.chart.source(data, {
- percent: {
- formatter: function formatter(val) {
- val = val * 100 + '%';
- return val;
- }
- }
- });
- this.chart.coord('theta', {
- radius: 0.75,
- innerRadius: 0.6
- });
- this.chart.tooltip({
- showTitle: false,
- itemTpl: '<li><span style="background-color:{color};" class="g2-tooltip-marker"></span>{name}: {value}</li>'
- });
- // 文本
- this.chart.guide().html({
- position: ['50%', '50%'],
- html: '<div style="color:#8c8c8c;font-size: 14px;text-align: center;width: 10em;">主机<br><span style="color:#8c8c8c;font-size:20px">200</span>台</div>',
- alignX: 'middle',
- alignY: 'middle'
- });
- const interval = this.chart.intervalStack().position('percent').color('item').label('percent', {
- formatter: function formatter(val, item) {
- return item.point.item + ': ' + val;
- }
- }).tooltip('item*percent', function (item, percent) {
- percent = percent * 100 + '%';
- return {
- name: item,
- value: percent
- };
- }).style({
- lineWidth: 1,
- stroke: '#fff'
- });
- // this.chart.render();
- interval.setSelected(data[0]);
- }
- setDate(type: any) {
- this.date_range = getTimeDistance(type);
- setTimeout(() => this.cdr.detectChanges());
- }
- salesType = 'all';
- salesPieData: any;
- salesTotal = 0;
- changeSaleType() {
- this.salesPieData =
- this.salesType === 'all'
- ? this.data.salesTypeData
- : this.salesType === 'online'
- ? this.data.salesTypeDataOnline
- : this.data.salesTypeDataOffline;
- if (this.salesPieData) {
- this.salesTotal = this.salesPieData.reduce((pre, now) => now.y + pre, 0);
- }
- this.cdr.detectChanges();
- }
- handlePieValueFormat(value: any) {
- return yuan(value);
- }
- saleTabs: any[] = [{ key: 'sales', show: true }, { key: 'visits' }];
- salesChange(idx: number) {
- if (this.saleTabs[idx].show !== true) {
- this.saleTabs[idx].show = true;
- this.cdr.detectChanges();
- }
- }
- offlineIdx = 0;
- offlineChange(idx: number) {
- if (this.data.offlineData[idx].show !== true) {
- this.data.offlineData[idx].show = true;
- this.cdr.detectChanges();
- }
- }
- projectFeeTotal: any = null;
- projectFeeData = [
- // {x:'试剂/PD01',y:5.0,},
- // {x:'试剂/PDA',y:2.5,},
- // {x:'试剂/PR02',y:1.5,},
- // {x:'检测/PD01',y:5.5,},
- // {x:'检测/PDA',y:2.2,},
- // {x:'检测/PR02',y:1.6,},
- // {x:'会议/PD01',y:0.8,},
- // {x:'会议/PDA',y:3.2,},
- // {x:'会议/PR02',y:1.5,},
- // {x:'培训/PD01',y:2.5,},
- // {x:'培训/PDA',y:7.6,},
- // {x:'培训/PR02',y:1.8,},
- // {x:'会议/PD01',y:0.8,},
- // {x:'会议/PDA',y:3.2,},
- // {x:'人工/PR02',y:4.2,},
- ];
- projectFeeFormat(val: number) {
- // console.error(val)
- return val+"/个";
- }
- feeTotal: string;
- feeData = [
- { x: '一季度', y: 10000, },
- { x: '二季度', y: 40000, },
- { x: '三季度', y: 80000, },
- { x: '四季度', y: 30000, },
- ];
- feeFormat(val: number) {
- return `¥ ${val.toFixed(2)}`;
- }
- alertTotal: string;
- alertData = [
- { x: '办公费', y: 8000, },
- { x: '检测费', y: 12000, },
- { x: '设备采购费', y: 66000, },
- { x: '培训费', y: 45000, },
- ];
- alertFormat(val: number) {
- return `¥ ${val.toFixed(2)}`;
- }
- saveLoading=false;
- /**
- * 获取报表数据
- */
- listOfDataSelect=null;
- getSumDispatchReport(){
- this.saveLoading=true;
- this.fbsWorkshopDispatchListService.getSumDispatchReport(this.fbsWorkshopDispatchList).then((response)=>{
- this.listOfData=response.result;
- this.defaultSwitch();
- this.isSwitchChange();
- if(this.listOfDataSelect===null){
- this.listOfDataSelect=JSON.parse(JSON.stringify(response.result));
- }
-
- //获取时间集合数据
- this.getDateList();
- //总效率
- this.getEfficiencyTotal()
- this.saveLoading=false;
- })
- }
- achievementRateTotal="";//总达成率
- productivityTotal="";//生产率
- getEfficiencyTotal(){
- this.listOfData.forEach(element => {
- let numberOfTasksTotal=element.numberOfTasksTotal;//计划数量
- let standardWorkingHoursActualTotal=element.standardWorkingHoursActualTotal;//实际标准工时
- let quantityCompletedTotal=element.quantityCompletedTotal;//完成数量
- let manHoursCompletedTotal=element.manHoursCompletedTotal;//完成工时
- if(element.projectName==="统计"){
- this.achievementRateTotal=((Number(quantityCompletedTotal)/Number(numberOfTasksTotal))*100).toFixed(1);
- console.log(standardWorkingHoursActualTotal)
- this.productivityTotal=((Number(standardWorkingHoursActualTotal)/Number(manHoursCompletedTotal))*100).toFixed(1)
- }
- });
- }
- /**
- * 获取时间列集合数据
- */
- widthLength=0;
- dateList=[];
- getDateList(){
- if(this.listOfData&&this.listOfData.length>0){
- this.dateList=this.listOfData[0].fbsWorkshopDispatchListList
- // this.widthLength=(this.listOfData[0].fbsWorkshopDispatchListList.length*700)+890;
- this.widthLength=(this.listOfData[0].fbsWorkshopDispatchListList.length*600)+840;
- }
- }
- /**
- * 异常工时统计
- */
- abnormalWorkingHoursList:any=[];
- AbnormalWorkingHoursTotal:any={}
- getAbnormalWorkingHoursReport(){
- this.fbsAbnormalWorkingHoursService.getAbnormalWorkingHoursReport().then((response)=>{
- this.abnormalWorkingHoursList=response.result.fbsAbnormalWorkingHoursList;
- let attendanceHours=0;//出勤总工时
- let overtimeHours=0;//加班总工时
- let train=0;//其他总工时
- let abnormalWorkingHours=0;//异常总工时统计
- let warehouse=0;//仓库总工时统计
- this.abnormalWorkingHoursList.forEach(element => {
- if(element.attendanceHours){
- attendanceHours=attendanceHours+Number(element.attendanceHours);
- }
- if(element.overtimeHours){
- overtimeHours=overtimeHours+Number(element.overtimeHours);
- }
- train=train+Number(element.train)+Number(element.meeting)+Number(element.fiveS)+Number(element.researchAndDevelopment);
- abnormalWorkingHours=abnormalWorkingHours+Number(element.quality)+Number(element.design)+Number(element.rework)+Number(element.materiel)+Number(element.energy)+Number(element.other)+Number(element.equipment)+Number(element.plan);
- warehouse=warehouse+Number(element.mixedIngredients)+Number(element.warehousing)+Number(element.pack)+Number(element.warehouseOthers)
- });
- this.AbnormalWorkingHoursTotal.attendanceHours=attendanceHours;
- this.AbnormalWorkingHoursTotal.overtimeHours=overtimeHours;
- this.AbnormalWorkingHoursTotal.train=train;
- this.AbnormalWorkingHoursTotal.abnormalWorkingHours=abnormalWorkingHours;
- this.AbnormalWorkingHoursTotal.warehouse=warehouse;
- })
- }
- fbsWorkshopDispatchList:FbsWorkshopDispatchList={};
- listOfData=[]
- isSwitch=false;//是否显示已完成订单
- isSwitchChange(){
- this.listOfData.forEach(element => {
- if(element.status===4){
- if(this.isSwitch===false){
- element.isSwitch=false;
- }else{
- element.isSwitch=true;
- }
- }
- });
- }
- defaultSwitch(){
- this.listOfData.forEach(element => {
- if(element.status===4){
- element.isSwitch=false;
- }else{
- element.isSwitch=true;
- }
- });
- }
- /**
- * 导出
- */
- year="0";
- month="0";
- //初始化年月 默认当前年月
- getNow(){
- let date = new Date();
- this.fbsWorkshopDispatchList.year=date.getFullYear()+"";
- if(date.getMonth()<10){
- this.fbsWorkshopDispatchList.month="0"+(date.getMonth()+1)
- }else{
- this.fbsWorkshopDispatchList.month=(date.getMonth()+1)+"";
- }
-
- }
-
- exportLoading=false;
- export(){
- // let month=this.year.substring(2,4)+this.month;
- // this.fbsWorkshopDispatchListService.export(month).then((response)=>{
- // let list=[];
- // list=response.result
- // this.exportLoading=true;
- let data = [];
- let title = [
- ['项目名称'], // 项目名称
- ['生产订单号'], // 生产订单号
- ['物料编码'], // 物料编码
- ['物料名称'], // 物料名称
- ['月度计划'], // 月度计划
- ['标准工时'], // 标准工时
- ['累计完成数量'], // 累计完成数量
- ['累计完成工时'], // 累计完成工时
- ];
- data.push(title);
- this.listOfData.forEach(element => {
- let row=[];
- row.push(element.projectName)
- row.push(element.productionOrderNumberName)
- row.push(element.productId)
- row.push(element.product)
- row.push(convertingNumbers(element.numberOfTasksTotal))
- row.push(convertingNumbers(element.standardWorkingHoursTotal))
- row.push(element.quantityCompletedTotal)//quantityCompletedTotal//latestCompletedQuantity
- row.push(convertingNumbers(element.manHoursCompletedTotal))
- data.push(row);
- });
- let efficiencyTotal=[
- ['总达成率'],
- [this.achievementRateTotal+'%'],
- ['总生产效率'],
- [this.productivityTotal+'%'],
- ['出勤总工时'],
- [this.AbnormalWorkingHoursTotal.attendanceHours],
- ['加班总工时'],
- [this.AbnormalWorkingHoursTotal.overtimeHours],
- ['其他总工时'],
- [this.AbnormalWorkingHoursTotal.train],
- ['异常总工时统计'],
- [this.AbnormalWorkingHoursTotal.abnormalWorkingHours],
- ['仓库总工时统计'],
- [this.AbnormalWorkingHoursTotal.warehouse]
- ];
- data.push(efficiencyTotal);
- // 导出
- this.xlsx.export({
- sheets: [
- {
- data: data,
- name: '生产订单汇总导出',
- },
- ],
- filename: '生产订单汇总导出.xlsx',
- });
- // this.exportLoading=false;
- // })
- }
- planningReportList=[]
- planningReportLoading=false;
- fbsWorkshopDispatchListPlanningReport:FbsWorkshopDispatchList={}
- columnTable2Width=0;
- getPlanningReport(){
- this.planningReportLoading=true;
- this.fbsWorkshopDispatchListService.getPlanningReport().then((response)=>{
- this.fbsWorkshopDispatchListPlanningReport=response.result;
- this.planningReportList=response.result.fbsWorkshopDispatchListList;
- this.columnTable2Width=response.result.dayList.length*25+360
- this.planningReportLoading=false;
- })
- }
- }
|