jiangping
2024-10-12 37926bbc6a660245630cae0424c65cb1661c33df
Merge remote-tracking branch 'origin/master'
已添加20个文件
已删除1个文件
已修改33个文件
1609 ■■■■ 文件已修改
admin/.env.development 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/system/sms.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/QueryForm/queryForm.vue 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/RichEditor.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/relativeMember.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/visitorSources.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/leaveAuth.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/subscribe.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/LogisticsRecord/waybill.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/system/smsMessage.vue 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/driver.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/pages/index/control.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/utils/config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/car_kongxian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/car_lixian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/car_zaitu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/china@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/chuku_ic_car@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/chuku_task.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/chuku_task_ac.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ic_bili@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ic_chukuxiaolv@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ic_renwuzongliang@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ic_rukuxiaolv@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ic_wanchengrenwu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/map_car_kongxian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/map_car_lixian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/map_car_zaitu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ruku_task.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/energy_ef/ruku_task_ac.png 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/images/maintitle.gif 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/router/index.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/EnergyConsum.vue 497 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsControl.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsEfficiency.vue 637 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/PlatformCall.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.development
@@ -2,6 +2,7 @@
NODE_ENV = 'development'
VUE_APP_API_URL  = 'http://localhost:10010'
# VUE_APP_API_URL  = 'http://192.168.0.103:10010'
VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
# VUE_APP_API_URL  = 'http://192.168.0.139:10010'
# VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
VUE_APP_API_URL  = 'https://dmtest.ahapp.net/antai_admin_interface/'
admin/src/api/system/sms.js
@@ -8,3 +8,11 @@
export function SmsStatusUpdate (data) {
  return request.post('/visitsAdmin/cloudService/business/smsConfig/updateById', data)
}
// çŸ­ä¿¡é€šçŸ¥ æ‰¹é‡çŠ¶æ€æ›´æ–°
export function SmsStatussUpdate (data) {
  return request.get('/visitsAdmin/cloudService/business/smsConfig/updateStatus/batch', {
    params: {
      ...data
    }
  })
}
admin/src/components/common/QueryForm/queryForm.vue
@@ -2,15 +2,13 @@
  <div class="doumee-filter">
    <el-form inline label-suffix=":" @submit.native.prevent>
      <template v-for="(item, index) in queryFormConfig.formItems">
        <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label">
        <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed">
          <el-input v-model="searchForm[item.filed]"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.placeholder ? item.placeholder : '请输入' + item.label" class="w200"
            :placeholder="item.label" class="w200"
            @change="changeForm(item.filed)" @keyup.enter.native="handlekeyup(item.keyup || false)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label"
          :label="item.label">
        <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label">
          <el-input v-model="searchForm[item.filedStrt]"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.start" style="width: 150px" />
@@ -19,49 +17,42 @@
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.end" style="width: 150px" />
        </el-form-item>
        <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label">
        <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed">
          <el-select v-model="searchForm[item.filed]" :filterable="item.filterable || true"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.placeholder ? item.placeholder : '请选择' + item.label" class="w200"
            :placeholder="item.label" class="w200"
            @change="changeForm(item.filed)">
            <el-option v-for="opt, i in item.options" :key="i" :value="item.valueCode ? opt[item.valueCode] : opt.value"
              :label="item.labelCode ? opt[item.labelCode] : opt.label" />
          </el-select>
        </el-form-item>
        <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || '日期'">
        <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" type="date" value-format="yyyy-MM-dd" class="w200"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :placeholder="item.placeholder || '请选择日期'" :picker-options="item.pickerOptions || {}"
            :placeholder="item.label" :picker-options="item.pickerOptions || {}"
            @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || ''">
        <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange"
            range-separator="至"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :start-placeholder="item.start || ''" :end-placeholder="item.end || ''"
            :picker-options="item.pickerOptions || {}" class="w400" @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || '选择时间'">
        <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed">
          <el-time-picker v-model="searchForm[item.filed]" is-range range-separator="至" format="HH:mm"
            value-format="HH:mm" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围" class="w400"
            @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label || '选择日期'">
        <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed">
          <el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss"
            value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
            :default-time="['00:00:00', '23:59:59']"
            value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :default-time="['00:00:00', '23:59:59']"
            :picker-options="item.pickerOptions || pickerOptions" range-separator="至"
            :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
            :start-placeholder="item.start || '开始时间'" :end-placeholder="item.end || '结束时间'" class="w400"
            @change="changeForm(item.filed)" />
        </el-form-item>
        <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed"
          :label="item.label">
        <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed">
          <slot :name="item.filed" />
        </el-form-item>
      </template>
@@ -100,13 +91,13 @@
      default: () => { }
    }
  },
  data () {
  data() {
    return {
      showZk: false,
      pickerOptions: {
        shortcuts: [{
          text: '近7天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 6)
@@ -115,7 +106,7 @@
        },
        {
          text: '近30天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 29)
@@ -124,7 +115,7 @@
        },
        {
          text: '近60天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 59)
@@ -133,14 +124,14 @@
        },
        {
          text: '近90天',
          onClick (picker) {
          onClick(picker) {
            const end = new Date()
            const start = new Date()
            start.setTime(end.getTime() - 3600 * 1000 * 24 * 89)
            picker.$emit('pick', [start, end])
          }
        }],
        disabledDate (time) {
        disabledDate(time) {
          var curDate = new Date(new Date().toLocaleDateString()).getTime()
          var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1)
          return time.getTime() > preDate
@@ -151,31 +142,31 @@
  emits: ['input', 'handleQuery', 'clear'],
  computed: {
    searchForm: {
      get () {
      get() {
        return this.value
      },
      set (value) {
      set(value) {
        this.$emit('input', value)
      }
    }
  },
  methods: {
    handleQuery () {
    handleQuery() {
      this.$emit('handleQuery')
    },
    handlekeyup (pd) {
    handlekeyup(pd) {
      if (pd) {
        this.$emit('handleQuery')
      }
    },
    changeForm (filed) {
    changeForm(filed) {
      this.$emit('changeForm', filed)
    },
    zkBtn () {
    zkBtn() {
      this.showZk = !this.showZk
      this.$emit('zkBtn', this.zk)
    },
    clear () {
    clear() {
      this.$emit('clear')
    }
  }
admin/src/components/common/RichEditor.vue
@@ -1,7 +1,7 @@
<template>
  <div :style="styleEditor">
    <Toolbar style="border-bottom: 1px solid #ccc" :editor="editor" :defaultConfig="toolbarConfig" :mode="mode" />
    <Editor style="height: 300px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
    <Editor style="max-height: 300px;min-height: 100px; overflow-y: hidden;" v-model="html" :defaultConfig="editorConfig" :mode="mode"
            @onCreated="onCreated" @onChange="onChange" />
  </div>
</template>
@@ -10,6 +10,7 @@
import Vue from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import { Loading } from 'element-ui';
let loadingInstance = null
export default Vue.extend({
  props: {
    richData: { // çˆ¶ç»„件传递的数据
@@ -149,7 +150,7 @@
            timeout: 10 * 1000, //10 ç§’
            // ä¸Šä¼ å‰
            onBeforeUpload(files) {
              Loading.service({
              loadingInstance = Loading.service({
                lock: true,
                text: '上传中...',
                spinner: 'el-icon-loading',
@@ -162,7 +163,7 @@
              console.log(res);
              // å› ä¸ºè‡ªå®šä¹‰æ’入导致onSuccess与onFailed回调函数不起作用,自己手动处理
              // å…ˆå…³é—­ç­‰å¾…çš„Message
              Loading.service({
              loadingInstance = Loading.service({
                lock: true,
                text: '上传中...',
                spinner: 'el-icon-loading',
@@ -187,6 +188,7 @@
            // å•个文件上传失败
            onFailed(file, res) {
              console.log(`${file.originalFilename} ä¸Šä¼ å¤±è´¥`, res);
              loadingInstance.close();
            },
            // ä¸Šä¼ è¿›åº¦çš„回调函数
            onProgress(progress) {
@@ -195,6 +197,7 @@
            },
            // ä¸Šä¼ é”™è¯¯ï¼Œæˆ–者触发 timeout è¶…æ—¶
            onError(file, err, res) {
              loadingInstance.close();
              console.log(`${file.originalFilename} ä¸Šä¼ å‡ºé”™`, err, res);
            }
          },
admin/src/views/business/internalMember.vue
@@ -58,7 +58,7 @@
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
            v-permissions="['business:member:delete']">批量删除</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()"
            icon="el-icon-plus">下发授权</el-button></li>
            >下发授权</el-button></li>
        <li style="float: right">
          <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1"
            @change="search">是否包含下级组织</el-checkbox>
admin/src/views/business/relativeMember.vue
@@ -65,8 +65,8 @@
            icon="el-icon-plus" v-permissions="['business:traintime:create']">培训期导入</el-button></li>
        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete"
            v-permissions="['business:member:delete']">批量删除</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()"
            icon="el-icon-plus">下发授权</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()">下发授权</el-button></li>
        <li><el-button type="primary" v-permissions="['business:empower:exportExcel']" @click="exportExcel">导出</el-button></li>
      </ul>
      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55"></el-table-column>
@@ -147,7 +147,7 @@
        <el-table-column label="卡片" min-width="80px">
          <template slot-scope="{row}">
            <el-button @click="$refs.cardOpeningRecord.open('开卡记录', row.id)" type="text">{{ row.memberCardCount ||
              '0'}}</el-button>
              '0' }}</el-button>
          </template>
        </el-table-column>
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
@@ -383,6 +383,7 @@
<style lang="scss" scoped>
@import '@/assets/style/variables.scss';
.box {
  width: 100%;
  display: flex;
@@ -399,6 +400,7 @@
    height: 100%;
  }
}
.zhuguan {
  color: $primary-color;
  border: 1px solid $primary-color;
admin/src/views/business/visitorSources.vue
@@ -75,25 +75,28 @@
        />
      </el-form-item>
      <el-form-item label="在园须知:" prop="visitNotice">
        <el-tiptap
        <!-- <el-tiptap
          style="width: 50%"
          v-model="form.visitNotice"
          :extensions="extensions"
        />
        /> -->
        <RichEditor style="width: 70%" :richData="form.visitNotice" :styleEditor="styleEditor" @getWangedditor="getWangedditor" :readonly="false"/>
      </el-form-item>
      <el-form-item label="访客预约指南:" prop="visitNotice">
        <el-tiptap
        <!-- <el-tiptap
          style="width: 50%"
          v-model="form.visitTips"
          :extensions="extensions"
        />
        /> -->
        <RichEditor style="width: 70%" :richData="form.visitTips" :styleEditor="styleEditor" @getWangedditor="getWangedditor1" :readonly="false"/>
      </el-form-item>
      <el-form-item label="访客入园导览图:" prop="visitNotice">
        <el-tiptap
        <!-- <el-tiptap
          style="width: 50%"
          v-model="form.visitMap"
          :extensions="extensions"
        />
        /> -->
        <RichEditor style="width: 70%" :richData="form.visitMap" :styleEditor="styleEditor" @getWangedditor="getWangedditor2" :readonly="false"/>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submit">保存配置项</el-button>
@@ -104,6 +107,7 @@
<script>
import { getVisitConfigDTO, updateVisitConfig } from '@/api/system/common'
import RichEditor from '@/components/common/RichEditor'
import {
  // necessary extensions
  Doc,
@@ -131,7 +135,9 @@
import { upload } from '@/api/system/common'
export default {
  name: 'visitorSources',
  components: {
    RichEditor
  },
  data() {
    return {
      form: {
@@ -148,6 +154,7 @@
        visitTips: '',
        frezzDays: null
      },
      styleEditor:'border: 1px solid #ccc;display: inline-block;',
      extensions: [
        new Doc(),
        new Text(),
@@ -188,6 +195,15 @@
  },
  methods: {
    getWangedditor(val){
      this.form.visitNotice =val
    },
    getWangedditor1(val){
      this.form.visitTips =val
    },
    getWangedditor2(val){
      this.form.visitMap =val
    },
    getData() {
      getVisitConfigDTO({})
        .then(res => {
admin/src/views/platform/LogisticsRecord/leaveAuth.vue
@@ -121,6 +121,15 @@
            label: '驾驶员'
          },
          {
            filed: 'queryStatusForPower',
            type: 'select',
            label: '授权状态',
            options: [
              { value: '9,10', label: '已授权' },
              { value: '6', label: '未授权' }
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '作业完成时间搜索',
admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -171,6 +171,18 @@
            label: '合同单号'
          },
          {
            filed: 'status',
            type: 'select',
            label: '审批结果',
            options: [
              { value: 0, label: '待审批' },
              { value: 1, label: '审批中' },
              { value: 2, label: '审批通过' },
              { value: 3, label: '审批驳回' },
              { value: 4, label: '已取消' },
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '操作时间',
@@ -289,7 +301,7 @@
        selDate: [],
        fastdate: 0,
      }
      this.getList()
      this.changeRadio('0')
    },
    handleDetail(row) {
      this.isShowDriver = true
admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -105,6 +105,23 @@
            label: '车牌号'
          },
          {
            filed: 'status',
            type: 'select',
            label: '作业状态',
            options: [
              { value: 3, label: '入园等待' },
              { value: 4, label: '月台等待' },
              { value: 5, label: '作业中' },
              { value: 6, label: '作业完成' },
              { value: 7, label: '转移中' },
              { value: 8, label: '异常挂起' },
              { value: 9, label: '已授权离园' },
              { value: 10, label: '已离园' },
              { value: 11, label: '已过号' },
              { value: 12, label: '已取消' },
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '操作时间',
admin/src/views/system/smsMessage.vue
@@ -1,20 +1,22 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)"
      @clear="clear">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear">
    </QueryForm>
    <!-- <div class="pt16">
      <el-button :loading="exLoading" @click="handleEx"
        v-permissions="['business:platformjob:exportExcel']">导出</el-button>
    </div> -->
    <el-table class="mb20" v-loading="loading" :data="list" stripe>
    <div class="pt16 mb10">
      <el-button type="primary" @click="batchStatus(0)"
        v-permissions="['business:platformjob:update']">批量启用</el-button>
      <el-button @click="batchStatus(1)" v-permissions="['business:platformjob:update']">批量禁用</el-button>
    </div>
    <el-table @selection-change="handleSelectionChange" class="mb20" v-loading="loading" :data="list" stripe>
      <el-table-column align="center" type="selection" width="55">
      </el-table-column>
      <el-table-column prop="name" label="消息标题" min-width="160" show-overflow-tooltip />
      <el-table-column prop="code" label="消息编码" min-width="150" show-overflow-tooltip />
      <el-table-column prop="content" label="消息模板" min-width="300" show-overflow-tooltip />
      <el-table-column label="状态" width="120" align="center" fixed="right">
        <template v-slot="scope">
          <el-switch v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1">
          </el-switch>
          <el-switch v-permissions="['business:platformjob:update']" v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1">
          </el-switch>
        </template>
      </el-table-column>
    </el-table>
@@ -25,7 +27,7 @@
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import { getSmsList, SmsStatusUpdate } from '@/api/system/sms'
import { getSmsList, SmsStatusUpdate, SmsStatussUpdate } from '@/api/system/sms'
import GlobalWindow from '@/components/common/GlobalWindow'
import { Message } from 'element-ui'
@@ -38,6 +40,7 @@
  },
  data() {
    return {
      ids: [],
      isShowDetail: false,
      exLoading: false,
      loading: false,
@@ -78,8 +81,32 @@
    this.getList()
  },
  methods: {
    handleSelectionChange(val) {
      this.ids = val.map(i => i.id)
      console.log('ids', this.ids)
    },
    batchStatus(status) {
      const { ids } = this
      if (ids.length == 0) return Message.error('请先选择要更改的短信通知')
      this.$confirm(`确定${status == 0 ? '启用' : '禁用'}选中的所有短信通知吗?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        SmsStatussUpdate({
          ids: ids.join(','),
          status
        }).then(res => {
          Message.success('批量更新成功')
          this.getList()
        }, () => {
          this.getList()
        })
      })
    },
    changeStatus(row) {
      console.log('row', row);
      console.log('row', row)
      SmsStatusUpdate({
        ...row
      }).then(res => {
@@ -109,8 +136,8 @@
        this.loading = false
      })
    },
    clear() {
      this.pagination.page = 1
      this.filters = {}
h5/pages/staff/task/driver.vue
@@ -101,7 +101,11 @@
      </view>
    </view>
    <view class="emyty"></view>
    <view class="main_footer">
    <view v-if="
      info.approveDateVO != null &&
      info.approveDateVO.canBeApproved != null &&
      info.approveDateVO.canBeApproved == 1
    " class="main_footer">
      <view class="btn" @click="handleSub('0')">拒绝</view>
      <view class="btn agree" @click="handleSub('1')">同意</view>
    </view>
pda/manifest.json
@@ -18,7 +18,7 @@
            "proxy": {
                "/gateway_interface": {
                    // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    "target" : "http://10.50.250.178:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "target" : "http://10.50.250.253:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target": "http://192.168.0.100:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin": true, // å…è®¸è·¨åŸŸ 
                    "pathRewrite": {
pda/pages/index/control.vue
@@ -36,7 +36,7 @@
        },
        getPlatformGroup() {
            getPlatformGroupList({
                queryData: 1,
                queryData: 0,
                queryType: 0
            }).then(res => {
                this.platformGroupList = res.data || []
pda/utils/config.js
@@ -1,6 +1,6 @@
export const baseUrl = 'gateway_interface/'
// export const baseUrl = 'http://10.50.250.178:8088/gateway_interface/'
// export const baseUrl = 'gateway_interface/'
export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
screen/package.json
@@ -5,6 +5,7 @@
  "type": "module",
  "scripts": {
    "dev": "vite --host",
    "serve": "vite --host",
    "build": "vite build",
    "preview": "vite preview"
  },
screen/src/assets/images/energy_ef/bg@2x.png
screen/src/assets/images/energy_ef/car_kongxian@2x.png
screen/src/assets/images/energy_ef/car_lixian@2x.png
screen/src/assets/images/energy_ef/car_zaitu@2x.png
screen/src/assets/images/energy_ef/china@2x.png
screen/src/assets/images/energy_ef/chuku_ic_car@2x.png
screen/src/assets/images/energy_ef/chuku_task.png
screen/src/assets/images/energy_ef/chuku_task_ac.png
screen/src/assets/images/energy_ef/ic_bili@2x.png
screen/src/assets/images/energy_ef/ic_chukuxiaolv@2x.png
screen/src/assets/images/energy_ef/ic_renwuzongliang@2x.png
screen/src/assets/images/energy_ef/ic_rukuxiaolv@2x.png
screen/src/assets/images/energy_ef/ic_wanchengrenwu@2x.png
screen/src/assets/images/energy_ef/map_car_kongxian@2x.png
screen/src/assets/images/energy_ef/map_car_lixian@2x.png
screen/src/assets/images/energy_ef/map_car_zaitu@2x.png
screen/src/assets/images/energy_ef/ruku_task.png
screen/src/assets/images/energy_ef/ruku_task_ac.png
screen/src/assets/images/maintitle.gif
screen/src/router/index.js
@@ -6,7 +6,7 @@
  routes: [
    {
      path: '/',
      component: () => import('../views/PlatformCall.vue')
      component: () => import('../views/LogisticsEfficiency.vue')
    },
    {
      path: '/PlatformCall',
@@ -18,6 +18,11 @@
      name: 'EnergyConsum',
      component: () => import('../views/EnergyConsum.vue')
    },
    {
      path: '/LogisticsControl',
      name: 'LogisticsControl',
      component: () => import('../views/LogisticsEfficiency.vue')
    },
  ]
})
screen/src/views/EnergyConsum.vue
@@ -1,241 +1,243 @@
<template>
  <div class="main_app">
    <img src="@/assets/images/bg_main_app.png" class="main_bg" alt="" />
    <div class="main_header">
      <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
      <div class="title">安泰智慧物流园区-绿色低碳运营</div>
      <div class="time">
        <span class="date">{{ date }}</span>
        <span class="week">{{ week }}</span>
        <span class="time">{{ time }}</span>
      </div>
    </div>
    <div class="main_content">
      <div class="left_box">
        <div class="left_box_one">
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>实时三相电流/电压</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
          </div>
          <div class="content">
            <div class="item">
              <div class="lab">A相电流(A)</div>
              <div class="val">60</div>
            </div>
            <div class="item">
              <div class="lab">B相电流(A)</div>
              <div class="val">60</div>
            </div>
            <div class="item">
              <div class="lab">C相电流(A)</div>
              <div class="val">60</div>
            </div>
            <div class="item">
              <div class="lab">有功功率(KW)</div>
              <div class="val">60</div>
            </div>
            <div class="item">
              <div class="lab">功率因数</div>
              <div class="val">60</div>
            </div>
            <div class="item">
              <div class="lab">有功电度(°)</div>
              <div class="val">60</div>
            </div>
          </div>
        </div>
        <div class="left_box_two">
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>实时负荷曲线</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
          </div>
          <div class="load_wrap">
            <div class="loadRef"></div>
          </div>
        </div>
        <div class="left_box_three">
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>月能耗分析</div>
            </div>
            <div class="tabs">
              <div class="tab active">用电</div>
              <div class="separate"></div>
              <div class="tab">用水</div>
              <div class="separate"></div>
              <div class="tab">用气</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
          </div>
          <div class="energy_wrap">
            <div class="energyRef"></div>
          </div>
  <v-scale-screen width="1920" height="960" :fullScreen="true">
    <div class="main_app">
      <img src="@/assets/images/bg_main_app.png" class="main_bg" alt="" />
      <div class="main_header">
        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
        <div class="title">安泰智慧物流园区-绿色低碳运营</div>
        <div class="time_wrap">
          <span class="date">{{ date }}</span>
          <span class="week">{{ week }}</span>
          <span class="time">{{ time }}</span>
        </div>
      </div>
      <div class="center_box">
        <div class="center_box_one">
          <div class="list">
            <div class="item">
              <div class="header">
                <img class="icon" src="@/assets/images/ic_yongdian@2x.png" alt="" />
                <div class="content">
                  <div class="name">上月用电(kw·h)</div>
                  <div class="num">450</div>
      <div class="main_content">
        <div class="left_box">
          <div class="left_box_one">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>实时三相电流/电压</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="content">
              <div class="item">
                <div class="lab">A相电流(A)</div>
                <div class="val">60</div>
              </div>
              <div class="item">
                <div class="lab">B相电流(A)</div>
                <div class="val">60</div>
              </div>
              <div class="item">
                <div class="lab">C相电流(A)</div>
                <div class="val">60</div>
              </div>
              <div class="item">
                <div class="lab">有功功率(KW)</div>
                <div class="val">60</div>
              </div>
              <div class="item">
                <div class="lab">功率因数</div>
                <div class="val">60</div>
              </div>
              <div class="item">
                <div class="lab">有功电度(°)</div>
                <div class="val">60</div>
              </div>
            </div>
          </div>
          <div class="left_box_two">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>实时负荷曲线</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="load_wrap">
              <div class="loadRef"></div>
            </div>
          </div>
          <div class="left_box_three">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>月能耗分析</div>
              </div>
              <div class="tabs">
                <div class="tab active">用电</div>
                <div class="separate"></div>
                <div class="tab">用水</div>
                <div class="separate"></div>
                <div class="tab">用气</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="energy_wrap">
              <div class="energyRef"></div>
            </div>
          </div>
        </div>
        <div class="center_box">
          <div class="center_box_one">
            <div class="list">
              <div class="item">
                <div class="header">
                  <img class="icon" src="@/assets/images/ic_yongdian@2x.png" alt="" />
                  <div class="content">
                    <div class="name">上月用电(kw·h)</div>
                    <div class="num">450</div>
                  </div>
                </div>
                <div class="static">
                  <span class="lab">同比</span>
                  <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
                  <span class="val">11</span>
                  <span class="lab">环比</span>
                  <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  <span class="val">11</span>
                </div>
              </div>
              <div class="static">
                <span class="lab">同比</span>
                <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
                <span class="val">11</span>
                <span class="lab">环比</span>
                <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
                <span class="val">11</span>
              </div>
            </div>
            <div class="item">
              <div class="header">
                <img class="icon" src="@/assets/images/ic_yongshui@2x.png" alt="" />
                <div class="content">
                  <div class="name">上月用水(t)</div>
                  <div class="num">450</div>
              <div class="item">
                <div class="header">
                  <img class="icon" src="@/assets/images/ic_yongshui@2x.png" alt="" />
                  <div class="content">
                    <div class="name">上月用水(t)</div>
                    <div class="num">450</div>
                  </div>
                </div>
                <div class="static">
                  <span class="lab">同比</span>
                  <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
                  <span class="val">11</span>
                  <span class="lab">环比</span>
                  <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  <span class="val">11</span>
                </div>
              </div>
              <div class="static">
                <span class="lab">同比</span>
                <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
                <span class="val">11</span>
                <span class="lab">环比</span>
                <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
                <span class="val">11</span>
              </div>
            </div>
            <div class="item">
              <div class="header">
                <img class="icon" src="@/assets/images/ic_yongqi@2x.png" alt="" />
                <div class="content">
                  <div class="name">上月用气(t)</div>
                  <div class="num">450</div>
              <div class="item">
                <div class="header">
                  <img class="icon" src="@/assets/images/ic_yongqi@2x.png" alt="" />
                  <div class="content">
                    <div class="name">上月用气(t)</div>
                    <div class="num">450</div>
                  </div>
                </div>
                <div class="static">
                  <span class="lab">同比</span>
                  <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
                  <span class="val">11</span>
                  <span class="lab">环比</span>
                  <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  <span class="val">11</span>
                </div>
              </div>
              <div class="static">
                <span class="lab">同比</span>
                <img class="icon" src="@/assets/images/ic_up.webp" alt="" />
                <span class="val">11</span>
                <span class="lab">环比</span>
                <img class="icon" src="@/assets/images/ic_down.webp" alt="" />
                <span class="val">11</span>
            </div>
          </div>
          <div class="center_box_two">
            <img class="bg" src="@/assets/images/img_city@2x.png" alt="" />
            <div class="item item1">
              <div class="num fs_linear">240<span class="unit">kw·h</span></div>
              <div class="name">联合工房</div>
              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
            </div>
            <div class="item item2">
              <div class="num fs_linear">240<span class="unit">kw·h</span></div>
              <div class="name">联合工房</div>
              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
            </div>
            <div class="item item3">
              <div class="num fs_linear">240<span class="unit">kw·h</span></div>
              <div class="name">联合工房</div>
              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
            </div>
            <div class="item item4">
              <div class="num fs_linear">240<span class="unit">kw·h</span></div>
              <div class="name">联合工房</div>
              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
            </div>
            <div class="item item5">
              <div class="num fs_linear">240<span class="unit">kw·h</span></div>
              <div class="name">联合工房</div>
              <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
            </div>
            <div class="bottom_wrap">
              <div class="bottom bottom1">
                <div class="num fs_linear">240</div>
                <div class="name">昨日用电</div>
                <div class="unit">kw·h</div>
                <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
              </div>
              <div class="bottom bottom2">
                <div class="num">240</div>
                <div class="name">今日用电</div>
                <div class="unit">kw·h</div>
                <img src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
              </div>
              <div class="bottom bottom3">
                <div class="num fs_linear">240</div>
                <div class="name">本月用电</div>
                <div class="unit">kw·h</div>
                <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
              </div>
            </div>
          </div>
        </div>
        <div class="center_box_two">
          <img class="bg" src="@/assets/images/img_city@2x.png" alt="" />
          <div class="item item1">
            <div class="num fs_linear">240<span class="unit">kw·h</span></div>
            <div class="name">联合工房</div>
            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
          </div>
          <div class="item item2">
            <div class="num fs_linear">240<span class="unit">kw·h</span></div>
            <div class="name">联合工房</div>
            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
          </div>
          <div class="item item3">
            <div class="num fs_linear">240<span class="unit">kw·h</span></div>
            <div class="name">联合工房</div>
            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
          </div>
          <div class="item item4">
            <div class="num fs_linear">240<span class="unit">kw·h</span></div>
            <div class="name">联合工房</div>
            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
          </div>
          <div class="item item5">
            <div class="num fs_linear">240<span class="unit">kw·h</span></div>
            <div class="name">联合工房</div>
            <img src="@/assets/images/bg_data@2x.png" class="bg" alt="" />
          </div>
          <div class="bottom_wrap">
            <div class="bottom bottom1">
              <div class="num fs_linear">240</div>
              <div class="name">昨日用电</div>
              <div class="unit">kw·h</div>
              <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
            </div>
            <div class="bottom bottom2">
              <div class="num">240</div>
              <div class="name">今日用电</div>
              <div class="unit">kw·h</div>
              <img src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
            </div>
            <div class="bottom bottom3">
              <div class="num fs_linear">240</div>
              <div class="name">本月用电</div>
              <div class="unit">kw·h</div>
              <img src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
            </div>
          </div>
        </div>
      </div>
      <div class="right_box">
        <div class="right_box_one">
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>本月碳排放量统计</div>
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
          </div>
          <div class="content">
            <img src="@/assets/images/ic_co2@2x.png" class="co2" alt="">
            <div>
              <div class="name">本月累计碳排放</div>
              <div><span class="num">22.22</span><span>吨</span></div>
            </div>
          </div>
        </div>
        <div class="right_box_two">
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>上月油耗排行统计</div>
            </div>
            <div class="tabs">油耗:L</div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
          </div>
          <div class="list">
            <div class="line" v-for="item,i in 6">
              <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
              <div class="id_card">皖A12313</div>
              <div class="wrap">
                <ChargeRate :rate="15" :color />
        <div class="right_box">
          <div class="right_box_one">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>本月碳排放量统计</div>
              </div>
              <div class="num">1000</div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="content">
              <img src="@/assets/images/ic_co2@2x.png" class="co2" alt="">
              <div>
                <div class="name">本月累计碳排放</div>
                <div><span class="num">22.22</span><span>吨</span></div>
              </div>
            </div>
          </div>
        </div>
        <div class="right_box_three">
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
              <div>月油耗分析</div>
          <div class="right_box_two">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>上月油耗排行统计</div>
              </div>
              <div class="tabs">油耗:L</div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            <div class="list">
              <div class="line" v-for="item, i in 6">
                <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
                <div class="id_card">皖A12313</div>
                <div class="wrap">
                  <ChargeRate :rate="15" :color />
                </div>
                <div class="num">1000</div>
              </div>
            </div>
          </div>
          <div class="wrap">
            <div class="analyseRef"></div>
          <div class="right_box_three">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>月油耗分析</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="wrap">
              <div class="analyseRef"></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  </v-scale-screen>
</template>
<script setup>
@@ -243,6 +245,7 @@
import dayjs from 'dayjs'
import ChargeRate from '@/components/ChargeRate.vue'
import * as echarts from 'echarts'
import VScaleScreen from 'v-scale-screen'
const weekMap = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六',]
@@ -286,7 +289,7 @@
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: [1,2,3,4,5,5]
      data: [1, 2, 3, 4, 5, 5]
    },
    yAxis: {
      type: 'value',
@@ -313,7 +316,7 @@
    },
    series: [
      {
        data: [1,2,3,4,4,5].map(i => {
        data: [1, 2, 3, 4, 4, 5].map(i => {
          return {
            name: i,
            value: i,
@@ -398,7 +401,7 @@
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: [1,2,3,4,5,5]
      data: [1, 2, 3, 4, 5, 5]
    },
    yAxis: {
      type: 'value',
@@ -425,7 +428,7 @@
    },
    series: [
      {
        data: [1,2,3,4,4,4000].map(i => {
        data: [1, 2, 3, 4, 4, 4000].map(i => {
          return {
            name: i,
            value: i,
@@ -502,7 +505,7 @@
    },
    xAxis: {
      type: 'category',
      data: [1,2,3,4,4,5]
      data: [1, 2, 3, 4, 4, 5]
    },
    yAxis: {
      type: 'value',
@@ -520,7 +523,7 @@
    },
    series: [
      {
        data: [1,2,3,4,5],
        data: [1, 2, 3, 4, 5],
        type: 'bar',
        barWidth: 10,
        itemStyle: {
@@ -547,7 +550,7 @@
  initOperation()
  initLoadReal()
  initEnergy()
})
})
</script>
@@ -591,11 +594,13 @@
    .left_box_two {
      margin-bottom: 20px;
      .load_wrap{
      .load_wrap {
        width: 100%;
        height: 210px;
        padding: 12px 12px;
        .loadRef{
        .loadRef {
          width: 100%;
          height: 100%;
        }
@@ -603,10 +608,11 @@
    }
    .left_box_three {
      .energy_wrap{
      .energy_wrap {
        width: 100%;
        height: 200px;
        .energyRef{
        .energyRef {
          width: 100%;
          height: 100%;
        }
@@ -805,6 +811,7 @@
    .right_box_one {
      margin-bottom: 20px;
      .content {
        height: 164px;
        display: flex;
@@ -825,15 +832,19 @@
        }
      }
    }
    .right_box_two{
    .right_box_two {
      margin-bottom: 20px;
      .list{
      .list {
        padding: 20px 24px 4px;
        .line{
        .line {
          display: flex;
          align-items: center;
          margin-bottom: 16px;
          .top{
          .top {
            font-weight: 500;
            font-size: 12px;
            width: 33px;
@@ -844,19 +855,22 @@
            box-shadow: inset 0px 0px 3px 0px #01D9FE;
            margin-right: 10px;
          }
          .id_card{
          .id_card {
            color: #DBEAEA;
            font-weight: 500;
            margin-right: 14px;
            font-size: 14px;
          }
          .num{
          .num {
            font-weight: 500;
            font-size: 13px;
            color: #DBEAEA;
            margin-left: 15px;
          }
          .wrap{
          .wrap {
            flex: 1;
            height: 20px;
            border: 1px solid #686B6B;
@@ -864,10 +878,12 @@
        }
      }
    }
    .right_box_three{
      .wrap{
    .right_box_three {
      .wrap {
        padding: 8px;
        .analyseRef{
        .analyseRef {
          width: 100%;
          height: 210px;
        }
@@ -963,7 +979,7 @@
    -webkit-text-fill-color: transparent;
  }
  .time {
  .time_wrap {
    font-size: 26px;
    font-weight: 600;
    background-image: -webkit-linear-gradient(top,
@@ -1001,11 +1017,10 @@
}
.main_app {
  width: 100%;
  min-height: 100vh;
  width: 1920px;
  height: 980px;
  color: #ffffff;
  position: relative;
  .main_bg {
    position: absolute;
    left: 0;
screen/src/views/LogisticsControl.vue
ÎļþÒÑɾ³ý
screen/src/views/LogisticsEfficiency.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,637 @@
<template>
  <v-scale-screen width="1920" height="960" :fullScreen="true">
    <div class="main_app">
      <img src="@/assets/images/energy_ef/bg@2x.png" class="main_bg" alt="" />
      <div class="main_header">
        <!-- <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> -->
        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
        <div class="title">安泰智慧物流园区-调度能效跟踪</div>
        <div class="time_wrap">
          <span class="date">{{ date }}</span>
          <span class="week">{{ week }}</span>
          <span class="time">{{ time }}</span>
        </div>
      </div>
      <div class="main_content">
        <div class="left_box">
          <div class="left_box_one">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>累计出库量统计</div>
              </div>
              <div class="tabs">
                <div class="tab active">本月</div>
                <div class="separate"></div>
                <div class="tab">本年</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="content_wrap">
              <div class="content">
                <div class="num">1000000</div>
                <div class="unit_wrap">
                  <span style="color: #869CC9;">同比</span>
                  <img src="@/assets/images/ic_up.png" class="icon" alt="">
                  <span>10.2%</span>
                </div>
              </div>
              <div class="train_wrap">
                <div class="icon_wrap">
                  <img src="@/assets//images/energy_ef/chuku_ic_car@2x.png" alt="">
                </div>
                <div class="total">
                  <span>累计出库车次</span>
                  <span><strong>3900</strong><span class="unit">次</span></span>
                </div>
              </div>
            </div>
          </div>
          <div class="left_box_two">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>月能耗分析</div>
              </div>
              <div class="tabs">
                <div class="tab active">近7日</div>
                <div class="separate"></div>
                <div class="tab">本月</div>
                <div class="separate"></div>
                <div class="tab">本年</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="energy_wrap">
              <div class="energyRef"></div>
            </div>
          </div>
          <div class="left_box_three">
            <div class="com_header">
              <div class="title">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <div>当前运输任务</div>
              </div>
              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
            </div>
            <div class="list_wrap">
              <div class="list">
                <div class="header line">
                  <span class="item flag">标识</span>
                  <span class="item order">运输单号</span>
                  <span class="item id_card">运输车辆</span>
                  <span class="item status">作业状态</span>
                  <span class="item addr">收货单位</span>
                  <span class="item time">任务开始时间</span>
                </div>
                <div class="line" v-for="i in 7">
                  <span class="item flag"><span class="flag_bg">出</span></span>
                  <span class="item order">11</span>
                  <span class="item id_card">11</span>
                  <span class="item status">11</span>
                  <span class="item addr">11</span>
                  <span class="item time">11</span>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="center_box">
          <div class="center_box_one">
            <div class="tabs">
              <div class="tab active">
                <img src="@/assets/images/energy_ef/chuku_task_ac.png" alt="">
                <span>出库任务</span>
              </div>
              <div class="tab">
                <img src="@/assets/images/energy_ef/ruku_task.png" alt="">
                <span>入库任务</span>
              </div>
            </div>
            <div class="static_wrap">
              <div class="item">
                <img src="@/assets/images/energy_ef/ic_renwuzongliang@2x.png" alt="">
                <div class="content">
                  <div class="name">当前任务量</div>
                  <div class="num"><span>1000</span>万支</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt="">
                <div class="content">
                  <div class="name">当日完成任务总量</div>
                  <div class="num"><span class="today">1000</span>万支</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/energy_ef/ic_bili@2x.png" alt="">
                <div class="content">
                  <div class="name">已完成比例</div>
                  <div class="num"><span class="finish">1000</span>万支</div>
                </div>
              </div>
            </div>
          </div>
          <div class="center_box_two"></div>
        </div>
        <div class="right_box">
          <div class="right_box_one"></div>
          <div class="right_box_two"></div>
          <div class="right_box_three"></div>
        </div>
      </div>
    </div>
  </v-scale-screen>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import VScaleScreen from 'v-scale-screen'
import dayjs from 'dayjs'
import * as echarts from 'echarts'
const weekMap = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六',]
const date = ref(dayjs().format('YYYY.MM.DD'))
const week = ref(weekMap[new Date().getDay()])
const time = ref(dayjs().format('HH:mm:ss'))
setInterval(() => {
  date.value = dayjs().format('YYYY-MM-DD')
  week.value = weekMap[new Date().getDay()]
  time.value = dayjs().format('HH:mm:ss')
}, 1000)
const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
const initEnergy = () => {
  var myChart = echarts.init(document.querySelector('.energyRef'))
  // ç»˜åˆ¶å›¾è¡¨
  const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
  myChart.setOption({
    grid: {
      top: '20%',
      left: '2%',
      right: '2%',
      bottom: '4%',
      containLabel: true
    },
    tooltip: {
      trigger: 'axis',
      axisPointer: {
        type: 'line'
      },
    },
    xAxis: {
      type: 'category',
      data: [1, 2, 3, 4, 4, 5]
    },
    yAxis: {
      type: 'value',
      name: 'kw·h',
      nameTextStyle: {
        padding: [0, 0, 4, -30]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
      },
      splitLine: {
        show: true,
        lineStyle: {
          //这里输入线条的样式
          color: 'rgba(255,255,255,0.14)',
        }
      }
    },
    series: [
      {
        data: [1, 2, 3, 4, 5],
        type: 'bar',
        barWidth: 10,
        itemStyle: {
          normal: {
            color: new echarts.graphic.LinearGradient(
              0, 0, 0, 1,
              [
                { offset: 0, color: arr[1] },
                { offset: 1, color: '#080807' }
              ]
            ),
            barBorderRadius: [10, 10, 0, 0]
          }
        }
      }
    ]
  })
  window.addEventListener('resize', function () {//执行
    myChart.resize()
  })
}
onMounted(() => {
  initEnergy()
})
</script>
<style lang="scss" scoped>
div {
  box-sizing: border-box;
}
.main_content {
  display: flex;
  padding: 20px 25px 0;
  .left_box {
    width: 440px;
    .left_box_one {
      width: 100%;
      position: relative;
      margin-bottom: 20px;
      .content_wrap {
        height: 164px;
        padding: 22px 20px 0;
        .content {
          display: flex;
          align-items: flex-end;
          margin: 10px 0 22px;
          .num {
            margin-right: 10px;
            font-weight: bold;
            font-size: 46px;
            height: 44px;
            line-height: 52px;
            font-weight: bold;
            color: #00F2F3;
            letter-spacing: 3px;
            background-image: -webkit-linear-gradient(top,
                #01D9FE 0%,
                #0177FE 60%,
                #0177FE 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
          }
          .unit_wrap {
            display: flex;
            align-items: center;
          }
          .icon {
            width: 10px;
            height: 12px;
            margin-right: 6px;
            margin-left: 4px;
          }
        }
        .train_wrap {
          display: flex;
          height: 40px;
          margin-top: 18px;
          .icon_wrap {
            width: 40px;
            height: 40px;
            display: flex;
            justify-content: center;
            align-items: center;
            margin-right: 4px;
            border: 1px solid;
            background: linear-gradient(180deg, rgba(0, 148, 235, 0.68) 0%, rgba(0, 148, 235, 0) 100%);
            border-image: linear-gradient(180deg, rgba(177, 210, 255, 0.64), rgba(0, 171, 255, 0.7)) 1 1;
            img {
              width: 26px;
            }
          }
          .total {
            flex: 1;
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 0 20px;
            font-size: 16px;
            border: 1px solid;
            border-image: linear-gradient(180deg, rgba(177, 210, 255, 0.64), rgba(0, 171, 255, 0.7)) 1 1;
            background: linear-gradient(180deg, rgba(0, 148, 235, 0.68) 0%, rgba(0, 148, 235, 0) 100%);
            .unit {
              margin-left: 5px;
              font-size: 13px;
            }
          }
        }
      }
    }
    .left_box_two {
      margin-bottom: 20px;
      .energy_wrap {
        width: 100%;
        height: 250px;
        .energyRef {
          width: 100%;
          height: 100%;
        }
      }
    }
    .left_box_three {
      .list_wrap {
        padding: 10px 0;
        .list {
          .line {
            display: flex;
            height: 30px;
            align-items: center;
            padding: 0 10px;
            font-size: 12px;
            &:nth-of-type(2n) {
              background: rgba(27, 64, 97, 0.52);
              .flag_bg {
                background: #01ABFE !important;
              }
            }
            .item {
              flex: 5;
              white-space: nowrap;
              overflow: hidden;
              text-overflow: ellipsis;
            }
            .flag {
              flex: 3;
              display: flex;
              .flag_bg {
                width: 22px;
                height: 22px;
                display: flex;
                justify-content: center;
                align-items: center;
                border-radius: 50%;
                background: #00F2F3;
                font-weight: 500;
                color: #001B3C;
              }
            }
            .status {
              color: #FEAF01;
            }
            .addr {
              flex: 8;
            }
            .time {
              flex: 8;
            }
          }
        }
      }
    }
  }
  .center_box {
    flex: 1;
    padding: 16px 60px;
    .center_box_one {
      .tabs {
        display: flex;
        align-items: center;
        .tab {
          display: flex;
          align-items: center;
          margin-right: 30px;
          img {
            width: 20px;
            height: 20px;
            margin-right: 8px;
          }
          font-size: 20px;
          font-weight: 600;
          color: #D2E0FF;
        }
        .active {
          background-image: -webkit-linear-gradient(top,
              #fff 0%,
              #eec05f 60%,
              #eec05f 100%);
          -webkit-background-clip: text;
          -webkit-text-fill-color: transparent;
        }
      }
      .static_wrap {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin: 30px 0 54px;
        .item {
          display: flex;
          img {
            width: 68px;
            height: 71px;
            margin-right: 15px;
          }
          .content {
            font-size: 15px;
            .num {
              font-size: 12px;
              color: #D2E0FF;
              span {
                font-weight: bold;
                font-size: 30px;
                margin-right: 5px;
                font-weight: 600;
                background-image: -webkit-linear-gradient(top,
                    #01D9FE 0%,
                    #01D9FE 60%,
                    #fff 100%);
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
              }
              .today {
                background-image: -webkit-linear-gradient(top,
                    #fff 0%,
                    #20FFC5 50%,
                    #20FFC5 100%);
              }
              .finish{
                background-image: -webkit-linear-gradient(top,
                    #fff 0%,
                    #FFB120 50%,
                    #FFB120 100%);
              }
            }
          }
        }
      }
    }
    .center_box_two{
      width: 100%;
      border: 1px solid;
    }
  }
  .right_box {
    width: 440px;
  }
}
.main_header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 90px;
  position: relative;
  padding: 0px 40px 16px;
  font-weight: 600;
  font-size: 36px;
  .title {
    background-image: -webkit-linear-gradient(top,
        #ffffff 0%,
        #c8ddff 70%,
        #85b4ff 80%,
        #74a9ff 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }
  .time_wrap {
    font-size: 26px;
    font-weight: 600;
    background-image: -webkit-linear-gradient(top,
        #ffffff 0%,
        #c8ddff 50%,
        #85b4ff 80%,
        #74a9ff 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    display: flex;
    align-items: center;
    .time {
      width: 180px;
      display: flex;
      justify-content: flex-end;
      padding-bottom: 10px;
      font-size: 36px;
    }
    .week {
      margin-left: 36px;
    }
  }
  .main_header_bg {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: -1;
  }
}
.com_header {
  height: 40px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 15px 0 13px;
  position: relative;
  .title {
    display: flex;
    align-items: center;
    font-weight: bold;
    font-size: 16px;
    background-image: -webkit-linear-gradient(top,
        #ffffff 0%,
        #c8ddff 66%,
        #85b4ff 72%,
        #74a9ff 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    .icon {
      width: 16px;
      height: 16px;
      margin-right: 14px;
    }
  }
  .tabs {
    display: flex;
    align-items: center;
    font-size: 14px;
    color: #d2e0ff;
    .separate {
      width: 1px;
      height: 14px;
      background-color: #d2e0ff;
      margin: 0 6px;
    }
    .active {
      color: #0094eb;
    }
  }
}
.main_app {
  width: 1920px;
  min-height: 960px;
  /* width: 100%;
  height: 100vh; */
  background: #0b2539;
  color: #FFFFFF;
  position: relative;
  z-index: -2;
  .main_bg {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: -1;
  }
}
.bg {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: -1;
}
</style>
screen/src/views/PlatformCall.vue
@@ -30,7 +30,6 @@
            }else{
              item.optTimeTemp = '-'
            }
          }
          // item.optTimeTemp = dayjs.duration(Math.abs(new Date().getTime() - item.optTime)).format('HH:mm')
        }
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -674,7 +674,8 @@
    public  enum PlatformWarnEvent {
        STOP_TIMEOUT(0, "停靠超时","${carCode}月台停靠超时" ),
        STOP_ERROR(1, "停靠错误","${carCode}月台停靠错误" );
        STOP_ERROR(1, "停靠错误","${carCode}月台停靠错误" ),
        WORK_TIMEOUT(2, "作业超时","${carCode}作业超时" );
        // æˆå‘˜å˜é‡
        private int key;
@@ -799,6 +800,7 @@
        WORKING(3, "作业中","${param} ${param2} ä½œä¸šä¸­" ),
        WRONG_IN(4, "错误停靠","${param} ${param2} å½“前车辆错误停靠,请尽快驶离" ),
        TIMEOUT_IN(5, "超时停靠","${param} ${param2} å½“前车辆超时停靠,请尽快驶离" ),
        TIMEOUT_WORK(6, "作业超时","${param} ${param2} å½“前车辆作业超时" ),
        ;
        // æˆå‘˜å˜é‡
@@ -851,12 +853,14 @@
     2. ä½œä¸šå®Œæˆï¼šçš–A12345作业完成,请尽快驶离
     3. é”™è¯¯åœé ï¼šçš–A12345月台停靠错误,请尽快驶离
     4. è¶…时停靠:皖A12345月台停靠超时,请尽快驶离请尽快驶离
     5. ä½œä¸šè¶…时:皖A12345月台停靠超时,请尽快驶离请尽快驶离
     */
    public  enum PlatformBroadcastContent {
        CALLING(1, "叫号中","${param}请前往${param2}等待作业"),
        DONE(2, "作业完成","${param}作业完成,请尽快驶离" ),
        WRONG_IN(3, "错误停靠","${param}月台停靠错误,请尽快驶离" ),
        TIMEOUT_IN(4, "超时停靠","${param}月台停靠超时,请尽快驶离请尽快驶离" ),
        TIMEOUT_WORK(5, "作业超时","${param}作业超时" ),
        ;
        // æˆå‘˜å˜é‡
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -67,12 +67,8 @@
    @ApiOperation("【访客系统】定时更新微信公众号accesstoken")
    @GetMapping("/timer/wxtoken/updateWxAccessToken")
    ApiResponse updateWxAccessToken();
    @ApiOperation("月台任务超时报警")
    @GetMapping("/timer/platformJob/platformJobTimeOut")
    ApiResponse platformJobTimeOut();
    @ApiOperation("月台任务自动过号")
    @GetMapping("/timer/platformJob/timeOutCallIn")
    ApiResponse timeOutCallIn();
    @ApiOperation("【数字化月台】月台作业报警业务")
    @GetMapping("/timer/platformJob/platformJobTimer")
    ApiResponse platformJobTimer();
}
server/visits/admin_timer/src/main/java/com/doumee/api/PlatformJobController.java
@@ -34,21 +34,14 @@
    @Autowired
    private PlatformJobService platformJobService;
    @ApiOperation("超时报警数据")
    @GetMapping("/platformJobTimeOut")
    public ApiResponse platformJobTimeOut() {
    @ApiOperation("月台作业报警业务")
    @GetMapping("/platformJobTimer")
    public ApiResponse platformJobTimer() {
        platformJobService.timeOutReport();
        return ApiResponse.success("超时报警数据");
    }
    @ApiOperation("超时自动过号")
    @GetMapping("/timeOutCallIn")
    public ApiResponse timeOutCallIn() {
        platformJobService.timeOutCallIn();
        return ApiResponse.success("自动过号");
        platformJobService.timeOutWork();
        return ApiResponse.success("月台作业报警业务");
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
@@ -60,6 +60,21 @@
        return ApiResponse.success(null);
    }
    @ApiOperation("批量禁启用")
    @GetMapping("/updateStatus/batch")
    @CloudRequiredPermission("business:smsconfig:update")
    public ApiResponse updateStatusBatch(@RequestParam String ids,@RequestParam Integer status) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        smsConfigService.updateStatusByIdInBatch(idList,status);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:smsconfig:update")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/DriverPlatformController.java
@@ -168,4 +168,18 @@
        return ApiResponse.success(platformJobService.getLargeScreenData());
    }
    @LoginNoRequired
    @ApiOperation("月台任务测试定时方法")
    @GetMapping("/testTimer")
    public ApiResponse testTimer(Integer type) {
        if(Constants.equalsInteger(type ,1)){
            platformJobService.timeOutWork();
        }else if(Constants.equalsInteger(type ,2)){
            platformJobService.timeOutCallIn();
        }else if(Constants.equalsInteger(type ,3)){
            platformJobService.timeOutReport();
        }
        return ApiResponse.success("操作成功");
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -417,6 +417,12 @@
    @TableField(exist = false)
    private String queryStatus;
    @ApiModelProperty(value = "多状态查询 å¤šä¸ªä»¥,分割")
    @TableField(exist = false)
    private String queryStatusForPower;
    @ApiModelProperty(value = "作业类型查询 å¤šä¸ªä»¥,分割")
    @TableField(exist = false)
    private String queryType;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/WmsJobContractVO.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.vo;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.dao.business.model.Approve;
import com.doumee.dao.business.model.Platform;
import com.doumee.dao.business.model.PlatformWmsDetail;
@@ -23,6 +24,9 @@
    @ApiModelProperty(value = "收货地")
    private String address;
    @ApiModelProperty(value = "0未完成 1已完成 2已取消", example = "1")
    private Integer status;
    @ApiModelProperty(value = "上锁状态:0=未上锁;1=已上锁;")
    private Integer lockStatus;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformJobService.java
@@ -238,4 +238,9 @@
     */
    void timeOutCallIn();
    /**
     * ä½œä¸šè¶…æ—¶
     */
    void timeOutWork();
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
@@ -48,6 +48,8 @@
     */
    void updateById(SmsConfig smsConfig);
    void updateStatusByIdInBatch(List<Integer> ids,Integer status);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
     *
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceServiceImpl.java
@@ -243,7 +243,7 @@
            }
            model.setSpeed(speed);
        }
        PlatformBroadcastLog log  =  HkSyncPushServiceImpl.dealLedContentBiz(device.getNo(),device.getName(),model.getContent(),model.getSpeed(),1);
        PlatformBroadcastLog log  =  HkSyncPushServiceImpl.dealLedContentBiz(0,device.getNo(),device.getName(),model.getContent(),model.getSpeed(),1);
        platformBroadcastLogMapper.insert(log);
        if(log.getHkStatus() == null || !Constants.equalsInteger(log.getHkStatus(), Constants.TWO)){
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,屏幕内容设置失败"+(log!=null?log.getHkInfo():""));
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -271,6 +271,7 @@
                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformJob::getPlatformGroupId, pageWrap.getModel().getPlatformGroupId())
                .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatus()+"')")
                .apply(pageWrap.getModel().getQueryStatusForPower() != null, " find_in_set(t.`STATUS`,'"+pageWrap.getModel().getQueryStatusForPower()+"')")
                .apply(pageWrap.getModel().getQueryType() != null, " find_in_set(t.TYPE,'"+pageWrap.getModel().getQueryType()+"')")
                .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformJob::getStartDate, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
                .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformJob::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
@@ -1093,7 +1094,7 @@
            if(Constants.equalsInteger(device.getType(),Constants.ZERO)&&sendLed){
                log.error("调起led------------------------------------------------------------------------------------------");
                //如果是LED
                PlatformBroadcastLog log = HkSyncPushServiceImpl.dealLedContentBiz(device.getHkNo(),device.getName(),ledContent,speed,1);
                PlatformBroadcastLog log = HkSyncPushServiceImpl.dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),ledContent,speed,1);
                logList.add(log);
                ledList.add(device.getHkId());
            }else  if(Constants.equalsInteger(device.getType(),Constants.TWO)&&sendBroadcast){
@@ -1170,8 +1171,9 @@
                SmsConstants.platformJobContent.platformJobMove,oldPlatform.getName(),platform.getName()
        );
        this.broadcastAndLEed(platformJob,null,
                StringUtils.isBlank(oldPlatform.getRemark())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getRemark()
        platformJob.setPlatformName(platform.getName());
        this.broadcastAndLEed(platformJob, StringUtils.isBlank(oldPlatform.getRemark())?Constants.PlatformLedContent.IDEL_CONTNET.getName():oldPlatform.getLedContent(),
                null
        );
    }
@@ -1731,7 +1733,7 @@
                if (Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())) {
                    platformDataListResponse.setFinishTime(null);
                } else {
                    Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate()).intValue();
                    Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue();
                    Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(), workMinute);
                    platformDataListResponse.setFinishTime(overDate);
                }
@@ -1926,12 +1928,12 @@
                    if(Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())){
                        platformJob.setOptTime(0L);
                    }else{
                        Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate()).intValue();
                        Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue();
                        Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(),workMinute);
                        platformJob.setOptTime(overDate.getTime());
                    }
                }else if(Constants.equalsInteger(platformJob.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){
                    platformJob.setOptTime(DateUtil.getXMinuteAfterDate(platformJob.getCallDate(),platformJob.getWorktimeOutAlarmTime()).getTime());
                    platformJob.setOptTime(DateUtil.getXMinuteAfterDate(platformJob.getNewCallDate(),platformJob.getWorktimeOutAlarmTime()).getTime());
                }
            }
            largeScreenDataVO.setAllList(platformJobList);
@@ -1942,9 +1944,11 @@
        return largeScreenDataVO;
    }
    /**
     * ä½œä¸šå®Œæˆè¶…æ—¶
     */
    @Override
    public void timeOutReport(){
        //查询超时数据
@@ -1953,7 +1957,7 @@
                .selectAs(Platform::getName,PlatformJob::getPlatformName)
                .select(" ( now() > DATE_ADD(t.DONE_DATE ,INTERVAL t1.STAY_TIMEOUT_ALARM_TIME MINUTE) ) as isTimeOut   ")
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE,Constants.PlatformJobStatus.AUTHED_LEAVE)
                .in(PlatformJob::getStatus,Constants.PlatformJobStatus.DONE.getKey(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())
                .eq(PlatformJob::getInOut,Constants.ONE)
                .isNotNull(PlatformJob::getDoneDate)
        );
@@ -1986,10 +1990,10 @@
        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
                .selectAll(PlatformJob.class)
                .selectAs(Platform::getName,PlatformJob::getPlatformName)
                .select(" ( now() > DATE_ADD(t.CALL_DATE ,INTERVAL t2.WAIT_CALL_TIME MINUTE) ) as isTimeOut   ")
                .select(" ( now() > DATE_ADD( ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = 4 order by pl.CREATE_DATE desc  limit 1  )  ,INTERVAL t2.WAIT_CALL_TIME MINUTE) ) as isTimeOut   ")
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId)
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED)
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.CALLED.getKey())
                .isNotNull(PlatformJob::getCallDate)
        );
        //如果超时 å¤„理数据 å¹¶å‘送led与广播
@@ -2002,4 +2006,43 @@
    }
    /**
     * ä½œä¸šè¶…æ—¶
     */
    @Override
    public void timeOutWork(){
        //查询超时数据
        List<PlatformJob> platformJobList =  platformJobJoinMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper<PlatformJob>()
                .selectAll(PlatformJob.class)
                .selectAs(Platform::getName,PlatformJob::getPlatformName)
                .selectAs(Platform::getWorkRate, PlatformJob::getWorkRate)
                .selectAs(Platform::getWorkTimeoutAlarmTime, PlatformJob::getWorktimeOutAlarmTime)
                .select(" case when t.total_num is null  then ( select sum(pwd.IO_QTY) from platform_wms_detail pwd where pwd.JOB_ID = t.id  ) else t.total_num end workNum ")
                .select(" ( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = 5 order by pl.CREATE_DATE desc  limit 1  ) as newStartDate  ")
                .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                .eq(PlatformJob::getStatus,Constants.PlatformJobStatus.WORKING.getKey())
                .eq(PlatformJob::getInOut,Constants.ONE)
        );
        //如果超时 å¤„理数据 å¹¶å‘送led与广播
        for (PlatformJob platformJob:platformJobList) {
            Integer workMinute = platformJob.getWorkNum().multiply(new BigDecimal(60)).divide(platformJob.getWorkRate(),0,BigDecimal.ROUND_HALF_UP).intValue();
            Date overDate = DateUtil.getXMinuteAfterDate(platformJob.getNewStartDate(),workMinute + platformJob.getWorktimeOutAlarmTime());
            if(overDate.getTime() < System.currentTimeMillis() ){
                //广播 led通知
                this.broadcastAndLEed(platformJob,Constants.PlatformLedContent.TIMEOUT_WORK.getInfo(),
                        Constants.PlatformBroadcastContent.TIMEOUT_WORK.getInfo());
                SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO();
                savePlatformWarnEventDTO.setPlatformJobId(platformJob.getId());
                savePlatformWarnEventDTO.setPlatformId(platformJob.getPlatformId());
                savePlatformWarnEventDTO.setCarCode(platformJob.getCarCodeFront());
                savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.WORK_TIMEOUT.getKey());
                platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO);
            }
        }
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWmsJobServiceImpl.java
@@ -112,6 +112,9 @@
                    wmsJobContractVO.setLockStatus(
                            wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getLockStatus()
                    );
                    wmsJobContractVO.setStatus(
                            wmsJobContractVO.getPlatformWmsDetailList().get(Constants.ZERO).getStatus()
                    );
                }
                wmsJobContractVOList.add(wmsJobContractVO);
            }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
@@ -15,6 +15,7 @@
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/**
 * çŸ­ä¿¡ä¸šåŠ¡é…ç½®Service实现
@@ -58,6 +59,18 @@
    }
    @Override
    public void updateStatusByIdInBatch(List<Integer> ids,Integer status) {
        if (CollectionUtils.isEmpty(ids) || Objects.isNull(status)) {
            return;
        }
        smsConfigMapper.update(new UpdateWrapper<SmsConfig>()
                .set("status",status)
                .in("id",ids)
        );
    }
    @Override
    public void updateByIdInBatch(List<SmsConfig> smsConfigs) {
        if (CollectionUtils.isEmpty(smsConfigs)) {
            return;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -1086,7 +1086,7 @@
            }
            if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
                //如果是LED
                PlatformBroadcastLog log = dealLedContentBiz(device.getHkNo(),device.getName(),content,speed,1);
                PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1);
                logList.add(log);
                ledList.add(device.getHkId());
            }else  if(Constants.equalsInteger(device.getType(),Constants.TWO)){
@@ -1115,7 +1115,7 @@
    public static PlatformBroadcastLog dealBroadcastBiz(PlatformJob model, List<String> broadcastList,String bNames , String content1) {
        PlatformBroadcastLog log = new PlatformBroadcastLog();
        content1 = content1.replace("${param}",model.getCarCodeFront());
        log.setObjId(model.getId().toString());
        log.setCreateDate(new Date());
        log.setBizType(Constants.ONE);
        log.setHkDate(new Date());
@@ -1139,12 +1139,12 @@
            log.setHkInfo("请求成功");
            log.setHkStatus(Constants.TWO);
        }
        log.setDeviceType(Constants.ONE);
        log.setDeviceType(Constants.ZERO);
        log.setName("发送广播播报内容");
        return  log;
    }
    public static PlatformBroadcastLog dealLedContentBiz(String hkNo,String hkName, String content,int speed,int color) {
    public static PlatformBroadcastLog dealLedContentBiz(Integer platformId,String hkNo,String hkName, String content,int speed,int color) {
        PlatformBroadcastLog log = new PlatformBroadcastLog();
        log.setCreateDate(new Date());
        log.setBizType(Constants.ONE);
@@ -1154,6 +1154,7 @@
        log.setRemark(hkName);
        log.setInfo(content);
        log.setNum(Constants.ONE);
        log.setObjId(platformId.toString());
        TransparentChannelBodyRequest body = new TransparentChannelBodyRequest();
        TransparentChannelHeadRequest head = new TransparentChannelHeadRequest();