jiangping
2024-12-19 e661ea6782bf6e7283689224506eef0869a27e6d
Merge remote-tracking branch 'origin/master'
已添加1个文件
已修改40个文件
1359 ■■■■■ 文件已修改
admin/src/views/platform/components/PlatformSign.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/appointmentDetails/appointmentDetails.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/index.vue 520 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/queueUpRecord.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/reservedDetail.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/taskDetail.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/index/index.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/index.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingCalendar.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingDetail.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/meetingSel.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/snapshot.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/driver.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/vDangetAppr.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/visitorApprove.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/visitorReport.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/index.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/vehicle/sendACarDetail.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/userinfo/userinfo.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/waybill/home.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/waybill/list.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/videoUrl/Videos.vue 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/openapi/HkOpenApiController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/MonitorDataVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/platform/components/PlatformSign.vue
@@ -4,7 +4,7 @@
      <div class="df_ac mb20">
        <span>搜索车辆:</span>
        <el-input class="flex1 mr20" v-model="carCodeFront" placeholder="请输入车牌号"></el-input>
        <el-button type="primary" @click="getList">查找</el-button>
        <el-button type="primary" @click="getList(1)">查找</el-button>
        <el-button @click="reset">重置</el-button>
      </div>
      <div class="list">
@@ -101,13 +101,16 @@
        this.getList()
      })
    },
    getList() {
    getList(page) {
      const { activePlat, pagination, carCodeFront } = this
      if(page){
        pagination.page = page
      }
      platformJobPage({
        model: { platformGroupId: activePlat.id, queryStatus: '0,1', carCodeFront },
        page: pagination.page,
        capacity: pagination.pageSize
      }).then(res => {
      }).then(res => {
        this.dataList = res.records
        this.pagination.total = res.total
      })
admin/src/views/platform/index.vue
@@ -98,9 +98,10 @@
                <el-button v-if="task.status == 5 || task.status == 8" plain
                  @click="handleTransform(item, task)">转移月台</el-button>
                <el-button v-if="task.status == 4" plain @click="handlePass(task)">过号</el-button>
                <el-button v-preventReClick :loading="loadingFinish" v-if="task.status == 5 || task.status == 8" type="primary"
                  @click="handleFinish(task)">作业完成</el-button>
                <el-button v-preventReClick :loading="loadingOpen" v-if="task.status == 4" type="primary" @click="handleWork(task)">开始作业</el-button>
                <el-button v-preventReClick :loading="loadingFinish" v-if="task.status == 5 || task.status == 8"
                  type="primary" @click="handleFinish(task)">作业完成</el-button>
                <el-button v-preventReClick :loading="loadingOpen" v-if="task.status == 4" type="primary"
                  @click="handleWork(task)">开始作业</el-button>
              </div>
            </div>
          </div>
@@ -229,7 +230,7 @@
        this.loadingFinish = false
        Message.success('完成作业')
        this.getPlatGroupList()
      },() => {
      }, () => {
        this.loadingFinish = false
      })
    },
h5/pages.json
@@ -261,7 +261,7 @@
        {
            "path": "pages/staff/task/visitorApprove",
            "style": {
                "navigationBarTitleText": "访客审批",
                "navigationBarTitleText": "入园审批",
                "enablePullDownRefresh": false
            }
        },
h5/pages/appointmentDetails/appointmentDetails.vue
@@ -22,6 +22,18 @@
      <view class="h1">访客预约审核不通过</view>
      <view class="h2">您的来访申请已被驳回,如有疑问,可联系被访人</view>
    </view>
        <view class="head_wrap head_error" v-if="info.status == 4">
          <view class="h1">访客预约审核已取消</view>
          <view class="h2">您的来访申请已取消,请重新申请</view>
        </view>
        <view class="head_wrap head_success" v-if="info.status == 7">
          <view class="h1">访客预约拜访中</view>
          <view class="h2">你的访申请正在进行,如有疑问,可联系被访人</view>
        </view>
        <view class="head_wrap head_success" v-if="info.status == 8">
          <view class="h1">访客预约已签离</view>
          <view class="h2">您的来访申请已失效,请重新申请</view>
        </view>
        <view class="head_wrap head_error" v-if="info.status == 9">
          <view class="h1">访客预约已失效</view>
          <view class="h2">您的来访申请已失效,请重新申请</view>
@@ -107,6 +119,7 @@
    return true
  },
  onLoad(option) {
        uni.setStorageSync('ywinfo',{})
    this.detail = option.detail || ''
    this.getDetail(option.id)
    // visitorSubDetail({ id: option.id })
@@ -204,6 +217,10 @@
      color: #ffffff;
    }
  }
    .head_gray{
        background-color: #666666;
        color: #fff;
    }
  .head_error {
    background: #fdeded;
    .h1 {
h5/pages/driver/index.vue
@@ -45,7 +45,8 @@
                            <view class="sub">
                                <view class="time" v-if="item.arriveDate && item.contractNum">{{ item.arriveDate.slice(5) }}</view>
                                <view class="time" v-if="item.type != 4 && item.platformWmsJob && item.platformWmsJob.ioCreatedate">
                                    {{ item.platformWmsJob.ioCreatedate.slice(5, 19) }}</view>
                                    {{ item.platformWmsJob.ioCreatedate.slice(5, 19) }}
                                </view>
                                <view v-if="item.status == 0" class="sub_btn">确认任务</view>
                                <view v-if="item.status == 1" class="sub_btn">立即签到</view>
                                <view v-if="item.status == 2" class="sub_btn" @click.stop="handleQueue(item)">查看排队</view>
@@ -99,328 +100,331 @@
</template>
<script>
import {
    logoutPost,
    driverHomeData,
    app_url,
    getLastWaitJob
} from '@/api'
export default {
    data() {
        return {
            taskList: [],
            driverInfo: uni.getStorageSync('driverInfo'),
        }
    },
    onLoad() {
        const ywinfo = uni.getStorageSync('ywinfo') || {}
        if(ywinfo.ywid && ywinfo.type == 0){
            setTimeout(() => {
                uni.removeStorageSync('ywinfo')
            }, 500)
            const yw = ywinfo.yw
            if(yw == 7){
                this.jump('/pages/driver/reservedDetail?id=' + ywinfo.ywid)
            }else if(yw == 8){
                this.jump('/pages/driver/taskDetail?id=' + ywinfo.ywid)
            }else if(yw == 0) {
                getLastWaitJob({ uuid: ywinfo.ywid }).then(res => {
                    if(res.data && res.data.id){
                        this.taskClick(res.data)
                    }
                })
            }
        }
    },
    onShow() {
        this.initData()
    },
    methods: {
        jump(path) {
            this.$jump(path)
    import {
        logoutPost,
        driverHomeData,
        app_url,
        getLastWaitJob
    } from '@/api'
    export default {
        data() {
            return {
                taskList: [],
                driverInfo: uni.getStorageSync('driverInfo'),
            }
        },
        initData() {
            driverHomeData().then(res => {
                if (res.code == 200) {
                    uni.setStorageSync('driverGuide', {
                        bookingTips: res.data.bookingTips,
                        reservationMap: res.data.reservationMap,
                        signDistance: res.data.signDistance
        onLoad() {
            const ywinfo = uni.getStorageSync('ywinfo') || {}
            if (ywinfo.ywid && ywinfo.type == 0) {
                uni.setStorageSync('ywinfo',{})
                const yw = ywinfo.yw
                setTimeout(() => {
                    if (yw == 7) {
                        this.jump('/pages/driver/reservedDetail?id=' + ywinfo.ywid)
                    } else if (yw == 8) {
                        this.jump('/pages/driver/taskDetail?id=' + ywinfo.ywid)
                    } else if (yw == 0) {
                        getLastWaitJob({
                            uuid: ywinfo.ywid
                        }).then(res => {
                            if (res.data && res.data.id) {
                                this.taskClick(res.data)
                            }
                        })
                    }
                }, 100)
            }
        },
        onShow() {
            this.initData()
        },
        methods: {
            jump(path) {
                this.$jump(path)
            },
            initData() {
                driverHomeData().then(res => {
                    if (res.code == 200) {
                        uni.setStorageSync('driverGuide', {
                            bookingTips: res.data.bookingTips,
                            reservationMap: res.data.reservationMap,
                            signDistance: res.data.signDistance
                        })
                        this.taskList = res.data.platformJobList || []
                    }
                })
            },
            loginOut() {
                logoutPost({
                    isH5: 1
                }).then(res => {
                    this.$store.commit('empty')
                    setTimeout(() => {
                        window.location.href = app_url
                    }, 300)
                })
            },
            taskClick(item) {
                const status = item.status
                if (status == 0) {
                    uni.navigateTo({
                        url: '/pages/driver/taskConfirm?id=' + item.id
                    })
                    this.taskList = res.data.platformJobList || []
                }
            })
        },
        loginOut() {
            logoutPost({isH5: 1}).then(res => {
                this.$store.commit('empty')
                setTimeout(() => {
                    window.location.href = app_url
                }, 300)
            })
        },
        taskClick(item) {
            const status = item.status
            if (status == 0) {
                // else if(status == 2){
                //     uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id})
                // }
                else {
                    uni.navigateTo({
                        url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
                    })
                }
            },
            handleTask(item) {
                uni.navigateTo({
                    url: '/pages/driver/taskConfirm?id=' + item.id
                })
            }
            // else if(status == 2){
            //     uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id})
            // }
            else {
            },
            handleSign(item) {
                uni.navigateTo({
                    url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
                })
            }
        },
        handleTask(item) {
            uni.navigateTo({
                url: '/pages/driver/taskConfirm?id=' + item.id
            })
        },
        handleSign(item) {
            uni.navigateTo({
                url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`
            })
        },
        handleQueue(item) {
            uni.navigateTo({
                url: '/pages/driver/queueUp?jobId=' + item.id
            })
        },
            },
            handleQueue(item) {
                uni.navigateTo({
                    url: '/pages/driver/queueUp?jobId=' + item.id
                })
            },
        }
    }
}
</script>
<style lang="scss">
.title_wrap {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 24rpx;
    padding-top: 10rpx;
    .name {
        font-weight: 600;
        font-size: 34rpx;
        color: #222222;
    }
    .btn {
        width: 144rpx;
        height: 56rpx;
        border-radius: 36rpx;
        border: 1rpx solid $uni-color-primary;
        font-size: 26rpx;
        color: $uni-color-primary;
    .title_wrap {
        display: flex;
        justify-content: center;
        justify-content: space-between;
        align-items: center;
    }
}
        margin-bottom: 24rpx;
        padding-top: 10rpx;
.main_app {
    padding-top: 12rpx;
}
        .name {
            font-weight: 600;
            font-size: 34rpx;
            color: #222222;
        }
.banner_wrap {
    padding: 54rpx 44rpx;
    color: #fff;
    position: relative;
    width: 688rpx;
    height: 270rpx;
    margin-bottom: 28rpx;
    .h1 {
        font-weight: bold;
        line-height: 66rpx;
        font-size: 44rpx;
        margin-bottom: 14rpx;
        .btn {
            width: 144rpx;
            height: 56rpx;
            border-radius: 36rpx;
            border: 1rpx solid $uni-color-primary;
            font-size: 26rpx;
            color: $uni-color-primary;
            display: flex;
            justify-content: center;
            align-items: center;
        }
    }
    .h2 {
        font-weight: 600;
        font-size: 28rpx;
        width: 192rpx;
        color: $uni-color-primary;
        height: 48rpx;
        line-height: 48rpx;
        text-align: center;
        background: #ffffff;
        box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(39, 155, 170, 0.31);
        border-radius: 24rpx;
    .main_app {
        padding-top: 12rpx;
    }
    .banner {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        z-index: -1;
    }
}
.container1 {
    display: flex;
    flex-wrap: wrap;
    view {
        width: 336rpx;
    }
    .left {
        margin-right: 18rpx;
    }
    .img_wrap {
    .banner_wrap {
        padding: 54rpx 44rpx;
        color: #fff;
        position: relative;
        padding: 24rpx 0rpx 0 28rpx;
        border-radius: 8rpx;
        overflow: hidden;
        width: 688rpx;
        height: 270rpx;
        margin-bottom: 28rpx;
        .h1 {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            line-height: 48rpx;
            margin-bottom: 4rpx;
            font-weight: bold;
            line-height: 66rpx;
            font-size: 44rpx;
            margin-bottom: 14rpx;
        }
        .h2 {
            font-size: 22rpx;
            color: #7b9da1;
            line-height: 34rpx;
            font-weight: 600;
            font-size: 28rpx;
            width: 192rpx;
            color: $uni-color-primary;
            height: 48rpx;
            line-height: 48rpx;
            text-align: center;
            background: #ffffff;
            box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(39, 155, 170, 0.31);
            border-radius: 24rpx;
        }
        .img {
            width: 100%;
            height: 100%;
        .banner {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            z-index: -1;
        }
    }
    .img1 {
        width: 336rpx;
        height: 296rpx;
        margin-bottom: 16rpx;
    }
    .container1 {
        display: flex;
        flex-wrap: wrap;
    .img2 {
        width: 336rpx;
        height: 140rpx;
        margin-bottom: 16rpx;
    }
}
        view {
            width: 336rpx;
        }
.task_list {
    margin-bottom: 0rpx;
        .left {
            margin-right: 18rpx;
        }
    .task_swiper {
        padding: 12rpx 10rpx;
        height: 340rpx;
        width: 730rpx;
        margin-left: -20rpx;
        box-sizing: border-box;
    }
        .img_wrap {
            position: relative;
            padding: 24rpx 0rpx 0 28rpx;
            border-radius: 8rpx;
            overflow: hidden;
    .item {
        background: #ffffff;
        box-shadow: 0rpx 6rpx 24rpx 0rpx rgba(39, 155, 170, 0.32);
        border-radius: 16rpx;
        height: 260rpx;
        width: 98%;
        margin-left: 1%;
        .head {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
            padding: 0rpx 30rpx;
            height: 92rpx;
            .name {
            .h1 {
                font-weight: 600;
                font-size: 36rpx;
                font-size: 32rpx;
                color: #222222;
                line-height: 48rpx;
                margin-bottom: 4rpx;
            }
            .status {
                color: $uni-color-primary;
                font-weight: 600;
                text-align: right;
            .h2 {
                font-size: 22rpx;
                color: #7b9da1;
                line-height: 34rpx;
            }
                .time {
                    font-size: 24rpx;
                    font-weight: 360;
                }
            .img {
                width: 100%;
                height: 100%;
                position: absolute;
                top: 0;
                left: 0;
                z-index: -1;
            }
        }
        .content {
            height: 180rpx;
        .img1 {
            width: 336rpx;
            height: 296rpx;
            margin-bottom: 16rpx;
        }
            .info {
        .img2 {
            width: 336rpx;
            height: 140rpx;
            margin-bottom: 16rpx;
        }
    }
    .task_list {
        margin-bottom: 0rpx;
        .task_swiper {
            padding: 12rpx 10rpx;
            height: 340rpx;
            width: 730rpx;
            margin-left: -20rpx;
            box-sizing: border-box;
        }
        .item {
            background: #ffffff;
            box-shadow: 0rpx 6rpx 24rpx 0rpx rgba(39, 155, 170, 0.32);
            border-radius: 16rpx;
            height: 260rpx;
            width: 98%;
            margin-left: 1%;
            .head {
                display: flex;
                padding: 24rpx 30rpx;
                justify-content: space-between;
                align-items: center;
                background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
                padding: 0rpx 30rpx;
                height: 92rpx;
                .plate {
                    flex: 1;
                    display: flex;
                    align-items: center;
                .name {
                    font-weight: 600;
                    font-size: 36rpx;
                    color: #222222;
                }
                    .icon {
                        width: 26rpx;
                        height: 26rpx;
                        margin-right: 10rpx;
                .status {
                    color: $uni-color-primary;
                    font-weight: 600;
                    text-align: right;
                    .time {
                        font-size: 24rpx;
                        font-weight: 360;
                    }
                }
            }
            .sub {
                display: flex;
                justify-content: space-between;
                align-items: center;
                height: 68rpx;
                padding: 0 30rpx 0;
            .content {
                height: 180rpx;
                .time {
                    font-size: 26rpx;
                    color: #999999;
                .info {
                    display: flex;
                    padding: 24rpx 30rpx;
                    .plate {
                        flex: 1;
                        display: flex;
                        align-items: center;
                        .icon {
                            width: 26rpx;
                            height: 26rpx;
                            margin-right: 10rpx;
                        }
                    }
                }
                .sub_btn {
                .sub {
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    height: 68rpx;
                    line-height: 68rpx;
                    padding: 0 34rpx;
                    color: #ffffff;
                    background: $uni-color-primary;
                    box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(39, 155, 170, 0.4);
                    border-radius: 40rpx;
                    padding: 0 30rpx 0;
                    .time {
                        font-size: 26rpx;
                        color: #999999;
                    }
                    .sub_btn {
                        height: 68rpx;
                        line-height: 68rpx;
                        padding: 0 34rpx;
                        color: #ffffff;
                        background: $uni-color-primary;
                        box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(39, 155, 170, 0.4);
                        border-radius: 40rpx;
                    }
                }
            }
        }
    }
}
.copyright {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-top: 44rpx;
    font-size: 24rpx;
    color: #666666;
    .copyright {
        display: flex;
        align-items: center;
        justify-content: center;
        margin-top: 44rpx;
        font-size: 24rpx;
        color: #666666;
    image {
        width: 40rpx;
        height: 40rpx;
        image {
            width: 40rpx;
            height: 40rpx;
        }
    }
}
</style>
h5/pages/driver/queueUpRecord.vue
@@ -18,7 +18,7 @@
                        <view class="address">{{ item.platformName || '等待分配月台' }}</view>
                        <view class="time" v-if="item.status == 5">
                            <u-icon class="mr6" name="clock" color="#4d98a8"></u-icon>
                            <text>{{item.callDateTemp}}</text>
                            <text>{{item.startDateTemp}}</text>
                        </view>
                    </view>
                </view>
h5/pages/driver/reservedDetail.vue
@@ -132,6 +132,7 @@
    }
  },
    onLoad(option) {
        uni.setStorageSync('ywinfo',{})
        this.getDetail(option.id)
    },
  methods: {
h5/pages/driver/taskDetail.vue
@@ -192,7 +192,8 @@
                showDetail: false,
            }
        },
        onLoad(option) {
        onLoad(option) {
            uni.setStorageSync('ywinfo',{})
            this.jobId = option.id
            if (option.status && option.status == '1') {
                // wx.config({
h5/pages/index/index.vue
@@ -43,15 +43,15 @@
        onLoad() {
            const ywinfo = uni.getStorageSync('ywinfo') || {}
            if (ywinfo.ywid && ywinfo.type == 1) {
                setTimeout(() => {
                    uni.removeStorageSync('ywinfo')
                }, 500)
                uni.setStorageSync('ywinfo',{})
                const yw = ywinfo.yw
                if (yw == 2) {
                    uni.navigateTo({
                        url: '/pages/appointmentDetails/appointmentDetails?id=' + ywinfo.ywid
                    })
                }
                setTimeout(() => {
                    if (yw == 2) {
                        uni.navigateTo({
                            url: '/pages/appointmentDetails/appointmentDetails?id=' + ywinfo.ywid
                        })
                    }
                }, 100)
            }
        },
        methods: {
h5/pages/staff/index.vue
@@ -130,23 +130,23 @@
        onLoad() {
            const ywinfo = uni.getStorageSync('ywinfo') || {}
            if (ywinfo.ywid && ywinfo.type == 2) {
                setTimeout(() => {
                    uni.removeStorageSync('ywinfo')
                }, 500)
                uni.setStorageSync('ywinfo',{})
                const yw = ywinfo.yw
                if (yw == 1 || yw == 6) {
                    this.jump('/pages/staff/meetingDetail?id=' + ywinfo.ywid)
                } else if (yw == 2) {
                    this.jump('/pages/staff/task/visitorApprove?id=' + ywinfo.ywid)
                } else if (yw == 3) {
                    this.jump('/pages/staff/task/visitorReport?id=' + ywinfo.ywid)
                } else if (yw == 4) {
                    this.jump('/pages/staff/task/vDangetAppr?id=' + ywinfo.ywid)
                } else if (yw == 7) {
                    this.jump('/pages/staff/task/driver?id=' + ywinfo.ywid)
                } else if (yw == 5) {
                    this.jump('/pages/staff/vehicle/index')
                }
                setTimeout(() => {
                    if (yw == 1 || yw == 6) {
                        this.jump('/pages/staff/meetingDetail?id=' + ywinfo.ywid)
                    } else if (yw == 2) {
                        this.jump('/pages/staff/task/visitorApprove?id=' + ywinfo.ywid)
                    } else if (yw == 3) {
                        this.jump('/pages/staff/task/visitorReport?id=' + ywinfo.ywid)
                    } else if (yw == 4) {
                        this.jump('/pages/staff/task/vDangetAppr?id=' + ywinfo.ywid)
                    } else if (yw == 7) {
                        this.jump('/pages/staff/task/driver?id=' + ywinfo.ywid)
                    } else if (yw == 5) {
                        this.jump('/pages/staff/vehicle/index')
                    }
                }, 100)
            }
        },
        onShow() {
@@ -172,11 +172,11 @@
            loginOut() {
                logoutPost({
                    isH5: 1
                }).then(res => {
                    this.$store.commit('empty')
                    setTimeout(() => {
                        window.location.href = app_url
                    }, 300)
                }).then(res => {
                    this.$store.commit('empty')
                    setTimeout(() => {
                        window.location.href = app_url
                    }, 300)
                })
            },
            getTaskInfo() {
h5/pages/staff/meetingCalendar.vue
@@ -229,18 +229,15 @@
  },
  onLoad() {
    this.currentDate = dayja().format('YYYY-MM-DD')
    this.initData()
    this.getRoomList()
        this.tabClick('0')
        this.getRoomList()
  },
  onShow() {
    // this.tabClick('0')
        this.initData()
        this.tabClick(this.activeTab)
  },
  onReachBottom() {
    const { activeTab, total, myMeetingList, recordList } = this
        console.log(total);
        console.log(recordList);
    const { activeTab, total, myMeetingList, recordList } = this
    if (activeTab == '0') {
            if(total <= myMeetingList.length) return this.showToast('暂无更多数据')
      this.myPage = this.myPage + 1
h5/pages/staff/meetingDetail.vue
@@ -75,13 +75,13 @@
      </view>
    </view>
    <view class="empty empty2"></view>
    <view class="main_footer" v-if="detail.meetingStatus == '1'">
    <view class="main_footer" v-if="detail.meetingStatus == '1' && (detail.isAdmin == 1 || detail.showHandle)">
      <view class="btn" @click="openCancel">撤回</view>
      <view class="btn edit" @click="handleEdit">修改</view>
      <view class="btn agree" @click="handleStart">开始会议</view>
    </view>
    <view class="main_footer" v-if="detail.meetingStatus == '2' && detail.isAdmin == 1">
      <view class="btn agree" @click="openClose">结束</view>
      <view class="btn" @click="openClose">结束会议</view>
    </view>
    <!-- æ’¤å›ž -->
    <u-popup
@@ -147,6 +147,7 @@
    }
  },
  onLoad(option) {
        uni.setStorageSync('ywinfo',{})
    this.id = option.id
    this.getDetail()
  },
@@ -155,6 +156,10 @@
      const { id } = this
      meetingDetail({ id }).then(res => {
        this.detail = res.data
                const userInfo = uni.getStorageSync('userInfo') || {}
                // const index = this.detail.userResponseList.findIndex(i => i.id == userInfo.id)
                this.$set(this.detail, 'showHandle', this.detail.bookingUserId == userInfo.id)
      })
    },
    openCancel() {
h5/pages/staff/meetingSel.vue
@@ -150,7 +150,8 @@
                } = this
                userPagePost({
                    model: {
                        ...param
                        ...param,
                        workStatus: 0
                    },
                    ...pagination,
h5/pages/staff/snapshot.vue
@@ -56,9 +56,14 @@
                    </view>
                    <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in submitFileList" :key="i">
                        <u-icon class="close" size="20" name="close-circle-fill" color="red" @click="fileDel(i)"></u-icon>
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                        <video v-if="item.type == 1"
                            :src="item.fileurlFull" :controls="false" :show-center-play-btn="false"></video>
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                        <!--                         <video v-if="item.type == 1"
                            :src="item.fileurlFull" :controls="false" :show-center-play-btn="false"></video> -->
                        <view v-if="item.type == 1" class="video_wrap">
                            <video :src="item.fileurlFull" :initial-time="0.01" :show-center-play-btn="false" :controls="false"
                                class="video" :enable-progress-gesture="false" muted />
                            <image src="@/static/play.png" class="play" mode=""></image>
                        </view>
                    </view>
                </view>
            </view>
@@ -252,7 +257,9 @@
                this.isShowTime = false
            },
            initConfig() {
                deptListPost({queryHiddenDanger: 1}).then(res => {
                deptListPost({
                    queryHiddenDanger: 1
                }).then(res => {
                    this.deptList = [res.data]
                })
                DangerConfigType({
@@ -423,7 +430,9 @@
                display: flex;
                flex-wrap: wrap;
            }
            textarea{
                width: 100%;
            }
            .adduser_list_item_ipt1_upload {
                margin-top: 24rpx;
                width: 156rpx;
@@ -438,9 +447,11 @@
                align-items: center;
                justify-content: center;
                position: relative;
                &:nth-of-type(4n){
                    margin-right: 0;
                &:nth-of-type(4n) {
                    margin-right: 0;
                }
                .close {
                    position: absolute;
                    right: -20rpx;
@@ -448,6 +459,23 @@
                    z-index: 9999;
                }
                .video_wrap {
                    position: relative;
                    border: 1px solid;
                    width: 156rpx;
                    height: 156rpx;
                    border-radius: 4rpx;
                    .play {
                        width: 60rpx !important;
                        height: 60rpx !important;
                        position: absolute;
                        top: 50%;
                        left: 50%;
                        transform: translate(-50%, -50%);
                    }
                }
                image {
                    width: 100%;
                    height: 100%;
h5/pages/staff/task/driver.vue
@@ -156,6 +156,7 @@
    }
  },
    onLoad(option) {
        uni.setStorageSync('ywinfo',{})
        this.type = option.objType
        this.infoStatus = option.info
        this.getDetail(option.id)
h5/pages/staff/task/index.vue
@@ -360,7 +360,7 @@
      }
      if (objType === 2) {
        uni.navigateTo({
          url: `/pages/staff/vehicle/sendACarDetail?id=${objId}&appr=1&info=${info}`
          url: `/pages/staff/vehicle/sendACarDetail?id=${objId}&info=${info}`
        })
      } else if (objType === 1) {
        uni.navigateTo({
h5/pages/staff/task/vDangetAppr.vue
@@ -13,8 +13,8 @@
                    <image v-if="item.type == 0" :src="item.fileurlFull" @click="priviewImage(item.fileurlFull)" mode="widthFix"
                        class="img" />
                    <view v-if="item.type == 1" @click="videoClick(item, i)" class="video_wrap">
                        <video :id="'id' + i" :show-center-play-btn="false" :src="item.fileurlFull" muted class="video"
                            :controls="false" />
                        <video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
                            class="video" :enable-progress-gesture="false" autoplay muted />
                        <image src="@/static/play.png" class="play" mode=""></image>
                    </view>
                </view>
@@ -44,7 +44,13 @@
                    <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.dealBeforeFileList" :key="i">
                        <image v-if="item.type == 0" @click="priviewImage(item.fileurlFull)" :src="item.fileurlFull"
                            mode="widthFix"></image>
                        <video v-if="item.type == 1" @click="videoClick(item, i)" :src="item.fileurlFull" :controls="false"></video>
                        <!--                         <video v-if="item.type == 1" @click="videoClick(item, i)" :src="item.fileurlFull" :show-center-play-btn="false" :controls="false" class="video"
                        :enable-progress-gesture="false" autoplay muted></video> -->
                        <view v-if="item.type == 1" @click="videoClick(item, i)" class="video_wrap">
                            <video :src="item.fileurlFull" :initial-time="0.01" :show-center-play-btn="false" :controls="false"
                                class="video" :enable-progress-gesture="false" muted />
                            <image src="@/static/play.png" class="play" mode=""></image>
                        </view>
                    </view>
                </view>
            </view>
@@ -54,7 +60,13 @@
                    <view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.dealAfterFileList" :key="i">
                        <image v-if="item.type == 0" @click="priviewImage(item.fileurlFull)" :src="item.fileurlFull"
                            mode="widthFix"></image>
                        <video v-if="item.type == 1" @click="videoClick(item, i)" :src="item.fileurlFull" :controls="false"></video>
                        <!--                         <video v-if="item.type == 1" @click="videoClick(item, i)" :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false" class="video"
                        :enable-progress-gesture="false" autoplay muted></video> -->
                        <view v-if="item.type == 1" @click="videoClick(item, i)" class="video_wrap">
                            <video :src="item.fileurlFull" :initial-time="0.01" :show-center-play-btn="false" :controls="false"
                                class="video" :enable-progress-gesture="false" muted />
                            <image src="@/static/play.png" class="play" mode=""></image>
                        </view>
                    </view>
                </view>
            </view>
@@ -137,7 +149,13 @@
                            @click="fileDel('dealBeforeFileList', i)"></u-icon>
                        <image v-if="item.type == 0" @click="priviewImage(item.fileurlFull)" :src="item.fileurlFull"
                            mode="widthFix"></image>
                        <video v-if="item.type == 1" @click="videoClick(item, i)" :src="item.fileurlFull" :controls="false"></video>
                        <!-- <video v-if="item.type == 1" @click="videoClick(item, i)" :src="item.fileurlFull" show-center-play-btn="false" :controls="false" class="video"
                        :enable-progress-gesture="false" autoplay muted></video> -->
                        <view v-if="item.type == 1" @click="videoClick(item, i)" class="video_wrap">
                            <video :src="item.fileurlFull" :initial-time="0.01" :show-center-play-btn="false" :controls="false"
                                class="video" :enable-progress-gesture="false" muted />
                            <image src="@/static/play.png" class="play" mode=""></image>
                        </view>
                    </view>
                </view>
                <view class="label">退回说明</view>
@@ -177,7 +195,13 @@
                        <u-icon class="close" size="20" name="close-circle-fill" color="red"
                            @click="fileDel('dealBeforeFileList', i)"></u-icon>
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                        <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
                        <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :show-center-play-btn="false" :controls="false" class="video"
                        :enable-progress-gesture="false" muted></video> -->
                        <view v-if="item.type == 1" class="video_wrap">
                            <video :src="item.fileurlFull" :initial-time="0.01" :show-center-play-btn="false" :controls="false"
                                class="video" :enable-progress-gesture="false" muted />
                            <image src="@/static/play.png" class="play" mode=""></image>
                        </view>
                    </view>
                </view>
                <view class="label">
@@ -193,7 +217,12 @@
                        <u-icon class="close" size="20" name="close-circle-fill" color="red"
                            @click="fileDel('dealAfterFileList', i)"></u-icon>
                        <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
                        <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video>
                        <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :show-center-play-btn="false" :controls="false"></video> -->
                        <view v-if="item.type == 1" class="video_wrap">
                            <video :src="item.fileurlFull" :initial-time="0.01" :show-center-play-btn="false" :controls="false"
                                class="video" :enable-progress-gesture="false" muted />
                            <image src="@/static/play.png" class="play" mode=""></image>
                        </view>
                    </view>
                </view>
                <view class="label">整改说明</view>
@@ -266,9 +295,9 @@
            @cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
        <!--  -->
        <view v-if="videoPlay" class="video_app" >
            <video controls autoplay muted x5-video-player-type="h5"
                x5-video-player-fullscreen="true" id="myvideo" :src="videoUrl" @fullscreenchange="screenChange"></video>
        <view v-if="videoPlay" class="video_app">
            <video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
                :src="videoUrl" @fullscreenchange="screenChange"></video>
            <view class="bg" @click="closeVideo"></view>
        </view>
    </view>
@@ -348,9 +377,9 @@
                videoUrl: ''
            };
        },
        onLoad(op) {
        onLoad(op) {
            uni.setStorageSync('ywinfo',{})
            this.id = op.id;
            this.type = op.objType;
            this.getDetail();
        },
        methods: {
@@ -365,10 +394,10 @@
                    //退出全屏
                    this.videoPlay = false; // éšè—æ’­æ”¾ç›’子
                }
            },
            closeVideo() {
                this.videoPlay = false
                this.videoContext = null
            },
            closeVideo() {
                this.videoPlay = false
                this.videoContext = null
            },
            videoClick(item, i) {
                this.videoPlay = true;
@@ -1068,22 +1097,6 @@
                    }
                }
                .video_wrap {
                    position: relative;
                    border: 1px solid;
                    width: 156rpx;
                    height: 156rpx;
                    border-radius: 4rpx;
                    .play {
                        width: 60rpx;
                        height: 60rpx;
                        position: absolute;
                        top: 50%;
                        left: 50%;
                        transform: translate(-50%, -50%);
                    }
                }
                .img {
                    width: 100%;
@@ -1263,7 +1276,8 @@
                    position: absolute;
                    right: -20rpx;
                    top: -20rpx;
                    z-index: 9999;
                    z-index: 999999999999;
                    color: #fff;
                }
                image {
@@ -1285,7 +1299,22 @@
            margin: 0 -30rpx;
        }
    }
    .video_wrap {
            position: relative;
            border: 1px solid;
            width: 156rpx;
            height: 156rpx;
            border-radius: 4rpx;
            .play {
                width: 60rpx !important;
                height: 60rpx !important;
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
            }
        }
    .sel_upload_wrap {
        width: 100%;
        border-top: 1px solid #333333;
@@ -1384,22 +1413,24 @@
        }
    }
    .video_app {
    .video_app {
        overflow: hidden;
        position: fixed;
        left: 0;
        top: 0;
        width: 100vw;
        height: 100vh;
        display: flex;
        height: 100vh;
        display: flex;
        align-items: center;
        .bg{
            background-color: rgba(0,0,0,.6);
            position: absolute;
            width: 100%;
            height: 100%;
            z-index: -1;
        z-index: 9990;
        .bg {
            background-color: rgba(0, 0, 0, .6);
            position: absolute;
            width: 100%;
            height: 100%;
            z-index: -1;
        }
        video {
            width: 100%;
            height: 42vh;
h5/pages/staff/task/visitorApprove.vue
@@ -1,12 +1,12 @@
<template>
    <view class="main_app">
        <view class="status_wrap">
            <view class="name">{{ info.name }}提交的{{ cateList[type].name }}</view>
            <view class="name">{{ info.name }}提交的访客申请</view>
            <view class="desc" :class="{
          gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4',
        }">{{ infoStatus }}</view>
        }">{{ statusMap[info.businessStatus] }}</view>
            <view v-if="info.businessStatus == '0' || info.businessStatus == '1'" class="status">{{
        statusMap[info.businessStatus]
        info.info
      }}</view>
            <image v-if="info.businessStatus == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img">
            </image>
@@ -170,10 +170,9 @@
                }
            }
        },
        onLoad(op) {
        onLoad(op) {
            uni.setStorageSync('ywinfo',{})
            this.id = op.id
            this.type = op.objType
            this.infoStatus = op.info
            this.getDetail()
        },
        methods: {
h5/pages/staff/task/visitorReport.vue
@@ -1,13 +1,13 @@
<template>
  <view class="main_app">
    <view class="status_wrap">
      <view class="name">{{ info.createMemberName }}提交的{{ cateList[type].name }}</view>
      <view class="name">{{ info.createMemberName }}提交的访客报备</view>
      <view
        class="desc"
        :class="{
          gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4',
        }"
        >{{ infoStatus }}</view
        >{{ info.info }}</view
      >
      <view v-if="info.businessStatus == '0' || info.businessStatus == '1'" class="status">{{
        statusMap[info.businessStatus]
@@ -150,9 +150,8 @@
    }
  },
  onLoad(op) {
        uni.setStorageSync('ywinfo',{})
    this.id = op.id
    this.type = op.objType
    this.infoStatus = op.info
    this.getDetail()
  },
  methods: {
h5/pages/staff/vehicle/index.vue
@@ -50,7 +50,10 @@
    return {
      param: {}
    }
  }
  },
    onLoad() {
        uni.setStorageSync('ywinfo',{})
    }
}
</script>
h5/pages/staff/vehicle/sendACarDetail.vue
@@ -161,7 +161,6 @@
                userInfo: uni.getStorageSync('userInfo') || {},
                id: '',
                appr: '',
                infoStatus: '',
                info: {},
                param: {
                    status: ''
@@ -179,8 +178,7 @@
        },
        onLoad(option) {
            this.id = option.id
            this.appr = option.appr || ''
            this.infoStatus = option.info
            this.appr = 1
            this.getDetail()
        },
        methods: {
h5/pages/userinfo/userinfo.vue
@@ -258,12 +258,15 @@
                        isFace: 0
                    },
                    success: (uploadFileRes) => {
                        let res = JSON.parse(uploadFileRes.data)
                        let res = JSON.parse(uploadFileRes.data)
                        if(res.code !== 200){
                            return this.showToast(res.message)
                        }
                        this.visitorData.faceImg = res.data.halfPath
                        this.visitorData.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
                    },
                    fail(err) {
                        alert('失败')
                    fail: (err) => {
                        // this.showToast(err)
                    },
                    complete() {
                        uni.hideLoading();
h5/pages/waybill/home.vue
@@ -13,6 +13,7 @@
                    v-model="form.code"
                    placeholder="请输入验证码"
                      placeholder-class="placeholder9"
                        :maxlength="6"
                    type="number"
                  />
                  <text class="captcha" v-if="countDown == 0" @click="initCaptcha"
h5/pages/waybill/list.vue
@@ -98,9 +98,9 @@
            </view>
        </u-popup>
        <!--  -->
        <u-datetime-picker :show="showStarttime" v-model="form.starttime" mode="date" @confirm="confirmStart"
        <u-datetime-picker :show="showStarttime" v-model="defaultDate" mode="date" @confirm="confirmStart"
            @cancel="showStarttime = false"></u-datetime-picker>
        <u-datetime-picker :show="showEndtime" v-model="form.endtime" mode="date" @confirm="confirmEnd"
        <u-datetime-picker :show="showEndtime" v-model="defaultDate2" mode="date" :minDate="defaultDate" @confirm="confirmEnd"
            @cancel="showEndtime = false"></u-datetime-picker>
        <u-picker :show="showPri" :columns="provinceList" @cancel="showPri = false" @confirm="confirmPro"></u-picker>
@@ -122,7 +122,9 @@
                showModal: false,
                showStarttime: false,
                showEndtime: false,
                showEndtime: false,
                defaultDate: Number(new Date()),
                defaultDate2: Number(new Date()),
                showPri: false,
                form: {},
                provinceList: [
@@ -171,7 +173,9 @@
            confirmStart(e) {
                this.$nextTick(() => {
                    this.$set(this.form, 'ncCreateDateTimeStart', dayjs(e.value).format('YYYY-MM-DD'))
                })
                })
                this.defaultDate2 = Number(new Date())
                this.$set(this.form, 'ncCreateDateTimeEnd', '')
                this.showStarttime = false
            },
            confirmEnd(e) {
screen/src/views/TaskEfficiency.vue
@@ -129,8 +129,10 @@
            </div>
          </div>
          <div class="center_box_bg">
            <img class="point_icon" src="@/assets/ani/apngb-animated.png" alt="">
            <div class="work_modal" @click="showWorkModal = false" v-if="showWorkModal">
            <img v-if="showWorkModal" class="point_icon" :style="{ left: workModalParam.left + 'px', top: workModalParam.top + 'px' }"
              src="@/assets/ani/apngb-animated.png" alt="">
            <div class="work_modal" :style="{ left: workModalParam.left2 + 'px', top: workModalParam.top + 'px' }"
              @click="showWorkModal = false" v-if="showWorkModal">
              <img class="bg" src="@/assets/images/LogisticsCenter/bg_yuetai@2x.png" alt="">
              <div class="head">
                <div class="left">
@@ -160,13 +162,12 @@
                <div class="val">{{ workModalParam.finishTimeStr }}</div>
              </div>
            </div>
            <div class="modal_bg" v-if="showWorkModal" @click="showWorkModal = false"></div>
          </div>
          <div class="center_box_two">
            <div v-if="data4.videoIndexCodes && data4.videoIndexCodes.length > 0" class="videos">
              <div class="video" v-for="indexCode in data4.videoIndexCodes">
                <Video v-if="indexCode" :href="data4.videoPluginUrl" :indexCode="indexCode" />
              </div>
            </div>
            <!-- <div v-if="data4.videoIndexCodes && data4.videoIndexCodes.length > 0" class="videos">
              <Videos :href="data4.videoPluginUrl" :indexCodes="data4.videoIndexCodes" />
            </div> -->
            <div class="list">
              <div class="line header">
                <div>月台名称</div>
@@ -306,7 +307,7 @@
dayjs.extend(duration)
import 'swiper/css/swiper.min.css'
import Swiper from 'swiper'
import Video from './videoUrl/Video.vue'
import Videos from './videoUrl/Videos.vue'
import {
  cnplatformGroupFinish,
  cnplatformDuration,
@@ -569,7 +570,6 @@
  temp.push({ name: '已叫号', value: data4.value?.calledNum || 0, rate: data4.value?.signedNum ? (data4.value.calledNum / data4.value?.signedNum * 100).toFixed(1) : 0 })
  temp.push({ name: '已作业', value: data4.value?.workedNum || 0, rate: data4.value?.signedNum ? (data4.value.workedNum / data4.value?.signedNum * 100).toFixed(1) : 0 })
  temp.push({ name: '已完成', value: data4.value?.doneNum || 0, rate: data4.value?.signedNum ? (data4.value.doneNum / data4.value?.signedNum * 100).toFixed(1) : 0 })
  console.log('temp', temp)
  const option = {
    color: colors,
@@ -751,6 +751,8 @@
      i.finishTime = dayjs(i.finishTime).format('HH:mm')
      return i
    })
    console.log('dataList5', dataList5.value)
  })
}
@@ -776,27 +778,26 @@
const showWorkModal = ref(false)
const workModalParam = ref({})
// point_icon
const pointList = ref([
  { left: 230, top: 190 },
  { left: 265, top: 180 },
  { left: 300, top: 170 },
  { left: 335, top: 160 },
  { left: 370, top: 150 },
const pointList = [
  { left: 230, top: 190, left2: 290, top2: 190, name: '出库月台3' },
  { left: 265, top: 180, left2: 325, top2: 190, name: '出库月台2' },
  { left: 300, top: 170, left2: 360, top2: 190, name: '出库月台1' },
  { left: 335, top: 160, left2: 390, top2: 190, name: '整托盘出库2' },
  { left: 370, top: 150, left2: 430, top2: 190, name: '整托盘出库1' },
  { left: 530, top: 50  },
  { left: 550, top: 65 },
  { left: 570, top: 75 },
  { left: 590, top: 75 },
  { left: 600, top: 80 },
  { left: 850, top: 60 },
  { left: 530, top: 50, left2: 590, top2: 190, name: '入库月台2' },
  { left: 550, top: 65, left2: 610, top2: 190, name: '入库月台1' },
  { left: 570, top: 75, left2: 630, top2: 190, name: '入库月台3' },
  { left: 590, top: 75, left2: 650, top2: 190, name: '1095整托盘入库' },
  { left: 600, top: 80, left2: 660, top2: 190, name: '1099整托盘入库' },
  { left: 850, top: 60, left2: 520, top2: 190, name: '市公司月台' },
])
]
const platformClick = (val) => {
  workModalParam.value = val
  console.log(val)
  showWorkModal.value = !showWorkModal.value
  const index = pointList.findIndex(i => i.name == val.platformName)
  workModalParam.value = { ...val, ...pointList[index], index: pointList }
  showWorkModal.value = true
}
const loopFn2 = () => {
  var newSwiper1 = new Swiper('.one-swiper', {
@@ -1098,6 +1099,7 @@
      justify-content: center;
      align-items: center;
      position: relative;
      .point_icon {
        position: absolute;
        left: 850px;
@@ -1121,8 +1123,10 @@
      .work_modal {
        width: 314px;
        height: 180px;
        position: relative;
        position: absolute;
        padding: 22px 20px;
        left: 850px;
        top: 60px;
        .head {
          display: flex;
@@ -1181,14 +1185,22 @@
        }
      }
      .modal_bg{
        position: fixed;
        left: 0;
        top: 0;
        width: 100vw;
        height: 100vh;
        /* background-color: rgba(0,0,0,.1); */
      }
    }
    .center_box_two {
      width: 100%;
      .videos {
        width: 100%;
        height: 150px;
        display: flex;
        margin-bottom: 15px;
@@ -1209,7 +1221,8 @@
        height: 210px;
        overflow-y: auto;
        background: rgba(0, 86, 255, 0.05);
      backdrop-filter: blur(5px);
        backdrop-filter: blur(5px);
        .two-swiper {
          height: 180px;
          overflow: hidden;
screen/src/views/videoUrl/Videos.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,236 @@
<template>
  <div class="video_app">
    <div class="player_bg" ref="videoRef" style="width: 100%;height: 100%;" id="playWnd"> </div>
  </div>
  <!-- <img style="width: 34px;margin-bottom: 16px;" src="../../assets/images/SecurityControl/ic_unable@2x.png" > -->
</template>
<script setup>
import { defineProps, ref, onMounted, onUnmounted, watch } from 'vue'
const props = defineProps({
  indexCodes: Array,
  href: String,
})
const templateA = `
  <div style="width:100%;height: 100%;display: flex;justify-content: center;align-items: center;flex-direction: column;">
    <div style="font-weight: 500;font-size: 15px;color: #CCCCCC;margin-bottom: 4px;">无法播放监控画面?</div>
    <div style="font-weight: 500;font-size: 15px;color: #CCCCCC;margin-bottom: 20px;">点击下载并安装视屏播放插件</div>
    <a href="${props.href}" target="_blank" style="font-weight: 500;font-size: 15px;color: #01D9FE;">点击下载</a>
  </div>
`
const width = ref(0)
const height = ref(0)
const videoRef = ref(null)
onMounted(() => {
  const rect = videoRef.value.getBoundingClientRect()
  width.value = rect.width
  height.value = rect.height
  console.log('rect', rect);
  initPlugin()
  window.addEventListener('resize', function () { // æ‰§è¡Œ
    if (oWebControl.value) {
      const rect = videoRef.value.getBoundingClientRect()
      width.value = rect.width
      height.value = rect.height
      oWebControl.value.JS_Resize($('#playWnd').width(), $('#playWnd').height())
    }
  })
})
onUnmounted(() => {
  destroyed()
})
const oWebControl = ref(null)
const initCount = ref()
const pubKey = ref('')
watch(
  () => props.indexCodes,
  (newValue, oldValue) => {
    console.log('父组件传值变化:', newValue)
    videoPlayFor()
  }
)
const initPlugin = () => {
  oWebControl.value = new WebControl({
    szPluginContainer: "playWnd",                       // æŒ‡å®šå®¹å™¨id
    iServicePortStart: 15900,                           // æŒ‡å®šèµ·æ­¢ç«¯å£å·ï¼Œå»ºè®®ä½¿ç”¨è¯¥å€¼
    iServicePortEnd: 15900,
    szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",   // ç”¨äºŽIE10使用ActiveX的clsid
    cbConnectSuccess: function () {
      // åˆ›å»ºWebControl实例成功
      console.log('1--创建WebControl实例成功')
      oWebControl.value.JS_StartService("window", {         // WebControl实例创建成功后需要启动服务
        dllPath: "./VideoPluginConnect.dll"         // å€¼"./VideoPluginConnect.dll"写死
      }).then(function () {
        oWebControl.value.JS_SetWindowControlCallback({   // è®¾ç½®æ¶ˆæ¯å›žè°ƒ
          cbIntegrationCallBack: cbIntegrationCallBack
        })// å¯åŠ¨æ’ä»¶æœåŠ¡æˆåŠŸ
        console.log('----',width.value, height.value);
        oWebControl.value.JS_CreateWnd("playWnd", width.value, height.value).then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定,boxWidth, boxHeight容器
          // oWebControl.value.JS_CreateWnd("playWnd").then(function () { //JS_CreateWnd创建视频播放窗口,宽高可设定,boxWidth, boxHeight容器
          init()  // åˆ›å»ºæ’­æ”¾å®žä¾‹æˆåŠŸåŽåˆå§‹åŒ–
        })
      }, function () { // å¯åŠ¨æ’ä»¶æœåŠ¡å¤±è´¥
      })
    },
    cbConnectError: function () { // åˆ›å»ºWebControl实例失败
      console.log('创建WebControl实例失败')
      oWebControl.value = null
      $("#playWnd").html("插件未启动,正在尝试启动,请稍候...")
      WebControl.JS_WakeUp("VideoWebPlugin://") // ç¨‹åºæœªå¯åŠ¨æ—¶æ‰§è¡Œerror函数,采用wakeup来启动程序
      initCount.value++
      if (initCount.value < 3) {
        setTimeout(function () {
          initPlugin()
        }, 3000)
      } else {
        $("#playWnd").html(templateA)
      }
    },
    cbConnectClose: function (bNormalClose) {
      // å¼‚常断开:bNormalClose = false
      // JS_Disconnect正常断开:bNormalClose = true
      console.log('异常断开:bNormalClose')
      oWebControl.value = null
      $("#playWnd").html("插件未启动,正在尝试启动,请稍候...")
      WebControl.JS_WakeUp("VideoWebPlugin://")
      initCount.value++
      if (initCount.value < 3) {
        setTimeout(function () {
          initPlugin()
        }, 3000)
      } else {
        $("#playWnd").html(templateA)
      }
    }
  })
}
// åˆå§‹åŒ–
const init = () => {
  getPubKey(function () {
    ////////////////////////////////// è¯·è‡ªè¡Œä¿®æ”¹ä»¥ä¸‹å˜é‡å€¼   ////////////////////////////////////
    let appkey = "23154099"                           //综合安防管理平台提供的appkey,必填
    // let secret = '88wFsg3xfn7o8QMsWEO2'   //综合安防管理平台提供的secret,必填
    let secret = setEncrypt("88wFsg3xfn7o8QMsWEO2")   //综合安防管理平台提供的secret,必填
    let ip = "10.50.250.253"                           //综合安防管理平台IP地址,必填
    let playMode = 0                                  //初始播放模式:0-预览(实时流),1-回放(视频)
    let port = 443                                    //综合安防管理平台端口,若启用HTTPS协议,默认443
    let snapDir = "D:\\SnapDir"                       //抓图存储路径
    let videoDir = "D:\\VideoDir"                     //紧急录像或录像剪辑存储路径
    let layout = "1x4"                                //playMode指定模式的布局
    let enableHTTPS = 1                               //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1
    let encryptedFields = 'secret'                    //加密字段,默认加密领域为secret
    let showToolbar = 1                               //是否显示工具栏,0-不显示,非0-显示
    let showSmart = 0                                 //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
    // let buttonIDs = "0,16,256,257,258,259,260,513,514,515,516,517,768"  //自定义工具条按钮
    oWebControl.value.JS_RequestInterface({
      funcName: "init",
      argument: JSON.stringify({
        appkey: appkey,                            //API网关提供的appkey
        secret: secret,                            //API网关提供的secret
        ip: ip,                                    //API网关IP地址
        playMode: playMode,                        //播放模式(决定显示预览还是回放界面)
        port: port,                                //端口
        snapDir: snapDir,                          //抓图存储路径
        videoDir: videoDir,                        //紧急录像或录像剪辑存储路径
        layout: layout,                            //布局
        enableHTTPS: enableHTTPS,                  //是否启用HTTPS协议
        encryptedFields: encryptedFields,          //加密字段
        showToolbar: showToolbar,                  //是否显示工具栏
        showSmart: showSmart,                      //是否显示智能信息
        buttonIDs: buttonIDs                       //自定义工具条按钮
      })
    }).then(function (oData) {
      console.log('初始化成功')
      videoPlayFor()
      // oWebControl.value.JS_Resize(that.boxWidth, that.boxHeight)  // åˆå§‹åŒ–后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
    })
  })
}
const videoPlayFor = () => {
  const indexCodes = props.indexCodes
  indexCodes.forEach(item => {
    videoPlay(item)
  })
}
const videoPlay = (indexCode) => {
  oWebControl.value.JS_RequestInterface({
    funcName: "startPreview",
    argument: JSON.stringify({
      cameraIndexCode: indexCode,            //监控点编号
      streamMode: 0,                   //主子码流标识:0-主码流,1-子码流
      transMode: 1,                    //传输协议:0-UDP,1-TCP
      gpuMode: 0,                      //是否启用GPU硬解,0-不启用,1-启用
      wndId: -1                         //播放窗口序号(在2x2以上布局下可指定播放窗口)
    })
  }).then((oData) => {
    if (oData.responseMsg.code === 1) {
      console.log('播放成功', oData)
    }
  }, err => {
    console.log('err', err)
  })
}
// é”€æ¯
const destroyed = () => {
  if (oWebControl.value) {
    oWebControl.value.JS_HideWnd()   // å…ˆè®©çª—口隐藏,规避插件窗口滞后于浏览器消失问题
    oWebControl.value.JS_Disconnect().then(function () { }, function () { })
  }
}
function fileDown() {
  window.open('./videoUrl/VideoWebPlugin.exe')
}
// æ¶ˆæ¯å›žè°ƒ
const cbIntegrationCallBack = (oData) => {
  let response = oData.responseMsg
  // response.type=1  é€‰ä¸­çª—口消息  type=2 æ’­æ”¾æ¶ˆæ¯
}
// ç›‘控
// èŽ·å–å…¬é’¥
function getPubKey(callback) {
  oWebControl.value.JS_RequestInterface({
    funcName: 'getRSAPubKey',
    argument: JSON.stringify({
      keyLength: 1024,
    }),
  }).then((oData) => {
    if (oData.responseMsg.data) {
      pubKey.value = oData.responseMsg.data
      callback()
    }
  })
}
// RSA加密
function setEncrypt(value) {
  let that = this
  let encrypt = new JSEncrypt()
  encrypt.setPublicKey(pubKey.value)
  return encrypt.encrypt(value)
}
</script>
<style lang="scss" scoped>
.video_app {
  width: 100%;
  height: 100%;
}
</style>
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -153,9 +153,9 @@
        //发送会议预约成功通知
        if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
            this.sendNotice(bookings, MeetConstants.TWO);
            SystemUser systemUser = systemUserMapper.selectById(user.getId());
            this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ZERO);
        }
        SystemUser systemUser = systemUserMapper.selectById(user.getId());
        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ZERO);
        return bookings.getId();
    }
@@ -386,9 +386,9 @@
        //发送会议通知
        if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
            this.sendNotice(bookings, MeetConstants.TWO);
            SystemUser systemUser = systemUserMapper.selectById(bookings.getUserId());
            this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ZERO);
        }
        SystemUser systemUser = systemUserMapper.selectById(bookings.getUserId());
        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ZERO);
    }
    @Override
@@ -458,9 +458,8 @@
        //取消会议 å‘送取消通知
        if(Constants.equalsInteger(bookings.getJoinNotice(),Constants.ZERO)){
            this.sendNotice(bookings, 3);
            this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ONE);
        }
        this.sendWxNotice(bookings,Objects.isNull(systemUser)||StringUtils.isBlank(systemUser.getOpenid())?null:systemUser.getOpenid(),Constants.ONE);
    }
    @Override
@@ -1416,7 +1415,7 @@
                if(Constants.equalsInteger(sendType,Constants.ZERO)){
                    wxPlatNotice.sendMeetingBookTemplateNotice(systemDictDataBiz,bookings,"CuoDoxOl6SFwi4NhNgOQgKSJVjDD4VCIaPYlnbv_zdY",
                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),openIds);
                }else{
                }else if(Constants.equalsInteger(sendType,Constants.ONE)){
                    wxPlatNotice.sendMeetingBookCancelTemplateNotice(systemDictDataBiz,bookings,"CiB6vCT2InovAoQfudY-lvzLSV0-3lfz3a5GsSFCzd8",
                            systemDictDataBiz.queryByCode(Constants.WX_PLATFORM, Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),openIds);
                }
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -151,6 +151,8 @@
    public static final String HK_WXTOKEN_CONFIGID ="HK_WXTOKEN_CONFIGID" ;
    public static final String HK_WXTOKEN_TAGID ="HK_WXTOKEN_TAGID" ;
    public static final String WMS_TOTAL_STOCK_NUM ="WMS_TOTAL_STOCK_NUM" ;
    public static final String WMS_LIQUID_LEVEL ="WMS_LIQUID_LEVEL" ;
    public static final String WMS_PRESSURE_LEVEL ="WMS_PRESSURE_LEVEL" ;
    public static final String WX_REDIRECT_URL = "WX_REDIRECT_URL";
    public static final String HK_CHANGNEI_SCREEN_INDEXCODES = "HK_CHANGNEI_SCREEN_INDEXCODES";
    public static final String CITY_XH_REASON_ID ="CITY_XH_REASON_ID" ;
server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -2911,14 +2911,17 @@
//            System.out.println(DateUtil.afterMinutesDate(-5));
            List<Date> list =getThisMonthDateList();
            for(Date d :list){
                System.out.println(getPlusTime2(d));
            }
            List<Date> list1 =getThisYearMonthList();
            for(Date d :list1){
                System.out.println(getPlusTime2(d));
            }
            System.out.println(DateUtil.getBeforMonthStr(new Date(),1));
            System.out.println(DateUtil.getBeforMonthStr(new Date(),12));
//            List<Date> list =getThisMonthDateList();
//            for(Date d :list){
//                System.out.println(getPlusTime2(d));
//            }
//            List<Date> list1 =getThisYearMonthList();
//            for(Date d :list1){
//                System.out.println(getPlusTime2(d));
//            }
//            Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss");
//            Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss");
@@ -3389,4 +3392,17 @@
    }
    /**
     * èŽ·å–X天后的日期
     * @param date
     * @param beforMonths ä¸‹æœˆ -1  ä¸Šæœˆ 1
     * @return
     */
    public static String getBeforMonthStr(Date date,Integer beforMonths){
        ZonedDateTime zonedDateTime = date.toInstant().atZone(ZoneId.systemDefault());
        // è½¬æ¢ä¸ºjava.time.LocalDate,计算x天的日期
        LocalDate dateBeforeDay = zonedDateTime.toLocalDate().minusMonths(beforMonths);
        return dateBeforeDay.toString();
    }
}
server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
@@ -78,7 +78,7 @@
    @ExcelColumn(name="状态 0未使用 1已使用 2等待发送")
    private Integer status;
    @ApiModelProperty(value = "类型 0短信 1邮件")
    @ApiModelProperty(value = "类型 0短信 1邮件 ")
    @ExcelColumn(name="类型 0短信 1邮件")
    private Integer type;
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
@@ -143,6 +143,7 @@
        visits.setMemberId(loginUserInfo.getMemberId());
        visits.setCreateMemberId(loginUserInfo.getMemberId());
        visits.setReceptMemberId(visits.getMemberId());
        visits.setLoginUserInfo(loginUserInfo);
        return ApiResponse.success("查询成功", visitsService.visitReporting(visits));
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/board/FightingAdminController.java
@@ -53,6 +53,7 @@
        List<AlarmEventDataVO> data  = boardService.fightingAdminAlertList();
        return ApiResponse.success(data);
    }
    @LoginNoRequired
    @ApiOperation("检测数据集合")
    @GetMapping("/monitorDataList")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/openapi/HkOpenApiController.java
@@ -240,4 +240,5 @@
    public ApiResponse<List<PlatformStatusListResponse>> getStatusList() {
        return ApiResponse.success(platformService.getPlatformStatusList());
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKConstants.java
@@ -619,6 +619,9 @@
        String[] findHomeAlarmInfoPage= new String[]{"/api/v1/alarm/findHomeAlarmInfoPage","安防看板-- åˆ†é¡µæŸ¥è¯¢æœªå¤„理报警信息6"};//安防看板-- åˆ†é¡µæŸ¥è¯¢æœªå¤„理报警信息6
        String[] minitorDataSearchV1= new String[]{"/api/fem/v1/minitor/data/search","分页查询设备监测历史数据"};//分页查询设备监测历史数据
        String[] minitorDataSearch= new String[]{"/api/fpms/v2/minitor/data/search","分页查询设备监测历史数据"};//分页查询设备监测历史数据
        String[] monitorDataSearch= new String[]{"/api/fpms/v2/monitor/data/search","分页查询设备监测历史数据"};//分页查询设备监测历史数据
        String[] fireMonitorData= new String[]{"/api/v2/monitor/fireMonitorData","分页查询设备监测历史数据"};//分页查询设备监测历史数据
        String[] userOpenidSave= new String[]{"/api/v1/oa/userOpenId/saveV2","保存用户及openId绑定信息微信公众号"};//保存用户及openId绑定信息微信公众号
        String[] temperatureHumidityDataStatistic= new String[]{"/api/v2/public/monitor/sensor/list","消防看板-4温湿度统计"};//消防看板-温湿度
        String[] regionDataRanking= new String[]{"/api/ecm/v1/energy/regionDataRanking","消防看板-4获取区域用量排名-能耗看板"};//消防看板-获取区域用量排名 - èƒ½è€—看板
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKTools.java
@@ -896,7 +896,7 @@
     * @return
     */
    public static String minitorDataSearch(String body) {
        return startDoPostStringArtemis(HKConstants.InterfacePath.minitorDataSearch,body);
        return startDoPostStringArtemis(HKConstants.InterfacePath.minitorDataSearchV1,body);
    }
    /**
     * ç»Ÿè®¡å›­åŒºæ€»ä½“的安防设备数量,在线数、在线率、离线数、离线率
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformJob.java
@@ -262,6 +262,10 @@
    @TableField(exist = false)
    private String finishTimeStr;
    @ApiModelProperty(value = "作业月台编码")
    @TableField(exist = false)
    private String platformCode;
    @ApiModelProperty(value = "作业月台名称")
    @TableField(exist = false)
    private String platformName ;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.business.vo.ApproveDataVO;
import io.swagger.annotations.ApiModel;
@@ -315,6 +316,10 @@
    @TableField(exist = false)
    private String createMobile;
    @ApiModelProperty(value = "后端创建人", example = "1",hidden = true)
    @TableField(exist = false)
    private LoginUserInfo loginUserInfo;
    @ApiModelProperty(value = "审批信息数据")
    @TableField(exist = false)
    private ApproveDataVO approveDateVO;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/MonitorDataVO.java
@@ -17,6 +17,10 @@
    @ApiModelProperty(value = "设备或者传感器名称")
    private String name;
    @ApiModelProperty(value = "阈值")
    private String level;
    @ApiModelProperty(value = "监测数据集合")
    private List<MonitorDataInfoVO> dataList;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/platformReport/PlatformWorkDataVO.java
@@ -17,11 +17,13 @@
    @ApiModelProperty(value = "月台名称")
    private String platformName;
    @ApiModelProperty(value = "月台编码")
    @ApiModelProperty(value = "月台主键")
    private Integer platformId;
    @ApiModelProperty(value = "月台排序")
    private Integer platformSort;
    @ApiModelProperty(value = "月台编码")
    private String platformCode;
    @ApiModelProperty(value = "车牌号")
    private String carNo;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -331,6 +331,19 @@
        //初始化访客信息
//        initVisitInfo(visits,date);
        visitsMapper.insert(visits);
        if(Objects.nonNull(visits.getLoginUserInfo())){
            SystemUser systemUser = systemUserMapper.selectById(visits.getLoginUserInfo().getId());
            if(Objects.nonNull(systemUser)&&StringUtils.isNotBlank(systemUser.getOpenid())){
                WxPlatNotice wxPlatNotice = new WxPlatNotice();
                wxPlatNotice.sendVisitTemplateNotice(systemDictDataBiz,
                        wxNoticeConfigMapper,visits,
                        Constants.equalsInteger(visits.getType(),Constants.TWO)?WxPlatConstants.visitReportContent.visitReportUpload:WxPlatConstants.visitContent.visitUpload,
                        systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode(),
                        Arrays.asList(systemUser.getOpenid().split(","))
                );
            }
        }
        approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
        return visits.getId();
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -581,7 +581,7 @@
        param.setPage(1);
        param.setUserId("admin");
//        param.setRegionIndexCodes("root000000");
        param.setAlarmStartTime(DateUtil.getPlusTime2(DateUtil.addDaysToDate(new Date(),-1)));
        param.setAlarmStartTime(DateUtil.getFomartDate(new Date(),"yyyy-MM-dd") + " 00:00:00");
        param.setAlarmEndTime(DateUtil.getPlusTime2(new Date()));
        param.setPageSize(20);
        BaseResponse<BaseListPageResponse<FindHomeAlarmInfoPageResponse>> response = HKService.findHomeAlarmInfoPage(param);
@@ -608,9 +608,14 @@
        MinitorDataSearchRequest param = new MinitorDataSearchRequest();
        param.setResourceTypeCodes(new String[]{});
        param.setRegionIndexCode("root000000");
        param.setResourceTypeCodes("60,61".split(","));
        param.setIncludeDown("1");
        param.setUserId("admin");
        param.setPageNo(1);
        param.setPageSize(100);
        BaseResponse<BaseListPageResponse<MonitorDataSearchResponse>> response = HKService.minitorDataSearch(param);
        String pressure = systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_PRESSURE_LEVEL).getCode();
        String liquid = systemDictDataBiz.queryByCode(Constants.WMS_PARAM,Constants.WMS_LIQUID_LEVEL).getCode();
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)
                && response.getData()!=null ) {
            List<MonitorDataSearchResponse> r = response.getData().getList();
@@ -618,17 +623,37 @@
                for(MonitorDataSearchResponse model : r){
                    MonitorDataVO m = new MonitorDataVO();
                    m.setName(model.getName());
                    m.setLevel(Constants.equalsInteger(model.getType(),60)?liquid:pressure);
                    m.setDataList(new ArrayList<>());
                    if(model.getValues()!=null){
                        List<MonitorDataInfoVO> dataList = new ArrayList<>();
                        for(MonitorDataValResponse v : model.getValues()){
                            MonitorDataInfoVO vm = new MonitorDataInfoVO();
                            vm.setValue(v.getMonitorValue());
                            vm.setCateName(v.getMonitorSpecificName());
                            vm.setCateCode(v.getMonitorTypeKey());
                            vm.setTypeCode(v.getMonitorTypeCode());
                            vm.setTypeName(v.getMonitorTypeName());
                            if(Constants.equalsInteger(model.getType(),60)){
                                if(v.getMonitorTypeCode().equals("254001")){
                                    MonitorDataInfoVO vm = new MonitorDataInfoVO();
                                    vm.setValue(v.getMonitorValue());
                                    vm.setCateName(v.getMonitorSpecificName());
                                    vm.setCateCode(v.getMonitorTypeKey());
                                    vm.setTypeCode(v.getMonitorTypeCode());
                                    vm.setTypeName(v.getMonitorTypeName());
                                    dataList.add(vm);
                                }
                            }else{
                                if(v.getMonitorTypeCode().equals("253958")){
                                    MonitorDataInfoVO vm = new MonitorDataInfoVO();
                                    vm.setValue(v.getMonitorValue());
                                    vm.setCateName(v.getMonitorSpecificName());
                                    vm.setCateCode(v.getMonitorTypeKey());
                                    vm.setTypeCode(v.getMonitorTypeCode());
                                    vm.setTypeName(v.getMonitorTypeName());
                                    dataList.add(vm);
                                }
                            }
                        }
                        m.setDataList(dataList);
                    }
                    list.add(m);
                }
            }
        }
@@ -1268,18 +1293,22 @@
        BigDecimal carbonWater = new BigDecimal(0);//本月用水
        BigDecimal carbonElec = new BigDecimal(0);//用电
        data.setYesterdayElectricity(getDefaultData());//昨日用电
        data.setTodayElectricity(getDefaultData());//今日用电
        data.setElectricityQuantity(getDefaultData());//上月用电
        data.setWaterQuantity(getDefaultData());//上月用水
        data.setGasQuantity(getDefaultData());//上月用气
        data.setMonthElectricity(getDefaultData());//本月用电
        data.setYesterdayElectricity(getDefaultData());//昨日用电
        getMonthElectricityData(data.getMonthElectricity());//通过安防平获取本月用电量数据
        carbonElec = new BigDecimal(StringUtils.defaultString(data.getMonthElectricity().getTotal(), "0"));
        getLastMonthElectricityData(data.getElectricityQuantity());//通过安防平获取上月用电量数据
        getCurrentDateElectircityData(data.getTodayElectricity(),0);//通过安防平获取今日用电量数据
        getCurrentDateElectircityData(data.getYesterdayElectricity(),-1);//通过安防平获取昨日用电量数据
        getCurrentDateElectircityData(data.getTodayElectricity(),0);//通过安防平获取今日用电量数据
        data.setWaterQuantity(getDefaultData());//上月用水
        data.setGasQuantity(getDefaultData());//上月用气
        carbonElec = new BigDecimal(StringUtils.defaultString(data.getMonthElectricity().getTotal(), "0"));
        String firstDate = DateUtil.getFirstDayCurrentMonth() +" 00:00:00";
        Date month0 = DateUtil.getDateFromString(firstDate);
        Date month1 = DateUtil.increaseMonth(month0,-1);//上月
@@ -1369,12 +1398,62 @@
     */
    private void getLastMonthElectricityData(EnergyModelDataVO data) {
         BaseResponse<LastMonthFeeByMeterTypeResponse> response = HKService.lastMonthFeeByMeterType("1");
        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){
           data.setRingRate(StringUtils.defaultString(response.getData().getRingPercent(),"0"));
           data.setSameRate(StringUtils.defaultString(response.getData().getSamePercent(),"0"));
           data.setTotal(StringUtils.defaultString(response.getData().getValue(),"0"));
//        if(response != null && StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) && response.getData()!=null ){
//           data.setRingRate(StringUtils.defaultString(response.getData().getRingPercent(),"0"));
//           data.setSameRate(StringUtils.defaultString(response.getData().getSamePercent(),"0"));
//           data.setTotal(StringUtils.defaultString(response.getData().getValue(),"0"));
//        }
//        String nowMonth = DateUtil.getFomartDate(new Date(),"yyyy-MM-dd");
//        //上月日期
//        DateUtil.getBeforMonthStr(new Date(),1);
//        //上上月日期
//        DateUtil.getBeforMonthStr(new Date(),2);
//        //上年日期
//        DateUtil.getBeforMonthStr(new Date(),13);
        EnergyTotalDataRequest param = new EnergyTotalDataRequest();
        param.setPeriodType("month");
        param.setDate(DateUtil.getBeforMonthStr(new Date(),1).substring(0,7));
        BaseResponse<EnergyTotalDataResponse> beforMonthResponse = HKService.energyTotal(param);
        if(beforMonthResponse != null && StringUtils.equals(beforMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforMonthResponse.getData()!=null ){
            data.setTotal(beforMonthResponse.getData().getElectricity());
            data.setTotalNum(new BigDecimal(beforMonthResponse.getData().getElectricity()));
        }
        param.setDate(DateUtil.getBeforMonthStr(new Date(),2).substring(0,7));
        BaseResponse<EnergyTotalDataResponse> beforBeforMonthResponse = HKService.energyTotal(param);
        if(beforBeforMonthResponse != null && StringUtils.equals(beforBeforMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforBeforMonthResponse.getData()!=null ){
            if(Objects.nonNull(beforBeforMonthResponse.getData()) && StringUtils.isNotBlank(beforBeforMonthResponse.getData().getElectricity())){
                data.setRingNum(new BigDecimal(beforBeforMonthResponse.getData().getElectricity()));
            }else{
                data.setRingNum(BigDecimal.ZERO);
            }
            if(Objects.isNull(data.getTotal()) || Objects.isNull(data.getRingNum())
                    || data.getTotalNum().compareTo(BigDecimal.ZERO) ==0  || data.getRingNum().compareTo(BigDecimal.ZERO) ==0 ){
               data.setRingRate("0");
            }else{
               data.setRingRate(new BigDecimal(data.getTotal()).divide(data.getRingNum(),2,BigDecimal.ROUND_HALF_UP).toString());
            }
        }
        param.setDate(DateUtil.getBeforMonthStr(new Date(),13).substring(0,7));
        BaseResponse<EnergyTotalDataResponse> beforYearMonthResponse = HKService.energyTotal(param);
        if(beforYearMonthResponse != null && StringUtils.equals(beforYearMonthResponse.getCode(), HKConstants.RESPONSE_SUCCEE) && beforBeforMonthResponse.getData()!=null ){
            if(Objects.nonNull(beforYearMonthResponse.getData()) && StringUtils.isNotBlank(beforYearMonthResponse.getData().getElectricity())){
                data.setSameNum(new BigDecimal(beforYearMonthResponse.getData().getElectricity()));
            }else{
                data.setSameNum(BigDecimal.ZERO);
            }
            if(Objects.isNull(data.getTotal()) || Objects.isNull(data.getSameNum())
                    || data.getTotalNum().compareTo(BigDecimal.ZERO) ==0  || data.getSameNum().compareTo(BigDecimal.ZERO) ==0 ){
                data.setSameRate("0");
            }else{
                data.setSameRate(new BigDecimal(data.getTotal()).divide(data.getSameNum(),2,BigDecimal.ROUND_HALF_UP).toString());
            }
        }
    }
    /**
     * é€šè¿‡å®‰é˜²å¹³èŽ·å–ä»Šæ—¥ç”¨ç”µé‡
@@ -1668,18 +1747,21 @@
        if(platformList!=null && platformList.size()>0){
            List<PlatformJob> jobList = platformJobMapper.selectJoinList(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>()
                    .selectAll( PlatformJob.class)
//                    .selectAs(Platform::getCode,PlatformJob::getPlatformCode)
                    .select("( select pl.CREATE_DATE from platform_log pl where t.id = pl.obj_id and pl.OBJ_TYPE = "+Constants.PlatformJobLogType.WORKING.getKey()+"  order by pl.CREATE_DATE desc  limit 1  ) as newStartDate")
                    //.select(" (  select sum(ifnull(pl.IO_QTY , 0 ))   from platform_wms_detail pl  where   pl.job_id = t.id and pl.isdeleted=0 )",PlatformJob::getWorkNum)
                    .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 )",PlatformJob::getWorkNum)
                    .apply("to_days(t.create_date) = to_days(now())")
                    .eq(Platform::getIsdeleted, Constants.ZERO)
                    .in(PlatformJob ::getStatus,new Integer[]{Constants.PlatformJobStatus.WORKING.getKey(),Constants.PlatformJobStatus.CALLED.getKey() })
//                    .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId)
                    .orderByDesc(PlatformJob::getStatus ));
            //月台状态:0=作业中;1=空闲中;2=作业超时;3=叫号
            for(Platform model : platformList){
                PlatformWorkDataVO platformDurationVO = new PlatformWorkDataVO();
                platformDurationVO.setPlatformName(model.getName());
                platformDurationVO.setPlatformId(model.getId());
                platformDurationVO.setPlatformCode(model.getCode());
                platformDurationVO.setPlatformSort(model.getSortnum());
                PlatformJob job = getJobFromListById(model.getId(),jobList);
                if(job != null){