jiaosong
2023-08-24 2a431ace3a7b7dcdd313bb2fa0eff5bb727946f8
Merge remote-tracking branch 'origin/master'
已修改9个文件
330 ■■■■ 文件已修改
platform_web/.env.development 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platform_web/src/views/business/clientRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/.env.development 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/components/AppLayout.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/views/index.vue 251 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/vite.config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/PlansExtMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/WorkPlansExtMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | 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>
@@ -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,14 +303,18 @@
        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()
            })
          })
      }
    }
@@ -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,14 +1338,8 @@
            font-weight: 500;
            color: #01D9FE;
            &:nth-child(5) {
              flex: 0.5;
            }
            &:nth-child(6) {
              flex: 0.5;
            }
            &:nth-child(7) {
                  flex: 0.7;
            &:nth-child(4) {
              flex: 2;
                }
          }
        }
@@ -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>
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