diff --git a/ruoyi-admin/src/main/resources/static/js/board/finalAssemblyProductionData.js b/ruoyi-admin/src/main/resources/static/js/board/finalAssemblyProductionData.js index 4ac065b..ada37e5 100644 --- a/ruoyi-admin/src/main/resources/static/js/board/finalAssemblyProductionData.js +++ b/ruoyi-admin/src/main/resources/static/js/board/finalAssemblyProductionData.js @@ -8,16 +8,16 @@ $(() => { const INTERVAL = 30000 - const request = () => { + const request = async () => { // 目标 - $.post(url + "/selectProductInTarget", {}, data => { + await $.post(url + "/selectProductInTarget", {}, data => { data = JSON.parse(data) - target.topTips = data.find(val => val.name == "进度目标").qty - Tips('#Tips') - if (isFirst){ - isFirst = false - request() - } + targetTop.tips = data.find(val => val.name == "目标").qty + }) + // 终检一次不合格率目标 + await $.post(url + "/selectOneBadRateMb", {}, data => { + data = JSON.parse(data) + targetBottom.tips = data.rate }) // LOSS(分类) $.post(url + "/selectLossInfo", {}, data => { @@ -33,61 +33,52 @@ $(() => { data = JSON.parse(data) jp(data.qty) }) - // 终检一次不合格率目标 - $.post(url + "/selectOneBadRateMb", {}, data => { - data = JSON.parse(data) - target.bottomTips = data.rate - for (let i = 0; i < 12; i++) { - target.bottom.push(data.rate) - } - }) // 产量 $.post(url + `/selectProductInByTeam/${yieldType}`, {}, data => { data = JSON.parse(data) - console.log(data) - target.topReality = data.map(val => val.qty).reduce((val1, val2) => val1 + val2, 0) - target.topGap = target.topProgress - target.topReality - if (target.topProgress != 0){ - target.topRate = ((target.topReality / target.topProgress).toFixed(4) * 100 + '').substring(0, 5) - }else{ - target.topRate = 0 - } - Tips('#Tips') + // 实际 + targetTop.reality = data.map(val => val.qty).reduce((val1, val2) => val1 + val2, 0) + // 起始时间 let oneTime = parseFloat(data[0].name.split(':')[0]) + // 横坐标 let xName = [] if (yieldType == 0) { let arr = [] for (let i = 0; i < 12; i++) { - arr.push(Math.ceil(target.topTips / 11)) + arr.push(Math.ceil(targetTop.tips / 11)) } - arr[3] = Math.ceil(target.topTips / 22) - arr[8] = Math.ceil(target.topTips / 22) - arr[0] = arr[0] - (arr.reduce((val1, val2) => val1 + val2, 0) - target.topTips) - target.top = arr - target.topProgress = arr.slice(0,data.length).reduce((val1, val2) => val1 + val2, 0) - target.topProgress = 399 + arr[3] = Math.ceil(targetTop.tips / 22) + arr[8] = Math.ceil(targetTop.tips / 22) + arr[0] = arr[0] - (arr.reduce((val1, val2) => val1 + val2, 0) - targetTop.tips) + targetTop.targetArr = arr + targetTop.progress = arr.slice(0, data.length).reduce((val1, val2) => val1 + val2, 0) for (let i = 0; i < 12; i++) { xName.push(`${(oneTime + i) % 24}:30`) } } else { let arr = [] for (let i = 0; i < 24; i++) { - arr.push(Math.ceil(target.topTips / 23)) + arr.push(Math.ceil(targetTop.tips / 23)) } - arr[8] = Math.ceil(target.topTips / 46) - arr[13] = Math.ceil(target.topTips / 46) - arr[0] = arr[0] - (arr.reduce((val1, val2) => val1 + val2, 0) - target.topTips) - target.top = arr - target.topProgress = arr.slice(0,data.length).reduce((val1, val2) => val1 + val2, 0) - - // target.topProgress = 399 - xName = ['0:00','1:00','2:00','3:00','4:00','5:00','6:00','7:00','8:00','9:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00'] + arr[8] = Math.ceil(targetTop.tips / 46) + arr[13] = Math.ceil(targetTop.tips / 46) + arr[0] = arr[0] - (arr.reduce((val1, val2) => val1 + val2, 0) - targetTop.tips) + targetTop.targetArr = arr + targetTop.progress = arr.slice(0, data.length).reduce((val1, val2) => val1 + val2, 0) + xName = ['0:00', '1:00', '2:00', '3:00', '4:00', '5:00', '6:00', '7:00', '8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'] } + // 达成率 + if (targetTop.progress != 0) { + targetTop.rate = ((targetTop.reality / targetTop.progress)).toFixed(4) * 100 + } else { + targetTop.rate = 0 + } + targetTop.gap = targetTop.progress - targetTop.reality barChartAndLineChartThree({ xName: xName, yDataOne: data.map(val => val.qty), yDataOneName: "实际产量", - yDataTwo: target.top, + yDataTwo: targetTop.targetArr, yDataTwoName: "目标产量", }, document.getElementById("yield")); }) @@ -98,30 +89,37 @@ $(() => { let oneTime = parseFloat(data[0].name.split(':')[0]) let xName = [] if (yieldType == 0) { + let arr = [] for (let i = 0; i < 12; i++) { + arr.push(targetBottom.tips) xName.push(`${(oneTime + i) % 24}:30`) } + targetBottom.targetArr = arr } else { - xName = ['0:00','1:00','2:00','3:00','4:00','5:00','6:00','7:00','8:00','9:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00'] + let arr = [] + for (let i = 0; i < 24; i++) { + arr.push(targetBottom.tips) + } + targetBottom.targetArr = arr + xName = ['0:00', '1:00', '2:00', '3:00', '4:00', '5:00', '6:00', '7:00', '8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'] } - target.bottomReality = (data.map(val => val.rate).reduce((val1, val2) => val1 + val2, 0) / data.map(val => val.rate).length).toFixed(2) - target.bottomTotal = data.map(val => val.qty).reduce((val1, val2) => val1 + val2, 0) - Tips('#Tips') + targetBottom.reality = ((data.map(val => val.rate).reduce((val1, val2) => val1 + val2, 0) / data.map(val => val.rate).length)).toFixed(4) + targetBottom.total = data.map(val => val.qty).reduce((val1, val2) => val1 + val2, 0) barChartAndLineChartFour({ xName: xName, yDataOne: data.map(val => val.qty), yDataOneName: "不良数", yDataTwo: data.map(val => val.rate), yDataTwoName: "一次不合格率", - yDataThree: target.bottom, + yDataThree: targetBottom.targetArr, yDataThreeName: "目标", }, document.getElementById("fractionDefective")); }) - //追踪事件轮询 + //当班入库执行订单 $.post(url + "/selectInStoreOrderInfo", {}, data => { data = JSON.parse(data) - total('#total',data.map(val => val.actual_number).reduce((val1,val2) => val1 + val2 ,0)) + total('#total', data.map(val => val.actual_number).reduce((val1, val2) => val1 + val2, 0)) $('#trackEvents').remove() $('.trackEventsScrollTable').html('
') dynamicTable({ @@ -129,7 +127,7 @@ $(() => { rowNum: 5, timeout: 0, header: ["订单编号", '产品型号', "计划数量", "完成数量", "执行进度", "时间"], - data: data.map(value => [value.plan_code.slice(4, value.plan_code.length), value.name.split('-')[1], value.plan_number, value.actual_number, ((value.actual_number /value.plan_number).toFixed(4) * 100 + '').slice(0,5) + '%', value.day]), + data: data.map(value => [value.plan_code.slice(4, value.plan_code.length), value.name.split('-')[1], value.plan_number, value.actual_number, value.plan_number === 0? 0 :((value.actual_number / value.plan_number)* 100 + '').slice(0, 5) + '%', value.day]), index: false, fontColor: '#B4B7BF ', indexBGC: '#86F3FF', @@ -156,19 +154,40 @@ $(() => { }) let yieldType = '0' -let isFirst = true -let target = { - top: [], - bottom: [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3], - topTips: 0, - bottomTips: 3.05, - topProgress: 0, - topReality: 0, - topGap: 0, - topRate: 0, - bottomReality:0, - bottomTotal:0, +let targetTopRaw = { + targetArr: [], + tips: 0, + progress: 0, + reality: 0, + gap: 0, + rate: 0, } +let targetBottomRaw = { + targetArr: [], + tips: 0, + reality: 0, + total: 0, +} +const targetTopProxy = { + get: function (target, key) { + return target[key]; + }, + set: function (target, key, value) { + target[key] = value; + TipsTop('#TipsTop') + } +} +const targetBottomProxy = { + get: function (target, key) { + return target[key]; + }, + set: function (target, key, value) { + target[key] = value; + TipsBottom('#TipsBottom') + } +} +const targetTop = new Proxy(targetTopRaw, targetTopProxy) +const targetBottom = new Proxy(targetBottomRaw, targetBottomProxy) const LOSS = (val = 0) => { const html = ` ${val} @@ -195,21 +214,20 @@ const moduleTitle = () => { $('body').append(html) } // 目标 -const Tips = (el, top = { - target: target.topTips, - progress: target.topProgress, - reality: target.topReality, - gap: target.topGap, - rate: target.topRate, -}, bottom = {target: target.bottomTips, reality: target.bottomReality, total: target.bottomTotal}) => { +const TipsTop = (el) => { const html = ` - 目标:${top.target} 进度目标:${top.progress} 实际:${top.reality} 差异:${top.gap} 达成率:${top.rate}% - 目标:${bottom.target}% 实际:${bottom.reality}% 累计不良数:${bottom.total} + 目标:${targetTop.tips} 进度目标:${targetTop.progress} 实际:${targetTop.reality} 差异:${targetTop.gap} 达成率:${targetTop.rate}% + ` + $(el).html(html) +} +const TipsBottom = (el) => { + const html = ` + 目标:${targetBottom.tips}% 实际:${targetBottom.reality}% 累计不良数:${targetBottom.total} ` $(el).html(html) } // 入库执行订单合计 -const total = (el,val=0) => { +const total = (el, val = 0) => { const html = ` 合计:${val} ` diff --git a/ruoyi-admin/src/main/resources/static/js/board/orderVisualization.js b/ruoyi-admin/src/main/resources/static/js/board/orderVisualization.js index aadd5f4..8c8bbca 100644 --- a/ruoyi-admin/src/main/resources/static/js/board/orderVisualization.js +++ b/ruoyi-admin/src/main/resources/static/js/board/orderVisualization.js @@ -1,103 +1,188 @@ $(() => { moduleTitle() safe('#safe') - Tips(0,0,0,'#Tips') - total( 0,'#total') - card({top: 60, left: 30.5,title:'内胆检漏',name1:'问题1',value1:'值1',name2:'问题2',value2:'值2',name3:'问题3',value3:'值3'},'#cardOne') - card({top: 60, left: 38.5,title:'安全检测',name1:'问题1',value1:'值1',name2:'问题2',value2:'值2',name3:'问题3',value3:'值3'},'#cardTwo') - card({top: 60, left: 46.5,title:'成品检漏',name1:'问题1',value1:'值1',name2:'问题2',value2:'值2',name3:'问题3',value3:'值3'},'#cardThree') - card({top: 60, left: 54.5,title:'测温性能',name1:'问题1',value1:'值1',name2:'问题2',value2:'值2',name3:'问题3',value3:'值3'},'#cardFour') - card({top: 60, left: 62.5,title:'成品外观',name1:'问题1',value1:'值1',name2:'问题2',value2:'值2',name3:'问题3',value3:'值3'},'#cardFive') + Tips(0, 0, 0, '#Tips') + total(0, '#total') + card({ + top: 60, + left: 30.5, + title: '内胆检漏', + name1: '问题1', + value1: '值1', + name2: '问题2', + value2: '值2', + name3: '问题3', + value3: '值3' + }, '#cardOne') + card({ + top: 60, + left: 38.5, + title: '安全检测', + name1: '问题1', + value1: '值1', + name2: '问题2', + value2: '值2', + name3: '问题3', + value3: '值3' + }, '#cardTwo') + card({ + top: 60, + left: 46.5, + title: '成品检漏', + name1: '问题1', + value1: '值1', + name2: '问题2', + value2: '值2', + name3: '问题3', + value3: '值3' + }, '#cardThree') + card({ + top: 60, + left: 54.5, + title: '测温性能', + name1: '问题1', + value1: '值1', + name2: '问题2', + value2: '值2', + name3: '问题3', + value3: '值3' + }, '#cardFour') + card({ + top: 60, + left: 62.5, + title: '成品外观', + name1: '问题1', + value1: '值1', + name2: '问题2', + value2: '值2', + name3: '问题3', + value3: '值3' + }, '#cardFive') // 公共请求地址 - let url = 'mtk' - // let url = '' + let url = '/broad/mtk' // 轮询间隔时间 const INTERVAL = 30000 //每日人力出勤轮询 autoUpdate(url + "/team6s ", INTERVAL, data => { - console.log(data) - data ??= [ - { - teamName: '班组1', - teamNumber: 72, - path:'' - }, - { - teamName: '班组2', - teamNumber: 52, - path:'' - }, - { - teamName: '班组3', - teamNumber: 72, - path:'' - }, - { - teamName: '班组4', - teamNumber: 29, - path:'' - }, - { - teamName: '班组5', - teamNumber: 82, - path:'' - }, - { - teamName: '班组6', - teamNumber: 82, - path:'' - }, - { - teamName: '班组7', - teamNumber: 28, - path:'' - }, - { - teamName: '班组8', - teamNumber: 62, - path:'' - }, - { - teamName: '班组9', - teamNumber: 82, - path:'' - }, - { - teamName: '班组10', - teamNumber: 38, - path:'' - }, - { - teamName: '班组11', - teamNumber: 93, - path:'' - }, - ] - data.sort((a,b)=>{ - return b.teamNumber - a.teamNumber - }) - console.log(data) - singleVerticalBarChartTwo({ - xName: data.map(val => val.teamName), - yData: data.map(val => val.teamNumber), - yImg: data.map(val => val.path), - }, document.getElementById("manpowerAttendance")) + data ??= [ + { + teamName: '班组1', + teamNumber: 72, + path: '' + }, + { + teamName: '班组2', + teamNumber: 52, + path: '' + }, + { + teamName: '班组3', + teamNumber: 72, + path: '' + }, + { + teamName: '班组4', + teamNumber: 29, + path: '' + }, + { + teamName: '班组5', + teamNumber: 82, + path: '' + }, + { + teamName: '班组6', + teamNumber: 82, + path: '' + }, + { + teamName: '班组7', + teamNumber: 28, + path: '' + }, + { + teamName: '班组8', + teamNumber: 62, + path: '' + }, + { + teamName: '班组9', + teamNumber: 82, + path: '' + }, + { + teamName: '班组10', + teamNumber: 38, + path: '' + }, + { + teamName: '班组11', + teamNumber: 93, + path: '' + }, + ] + data.sort((a, b) => { + return b.teamNumber - a.teamNumber + }) + singleVerticalBarChartTwo({ + xName: data.map(val => val.teamName), + yData: data.map(val => val.teamNumber), + yImg: data.map(val => val.path), + }, document.getElementById("manpowerAttendance")) }) - // IQC - horizontalRoundedBarChartWithBackgroundTwo(null, document.getElementById("IQC")) + // 三日订单执行情况 + autoUpdate(url + "/inStore3d", INTERVAL, data => { + console.log(data) + horizontalRoundedBarChartWithBackgroundTwo({ + yNameOne: data.map(val => val.name), + yData: data.map(val => val.rate), + xDataName: "达成率", + }, document.getElementById("IQC")) + }) // 设备功率 - singleVerticalBarChart(null, document.getElementById("equipmentPower")) + // autoUpdate(url + "/inStore3d", INTERVAL, data => { + singleVerticalBarChart({ + xName: ["1月", "2月", "3月", "4月", "5月", "6月", "7月"], + yData: [12, 20, 11, 30, 14, 80, 50], + }, document.getElementById("equipmentPower")) + // }) // 生产效率 // autoUpdate(url + "/ ", INTERVAL, data => { - singleVerticalBarChart(null, document.getElementById("productionEfficiency")) + singleVerticalBarChart({ + xName: ["1月", "2月", "3月", "4月", "5月", "6月", "7月"], + yData: [12, 20, 11, 30, 14, 80, 50], + }, document.getElementById("productionEfficiency")) // }) // 成品入库统计 - percentageRingDiagram(null, document.getElementById("mainData")) + // autoUpdate(url + "/inStore3d", INTERVAL, data => { + percentageRingDiagram([ + { + name: "内胆检漏", + value: 54, + }, + { + name: "安全检测", + value: 44, + }, + { + name: "成品检漏", + value: 35, + }, + { + name: "测温性能", + value: 30, + }, + { + name: "成品外观", + value: 44, + }, + ], document.getElementById("mainData")) + // }) }) const today = () => { @@ -141,7 +226,17 @@ const safe = (el) => { $(el).html(html) } -const card = (val = {top: 1, left: 1,title:'',name1:'',value1:'',name2:'',value2:'',name3:'',value3:''},el) => { +const card = (val = { + top: 1, + left: 1, + title: '', + name1: '', + value1: '', + name2: '', + value2: '', + name3: '', + value3: '' +}, el) => { const html = `