jiangping
2024-10-09 c6a96d1162cb60d1bd30c8f5fde7a93985b79276
Merge remote-tracking branch 'origin/master'
已添加11个文件
已修改22个文件
1419 ■■■■ 文件已修改
h5/pages.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/waybill/waybillDetail.vue 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/driver/ic_dangqian.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/driver/ic_mostarted.png 补丁 | 查看 | 原始文档 | blame | 历史
h5/static/driver/wuliuche_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/pages/index/config.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_meeting/pages/index/index.vue 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/PlatformCall.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsConfigMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/PlatformLogJoinMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsConfig.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages.json
@@ -447,6 +447,13 @@
            {
                "navigationBarTitleText" : "入园须知"
            }
        },
        {
            "path" : "pages/waybill/waybillDetail",
            "style" :
            {
                "navigationBarTitleText" : "运单查询"
            }
        }
    ],
    "subPackages": [
h5/pages/waybill/waybillDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,207 @@
<template>
    <view class="main_app">
        <image src="@/static/driver/wuliuche_bg@2x.png" class="main_bg"></image>
        <view class="form_wrap">
            <view class="item">
                <view class="label">合同编号</view>
                <view class="line">
                    <view class="input_wrap"><input v-model="param.aa" placeholder="请输入合同编号" placeholder-class="place" type="text" /></view>
                </view>
            </view>
            <view class="item">
                <view class="label">需方编号</view>
                <view class="line">
                    <view class="input_wrap"><input v-model="param.aa" placeholder="请输入合同中需方编号" placeholder-class="place" type="text" /></view>
                </view>
            </view>
            <view class="item">
                <view class="label">验证码</view>
                <view class="line">
                    <view class="input_wrap"><input v-model="param.aa" placeholder="请输入验证码" placeholder-class="place" type="text" /></view>
                    <image src="" class="auth_code" mode=""></image>
                </view>
            </view>
            <view class="query">查询</view>
        </view>
        <view class="title">查询结果</view>
        <view class="drive_info">
            <view class="title">合同编号</view>
            <view class="line">
                <view class="label">运输车辆</view>
                <view class="val">11</view>
            </view>
            <view class="line">
                <view class="label">司机信息</view>
                <view class="val">11</view>
            </view>
            <view class="line">
                <view class="label">车辆位置</view>
                <view class="val">11</view>
            </view>
        </view>
        <view class="drive_info">
            <view class="title">物流信息</view>
            <view class="item">
                <view class="h2">
                    <view class="icon_wrap"><image src="@/static/driver/ic_mostarted.png" class="icon"></image></view>
                    <view class="text">到达卸货地</view>
                </view>
                <view class="time">202422222222</view>
                <view class="separate"></view>
            </view>
            <view class="item">
                <view class="h2 h1">
                    <view class="icon_wrap"><image src="@/static/driver/ic_dangqian.png" class="icon"></image></view>
                    <view class="text">到达卸货地</view>
                </view>
                <view class="time">202422222222</view>
                <view class="separate separate_ac"></view>
            </view>
            <view class="item">
                <view class="h2">
                    <view class="icon_wrap"><image src="@/static/driver/ic_mostarted.png" class="icon"></image></view>
                    <view class="text">到达卸货地</view>
                </view>
                <view class="time">202422222222</view>
                <view class="separate"></view>
            </view>
        </view>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                param: {}
            };
        }
    }
</script>
<style lang="scss" scoped>
    .form_wrap {
        width: 690rpx;
        height: 646rpx;
        background: #FFFFFF;
        box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(39,155,170,0.16);
        border-radius: 16rpx;
        padding: 10rpx 30rpx;
        margin-bottom: 40rpx;
        .item{
            height: 154rpx;
            padding: 30rpx 0 8rpx;
            border-bottom: 1rpx solid #E5E5E5;
            .label{}
            .line{
                display: flex;
                .input_wrap{
                    padding: 18rpx 0;
                    flex: 1;
                    .place{
                        color: #999999;
                        font-size: 28rpx;
                    }
                }
                .auth_code{
                    width: 160rpx;
                    height: 64rpx;
                    border: 2px solid;
                }
            }
        }
        .query{
            width: 630rpx;
            height: 88rpx;
            background: $uni-color-primary;
            border-radius: 44rpx;
            margin-top: 40rpx;
            color: #fff;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 30rpx;
        }
    }
    .main_app{
        padding-top: 218rpx;
        .title{
            font-weight: 500;
            font-size: 32rpx;
            margin-bottom: 30rpx;
        }
        .drive_info{
            background: #F7F7F7;
            border-radius: 16rpx;
            padding: 30rpx;
            margin-bottom: 20rpx;
            .line{
                display: flex;
                margin-bottom: 24rpx;
                .label{
                    color: #666666;
                    margin-right: 40rpx;
                }
                .val{
                }
            }
            .item{
                position: relative;
                color: #999999;
                margin-bottom: 30rpx;
                .h2{
                    display: flex;
                    align-items: center;
                    height: 48rpx;
                    .icon_wrap{
                        width: 48rpx;
                        margin-right: 30rpx;
                        display: flex;
                        align-items: center;
                        justify-content: center;
                        .icon{
                            width: 24rpx;
                            height: 24rpx;
                            position: relative;
                            z-index: 2;
                        }
                    }
                }
                .h1{
                    .icon_wrap{
                        .icon{
                            width: 48rpx;
                            height: 48rpx;
                        }
                    }
                }
                .time{
                    padding-left: 78rpx;
                    font-size: 24rpx;
                    margin-top: 6rpx;
                }
                .separate{
                    height: calc( 100% );
                    width: 2rpx;
                    border: 2rpx dashed red;
                    position: absolute;
                    left: 22rpx;
                    top: 24rpx;
                    z-index: 1;
                }
                .separate_ac{
                    top: 48rpx;
                }
            }
        }
    }
    .main_bg {
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        z-index: -1;
        color: #222222;
    }
</style>
h5/static/driver/ic_dangqian.png
h5/static/driver/ic_mostarted.png
h5/static/driver/wuliuche_bg@2x.png
h5_meeting/pages/index/config.vue
@@ -11,7 +11,7 @@
            <view class="item">
                <view class="title">接口地址</view>
                <view class="line">
                    <input type="text" placeholder="http://10.50.250.178:8088/gateway_interface/" v-model="param.baseUrl" />
                    <input type="text" v-model="param.baseUrl" />
                    <image src="../../static/icon/right.svg" class="icon"></image>
                </view>
            </view>
@@ -31,11 +31,15 @@
    export default {
        data() {
            return {
                param: {}
                param: {
                    baseUrl: 'http://192.168.5.13/gateway_interface/'
                }
            };
        },
        onLoad(){
            const param = uni.getStorageSync('param') || {}
            const param = uni.getStorageSync('param') || {
                baseUrl: 'http://192.168.5.13/gateway_interface/'
            }
            this.param = { ...param }
        },
        methods: {
h5_meeting/pages/index/index.vue
@@ -8,13 +8,18 @@
                <view class="date">{{date}}</view>
            </view>
        </view>
        <view class="home_status">
            <text v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0">空闲中</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 4">即将开始</text>
            <text class="orange" v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 2">会议中</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 1">未开始</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 3">已结束</text>
            <text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">已撤销</text>
        <view class="home_status">
            <text v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0">空闲中</text>
            <text
                v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 4">即将开始</text>
            <text class="orange"
                v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 2">会议中</text>
            <text
                v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 1">未开始</text>
            <text
                v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 3">已结束</text>
            <text
                v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">已撤销</text>
        </view>
        <view v-if="meetingInfo.meetingName" class="meeting_name">{{meetingInfo.meetingName}}</view>
        <view v-if="meetingInfo.meetingTime && meetingInfo.bookingUser" class="meeting_con">
@@ -27,13 +32,15 @@
                    <image src="@/static/ic_people@2x.png"></image>
                    <text>预约人:{{meetingInfo.bookingUser }}</text>
                </view>
            </view>
            <view v-if="meetingInfo.meetingTime" class="qrcode_wrap">
                <canvas id="qrcode" canvas-id="qrcode" class="qrcode"></canvas>
            </view>
            <view v-if="showQrbg" class="qrcode_wrap">
                <canvas id="qrcode" canvas-id="qrcode" class="qrcode"></canvas>
            </view>
        </view>
        <view class="meeting_wrap">
            <view class="title">今日会议({{ info.meetingListResponseList && info.meetingListResponseList.length > 0 ? info.meetingListResponseList.length : 0 }})</view>
            <view class="title">
                ä»Šæ—¥ä¼šè®®ï¼ˆ{{ info.meetingListResponseList && info.meetingListResponseList.length > 0 ? info.meetingListResponseList.length : 0 }})
            </view>
            <view class="list">
                <view class="item" v-for="item in info.meetingListResponseList">
                    <view class="name">{{item.meetingName}}</view>
@@ -51,42 +58,46 @@
        </view>
        <!--  -->
        <swiper v-if="info.fileType == 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)" class="swiper" circular autoplay indicator-dots>
        <swiper
            v-if="info.fileType == 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)"
            class="swiper" circular autoplay indicator-dots>
            <swiper-item v-for="item in info.multifileList">
                <image class="swiper_item" :src="item.fileurlFull" mode="aspectFill"></image>
            </swiper-item>
        </swiper>
        <!--  -->
        <template v-if="info.fileType == 1 && info.multifileList && info.multifileList.length > 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)">
            <video  :src="info.multifileList[0].fileurlFull" class="app_video" :autoplay="true" loop :controls="false"></video>
        </swiper>
        <!--  -->
        <template
            v-if="info.fileType == 1 && info.multifileList && info.multifileList.length > 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)">
            <video :src="info.multifileList[0].fileurlFull" class="app_video" :autoplay="true" loop :controls="false"></video>
        </template>
    </view>
</template>
<script>
    import dayjs from 'dayjs'
    // import vueQr from 'vue-qr/src/packages/vue-qr.vue'
    import dayjs from 'dayjs'
    // import vueQr from 'vue-qr/src/packages/vue-qr.vue'
    import UQRCode from 'uqrcodejs'
    import {
        meetScreenData
    } from '@/api/index.js'
    export default {
    export default {
        // components: {vueQr},
        data() {
            return {
                time: '',
                date: '',
                showQrbg: false,
                timer: null,
                touchNum: 0,
                param: {},
                info: {},
                statusMap: {
                    1: '未开始',
                    2: '进行中',
                    3: '已结束',
                    4: '即将开始',
                    5: '已撤销',
                },
                param: {},
                info: {},
                statusMap: {
                    1: '未开始',
                    2: '进行中',
                    3: '已结束',
                    4: '即将开始',
                    5: '已撤销',
                },
                meetingInfo: {}
            }
        },
@@ -99,40 +110,47 @@
                })
            }
            this.getData()
        },
        onReady() {
        },
        onReady() {},
        methods: {
            getData() {
                this.showQrbg = false
                meetScreenData({
                    roomId: this.param.code
                }).then(res => {
                    this.info = res.data
                    if(this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0){
                        this.meetingInfo = this.info.meetingListResponseList[0]
                        this.$nextTick(() => {
                            this.qrcodeCreate()
                            this.$forceUpdate()
                        })
                    }
                }).then(res => {
                    this.info = res.data
                    if (this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0) {
                        this.meetingInfo = this.info.meetingListResponseList[0]
                        this.$nextTick(() => {
                            this.qrcodeCreate()
                            this.$forceUpdate()
                        })
                    } else {
                        this.showQrbg = false
                        this.meetingInfo = {}
                    }
                })
            },
            qrcodeCreate(){
                 // èŽ·å–uQRCode实例
                  var qr = new UQRCode();
                  // è®¾ç½®äºŒç»´ç å†…容
                  // qr.data = "https://uqrcode.cn/doc";
                  qr.data = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxac2a80c2144c4ee0&redirect_uri=http://192.168.0.109:8080/redirect.html&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
                  // è®¾ç½®äºŒç»´ç å¤§å°ï¼Œå¿…须与canvas设置的宽高一致
                  qr.size = 83;
                  // è°ƒç”¨åˆ¶ä½œäºŒç»´ç æ–¹æ³•
                  qr.make();
                  // èŽ·å–canvas上下文
                  var canvasContext = uni.createCanvasContext('qrcode', this); // å¦‚果是组件,this必须传入
                  // è®¾ç½®uQRCode实例的canvas上下文
                  qr.canvasContext = canvasContext;
                  // è°ƒç”¨ç»˜åˆ¶æ–¹æ³•将二维码图案绘制到canvas上
                  qr.drawCanvas();
            },
            qrcodeCreate() {
                this.showQrbg = true
                this.$nextTick(() => {
                    // èŽ·å–uQRCode实例
                    var qr = new UQRCode();
                    // è®¾ç½®äºŒç»´ç å†…容
                    // qr.data = "https://uqrcode.cn/doc";
                    qr.data =
                        "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxac2a80c2144c4ee0&redirect_uri=http://192.168.0.109:8080/redirect.html&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
                    // è®¾ç½®äºŒç»´ç å¤§å°ï¼Œå¿…须与canvas设置的宽高一致
                    qr.size = 83;
                    // è°ƒç”¨åˆ¶ä½œäºŒç»´ç æ–¹æ³•
                    qr.make();
                    // èŽ·å–canvas上下文
                    var canvasContext = uni.createCanvasContext('qrcode', this); // å¦‚果是组件,this必须传入
                    // è®¾ç½®uQRCode实例的canvas上下文
                    qr.canvasContext = canvasContext;
                    // è°ƒç”¨ç»˜åˆ¶æ–¹æ³•将二维码图案绘制到canvas上
                    qr.drawCanvas();
                })
            },
            touchend() {
                this.touchNum++
@@ -155,44 +173,53 @@
                this.timer = setInterval(() => {
                    this.time = dayjs().format('HH:mm')
                    this.date = dayjs().format('YYYY-MM-DD') + ' ' + weeks[new Date().getDay()]
                }, 1000)
                setInterval(() => {
                    this.getData()
                },this.param.time ? this.param.time * 1000 : 60 * 1000)
                }, 1000)
                setInterval(() => {
                    this.getData()
                }, this.param.time ? this.param.time * 1000 : 60 * 1000)
            }
        }
    }
</script>
<style lang="scss" scoped>
    page,body{
        overflow: hidden;
    }
    .swiper{
        position: fixed;
        top: 0;
        left: 0;
        z-index: 999;
        width: 100%;
        height: 100vh;
        .swiper_item{
            background-color: #0095AC;
            width: 100%;
            height: 100vh;
        }
    }
    .app_video{
        width: 100%;
        height: 100vh;
        position: fixed;
        top: 0;
        left: 0;
        z-index: 999;
<style lang="scss" scoped>
    page,
    body {
        overflow: hidden;
    }
    .swiper {
        position: fixed;
        top: 0;
        left: 0;
        z-index: 999;
        width: 100%;
        height: 100vh;
        .swiper_item {
            background-color: #0095AC;
            width: 100%;
            height: 100vh;
        }
    }
    .app_video {
        width: 100%;
        height: 100vh;
        position: fixed;
        top: 0;
        left: 0;
        z-index: 999;
    }
    .main_app {
        width: 100%;
        height: 100vh;
        position: relative;
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        font-size: 28rpx;
        display: flex;
        flex-direction: column;
@@ -230,14 +257,16 @@
                    flex-shrink: 0;
                    flex-direction: column;
                    width: 403rpx;
                    height: 315rpx;
                    background: linear-gradient( 90deg, #0080FF 0%, #00B0FF 100%);
                    height: 315rpx;
                    background: linear-gradient(90deg, #0080FF 0%, #00B0FF 100%);
                    border-radius: 7rpx;
                    margin-right: 28rpx;
                    position: relative;
                    &:nth-of-type(1){
                        background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
                    &:nth-of-type(1) {
                        background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
                    }
                    .item_bg {
                        position: absolute;
                        width: 178rpx;
@@ -250,13 +279,14 @@
                    .name {
                        flex: 1;
                        font-weight: bold;
                        font-size: 39rpx;
                        width: 100%;
                        word-break: break-all;
                        text-overflow: ellipsis;
                        display: -webkit-box;
                        -webkit-box-orient: vertical;
                        -webkit-line-clamp: 3; /* è¶…出几行省略 */
                        font-size: 39rpx;
                        width: 100%;
                        word-break: break-all;
                        text-overflow: ellipsis;
                        display: -webkit-box;
                        -webkit-box-orient: vertical;
                        -webkit-line-clamp: 3;
                        /* è¶…出几行省略 */
                    }
                    .line {
@@ -292,19 +322,21 @@
                    }
                }
            }
            .qrcode_wrap{
                width: 92px;
                height: 92px;
                display: flex;
                align-items: center;
                justify-content: center;
                background-color: #fff;
                .qrcode {
                    width: 84px;
                    height: 84px;
                }
            .qrcode_wrap {
                width: 92px;
                height: 92px;
                display: flex;
                align-items: center;
                justify-content: center;
                background-color: #fff;
                .qrcode {
                    width: 84px;
                    height: 84px;
                }
            }
        }
        .meeting_name {
screen/src/views/PlatformCall.vue
@@ -106,7 +106,7 @@
  var qr = new UQRCode()
  // è®¾ç½®äºŒç»´ç å†…容
  qr.data = qrcode.value
  qr.size = 254
  qr.size = 220
  // è°ƒç”¨åˆ¶ä½œäºŒç»´ç æ–¹æ³•
  qr.make()
  var canvas = document.getElementById("qrcode")
@@ -174,7 +174,7 @@
          </div>
          <div class="item">{{ item.platformName || '-' }}</div>
          <div class="item">
            <div class="time_place">预计完成时间</div>
            <div v-if="item.optTimeTemp" class="time_place">预计完成时间</div>
            <div>{{ item.optTimeTemp || '-' }}</div>
          </div>
        </div>
@@ -203,7 +203,7 @@
        </div>
        <div class="qrcode_wrap">
          <div class="qrcode">
            <canvas id="qrcode" width="254" height="254"></canvas>
            <canvas id="qrcode" width="220" height="220"></canvas>
          </div>
          <div class="title">请扫码签到</div>
        </div>
@@ -218,16 +218,23 @@
</template>
<style lang="scss" scoped>
div{
  box-sizing: border-box;
}
.main_app {
  color: #fff;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  background-color: #092030;
  position: relative;
  z-index: -2;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  .main_header {
    width: 100%;
    height: 112px;
@@ -281,16 +288,15 @@
    display: flex;
    padding: 30px 20px;
    position: relative;
    .list {
      flex: 5;
      margin-right: 20px;
      display: flex;
      flex-direction: column;
      .line {
        display: flex;
        align-items: center;
        height: 100px;
        flex: 1;
        &:nth-of-type(2n) {
          background: rgba(255, 255, 255, 0);
        }
@@ -307,13 +313,15 @@
          font-weight: 500;
          font-size: 36px;
          flex: 10;
          height: 100%;
          .time_place{
            font-weight: 500;
            font-size: 24px;
          }
          .status {
            width: 174px;
            height: 76px;
            /* padding: 0 28px; */
            width: 170px;
            height: 72%;
            border-radius: 8px;
            display: flex;
            justify-content: center;
@@ -351,14 +359,13 @@
      flex: 2;
      display: flex;
      flex-direction: column;
      border: 1px solid red;
      .tip_wrap {
        margin-bottom: 20px;
        width: 100%;
        position: relative;
        flex-shrink: 0;
        /* flex-shrink: 0; */
        flex: 1;
        .current_plat {
          display: flex;
          flex-direction: column;
@@ -369,18 +376,18 @@
          .id_card {
            font-weight: bold;
            font-size: 86px;
            font-size: 68px;
          }
          .no {
            margin: 10px 0;
            font-weight: 500;
            font-size: 58px;
            font-size: 52px;
          }
          .place {
            font-weight: 500;
            font-size: 42px;
            font-size: 36px;
          }
          .plat {
@@ -426,23 +433,22 @@
      .qrcode_wrap {
        width: 100%;
        flex: 1;
        flex-shrink: 0;
        /* flex-shrink: 0; */
        background-color: #51b2ce;
        padding: 36px 0;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        .qrcode {
          padding: 12px;
          padding: 6px;
          background-color: #fff;
        }
        .title {
          margin-top: 20px;
          font-weight: bold;
          font-size: 38px;
          font-size: 34px;
          color: #111111;
        }
      }
server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
@@ -2,6 +2,7 @@
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemPositionBiz;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.constants.OperaType;
@@ -17,7 +18,6 @@
import com.doumee.service.system.SystemUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -47,7 +47,7 @@
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("system:position:create")
    @CloudRequiredPermission("system:position:create")
    public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemPosition systemPosition, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        systemPosition.setCreateUser(this.getLoginUser(token).getId());
        return ApiResponse.success(systemPositionBiz.create(systemPosition));
@@ -55,7 +55,7 @@
    @ApiOperation("删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("system:position:delete")
    @CloudRequiredPermission("system:position:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        systemPositionBiz.deleteById(id);
        return ApiResponse.success(null);
@@ -63,7 +63,7 @@
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("system:position:delete")
    @CloudRequiredPermission("system:position:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
@@ -76,7 +76,7 @@
    @ApiOperation("修改")
    @PostMapping("/updateById")
    @RequiresPermissions("system:position:update")
    @CloudRequiredPermission("system:position:update")
    public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemPosition systemPosition, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        systemPosition.setUpdateUser(this.getLoginUser(token).getId());
        systemPositionBiz.updateById(systemPosition);
@@ -85,14 +85,14 @@
    @ApiOperation("查询岗位树列表")
    @PostMapping("/tree")
    @RequiresPermissions("system:position:query")
    @CloudRequiredPermission("system:position:query")
    public ApiResponse<List<SystemPositionListVO>> findTree () {
        return ApiResponse.success(systemPositionBiz.findTree());
    }
    @ApiOperation("查询岗位列表")
    @PostMapping("/all")
    @RequiresPermissions("system:position:query")
    @CloudRequiredPermission("system:position:query")
    public ApiResponse<List<SystemPosition>> findList () {
        SystemPosition systemPosition = new SystemPosition();
        systemPosition.setDeleted(Boolean.FALSE);
@@ -102,7 +102,7 @@
    @Trace(exclude = true)
    @ApiOperation("查询岗位人员")
    @PostMapping("/users")
    @RequiresPermissions("system:position:queryUsers")
    @CloudRequiredPermission("system:position:queryUsers")
    public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
        return ApiResponse.success(systemUserService.findPage(pageWrap));
    }
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java
@@ -51,7 +51,7 @@
    @Override
    public List<SystemPositionListVO> findTree() {
        return positionDataPermissionAware.execute();
        return systemPositionService.findList();
    }
    @Override
server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -137,6 +137,7 @@
        // ç”Ÿæˆå¯†ç 
        systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode(), salt));
        systemUser.setSalt(salt);
        systemUser.setSource(Constants.ZERO);
        // åˆ›å»ºç”¨æˆ·è®°å½•
        systemUser.setType(Constants.ZERO);
server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,141 @@
package com.doumee.core.utils;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SmsConstants {
    public interface SmsObjectType{
        String inventCode = "0"; //验证码
        String visit= "1"; //访客申请
        String visitReport = "2"; //访客报备
        String hiddenDanger ="3";//隐患随手拍
        String carUse ="4";//用车申请
        String meeting ="5";//会议预约
        String platformBook ="6";//物流车预约
        String platformJob ="7";//月台作业
    }
    /**
     * è®¿å®¢ç”³è¯·
     */
    public interface visitContent{
        //访客申请-通知(给审批人)
        String visitNotice = "您有一条【{访客申请}】需要处理,详细信息请前往微信公众号查看。";
        //访客申请-审批通过通知(给申请人):。
        String visitAuditSuccess = "您的【{访客申请}】已经审批通过,请于{预约入园开始时间}前往门卫室访客机签到入园,如有疑问,请联系被访人";
        //访客申请-审批驳回通知(给申请人):。
        String visitAuditFail = "您的【{访客申请}】已被驳回,驳回原因为:{驳回原因}。如有疑问,请联系被访人。";
        //访客申请-超时未签离-通知(给申请人):
        String visitTimeOutSignOut = "您的【访客申请】已于{到期时间}到期,请及时离场并前往门卫室访客机签离,如有疑问,请联系被访人";
        //访客申请-超时未签离-通知(给指定接收人)
        String visitTimeOutSignOutNum = "今日还有{未签离数量}个访客未签离,请前往PC端查看详细信息。";
    }
    /**
     * è®¿å®¢æŠ¥å¤‡
     */
    public interface visitReportingContent{
        //访客报备-通知(给审批人)
        String visitReportingNotice = "您有一条【{访客报备}】需要处理,详细信息请前往微信公众号查看。";
        //访客报备-审批通过通知(给申请人):。
        String visitReportingAuditSuccess = "您的【{访客报备}】已经审批通过,请通知访客于{预约入园开始时间}后乘坐{车牌号}入园,如有疑问,请联系被访人。";
        //访客报备-审批驳回通知(给申请人):。
        String visitReportingAuditFail = "您的【{访客报备}】已被驳回,驳回原因为:{驳回原因}。如有疑问,请联系审批人。";
        //访客报备-超时未离场-通知(给申请人):
        String visitReportingTimeOutSignOut = "您的【访客报备】已于{预约入园结束时间}到期,请及时离场,如有疑问,请联系被访人";
        //访客报备-超时未离场-通知(给指定接收人)
        String visitReporting_time_out_sign_out_num = "今日还有{未签离数量}个访客报备车辆未离场,请前往PC端查看详细信息。";
    }
    /**
     * é𐿂£éšæ‰‹æ‹
     */
    public interface hiddenDangerContent{
        //隐患随手拍-通知(给处理人)
        String hiddenDanger_deal_user = "您有一条【{隐患随手拍-消防隐患}】需要处理,详细信息请前往微信公众号查看";
        //隐患随手拍-处理完成(给申请人):。
        String hiddenDanger_deal_over = "您提交的【{隐患随手拍-消防隐患}】已经处理完毕,详细信息请前往微信公众号查看。";
    }
    /**
     * ç”¨è½¦ç”³è¯·
     */
    public interface carUseBookContent{
        //短信通知模板(给处理人)
        String carUseBook_wait_audit = "您有一条【{用车申请}】需要处理,详细信息请前往微信公众号查看。";
        //用车申请-审批通过通知(给申请人):。
        String carUseBook_audit_success = "您的【{用车申请}】已经审批通过,出发时间为{提交的出发时间},请按时用车。如用车计划有变,请及时联系派车员。";
        //用车申请-审批驳回通知(给申请人):。
        String carUseBook_audit_fail = "您的【{用车申请}】已被驳回,驳回原因为:{驳回原因}。如有疑问,请联系派车员。";
        //用车申请-审批驳回通知(给申请人):。
        String carUseBook_cancel = "您的【{用车申请}】已被取消,取消原因为:{取消原因}。如有疑问,请联系派车员。";
    }
    /**
     * ç‰©æµè½¦é¢„约
     */
    public interface platformBookContent{
        //短信通知模板(给处理人)
        String platformBook_wait_audit = "您有一条【车辆入园申请】需要处理,详细信息请前往微信公众号查看。";
        //物流车预约-审批通过通知(给申请人):。
        String platformBook_audit_success = "您的【车辆入园申请】已经审批通过,入园时间为2024-7-19 09:00,请提前30分钟前往现场签到。如计划有变,请及时联系审核人员。";
        //物流车预约-审批驳回短信通知模板(给申请人)
        String platformBook_audit_fail = "您的【车辆入园申请】已被驳回,驳回原因为:{驳回原因}。如有疑问,请联系审核人员。";
        //物流车预约-入园预约取消短信通知模板(给申请人)
        String carUseBook_cancel = "您的【车辆入园申请】已被取消,取消原因为:{取消原因}。如有疑问,请联系审核人员。";
    }
    /**
     * ç‰©æµä½œä¸š
     */
    public interface platformJobContent{
        // è¿è¾“任务下达 ï¼ˆç»™å¸æœºï¼‰
        String platformJob_new_job = "【车牌号】车主您好,您有一个新的运输任务,详细信息请前往微信公众号查看。";
        //物流车作业-运输任务中止提醒(给司机):。
        String platformJob_stop_job = "【车牌号】车主您好,您的运输任务已被取消,详细信息请前往微信公众号查看。";
        //物流车预约-叫号入园等待(给司机)
        String platformBook_call_in = "【车牌号】车主您好,请在10分钟内,前往园区等待区等待叫号作业。";
        //物流车预约-月台叫号(给司机)
        String platformBook_sing_in = "【车牌号】车主您好,请在10分钟内,前往{月台名称}进行作业。";
        //物流车预约-月台叫号过号(给司机)
        String platformBook_over_num = "【车牌号】车主您好,您的任务已过号,请重新签到排队等待。";
        //物流车预约-作业开始(给司机)
        String platformBook_working = "【车牌号】车主您好,您的车辆已在{月台名称}开始作业,请随时关注作业情况。";
        //物流车预约-作业完成(给司机)
        String platformBook_finish = "【车牌号】车主您好,您的车辆已在{月台名称}完成作业,请及时驶离月台。";
        //物流车预约-作业异常挂起(给司机)
        String platformBook_error = "【车牌号】车主您好,您在{月台名称}的作业任务已经被异常挂起,请及时关注具体情况";
        //物流车预约-月台转移(给司机)
        String platformBook_move = "【车牌号】车主您好,您在{月台名称}的作业任务已经已被转移至{转移后月台名称},请及时关注叫号情况。";
        //物流车预约-月台停靠超时(给司机)
        String platformBook_time_out = "【车牌号】车主您好,您在{月台名称}已停靠超时,请尽快驶离以免影响后续作业。";
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java
@@ -75,6 +75,13 @@
        return ApiResponse.success(categoryService.findPage(pageWrap));
    }
    @ApiOperation("列表查询")
    @PostMapping("/list")
    @CloudRequiredPermission("business:category:query")
    public ApiResponse<List<Category>> findList (@RequestBody Category category,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
        return ApiResponse.success(categoryService.queryList(category));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:category:exportExcel")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
package com.doumee.cloud.admin;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.CloudRequiredPermission;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.SmsConfig;
import com.doumee.service.business.SmsConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2024/10/09 15:41
 */
@Api(tags = "短信业务配置")
@RestController
@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/smsConfig")
public class SmsConfigCloudController extends BaseController {
    @Autowired
    private SmsConfigService smsConfigService;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @CloudRequiredPermission("business:smsconfig:create")
    public ApiResponse create(@RequestBody SmsConfig smsConfig) {
        return ApiResponse.success(smsConfigService.create(smsConfig));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:smsconfig:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        smsConfigService.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @CloudRequiredPermission("business:smsconfig:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        smsConfigService.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:smsconfig:update")
    public ApiResponse updateById(@RequestBody SmsConfig smsConfig) {
        smsConfigService.updateById(smsConfig);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:smsconfig:query")
    public ApiResponse<PageData<SmsConfig>> findPage (@RequestBody PageWrap<SmsConfig> pageWrap) {
        return ApiResponse.success(smsConfigService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:smsconfig:exportExcel")
    public void exportExcel (@RequestBody PageWrap<SmsConfig> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(SmsConfig.class).export(smsConfigService.findPage(pageWrap).getRecords(), "短信业务配置", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:smsconfig:query")
    public ApiResponse findById(@PathVariable Integer id) {
        return ApiResponse.success(smsConfigService.findById(id));
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsConfigMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.doumee.dao.business;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.SmsConfig;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2024/10/09 15:41
 */
public interface SmsConfigMapper extends BaseMapper<SmsConfig> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/PlatformLogJoinMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business.join;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.PlatformLog;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2024/06/28 10:03
 */
public interface PlatformLogJoinMapper extends MPJBaseMapper<PlatformLog> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
@@ -113,15 +113,17 @@
    private Integer authStatus;
    @ApiModelProperty(value = "所属分组编码(关联car_group)", example = "1")
    @ExcelColumn(name="所属分组编码(关联car_group)")
    @ApiModelProperty(value = "所属组织主键(关联company)", example = "1")
    @ExcelColumn(name="所属组织主键(关联company)")
    private Integer groupId;
    @ApiModelProperty(value = "类型 0安泰公务车 1安泰自有物流车 2其它", example = "1")
    @ExcelColumn(name="类型 0安泰公务车 1安泰自有物流车 2其它")
    private Integer type;
    @ApiModelProperty(value = "所属分类编码", example = "1")
    @ExcelColumn(name="所属分类编码")
    private Integer cateId;
    @ApiModelProperty(value = "停车场名称集合", example = "1")
    @ExcelColumn(name="停车场名称集合")
@@ -170,6 +172,28 @@
    @TableField(exist = false)
    private int jobNum;
    @ApiModelProperty(value = "一级分类主键", example = "1")
    @TableField(exist = false)
    private Integer catePId;
    @ApiModelProperty(value = "分类名称", example = "1")
    @TableField(exist = false)
    private String cateName;
    @ApiModelProperty(value = "一级分类名称", example = "1")
    @TableField(exist = false)
    private String catePName;
    @ApiModelProperty(value = "车辆部门名称", example = "1")
    @ExcelColumn(name="车辆组织部门名称")
    @TableField(exist = false)
    private String carCompanyName;
    @ApiModelProperty(value = "车辆部门全路径名称", example = "1")
    @ExcelColumn(name="车辆部门全路径名称")
    @TableField(exist = false)
    private String carCompanyNamePath;
    @ApiModelProperty(value = "授权停车场编码集合", example = "1")
    @TableField(exist = false)
    private List<Integer> parkIdList;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
@@ -10,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * åˆ†ç±»ä¿¡æ¯è¡¨
@@ -66,12 +68,17 @@
    @ExcelColumn(name="图标")
    private String imgurl;
    @ApiModelProperty(value = "类型 0公司类型")
    @ExcelColumn(name="类型 0公司类型")
    @ApiModelProperty(value = "类型 0公司类型 1车辆类型")
    @ExcelColumn(name="类型 0公司类型 1车辆类型")
    private Integer type;
    @ApiModelProperty(value = "父级编码(自关联)")
    @ExcelColumn(name="父级编码(自关联)")
    private Integer parentId;
    @ApiModelProperty(value = "子集分类")
    @TableField(exist = false)
    private List<Category> childCategoryList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -95,4 +96,47 @@
    @ExcelColumn(name="参数4")
    private String param4;
    @ApiModelProperty(value = "月台名称")
    @TableField(exist = false)
    private String platformName;
    @ApiModelProperty(value = "月台组主键")
    @TableField(exist = false)
    private Integer platformGroupId;
    @ApiModelProperty(value = "月台组名称")
    @TableField(exist = false)
    private String platformGroupName;
    @ApiModelProperty(value = "前车牌照")
    @TableField(exist = false)
    private String carCodeFront;
    @ApiModelProperty(value = "后车牌照")
    @TableField(exist = false)
    private String carCodeBack;
    @ApiModelProperty(value = "开始作业时间起")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField(exist = false)
    private Date beginWorkDateStart;
    @ApiModelProperty(value = "开始作业时间止")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField(exist = false)
    private Date beginWorkDateEnd;
    @ApiModelProperty(value = "多状态查询 å¤šä¸ªä»¥,分割")
    @TableField(exist = false)
    private String queryStatus;
    @ApiModelProperty(value = "作业唯一标识(承运单号)")
    @TableField(exist = false)
    private String billCode;
    @ApiModelProperty(value = "合同号")
    @TableField(exist = false)
    private String contractNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.doumee.dao.business.model;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
 * çŸ­ä¿¡ä¸šåŠ¡é…ç½®
 * @author æ±Ÿè¹„蹄
 * @date 2024/10/09 15:41
 */
@Data
@ApiModel("短信业务配置")
@TableName("`sms_config`")
public class SmsConfig {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
    @ExcelColumn(name="主键")
    private Integer id;
    @ApiModelProperty(value = "创建人编码")
    @ExcelColumn(name="创建人编码")
    private String creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码")
    @ExcelColumn(name="更新人编码")
    private String edirot;
    @ApiModelProperty(value = "更新时间")
    @ExcelColumn(name="更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
    @ExcelColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String remark;
    @ApiModelProperty(value = "开启状态:0开启;1关闭", example = "1")
    @ExcelColumn(name="开启状态:0开启;1关闭")
    private Integer status;
    @ApiModelProperty(value = "短信编码")
    @ExcelColumn(name="短信编码")
    private String code;
    @ApiModelProperty(value = "短信内容")
    @ExcelColumn(name="短信内容")
    private String content;
    @ApiModelProperty(value = "短信类型 1=访客业务;2=访客报备;3=隐患随手拍;4=用车申请;5=会议室信息;6=物流车预约;7=物流车作业")
    @ExcelColumn(name="短信类型 1=访客业务;2=访客报备;3=隐患随手拍;4=用车申请;5=会议室信息;6=物流车预约;7=物流车作业")
    private String objType;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
@@ -86,9 +86,10 @@
    @ExcelColumn(name="关联对象编码")
    private Integer objId;
    @ApiModelProperty(value = "关联对象类型")
    @ExcelColumn(name="关联对象类型")
    @ApiModelProperty(value = "关联对象类型 0=验证码;1=访客业务;2=访客报备;3=隐患随手拍;4=用车申请;5=会议室信息;6=物流车预约;7=物流车作业")
    @ExcelColumn(name="关联对象类型 0=验证码;1=访客业务;2=访客报备;3=隐患随手拍;4=用车申请;5=会议室信息;6=物流车预约;7=物流车作业")
    private String objType;
    @ApiModelProperty(value = "附件集合")
    @TableField(exist = false)
    private   List<Map<String,Object>> fileList;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java
@@ -78,7 +78,14 @@
     * @return List<Category>
     */
    List<Category> findList(Category category);
    /**
     * è‡ªå®šä¹‰åˆ—表
     * @param category
     * @return
     */
    List<Category> queryList(Category category);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.doumee.service.business;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.SmsConfig;
import java.util.List;
/**
 * çŸ­ä¿¡ä¸šåŠ¡é…ç½®Service定义
 * @author æ±Ÿè¹„蹄
 * @date 2024/10/09 15:41
 */
public interface SmsConfigService {
    /**
     * åˆ›å»º
     *
     * @param smsConfig å®žä½“对象
     * @return Integer
     */
    Integer create(SmsConfig smsConfig);
    /**
     * ä¸»é”®åˆ é™¤
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    /**
     * åˆ é™¤
     *
     * @param smsConfig å®žä½“对象
     */
    void delete(SmsConfig smsConfig);
    /**
     * æ‰¹é‡ä¸»é”®åˆ é™¤
     *
     * @param ids ä¸»é”®é›†
     */
    void deleteByIdInBatch(List<Integer> ids);
    /**
     * ä¸»é”®æ›´æ–°
     *
     * @param smsConfig å®žä½“对象
     */
    void updateById(SmsConfig smsConfig);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
     *
     * @param smsConfigs å®žä½“集
     */
    void updateByIdInBatch(List<SmsConfig> smsConfigs);
    /**
     * ä¸»é”®æŸ¥è¯¢
     *
     * @param id ä¸»é”®
     * @return SmsConfig
     */
    SmsConfig findById(Integer id);
    /**
     * æ¡ä»¶æŸ¥è¯¢å•条记录
     *
     * @param smsConfig å®žä½“对象
     * @return SmsConfig
     */
    SmsConfig findOne(SmsConfig smsConfig);
    /**
     * æ¡ä»¶æŸ¥è¯¢
     *
     * @param smsConfig å®žä½“对象
     * @return List<SmsConfig>
     */
    List<SmsConfig> findList(SmsConfig smsConfig);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<SmsConfig>
     */
    PageData<SmsConfig> findPage(PageWrap<SmsConfig> pageWrap);
    /**
     * æ¡ä»¶ç»Ÿè®¡
     *
     * @param smsConfig å®žä½“对象
     * @return long
     */
    long count(SmsConfig smsConfig);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1516,6 +1516,7 @@
            //生成任务记录
            PlatformJob platformJob = platformBooks.toPlatformJob();
            platformJob.setId(null);
            platformJob.setPlatformGroupId(platformReason.getGroupId().intValue());
            platformJob.setType(Constants.platformJobType.sgscxh);
            platformJob.setStatus(Constants.PlatformJobStatus.WART_SIGN_IN.getKey());
@@ -1533,7 +1534,6 @@
            platformLog.setObjId(platformJob.getId().toString());
            platformLog.setAfterContent(JSONObject.toJSONString(platformJob));
            platformLogMapper.insert(platformLog);
        }else{
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -58,6 +58,7 @@
        }
        if(StringUtils.isBlank(model.getCode())
            ||model.getType()==null
            ||model.getCateId()==null
            ||model.getType()<0
            ||model.getType()>3
        ){
@@ -183,6 +184,7 @@
        if(StringUtils.isBlank(model.getCode())
                ||model.getId()==null
                ||model.getType()==null
                ||model.getCateId()==null
                ||model.getType()<0
                ||model.getType()>3
        ){
@@ -226,6 +228,8 @@
                .set(Cars::getAuthStatus,Constants.ZERO)
                .set(Cars::getType,model.getType())
                .set(Cars::getCode,model.getCode())
                .set(Cars::getGroupId,model.getGroupId())
                .set(Cars::getCateId,model.getCateId())
                .set(Cars::getEditDate,model.getEditDate())
                .set(Cars::getEdirot,model.getEdirot())
                .set(Cars::getMemberId,model.getMemberId())
@@ -248,6 +252,10 @@
    public Cars findById(Integer id) {
        return carsMapper.selectById(id);
    }
    @Override
    public Cars findOne(Cars cars) {
@@ -272,9 +280,17 @@
        queryWrapper.selectAs(SystemUser::getRealname,Cars::getEditorName);
        queryWrapper.selectAs(Member::getPhone,Cars::getMemberPhone);
        queryWrapper.selectAs(Company::getCompanyNamePath,Cars::getCompanyName);
        queryWrapper.selectAs(Category::getParentId,Cars::getCatePId);
        queryWrapper.selectAs(Category::getName,Cars::getCateName);
        queryWrapper.select(" c.name as catePName");
        queryWrapper.select(" c1.COMPANY_NAME_PATH as carCompanyNamePath");
        queryWrapper.select(" c1.name as carCompanyName");
        queryWrapper.leftJoin(Member.class,Member::getId,Cars::getMemberId);
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Cars::getEdirot);
        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
        queryWrapper.leftJoin(Category.class,Category::getId,Cars::getCateId);
        queryWrapper.leftJoin("category c on t4.PARENT_ID = c.id");
        queryWrapper.leftJoin("company c1 on t.GROUP_ID = c1.id");
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                .or().like(Member::getPhone,pageWrap.getModel().getMemberName()));
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getCompanyNamePath,pageWrap.getModel().getCompanyName());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -21,6 +21,8 @@
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * åˆ†ç±»ä¿¡æ¯è¡¨Service实现
@@ -51,7 +53,7 @@
        insert.setStatus(Constants.ZERO);
        insert.setSortnum(category.getSortnum());
        insert.setImgurl(category.getImgurl());
        insert.setType(Constants.ZERO);
        insert.setType(category.getType());
        insert.setParentId(category.getParentId());
        categoryMapper.insert(insert);
        return insert.getId();
@@ -59,7 +61,9 @@
    @Override
    public void deleteById(Integer id) {
        categoryMapper.deleteById(id);
        categoryMapper.update(null,new UpdateWrapper<Category>().lambda().set(Category::getIsdeleted,Constants.ONE)
                .eq(Category::getId,id)
        );
    }
    @Override
@@ -73,7 +77,9 @@
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        categoryMapper.deleteBatchIds(ids);
        categoryMapper.update(null,new UpdateWrapper<Category>().lambda().set(Category::getIsdeleted,Constants.ONE)
                .in(Category::getId,ids)
        );
    }
    @Override
@@ -110,59 +116,38 @@
    }
    @Override
    public List<Category> queryList(Category category) {
        List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
                .eq(Objects.nonNull(category)&&Objects.nonNull(category.getType()),Category::getType,category.getType())
                .isNull(Objects.nonNull(category)&&Objects.isNull(category.getParentId()),Category::getParentId)
                .eq(Objects.nonNull(category)&&Objects.nonNull(category.getParentId()),Category::getParentId,category.getParentId())
                .eq(Category::getIsdeleted,Constants.ZERO)
        );
        return categoryList;
    }
    @Override
    public PageData<Category> findPage(PageWrap<Category> pageWrap) {
        IPage<Category> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(Category::getId, pageWrap.getModel().getId());
        queryWrapper.lambda().eq(Category::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType())
                .isNull(Category::getParentId);
        PageData<Category> categoryPageData = PageData.from(categoryMapper.selectPage(page, queryWrapper));
        //查询所有二级数据
        List<Category> categoryList = categoryMapper.selectList(
                new QueryWrapper<Category>().lambda()
                        .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType())
                        .eq(Category::getIsdeleted,Constants.ZERO).isNotNull(Category::getParentId));
        for (Category category:categoryPageData.getRecords()) {
            category.setChildCategoryList(
                    categoryList.stream().filter(i->Constants.equalsInteger(i.getParentId(),category.getId())).collect(Collectors.toList())
            );
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(Category::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(Category::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(Category::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(Category::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(Category::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(Category::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(Category::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().eq(Category::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(Category::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(Category::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getSortnum() != null) {
            queryWrapper.lambda().eq(Category::getSortnum, pageWrap.getModel().getSortnum());
        }
        if (pageWrap.getModel().getImgurl() != null) {
            queryWrapper.lambda().eq(Category::getImgurl, pageWrap.getModel().getImgurl());
        }
        if (pageWrap.getModel().getType() != null) {
            queryWrapper.lambda().eq(Category::getType, pageWrap.getModel().getType());
        }
        if (pageWrap.getModel().getParentId() != null) {
            queryWrapper.lambda().eq(Category::getParentId, pageWrap.getModel().getParentId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(categoryMapper.selectPage(page, queryWrapper));
        return categoryPageData;
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -60,6 +60,9 @@
    private PlatformReasonMapper platformReasonMapper;
    @Autowired
    private PlatformGroupMapper platformGroupMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
@@ -241,6 +244,13 @@
        if(Objects.isNull(platformReason)|| !Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"入园原因信息异常,请刷新重试");
        }
        PlatformGroup platformGroup= platformGroupMapper.selectById(platformReason.getGroupId());
        if(Objects.isNull(platformGroup)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到绑定月台组数据");
        }
        if(!Constants.equalsInteger(platformGroup.getIsdeleted(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绑定月台组数据异常,请联系管理员");
        }
        //查询车辆是否为自有车
        if(carsMapper.selectCount(new QueryWrapper<Cars>().lambda().eq(Cars::getIsdeleted,Constants.ZERO).eq(Cars::getCode,platformBooksApplyDTO.getCarCodeFront()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"["+platformBooksApplyDTO.getCarCodeFront()+"]属于内部车辆,无法预约");
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -693,6 +693,7 @@
                        .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(),
                                Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                Constants.PlatformJobStatus.CALLED.getKey())
                        .orderByDesc(PlatformJob::getStatus)
                        .orderByAsc(PlatformJob::getSignDate)
        );
        //获取所有月台组
@@ -720,6 +721,7 @@
                            .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(),
                                    Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                    Constants.PlatformJobStatus.CALLED.getKey())
                            .orderByDesc(PlatformJob::getStatus)
                            .orderByDesc(PlatformJob::getSignDate));
            platformGroup.setSignJobList(platformJobSignInList);
            //查询当前月台组下
@@ -1376,7 +1378,8 @@
            }
        }else if(Constants.equalsInteger(objType,Constants.PlatformJobLogType.WORKING.getKey())){
            platformLog.setParam1(DateUtil.dateTypeToString(platformLog.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
            platformLog.setParam3("0");
            platformLog.setParam3("0");
            platformLog.setRemark(platformJobBefor.getPlatformId().toString());
        }else{
            platformLog.setParam3("0");
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java
@@ -5,7 +5,8 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.PlatformLogMapper;
import com.doumee.dao.business.model.PlatformLog;
import com.doumee.dao.business.join.PlatformLogJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.openapi.request.CarLogsListRequest;
import com.doumee.dao.openapi.response.CarLogsListResponse;
import com.doumee.service.business.PlatformLogService;
@@ -13,6 +14,8 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -32,6 +35,9 @@
    @Autowired
    private PlatformLogMapper platformLogMapper;
    @Autowired
    private PlatformLogJoinMapper platformLogJoinMapper;
    @Override
    public Integer create(PlatformLog platformLog) {
@@ -93,30 +99,27 @@
    @Override
    public PageData<PlatformLog> findPage(PageWrap<PlatformLog> pageWrap) {
        IPage<PlatformLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<PlatformLog> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<PlatformLog> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.lambda()
                .eq(pageWrap.getModel().getId() != null, PlatformLog::getId, pageWrap.getModel().getId())
                .eq(pageWrap.getModel().getCreator() != null, PlatformLog::getCreator, pageWrap.getModel().getCreator())
                .ge(pageWrap.getModel().getCreateDate() != null, PlatformLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
                .le(pageWrap.getModel().getCreateDate() != null, PlatformLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()))
                .eq(pageWrap.getModel().getEditor() != null, PlatformLog::getEditor, pageWrap.getModel().getEditor())
                .ge(pageWrap.getModel().getEditDate() != null, PlatformLog::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()))
                .le(pageWrap.getModel().getEditDate() != null, PlatformLog::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
                .eq(pageWrap.getModel().getIsdeleted() != null, PlatformLog::getIsdeleted, pageWrap.getModel().getIsdeleted())
                .eq(pageWrap.getModel().getRemark() != null, PlatformLog::getRemark, pageWrap.getModel().getRemark())
                .eq(pageWrap.getModel().getJobId() != null, PlatformLog::getJobId, pageWrap.getModel().getJobId())
                .eq(pageWrap.getModel().getTitle() != null, PlatformLog::getTitle, pageWrap.getModel().getTitle())
                .eq(pageWrap.getModel().getContent() != null, PlatformLog::getContent, pageWrap.getModel().getContent())
                .eq(pageWrap.getModel().getObjType() != null, PlatformLog::getObjType, pageWrap.getModel().getObjType())
                .eq(pageWrap.getModel().getObjId() != null, PlatformLog::getObjId, pageWrap.getModel().getObjId())
                .eq(pageWrap.getModel().getBeforeContent() != null, PlatformLog::getBeforeContent, pageWrap.getModel().getBeforeContent())
                .eq(pageWrap.getModel().getAfterContent() != null, PlatformLog::getAfterContent, pageWrap.getModel().getAfterContent())
                .eq(pageWrap.getModel().getParam1() != null, PlatformLog::getParam1, pageWrap.getModel().getParam1())
                .eq(pageWrap.getModel().getParam2() != null, PlatformLog::getParam2, pageWrap.getModel().getParam2())
                .eq(pageWrap.getModel().getParam3() != null, PlatformLog::getParam3, pageWrap.getModel().getParam3())
                .eq(pageWrap.getModel().getParam4() != null, PlatformLog::getParam4, pageWrap.getModel().getParam4())
        queryWrapper.selectAll(PlatformLog.class)
                .selectAs(Platform::getName,PlatformLog::getPlatformName)
                .selectAs(PlatformGroup::getName,PlatformLog::getPlatformGroupName)
                .selectAs(PlatformJob::getCarCodeFront,PlatformLog::getCarCodeFront)
                .selectAs(PlatformJob::getCarCodeBack,PlatformLog::getCarCodeBack)
                .selectAs(PlatformJob::getBillCode,PlatformLog::getBillCode)
                .selectAs(PlatformJob::getContractNum,PlatformLog::getContractNum)
                .leftJoin(PlatformJob.class,PlatformJob::getId,PlatformLog::getJobId)
                .leftJoin(Platform.class,Platform::getId,PlatformLog::getRemark)
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId)
                .like(pageWrap.getModel().getPlatformName() != null, Platform::getName, pageWrap.getModel().getPlatformName())
                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformGroup::getId, pageWrap.getModel().getPlatformGroupId())
                .like(pageWrap.getModel().getCarCodeFront() != null, PlatformJob::getCarCodeFront, pageWrap.getModel().getCarCodeFront())
                .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformLog::getParam1, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
                .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformLog::getParam2, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
                .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.OBJ_TYPE,'"+pageWrap.getModel().getQueryStatus()+"') and t.remark is not null  ")
        ;
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
@@ -124,7 +127,13 @@
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(platformLogMapper.selectPage(page, queryWrapper));
        IPage<PlatformLog> platformJobIPage = platformLogJoinMapper.selectJoinPage(page,PlatformLog.class,queryWrapper);
        for (PlatformLog platformLog:platformJobIPage.getRecords()) {
            if(StringUtils.isBlank(platformLog.getBillCode())){
                platformLog.setBillCode(platformLog.getContractNum());
            }
        }
        return PageData.from(platformJobIPage);
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
@@ -323,6 +323,9 @@
                .select(" ( select ROUND( ifnull(SUM(pl.PARAM3),0) / 3600 , 2 )   from platform_log pl  where   pl.remark = t.id  " +
                        " and pl.CREATE_DATE > '"+DateUtil.getFomartDate(platform.getQueryDateStart(),"yyyy-MM-dd")+" 00:00:00'  " +
                        "and pl.CREATE_DATE <=  '"+DateUtil.getFomartDate(platform.getQueryDateEnd(),"yyyy-MM-dd")+" 23:59:59'  ) as workCountTime ")
                .select(" ( select count(1)  from platform_log pl  where   pl.remark = t.id  " +
                        " and pl.CREATE_DATE > '"+DateUtil.getFomartDate(platform.getQueryDateStart(),"yyyy-MM-dd")+" 00:00:00'  " +
                        "and pl.CREATE_DATE <=  '"+DateUtil.getFomartDate(platform.getQueryDateEnd(),"yyyy-MM-dd")+" 23:59:59' and pl.OBJ_TYPE = 5  ) as stopCount ")
                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId);
        queryWrapper
                .eq(platform.getGroupId() != null, Platform::getGroupId, platform.getGroupId())
@@ -349,8 +352,6 @@
            //查询2日期相差天数
            Integer sumDays = DateUtil.daysBetweenDates(platform.getQueryDateEnd(),platform.getQueryDateStart())+1;
            for (Platform bean:platformList) {
                List<PlatformJob> beanJobList = platformJobList.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),bean.getId())).collect(Collectors.toList());
                bean.setStopCount(beanJobList.size());
                if(Objects.isNull(bean.getOpenTime())||bean.getOpenTime().compareTo(BigDecimal.ZERO)<=0){
                    bean.setUseRata(BigDecimal.ZERO);
                    continue;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
@@ -49,11 +49,12 @@
    public Integer create(PlatformWaterGas platformWaterGas) {
        if(platformWaterGas.getTimeInfo() ==null || platformWaterGas.getNum()==null
        ||(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO) && StringUtils.isBlank(platformWaterGas.getCarCode()))){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该年月数据已存在,请勿重新录入,可以尝试搜索后进行数据修改!");
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,参数错误!");
        }
        if( platformWaterGasMapper.selectCount(new QueryWrapper<PlatformWaterGas>().lambda()
                .eq(PlatformWaterGas::getIsdeleted, Constants.ZERO)
                .apply("to_days(time_info) = to_days('"+ DateUtil.getPlusTime2(platformWaterGas.getTimeInfo()) +"')")
                .eq(PlatformWaterGas::getType,platformWaterGas.getType())
                .eq(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO),PlatformWaterGas::getCarCode,platformWaterGas.getCarCode()))>0){
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,该年月数据已存在,请勿重新录入,可以尝试搜索后进行数据修改!");
        }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
package com.doumee.service.business.impl;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.SmsConfigMapper;
import com.doumee.dao.business.model.SmsConfig;
import com.doumee.service.business.SmsConfigService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
 * çŸ­ä¿¡ä¸šåŠ¡é…ç½®Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2024/10/09 15:41
 */
@Service
public class SmsConfigServiceImpl implements SmsConfigService {
    @Autowired
    private SmsConfigMapper smsConfigMapper;
    @Override
    public Integer create(SmsConfig smsConfig) {
        smsConfigMapper.insert(smsConfig);
        return smsConfig.getId();
    }
    @Override
    public void deleteById(Integer id) {
        smsConfigMapper.deleteById(id);
    }
    @Override
    public void delete(SmsConfig smsConfig) {
        UpdateWrapper<SmsConfig> deleteWrapper = new UpdateWrapper<>(smsConfig);
        smsConfigMapper.delete(deleteWrapper);
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        smsConfigMapper.deleteBatchIds(ids);
    }
    @Override
    public void updateById(SmsConfig smsConfig) {
        smsConfigMapper.updateById(smsConfig);
    }
    @Override
    public void updateByIdInBatch(List<SmsConfig> smsConfigs) {
        if (CollectionUtils.isEmpty(smsConfigs)) {
            return;
        }
        for (SmsConfig smsConfig: smsConfigs) {
            this.updateById(smsConfig);
        }
    }
    @Override
    public SmsConfig findById(Integer id) {
        return smsConfigMapper.selectById(id);
    }
    @Override
    public SmsConfig findOne(SmsConfig smsConfig) {
        QueryWrapper<SmsConfig> wrapper = new QueryWrapper<>(smsConfig);
        return smsConfigMapper.selectOne(wrapper);
    }
    @Override
    public List<SmsConfig> findList(SmsConfig smsConfig) {
        QueryWrapper<SmsConfig> wrapper = new QueryWrapper<>(smsConfig);
        return smsConfigMapper.selectList(wrapper);
    }
    @Override
    public PageData<SmsConfig> findPage(PageWrap<SmsConfig> pageWrap) {
        IPage<SmsConfig> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<SmsConfig> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(SmsConfig::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(SmsConfig::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(SmsConfig::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(SmsConfig::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEdirot() != null) {
            queryWrapper.lambda().eq(SmsConfig::getEdirot, pageWrap.getModel().getEdirot());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(SmsConfig::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(SmsConfig::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(SmsConfig::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(SmsConfig::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(SmsConfig::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getCode() != null) {
            queryWrapper.lambda().eq(SmsConfig::getCode, pageWrap.getModel().getCode());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(SmsConfig::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getObjType() != null) {
            queryWrapper.lambda().eq(SmsConfig::getObjType, pageWrap.getModel().getObjType());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(smsConfigMapper.selectPage(page, queryWrapper));
    }
    @Override
    public long count(SmsConfig smsConfig) {
        QueryWrapper<SmsConfig> wrapper = new QueryWrapper<>(smsConfig);
        return smsConfigMapper.selectCount(wrapper);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -109,10 +109,10 @@
        smsEmail.setType(Constants.ZERO);
        smsEmail.setTitle("短信验证码");
        smsEmail.setContent(content);
        smsEmail.setObjType(Constants.ZERO+"");
        smsEmailMapper.insert(smsEmail);
        return smsEmail.getId();
    }
@@ -249,4 +249,27 @@
        QueryWrapper<SmsEmail> wrapper = new QueryWrapper<>(smsEmail);
        return smsEmailMapper.selectCount(wrapper);
    }
    public static void sendBusiness(EmayService emayService ,SmsEmailMapper smsEmailMapper ,List<String> phoneList,String objType,String content,Integer objId){
        //TODO æ˜¯å¦å‘送短信
        for (String phone:phoneList) {
            boolean result=   emayService.sendSingleSms(phone,content);
            if(!result){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,短信验证码发送失败,请稍后重试!");
            }
            SmsEmail smsEmail = new SmsEmail();
            smsEmail.setIsdeleted(Constants.ZERO);
            smsEmail.setCreateDate(new Date());
            smsEmail.setStatus(Constants.ONE);
            smsEmail.setType(Constants.ZERO);
            smsEmail.setTitle("业务短信");
            smsEmail.setContent(content);
            smsEmail.setObjType(objType);
            smsEmail.setObjId(objId);
            smsEmailMapper.insert(smsEmail);
        }
    }
}