platform_web/.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
platform_web/src/views/business/clientRecord.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
screen_standard/.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
screen_standard/src/components/AppLayout.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
screen_standard/src/views/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
screen_standard/vite.config.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/resources/mappers/PlansExtMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
server/src/main/resources/mappers/WorkPlansExtMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
platform_web/.env.development
@@ -16,7 +16,10 @@ #江萍本地 VUE_APP_BASE_URL = 'http://192.168.0.35:10021/' # VUE_APP_BASE_URL = 'http://192.168.0.35:10021/' #焦松 VUE_APP_BASE_URL = 'http://192.168.0.36:10021/' #刘磊磊本地 # VUE_APP_BASE_URL = 'http://192.168.0.18:10021/' platform_web/src/views/business/clientRecord.vue
@@ -33,7 +33,7 @@ </template> </el-table-column> <el-table-column prop="detail" label="备注" align="center" min-width="180px"></el-table-column> <el-table-column prop="updateUser" label="操作人" align="center" min-width="100px"></el-table-column> <el-table-column prop="createUserName" label="操作人" align="center" min-width="100px"></el-table-column> <el-table-column prop="createTime" label="操作时间" align="center" min-width="140px"></el-table-column> </el-table> <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> screen_standard/.env.development
@@ -1,10 +1,16 @@ NODE_ENV = development VITE_NAME='开发环境' VITE_BASE_CONTEXT='' VITE_BASE_CONTEXT='screen' VITE_BASE_PATH='/api' VITE_BASE_URL='http://192.168.0.35:10021' #VITE_BASE_URL='http://192.168.0.35:10021' # VITE_BASE_PATH='/doumeeplant_api' <<<<<<< HEAD # VITE_BASE_URL='https://dmtest.ahapp.net/doumeeplant_api/' VITE_BASE_URL = 'https://www.mes.red/doumeeplant' ======= VITE_BASE_URL='https://dmtest.ahapp.net/doumeeplant_api' # VITE_BASE_URL = 'https://www.mes.red/doumeeplant' >>>>>>> 7550fb636fec7a84dbdea55196d97ed635d7ab10 screen_standard/src/components/AppLayout.vue
@@ -82,7 +82,7 @@ return enterprise.deviceNum }) const unqualifiedRate = computed(() => { return +enterprise.unqualifiedRate.toFixed(2) return enterprise.unqualifiedRate }) const title = computed(() => { return enterprise.procedureName ? `${enterprise.procedureName}工序数据看板` : 'DM云工厂车间大屏' @@ -115,9 +115,9 @@ } const fullChange = () => { // data.isFull = !data.isFull data.isFull = !data.isFull let element = document.documentElement; if (!data.isFull) { // 全屏 if (data.isFull) { // 全屏 if (element.requestFullscreen) { element.requestFullscreen(); } else if (element.webkitRequestFullScreen) { @@ -139,11 +139,10 @@ document.msExitFullscreen(); } } data.isFull = !data.isFull // data.isFull = !data.isFull } onMounted(() => { enterprise.setDepartId() getDepartmentList(enterprise.companyId) .then(res => { data.comList = res @@ -151,21 +150,17 @@ enterprise.setDepartId(data.tempCom.id) }) .catch(err => {}) fullChange() const week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'] setInterval(() => { let tempDate = new Date() let month = tempDate.getMonth()+1 let day = tempDate.getDate() let hours = tempDate.getHours() let minute = tempDate.getMinutes() let seconds = tempDate.getSeconds() let date = new Date() data.tempDate = { time: `${hours<10?`0${hours}`:hours}:${minute<10?`0${minute}`:minute}:${seconds<10?`0${seconds}`:seconds}`, date: `${tempDate.getFullYear()}/${month<10?`0${month}`:month}/${day<10?`0${day}`:day}`, day: week[tempDate.getDay()-1] time: `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`, date: `${date.getFullYear()}/${date.getMonth()+1}/${date.getDate()}`, day: week[date.getDay()-1] } }, 1000) // console.log(date.getDay()); }) const back = () => { enterprise.setProcedureName('') @@ -179,27 +174,18 @@ background-position: center; background-size: 100% 100%; background-repeat: no-repeat; // width: 1920px; // height: 1080px; width: 100%; height: 100%; padding: 20px 30px; overflow-y: scroll; scrollbar-width:none; -ms-overflow-style:none; &::-webkit-scrollbar{ width: 0; } display: flex; flex-direction: column; padding: 30px; // overflow-y: scroll; box-sizing: border-box; .header { background-image: url('@/assets/img/bg_maintitle@2x.png'); background-size: 100% 70px; background-size: 100% 74px; width: 100%; height: 70px; height: 74px; display: flex; padding-top: 1px; padding-left: 20px; @@ -267,15 +253,14 @@ } } .num-list { margin-top: 20px; margin-bottom: 20px; margin-top: 24px; margin-bottom: 27px; display: flex; justify-content: space-between; height: 80px; height: 88px; color: white; .num-item { width: calc(25% - 50px); height: 80px; background-size: 100% 100%; margin-right: 25px; padding-left: 30px; screen_standard/src/views/index.vue
@@ -59,9 +59,9 @@ :content="'已报工良品数' + child.doneNum + ';工序计划数' + child.planNum" placement="top"> <div class="scroll_item_row_item" @click="jump(child.procedureId, child.procedureName)"> <div class="scroll_item_row_item_x"></div> <span v-if="child.rate < 100">{{ Math.floor(child.rate) }}%</span> <span v-if="child.rate < 100">{{ child.rate.toFixed(0) }}%</span> <img v-else src="@/assets/img/ic_complete@2x.png" alt="" /> <span class="scroll_item_row_item_wz">{{ child.procedureName.substring(0, 3) }}</span> <span class="scroll_item_row_item_wz">{{ child.procedureName }}</span> </div> </el-tooltip> </div> @@ -103,7 +103,7 @@ <div class="content_left_item1_head"> <span>当日员工产量TOP10</span> </div> <div class="content_left_item1_content" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" ref="scrollContainer"> <div class="content_left_item1_content" ref="scrollContainer"> <div class="content_left_item1_content_row" v-for="(item, index) in data.production" :key="index"> <div class="content_left_item1_content_row_name"> <div :class="index > 2 ? 'num bg1' : 'num bg2'">{{ index + 1 }}</div> @@ -157,7 +157,7 @@ <span>近7天不良品分布</span> </div> <div class="content_right_top_nr"> <div class="content_right_top_nr_top" id="lineChrat"></div> <div class="content_right_top_nr_bottom"> <div class="content_right_top_nr_bottom_yuan" v-if="data.typeDistribution.length > 0"> @@ -166,7 +166,7 @@ </div> <div id="pieChart"></div> </div> </div> </div> <!-- 设备巡检记录 --> @@ -203,8 +203,8 @@ <script setup> import { dateToSub } from '@/utils' import { reactive, ref, onMounted, onUnmounted, computed, watch, toRefs } from 'vue' import { getPlanData, getTop, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js' import { reactive, ref, onMounted, nextTick, onUnmounted, computed, watch, toRefs } from 'vue' import { getPlanData, getTop, getStockList, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js' import { useCounterStore } from '@/stores/counter.js' import * as echarts from 'echarts' import { useRouter } from 'vue-router' @@ -222,16 +222,16 @@ typeDistribution: [], num: 0, baseNum: 0, firstScroll: false, secondScroll: false, thirdScroll: false, fourthScroll: false, fifthScroll: false, bottomAuthHeight: 284 }) let { baseNum } = toRefs(data) let { baseNum, bottomAuthHeight } = toRefs(data) let timer = ref(null) let timer1 = ref(null) let timer2 = ref(null) let timer3 = ref(null) let timer4 = ref(null) let timer5 = ref(null) let scrollContainer = ref(null) let scrollContainer1 = ref(null) @@ -276,16 +276,17 @@ } }) start1() const init = () => { console.log(timer.value); setBottomHeight(); // 当日员工产量TOP10 getTop(companyId.value, departId.value) .then(res => { if (res.length > 0) { data.baseNum = res[0].doneNum data.production = res data.fifthScroll = true start() } }) // 仓库实时余量统计 @@ -302,20 +303,24 @@ getProcedureProcessList(companyId.value, departId.value) .then(res => { data.processProgress = res data.thirdScroll = true nextTick(() => { start2() }) }) } else { // 成品计划进度 getWorkPlansList(companyId.value, departId.value) .then(res => { data.plannedProgress = res data.secondScroll = true nextTick(() => { start1() }) }) } } }) // 报工日志 getRecordLogPage(companyId.value, departId.value, { capacity: 20, @@ -323,7 +328,9 @@ page: 1 }).then(res => { data.log = res.records data.fourthScroll = true nextTick(() => { start3() }) }) // 设备巡检记录 getDeviceCheckPage(companyId.value, departId.value, { @@ -332,7 +339,9 @@ page: 1 }).then(res => { data.patrolInspection = res.records data.fifthScroll = true nextTick(() => { start4() }) }) // 近七天不良数 getUnqualified7DayData(companyId.value, departId.value, '') @@ -359,7 +368,6 @@ num: item.unqualifiedNum } }) console.log(data.num); setTypeChart() } }) @@ -368,6 +376,10 @@ .then(res => { enterprise.setNum(res) }) } function setBottomHeight(){ const pageHeight = window.innerHeight; bottomAuthHeight = pageHeight - 700; } /** @@ -378,22 +390,20 @@ let myChart = echarts.init(dayChartDom); let dateList = [] let numList = [] let num = 0 data.dayDistribution.forEach(item => { dateList.push(item.date) numList.push(item.num) num += item.num }) let option; option = { title: { text: ` 近七日不良品总数:${data.num}`, text: `近七日不良品总数:${num}`, textStyle: { color: '#fff', fontSize: 12 } }, grid: { top: 40, bottom: 30 }, xAxis: { type: 'category', @@ -521,6 +531,9 @@ } } }, // labelLayout: { // hideOverlap: true // }, endLabel: { show: true, distance: 5, @@ -539,8 +552,17 @@ } option && myChart.setOption(option); } onUnmounted(() => { clearTimeout(timer.value) clearTimeout(timer1.value) clearTimeout(timer2.value) clearTimeout(timer3.value) clearTimeout(timer4.value) clearTimeout(timer5.value) }) const clickCate = (index) => { clearTimeout(timer1.value) clearTimeout(timer2.value) cate.value.forEach((item, i) => { if (i === index) { // 成品计划进度 @@ -548,13 +570,17 @@ getWorkPlansList(companyId.value, departId.value) .then(res => { data.plannedProgress = res data.secondScroll = true nextTick(() => { start1() }) }) } else { getProcedureProcessList(companyId.value, departId.value) .then(res => { data.processProgress = res data.thirdScroll = true nextTick(() => { start2() }) }) } item.active = true @@ -564,39 +590,71 @@ }) } function handleMouseEnter() { data.firstScroll = false clearTimeout(timer.value) } function handleMouseEnter1() { data.secondScroll = false clearTimeout(timer1.value) } function handleMouseEnter2() { data.thirdScroll = false clearTimeout(timer2.value) } function handleMouseEnter3() { data.fourthScroll = false clearTimeout(timer3.value) } function handleMouseEnter4() { data.fifthScroll = false clearTimeout(timer4.value) } function handleMouseLeave() { data.firstScroll = true start() } function handleMouseLeave1() { data.secondScroll = true start1() } function handleMouseLeave2() { data.thirdScroll = true start2() } function handleMouseLeave3() { data.fourthScroll = true start3() } function handleMouseLeave4() { data.fifthScroll = true start4() } // 开启定时器 function start() { clearTimeout(timer.value) // 定时器触发周期 let speed = ref(100) timer.value = setInterval(ListScroll, speed.value) } // 开启定时器 function start1() { clearTimeout(timer1.value) // 定时器触发周期 let speed1 = ref(100) timer1.value = setInterval(ListScroll1, speed1.value) } // 开启定时器 function start2() { clearTimeout(timer2.value) // 定时器触发周期 let speed2 = ref(100) timer2.value = setInterval(ListScroll2, speed2.value) } // 开启定时器 function start3() { clearTimeout(timer3.value) // 定时器触发周期 let speed3 = ref(100) timer3.value = setInterval(ListScroll3, speed3.value) } // 开启定时器 function start4() { clearTimeout(timer4.value) // 定时器触发周期 let speed4 = ref(100) timer4.value = setInterval(ListScroll4, speed4.value) } function ListScroll() { if (!data.firstScroll) return // console.log('ListScroll'); let scrollDom = scrollContainer.value if (!scrollDom) return // 判读组件是否渲染完成 @@ -606,15 +664,13 @@ let maxLength = scrollDom.clientHeight/34 // 如果列表数量过少不进行滚动 if (scrollDom.children.length <= maxLength) { data.firstScroll = false clearTimeout(timer.value) return } // 组件进行滚动 scrollDom.scrollTop += 2 // console.log(scrollDom.scrollHeight - scrollDom.clientHeight); // console.log(scrollDom.scrollTop); // 判断是否滚动到底部 if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) { if (Math.floor(scrollDom.scrollTop) >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { // 获取组件第一个节点 let first = scrollDom.children[0] // 删除节点 @@ -625,8 +681,6 @@ } } function ListScroll1() { if (!data.secondScroll) return // console.log('ListScroll1'); let scrollDom = scrollContainer1.value // 判读组件是否渲染完成 if (!scrollDom) return @@ -634,17 +688,14 @@ scrollDom = scrollContainer1.value } else { // 如果列表数量过少不进行滚动 if (scrollDom.children.length < 7) { data.secondScroll = false if (scrollDom.children.length < 6) { clearTimeout(timer1.value) return } // 组件进行滚动 scrollDom.scrollTop += 2 // 判断是否滚动到底部 if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight-0.5)) { console.log(scrollDom.scrollTop); console.log(scrollDom.scrollHeight, scrollDom.clientHeight); if (scrollDom.scrollTop+2 >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { // 获取组件第一个节点 let first = scrollDom.children[0] // 删除节点 @@ -655,8 +706,6 @@ } } function ListScroll2() { if (!data.thirdScroll) return // console.log('ListScroll2'); let scrollDom = scrollContainer2.value if (!scrollDom) return // 判读组件是否渲染完成 @@ -665,15 +714,15 @@ } else { // 如果列表数量过少不进行滚动 if (scrollDom.children.length < 10) { data.thirdScroll = false clearTimeout(timer2.value) return } // 组件进行滚动 scrollDom.scrollTop += 2 scrollDom.scrollTop += 1 // console.log('scrollDom.scrollTop', scrollDom.scrollTop); // console.log('scrollDom.scrollHeight - scrollDom.clientHeight', scrollDom.scrollHeight - scrollDom.clientHeight); // 判断是否滚动到底部 if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) { if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { // 获取组件第一个节点 let first = scrollDom.children[0] // 删除节点 @@ -684,9 +733,6 @@ } } function ListScroll3() { if (!data.fourthScroll) return // console.log('ListScroll3'); let scrollDom = scrollContainer3.value if (!scrollDom) return // 判读组件是否渲染完成 @@ -698,13 +744,13 @@ // alert(scrollDom.children.length +"---------------"+num) // 如果列表数量过少不进行滚动 if (scrollDom.children.length <= num) { data.fourthScroll = false clearTimeout(timer3.value) return } // 组件进行滚动 scrollDom.scrollTop = scrollDom.scrollTop+2 // 判断是否滚动到底部 if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight -2)) { if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { // 获取组件第一个节点 let first = scrollDom.children[0] // 删除节点 @@ -715,8 +761,6 @@ } } function ListScroll4() { if (!data.fifthScroll) return // console.log('ListScroll4'); let scrollDom = scrollContainer4.value if (!scrollDom) return // 判读组件是否渲染完成 @@ -728,13 +772,13 @@ // alert(scrollDom.children.length +"---------------"+num) // 如果列表数量过少不进行滚动 if (scrollDom.children.length <= num) { data.fifthScroll = false clearTimeout(timer4.value) return } // 组件进行滚动 scrollDom.scrollTop += 2 // 判断是否滚动到底部 if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) { if (scrollDom.scrollTop+1 >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { // 获取组件第一个节点 let first = scrollDom.children[0] // 删除节点 @@ -744,30 +788,14 @@ } } } function scrillAction() { ListScroll() ListScroll1() ListScroll2() ListScroll3() ListScroll4() } // onUnmounted(() => { // }) onMounted(() => { window.addEventListener('resize', () => { setTypeChart() setDayChart() }) if (!departId.value) return; init() timer5.value = setInterval(init, 60000) timer.value = setInterval(scrillAction, 100) }) onUnmounted(() => { console.log('停止滴答'); clearTimeout(timer.value) clearTimeout(timer5.value) timer5.value = setInterval(init(), 60000) }) </script> @@ -775,7 +803,6 @@ $fixed-height: 690px; .content1 { flex: 1; width: 100%; height: auto; @@ -1066,12 +1093,7 @@ &:nth-child(5) { flex: 3; } &:nth-child(4) { flex: 0.7; } &:nth-child(6) { flex: 0.7; } } } @@ -1108,15 +1130,10 @@ justify-content: center; color: #FFFFFF; font-size: 13px; &:nth-child(4) { flex: 0.7; } &:nth-child(5) { flex: 3; justify-content: start; } &:nth-child(6) { flex: 0.7; } .scroll_item_row_item { margin-top: -11px; @@ -1321,15 +1338,9 @@ font-weight: 500; color: #01D9FE; &:nth-child(5) { flex: 0.5; &:nth-child(4) { flex: 2; } &:nth-child(6) { flex: 0.5; } &:nth-child(7) { flex: 0.7; } } } @@ -1368,16 +1379,9 @@ justify-content: center; color: #FFFFFF; &:nth-child(5) { flex: 0.5; &:nth-child(4) { flex: 2; } &:nth-child(6) { flex: 0.5; } &:nth-child(7) { flex: 0.7; } } } } @@ -1517,11 +1521,8 @@ font-weight: 500; color: #01D9FE; // &:first-child { // flex: 2; // } &:nth-child(3) { flex: 0.7; &:first-child { flex: 2; } } } @@ -1560,12 +1561,10 @@ align-items: center; justify-content: center; color: #FFFFFF; &:nth-child(3) { flex: 0.7; &:first-child { flex: 2; } // &:first-child { // flex: 2; // } } } } screen_standard/vite.config.js
@@ -51,6 +51,10 @@ changeOrigin: true, ws: false, // 允许websocket代理 secure: false, <<<<<<< HEAD rewrite: (path) => path.replace(env.VITE_BASE_PATH, '/') } ======= rewrite: (path) => path.replace(env.VITE_BASE_PATH, '/'), // rewrite: (path) => path.replace(/^\api/, ''), // 将api替换为空 }, @@ -60,6 +64,7 @@ ws: false, // 允许websocket代理 rewrite: (path) => path.replace(/^\api/, ''), // 将api替换为空 }*/ >>>>>>> 7550fb636fec7a84dbdea55196d97ed635d7ab10 } } } server/src/main/resources/application.yml
@@ -10,7 +10,7 @@ # application: # name: doumeemes profiles: active: standard active: standardPro # JSON返回配置 jackson: # 默认时区 server/src/main/resources/mappers/PlansExtMapper.xml
@@ -324,7 +324,7 @@ FROM `plans` `a` LEFT JOIN `material_distribute` c ON a.MATERIAL_ID=c.ID LEFT JOIN `material` m ON c.MATERIAL_ID=m.ID where (a.status in (1,4) or (a.status=6 and EXISTS(select b.id from workorder_record b where b.type=1 and b.DELETED=0 and b.PLAN_ID=a.id) )) where (a.status in (1,4) or (a.status=6 and EXISTS(select b.id from workorder_record b where b.type=1 and b.DELETED=0 and b.PLAN_ID=a.id and to_days(b.create_time)=to_days(now())) )) and a.deleted=0 and a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId} and a.PROCEDURE_ID=#{procedureId} order by a.CREATE_TIME </select> @@ -1373,7 +1373,7 @@ SELECT count(a.id) as ingNum, (select count(b.id) FROM `plans` b where b.DELETED = 0 and b.PROCEDURE_ID=#{procedureId} AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND (b.`STATUS` in (1,4) and to_days(now()) > to_days(b.plan_Date) )) as delayNum, (select count(distinct(b.CREATE_USER)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.PROCEDURE_ID=#{procedureId} AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status in (0,1,2,3,4,7) AND to_days(b.create_time)=to_days(now())) as prouserNum, (select count(distinct(b.PRO_GROUP_ID)) FROM workorder b where b.PROCEDURE_ID=#{procedureId} AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND b.status in (0,1,2,3,4,7) AND to_days(b.create_time)=to_days(now())) as deviceNum, (select count(distinct(b.PRO_GROUP_ID)) FROM workorder b where b.PROCEDURE_ID=#{procedureId} AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND b.status in (0,1,2,3,4,7) AND to_days(b.create_time)=to_days(now())) as deviceNum, (select sum(ifnull(b.UNQUALIFIED_NUM,0)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.PROCEDURE_ID=#{procedureId} AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status=4 AND to_days(b.create_time)=to_days(now())) as unqualifiedNum, (select sum(ifnull(b.NUM,0)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.PROCEDURE_ID=#{procedureId} AND b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status=4 AND to_days(b.create_time)=to_days(now())) as doneNum FROM `plans` `a` server/src/main/resources/mappers/WorkPlansExtMapper.xml
@@ -174,7 +174,7 @@ SELECT count(a.id) as ingNum, (select count(b.id) FROM `work_plans` b where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND (b.`STATUS` = 1 and to_days(now()) > to_days(b.plan_Date) )) as delayNum, (select count(distinct(b.CREATE_USER)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where to_days(b.create_time)=to_days(now()) and b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND c.status in (0,1,2,3,4,7)) as prouserNum, (select count(distinct(b.PRO_GROUP_ID)) FROM `workorder` b where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND b.status in (0,1,2,3,4,7)) as deviceNum, (select count(distinct(b.PRO_GROUP_ID)) FROM `workorder` b where to_days(b.create_time)=to_days(now()) and b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND b.status in (0,1,2,3,4,7)) as deviceNum, (select sum(ifnull(b.UNQUALIFIED_NUM,0)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND to_days(b.create_time)=to_days(now()) and c.status=4 ) as unqualifiedNum, (select sum(ifnull(b.NUM,0)) FROM `workorder_record` b left join workorder c on b.workorder_id =c.id where b.DELETED = 0 AND b.ROOT_DEPART_ID = #{rootDepartId} AND b.DEPART_ID = #{departId} AND to_days(b.create_time)=to_days(now()) and c.status=4) as doneNum FROM `work_plans` `a` @@ -189,7 +189,7 @@ FROM `work_plans` `a` LEFT JOIN `material_distribute` c ON a.MATERIAL_ID=c.ID LEFT JOIN `material` m ON c.MATERIAL_ID=m.ID where ( a.status= 1 or (a.status=6 and EXISTS(select b.id from workorder_record b left join plans c on b.PLAN_ID=c.id where b.type=1 and b.DELETED=0 and c.WORK_PLANS_ID=a.id) )) where ( a.status= 1 or (a.status=6 and EXISTS(select b.id from workorder_record b left join plans c on b.PLAN_ID=c.id where b.type=1 and to_days(b.create_time)=to_days(now()) and b.DELETED=0 and c.WORK_PLANS_ID=a.id) )) and a.deleted=0 and a.ROOT_DEPART_ID=#{rootDepartId} and a.DEPART_ID=#{departId} order by a.CREATE_TIME