jiangping
2024-12-06 e1552a4eb2699eb84c4e1419cb76b7beb4951c4a
Merge remote-tracking branch 'origin/master'
已修改19个文件
898 ■■■■■ 文件已修改
admin/.env.test 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/Inspection/plan.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/contract/components/contractEdit.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/finance/components/bullEdit.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/finance/components/details.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/workorder/components/OperaYwWorkorderWindow.vue 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/workorder/components/detail.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/workorder/workorderCate.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/workorder/workorderList.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/operation/device.vue 650 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/workOrder/list.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/.env.test
@@ -7,7 +7,7 @@
# VUE_APP_API_URL  = 'http://192.168.0.163:10010/'
# 萍姐
VUE_APP_API_URL  = 'http://192.168.0.105:10010/'
VUE_APP_API_URL  = 'http://192.168.0.108:10010/'
# 测试服务
# VUE_APP_API_URL  = 'https://dmtest.ahapp.net/gateway_interface'
admin/src/views/Inspection/plan.vue
@@ -20,8 +20,8 @@
      <ul class="toolbar" v-permissions="['business:ywpatrolscheme:create', 'business:ywpatrolscheme:delete']">
        <li><el-button type="primary" @click="editClick()" icon="el-icon-plus"
            v-permissions="['business:ywpatrolscheme:create']">新建</el-button></li>
        <el-button type="primary" plain  :loading="isWorking.export" v-permissions="['business:ywpatrolscheme:exportExcel']"
          @click="exportExcel">导出</el-button>
        <el-button type="primary" plain :loading="isWorking.export"
          v-permissions="['business:ywpatrolscheme:exportExcel']" @click="exportExcel">导出</el-button>
        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
            v-permissions="['business:ywpatrolscheme:delete']">删除</el-button></li> -->
      </ul>
@@ -29,7 +29,7 @@
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="title" label="计划名称" min-width="100px"></el-table-column>
        <el-table-column prop="lineId" label="计划编号" min-width="100px"></el-table-column>
        <el-table-column prop="code" label="计划编号" min-width="100px"></el-table-column>
        <el-table-column prop="userName" label="负责人员" min-width="100px"></el-table-column>
        <el-table-column prop="startDate" label="计划日期" min-width="150px">
admin/src/views/contract/components/contractEdit.vue
@@ -843,6 +843,8 @@
        this.$emit('close')
      } else {
        this.activeTabs = 0
        this.zlList = []
        this.wyList = []
      }
    }
  }
admin/src/views/finance/components/bullEdit.vue
@@ -219,7 +219,7 @@
      this.$refs.selectHouse.open('选择房源', { contractId: this.form.contractId, type: 0 })
    },
    getCompanyList () {
      companyList({})
      companyList({ type: 2, status: 0 })
        .then(res => {
          this.comparyList = res
        })
admin/src/views/finance/components/details.vue
@@ -7,7 +7,7 @@
                <el-tag type="success" v-if="info.status === 0">开启</el-tag>
                <el-tag type="info" v-if="info.status === 1">关闭</el-tag>
            </div>
            <el-button type="danger" v-if="info.status === 0" @click="closeDW()">关闭流水</el-button>
            <el-button type="danger" v-if="info.status !== 1 || !['3','4'].includes(info.contractStatus)" @click="closeDW()">关闭流水</el-button>
        </div>
        <div class="line"></div>
        <div class="main">
@@ -225,13 +225,13 @@
      tabsClick(val) {
        this.activeTabs = val
      },
      closeDW (id) {
      closeDW () {
        this.$confirm('确认关闭此流水吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          close(id)
          close(this.info.id)
            .then(res => {
              this.getDetails()
            })
admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
@@ -1,5 +1,6 @@
<template>
  <GlobalWindow width="800px" :title="title" :visible.sync="visible" @close="close" :confirm-working="isWorking" @confirm="confirm">
  <GlobalWindow width="800px" :title="title" :visible.sync="visible" @close="close" :confirm-working="isWorking"
    @confirm="confirm">
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="位置类型" prop="areaType">
        <el-select v-model="form.areaType">
@@ -49,7 +50,7 @@
              <i class="el-icon-plus avatar-uploader-icon"></i>
              <div>图片/视频</div>
            </div>
          </el-upload>
          </el-upload>
          <div v-for="(item, i) in fileList" :key="i" class="item">
            <i @click="handleDelImg(i)" class="el-icon-error close"></i>
            <el-image :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]" v-if="item.type == 0"
@@ -86,12 +87,8 @@
      // 表单数据
      form: {
        id: null,
        creator: '',
        createDate: '',
        editor: '',
        editDate: '',
        floor: '',
        isdeleted: '',
        title: '',
        remark: '',
        status: '',
@@ -103,7 +100,6 @@
        floorId: '',
        roomId: '',
        userId: '',
        phone: '',
        submitDate: '',
        cateId: '',
        areaType: '0',
@@ -147,6 +143,37 @@
      // 新建
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form = {
            id: null,
            editDate: '',
            floor: '',
            title: '',
            remark: '',
            status: '',
            sortnum: '',
            content: '',
            getDate: '',
            projectId: '',
            buildingId: '',
            floorId: '',
            roomId: '',
            userId: '',
            submitDate: '',
            cateId: '',
            areaType: '0',
            code: '',
            dealStatus: '',
            dispatchUserId: '',
            dispatchDate: '',
            dispatchInfo: '',
            dealUserId: '',
            dealDate: '',
            dealInfo: '',
            dealType: ''
          }
          this.buildList = []
          this.roomList = []
          this.levelList = []
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
@@ -179,16 +206,16 @@
    changeBuild(e) {
      this.$set(this.form, 'floorId', '')
      this.$set(this.form, 'roomId', '')
      if(this.form.areaType == 1){
      if (this.form.areaType == 1) {
        this.getLevel(e)
      }else{
      } else {
        this.getRoom(e)
      }
    },
    getLevel(buildingId) {
      getFloorList({ buildingId}).then(res => {
      getFloorList({ buildingId }).then(res => {
        this.levelList = res
      })
    },
@@ -199,9 +226,9 @@
      })
    },
    changeSel(e) {
      if(e && e.length == 2){
      if (e && e.length == 2) {
        this.$set(this.form, 'cateId', e[1])
      }else{
      } else {
        this.$set(this.form, 'cateId', '')
      }
    },
admin/src/views/workorder/components/detail.vue
@@ -1,12 +1,12 @@
<template>
  <GlobalWindow width="920px" title="工单详情" :visible.sync="visible" :confirm-working="isWorking" @close="close"
  <GlobalWindow width="960px" title="工单详情" :visible.sync="visible" :confirm-working="isWorking" @close="close"
    @confirm="confirm">
    <div class="main">
      <div class="title">
        <span>工单详情</span>
        <div>
          <div class="status primaryColor" v-if="info.dealStatus == 0 || info.dealStatus == null">待指派</div>
          <div class="status" v-if="info.dealStatus == 1">已指派</div>
          <div class="status green" v-if="info.dealStatus == 1">已指派</div>
          <div class="status gray" v-if="info.dealStatus == 2">已处理</div>
        </div>
      </div>
@@ -161,6 +161,7 @@
import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
import { getUserList } from '@/api/system/user'
import { Message, Loading } from 'element-ui'
import dayjs from 'dayjs'
export default {
  components: {
    GlobalWindow
@@ -222,6 +223,9 @@
      const { id } = this
      detailById(id).then(res => {
        this.info = res
        if(this.info.dealStatus == 1){
          this.$set(this.param, 'getDate',dayjs().format('YYYY-MM-DD HH:mm:ss') )
        }
      })
    },
    getStaff() {
@@ -300,9 +304,9 @@
    align-items: center;
    .status {
      padding: 0 6px;
      height: 22px;
      line-height: 22px;
      padding: 0 12px;
      height: 24px;
      line-height: 24px;
      border-radius: 2px;
      border: 1px solid #00BA92;
      color: #00BA92;
@@ -312,12 +316,17 @@
    }
    .primaryColor {
      border: 1px solid $primary-color;
      border: 1px solid rgba(63, 126, 239,.2);
      background-color: rgba(63, 126, 239,.2);
    }
    .green{
      background-color: rgba(83, 183, 148, .2);
      border: 1px solid rgba(83, 183, 148, .2);
    }
    .gray {
      color: gray;
      border: 1px solid gray;
      color: #333333;
      background-color: rgba(128, 128, 128, .2);
      border: 1px solid rgba(128, 128, 128, .2);
    }
  }
@@ -343,6 +352,10 @@
      width: 100%;
      display: flex;
      align-items: center;
      .la{
        margin-bottom: 0;
        width: 72px;
      }
    }
    .max {
admin/src/views/workorder/workorderCate.vue
@@ -4,8 +4,8 @@
      <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']">
        <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus"
            v-permissions="['business:category:create']">新建</el-button></li>
        <li v-permissions="['business:category:exportExcel']"><el-button type="primary"
            @click="exportExcel">导出</el-button></li>
        <!-- <li v-permissions="['business:category:exportExcel']"><el-button type="primary"
            @click="exportExcel">导出</el-button></li> -->
      </ul>
      <el-table row-key="id" :tree-props="{ children: 'childCategoryList' }" v-loading="isWorking.search"
        :data="dataList" stripe @selection-change="handleSelectionChange">
admin/src/views/workorder/workorderList.vue
@@ -19,14 +19,14 @@
        </el-select>
      </el-form-item>
      <el-form-item prop="cateId" label="工单分类">
        <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="请选择巡检区域" clearable
        <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="请选择工单分类" clearable
          :options="cateList" :props="{
            label: 'name',
            value: 'id',
            children: 'childCategoryList'
          }"></el-cascader>
      </el-form-item>
      <el-form-item label="提交日期">
      <el-form-item label="上报时间">
        <el-date-picker v-model="searchForm.selDate" @change="changeSelDate" format="yyyy-MM-dd"
          value-format="yyyy-MM-dd" type="daterange"></el-date-picker>
      </el-form-item>
@@ -168,6 +168,7 @@
        buildingId: '',
        cateId: '',
      }
      this.buildList = []
      this.search()
    },
    changeSelDate(e) {
h5/pages/operation/device.vue
@@ -5,226 +5,281 @@
                <view class="la"><text class="red">*</text>选择设备</view>
                <view class="line">
                    <view class="sel_wrap" @click="showModal = true">
                        <view class="left" :class="param.deviceName ? '' : 'placeholder9'">{{ param.deviceName ? param.deviceName : '请选择设备' }}</view>
                        <view class="left" :class="param.deviceName ? '' : 'placeholder9'">
                            {{ param.deviceName ? param.deviceName : '请选择设备' }}
                        </view>
                        <u-icon name="arrow-right" color="#999999" size="17"></u-icon>
                    </view>
                    <image class="icon" src="@/static/side/scan.png" mode=""></image>
                    <image @click="openQrcode" class="icon" src="@/static/side/scan.png" mode=""></image>
                </view>
            </view>
            <view class="item">
                <view class="la">设备状态</view>
                <view class="line">
                    <view class="radio_wrap">
                        <view class="ite" :class="{active: param.status == 0}" @click="statusChange(0)">正常</view>
                        <view class="ite" :class="{active: param.status == 1}" @click="statusChange(1)">损坏</view>
                        <view class="ite" :class="{active: param.status == 2}" @click="statusChange(2)">报废</view>
                    </view>
                </view>
            </view>
            <view class="item">
                <view class="la">上传视频/图片</view>
                <view class="upload_wrap">
                    <view class="upload_file" @click="showUpload = true">
                        <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                        <view class="mt6">图片/视频</view>
                    </view>
                    <view class="upload_file" v-for="(item, i) in fileList" :key="i">
                        <u-icon class="close" size="20" name="close-circle-fill" color="red"
                            @click="fileDel('fileList', 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>
                    </view>
                </view>
            </view>
            <view class="item">
                <view class="la">运维备注</view>
                <view class="line">
                    <textarea v-model="param.content" placeholder="请输入" placeholder-class="placeholder9" />
                </view>
            </view>
            <view class="item">
                <view class="la">设备状态</view>
                <view class="line">
                    <view class="radio_wrap">
                        <view class="ite" :class="{active: param.status == 0}" @click="statusChange(0)">正常</view>
                        <view class="ite" :class="{active: param.status == 1}" @click="statusChange(1)">损坏</view>
                        <view class="ite" :class="{active: param.status == 2}" @click="statusChange(2)">报废</view>
                    </view>
                </view>
            </view>
            <view class="item">
                <view class="la">上传视频/图片</view>
                <view class="upload_wrap">
                    <view class="upload_file" @click="showUpload = true">
                        <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
                        <view class="mt6">图片/视频</view>
                    </view>
                    <view class="upload_file" v-for="(item, i) in fileList" :key="i">
                        <u-icon class="close" size="20" name="close-circle-fill" color="red"
                            @click="fileDel('fileList', 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>
                    </view>
                </view>
            </view>
            <view class="item">
                <view class="la">运维备注</view>
                <view class="line">
                    <textarea v-model="param.content" placeholder="请输入" placeholder-class="placeholder9" />
                </view>
            </view>
        </view>
        <view class="sub_btn" @click="onSubmit">提交</view>
        <!--  -->
        <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
            <view class="sel_upload_wrap">
                <view class="btn" @click="uploadImage">选择图片</view>
                <view class="btn" @click="uploadVideo">选择视频</view>
            </view>
        </u-popup>
        <!--  -->
        <u-popup :show="showModal" @close="showModal = false" :safeAreaInsetBottom="true" :round="10" closeable closeOnClickOverlay>
            <view class="appr_modal">
                <view class="title">请选择设备</view>
                <view class="search_wrap">
                    <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
                    <input v-model="searchValue" @confirm="getDevice()" type="text" placeholder="搜索设备名称/编号" placeholder-class="placeholder9" />
                </view>
                <view class="modal_list">
                    <view class="item" v-for="item,i in deviceList" @click="deviceClick(item)">
                        <view class="name">[{{item.code}}] {{ item.name }}</view>
                        <image v-if="activeDevice.id == item.id" src="@/static/radioed.png" mode=""></image>
                    </view>
                </view>
                <view class="sub_btn" @click="handleDevice">确定选择</view>
            </view>
        <view class="sub_btn" @click="onSubmit">提交</view>
        <!--  -->
        <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
            <view class="sel_upload_wrap">
                <view class="btn" @click="uploadImage">选择图片</view>
                <view class="btn" @click="uploadVideo">选择视频</view>
            </view>
        </u-popup>
        <!--  -->
        <u-popup :show="showModal" @close="showModal = false" :safeAreaInsetBottom="true" :round="10" closeable
            closeOnClickOverlay>
            <view class="appr_modal">
                <view class="title">请选择设备</view>
                <view class="search_wrap">
                    <image class="mr12 search" src="@/static/home/ic_search@2x.png" mode="widthFix"></image>
                    <input v-model="searchValue" @confirm="getDevice()" type="text" placeholder="搜索设备名称/编号"
                        placeholder-class="placeholder9" />
                </view>
                <view class="modal_list">
                    <view class="item" v-for="item,i in deviceList" @click="deviceClick(item)">
                        <view class="name">[{{item.code}}] {{ item.name }}</view>
                        <image v-if="activeDevice.id == item.id" src="@/static/radioed.png" mode=""></image>
                    </view>
                </view>
                <view class="sub_btn" @click="handleDevice">确定选择</view>
            </view>
        </u-popup>
        <!--  -->
        <view class="reader-box" @click="stopScan" v-if="isScaning">
            <view class="reader" id="reader"></view>
        </view>
    </view>
</template>
<script>
    import {
        uploadUrl,
        ywDevicePost,
        ywDeviceCreate
    } from '@/api'
<script>
    import {
        uploadUrl,
        ywDevicePost,
        ywDeviceCreate
    } from '@/api'
    import dayjs from 'dayjs';
    import {
        Html5Qrcode
    } from 'html5-qrcode';
    export default {
        data() {
            return {
                param: {status: 0},
                showUpload: false,
                showModal: false,
                fileList: [],
                searchValue: '',
                deviceList: [],
                activeDevice: {}
                param: {
                    status: 0
                },
                showUpload: false,
                showModal: false,
                fileList: [],
                searchValue: '',
                deviceList: [],
                activeDevice: {},
                html5Qrcode: null,
                isScaning: false,
            };
        },
        onLoad() {
            this.getDevice()
        },
        methods: {
            onSubmit() {
                const { param, fileList } = this
                if(!param.deviceId) return this.showToast('请先选择要维护的设备')
                ywDeviceCreate({
                    ...param,
                    userId: uni.getStorageSync('userInfo').id,
                    dealDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
                    multifileList: fileList
                }).then(res => {
                    this.showToast('提交成功')
                    uni.navigateBack()
                })
            },
            getDevice(){
                ywDevicePost({
                    capacity: 9999,
                    page: 1,
                    model: {
                        name: this.searchValue
                    }
                }).then(res => {
                    this.deviceList = res.data.records || []
                })
            },
            handleDevice() {
                const { activeDevice } = this
                if(!activeDevice.id) return this.showToast('请先选择设备')
                this.$set(this.param, 'deviceId', activeDevice.id)
                this.$set(this.param, 'deviceName', activeDevice.name)
                this.showModal = false
            },
            deviceClick(item) {
                this.activeDevice = item
                this.$forceUpdate()
            },
            statusChange(val){
                this.param.status = val
            },
            fileDel(str, i) {
                this[str].splice(i, 1);
            },
            uploadImage() {
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
                            mask: true
                        });
                        const tempFilePaths = chooseImageRes.tempFilePaths;
                        let imgs = tempFilePaths.map((value, index) => {
                            return {
                                name: 'file',
                                uri: value
                            };
                        });
                        uni.uploadFile({
                            url: `${uploadUrl}`,
                            files: imgs,
                            name: 'file',
                            formData: {
                                folder: 'YW_DEVICE'
                            },
                            header: {
                                Dm_user_token: token
                            },
                            success: uploadFileRes => {
                                let res = JSON.parse(uploadFileRes.data);
                                if (res.data && res.data.length > 0) {
                                    res.data.forEach(i => {
                                        i.type = 0;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.fileList.push(i);
                                    });
                                }
                            },
                            fail(err) {
                                console.log('err', err);
                            },
                            complete() {
                                uni.hideLoading();
                                // if (i === chooseImageRes.tempFilePaths.length - 1) {
                                //   uni.hideLoading()
                                // }
                            }
                        });
                    }
                });
            },
            uploadVideo() {
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseVideo({
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
                            mask: true
                        });
                        uni.uploadFile({
                            url: `${uploadUrl}`,
                            filePath: chooseImageRes.tempFilePath,
                            header: {
                                Dm_user_token: token
                            },
                            name: 'file',
                            formData: {
                                folder: 'YW_DEVICE'
                            },
                            success: uploadFileRes => {
                                let res = JSON.parse(uploadFileRes.data);
                                if (res.data && res.data.length > 0) {
                                    res.data.forEach(i => {
                                        i.type = 1;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.fileList.push(i);
                                    });
                                }
                            },
                            complete() {
                                uni.hideLoading();
                            }
                        });
                    }
                });
            }
        },
        onLoad() {
            this.getDevice()
        },
        methods: {
            onSubmit() {
                const {
                    param,
                    fileList
                } = this
                if (!param.deviceId) return this.showToast('请先选择要维护的设备')
                ywDeviceCreate({
                    ...param,
                    userId: uni.getStorageSync('userInfo').id,
                    dealDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
                    multifileList: fileList
                }).then(res => {
                    this.showToast('提交成功')
                    uni.navigateBack()
                })
            },
            getDevice() {
                ywDevicePost({
                    capacity: 9999,
                    page: 1,
                    model: {
                        name: this.searchValue
                    }
                }).then(res => {
                    this.deviceList = res.data.records || []
                })
            },
            handleDevice() {
                const {
                    activeDevice
                } = this
                if (!activeDevice.id) return this.showToast('请先选择设备')
                this.$set(this.param, 'deviceId', activeDevice.id)
                this.$set(this.param, 'deviceName', activeDevice.name)
                this.showModal = false
            },
            deviceClick(item) {
                this.activeDevice = item
                this.$forceUpdate()
            },
            statusChange(val) {
                this.param.status = val
            },
            fileDel(str, i) {
                this[str].splice(i, 1);
            },
            uploadImage() {
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseImage({
                    count: 4,
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
                            mask: true
                        });
                        const tempFilePaths = chooseImageRes.tempFilePaths;
                        let imgs = tempFilePaths.map((value, index) => {
                            return {
                                name: 'file',
                                uri: value
                            };
                        });
                        uni.uploadFile({
                            url: `${uploadUrl}`,
                            files: imgs,
                            name: 'file',
                            formData: {
                                folder: 'YW_DEVICE'
                            },
                            header: {
                                Dm_user_token: token
                            },
                            success: uploadFileRes => {
                                let res = JSON.parse(uploadFileRes.data);
                                if (res.data && res.data.length > 0) {
                                    res.data.forEach(i => {
                                        i.type = 0;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.fileList.push(i);
                                    });
                                }
                            },
                            fail(err) {
                                console.log('err', err);
                            },
                            complete() {
                                uni.hideLoading();
                                // if (i === chooseImageRes.tempFilePaths.length - 1) {
                                //   uni.hideLoading()
                                // }
                            }
                        });
                    }
                });
            },
            uploadVideo() {
                this.showUpload = false;
                let token = uni.getStorageSync('token') || '';
                uni.chooseVideo({
                    success: chooseImageRes => {
                        uni.showLoading({
                            title: '上传中',
                            mask: true
                        });
                        uni.uploadFile({
                            url: `${uploadUrl}`,
                            filePath: chooseImageRes.tempFilePath,
                            header: {
                                Dm_user_token: token
                            },
                            name: 'file',
                            formData: {
                                folder: 'YW_DEVICE'
                            },
                            success: uploadFileRes => {
                                let res = JSON.parse(uploadFileRes.data);
                                if (res.data && res.data.length > 0) {
                                    res.data.forEach(i => {
                                        i.type = 1;
                                        i.fileurl = i.imgaddr;
                                        i.fileurlFull = i.url;
                                        this.fileList.push(i);
                                    });
                                }
                            },
                            complete() {
                                uni.hideLoading();
                            }
                        });
                    }
                });
            },
            openQrcode() {
                this.isScaning = true;
                Html5Qrcode.getCameras().then((devices) => {
                    if (devices && devices.length) {
                        this.html5Qrcode = new Html5Qrcode('reader');
                        this.html5Qrcode.start({
                                facingMode: 'environment'
                            }, {
                                focusMode: 'continuous', //设置连续聚焦模式
                                fps: 5, //设置扫码识别速度
                                qrbox: 280 //设置二维码扫描框大小
                            },
                            (decodeText, decodeResult) => {
                                if (decodeText) { //这里decodeText就是通过扫描二维码得到的内容
                                    this.action(decodeText) //对二维码逻辑处理
                                    this.stopScan(); //关闭扫码功能
                                }
                            },
                            (err) => {
                                // console.log(err);  //错误信息
                            }
                        );
                    }
                });
            },
            stopScan() {
                console.log('停止扫码')
                this.isScaning = false;
                if (this.html5Qrcode) {
                    this.html5Qrcode.stop();
                }
            }
        }
    }
</script>
@@ -238,13 +293,15 @@
            }
            .line {
                display: flex;
                align-items: center;
                .icon{
                    width: 52rpx;
                    height: 52rpx;
                    margin-left: 40rpx;
                display: flex;
                align-items: center;
                .icon {
                    width: 52rpx;
                    height: 52rpx;
                    margin-left: 40rpx;
                }
                textarea {
                    box-sizing: border-box;
                    width: 690rpx;
@@ -259,7 +316,7 @@
                }
            }
            .sel_wrap {
            .sel_wrap {
                flex: 1;
                height: 90rpx;
                display: flex;
@@ -267,27 +324,31 @@
                align-items: center;
                border-bottom: 1rpx solid #E5E5E5;
            }
            .radio_wrap{
                margin-top: 20rpx;
                width: 100%;
                display: flex;
                justify-content: space-between;
                .ite{
                    width: 216rpx;
                    height: 68rpx;
                    background: #F7F7F7;
                    border-radius: 36rpx;
                    font-size: 30rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                }
                .active{
                    color: $primaryColor;
                    border-color: $primaryColor;
                    background: rgba(0,104,255,0.1);
                }
            .radio_wrap {
                margin-top: 20rpx;
                width: 100%;
                display: flex;
                justify-content: space-between;
                .ite {
                    width: 216rpx;
                    height: 68rpx;
                    background: #F7F7F7;
                    border-radius: 36rpx;
                    font-size: 30rpx;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                }
                .active {
                    color: $primaryColor;
                    border-color: $primaryColor;
                    background: rgba(0, 104, 255, 0.1);
                }
            }
            .upload_wrap {
                display: flex;
                flex-wrap: wrap;
@@ -333,6 +394,7 @@
        }
    }
    .sel_upload_wrap {
        width: 100%;
        border-top: 1px solid #333333;
@@ -344,6 +406,7 @@
            text-align: center;
        }
    }
    .sub_btn {
        position: fixed;
        bottom: 68rpx;
@@ -360,51 +423,78 @@
        font-size: 32rpx;
        color: #FFFFFF;
    }
    .appr_modal {
        padding: 36rpx 30rpx 0;
        height: calc( 100vh - 120rpx );
        .title {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            margin-bottom: 40rpx;
            text-align: center;
        }
        .search_wrap {
            display: flex;
            align-items: center;
            width: 100%;
            height: 76rpx;
            background: #f2f2f2;
            border-radius: 38rpx;
            padding-left: 30rpx;
            input{
                flex: 1;
            }
            .search {
                width: 28rpx;
                height: 28rpx;
            }
        }
        .modal_list{
            height: calc( 100% - 360rpx );
            .item{
                display: flex;
                align-items: center;
                justify-content: space-between;
                height: 100rpx;
                font-size: 30rpx;
                border-bottom: 1px solid #E5E5E5;
                image{
                    width: 40rpx;
                    height: 40rpx;
                }
            }
            .active{
                color: $primaryColor;
            }
        }
    }
    .appr_modal {
        padding: 36rpx 30rpx 0;
        height: calc(100vh - 120rpx);
        .title {
            font-weight: 600;
            font-size: 32rpx;
            color: #222222;
            margin-bottom: 40rpx;
            text-align: center;
        }
        .search_wrap {
            display: flex;
            align-items: center;
            width: 100%;
            height: 76rpx;
            background: #f2f2f2;
            border-radius: 38rpx;
            padding-left: 30rpx;
            input {
                flex: 1;
            }
            .search {
                width: 28rpx;
                height: 28rpx;
            }
        }
        .modal_list {
            height: calc(100% - 360rpx);
            .item {
                display: flex;
                align-items: center;
                justify-content: space-between;
                height: 100rpx;
                font-size: 30rpx;
                border-bottom: 1px solid #E5E5E5;
                image {
                    width: 40rpx;
                    height: 40rpx;
                }
            }
            .active {
                color: $primaryColor;
            }
        }
    }
    .reader-box {
        position: fixed;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        background-color: rgba(0, 0, 0, 0.5);
    }
    .reader {
        width: 100%;
        // width: 540rpx;
        // height: 540rpx;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }
</style>
h5/pages/workOrder/list.vue
@@ -126,7 +126,7 @@
                    model: {
                        ...param,
                        queryStatus: activeTab,
                        dispatchUserId: selectAll ? '' : uni.getStorageSync('userInfo').id,
                        dealUserId: selectAll ? '' : uni.getStorageSync('userInfo').id,
                    }
                }).then(res => {
                    this.list = [...this.list, ...res.data.records]
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
@@ -56,7 +56,7 @@
    private String remark;
    @ApiModelProperty(value = "状态 0启用 1禁用", example = "1")
    @ExcelColumn(name="状态",index = 9,width = 6,valueMapping = "0=启用;1=停用;")
    @ExcelColumn(name="状态",index = 8,width = 6,valueMapping = "0=启用;1=停用;")
    private Integer status;
    @ApiModelProperty(value = "排序码", example = "1")
@@ -121,6 +121,5 @@
    @ApiModelProperty(value = "超期任务数")
    @TableField(exist = false)
    @ExcelColumn(name="超期任务数",index = 8,width = 6)
    private Integer timeOutTaskNum;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
@@ -26,129 +26,103 @@
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
    @ExcelColumn(name="主键")
    private Integer id;
    @ApiModelProperty(value = "创建人编码", example = "1")
    @ExcelColumn(name="创建人编码")
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
    @ExcelColumn(name="更新人编码")
    private Integer editor;
    @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 title;
    @ApiModelProperty(value = "备注")
    @ExcelColumn(name="备注")
    private String remark;
    @ApiModelProperty(value = "状态 0启用 1禁用", example = "1")
    @ExcelColumn(name="状态 0启用 1禁用")
    private Integer status;
    @ApiModelProperty(value = "排序码", example = "1")
    @ExcelColumn(name="排序码")
    private Integer sortnum;
    @ApiModelProperty(value = "情况说明")
    @ExcelColumn(name="情况说明")
    private String content;
    @ApiModelProperty(value = "上门时间")
    @ExcelColumn(name="上门时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date getDate;
    @ApiModelProperty(value = "所属项目编码(关联yw_project)", example = "1")
    @ExcelColumn(name="所属项目编码(关联yw_project)")
    private Integer projectId;
    @ApiModelProperty(value = "所属楼宇编码(关联yw_building)", example = "1")
    @ExcelColumn(name="所属楼宇编码(关联yw_building)")
    private Integer buildingId;
    @ApiModelProperty(value = "所属房间编码(关联yw_room)", example = "1")
    @ExcelColumn(name="所属房间编码(关联yw_room)")
    private Integer roomId;
    @ApiModelProperty(value = "所属楼层编码(关联yw_floor)", example = "1")
    @ExcelColumn(name="所属楼层编码(关联yw_floor)")
    private Integer floorId;
    @ApiModelProperty(value = "提报人编码", example = "1")
    @ExcelColumn(name="提报人编码")
    private Integer userId;
    @ApiModelProperty(value = "联系电话")
    @ExcelColumn(name="联系电话")
    private String phone;
    @ApiModelProperty(value = "提报时间")
    @ExcelColumn(name="提报时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ExcelColumn(name="上报时间",index = 5,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date submitDate;
    @ApiModelProperty(value = "工单分类编码(关联category)", example = "1")
    @ExcelColumn(name="工单分类编码(关联category)")
    private Integer cateId;
    @ApiModelProperty(value = "保修区域类型 0室内维修 1公共区域", example = "1")
    @ExcelColumn(name="保修区域类型 0室内维修 1公共区域")
    @ExcelColumn(name="位置区域",valueMapping = "0=室内维修;1=公共区域;",index = 0,width = 10)
    private Integer areaType;
    @ApiModelProperty(value = "工单编号")
    @ExcelColumn(name="工单编号")
    private String code;
    @ApiModelProperty(value = "处理状态 0待处理 1已分派 2已处理", example = "1")
    @ExcelColumn(name="处理状态 0待处理 1已分派 2已处理")
    @ExcelColumn(name="工单状态",index = 7,width = 10,valueMapping = "0=待处理;1=已分派;1=已处理;")
    private Integer dealStatus;
    @ApiModelProperty(value = "分派人编码(关联system_user)", example = "1")
    @ExcelColumn(name="分派人编码(关联system_user)")
    private Integer dispatchUserId;
    @ApiModelProperty(value = "分派时间")
    @ExcelColumn(name="分派时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dispatchDate;
    @ApiModelProperty(value = "分派处理说明")
    @ExcelColumn(name="分派处理说明")
    private String dispatchInfo;
    @ApiModelProperty(value = "处理人编码(关联system_user)", example = "1")
    @ExcelColumn(name="处理人编码(关联system_user)")
    private Integer dealUserId;
    @ApiModelProperty(value = "处理时间")
    @ExcelColumn(name="处理时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dealDate;
    @ApiModelProperty(value = "处理备注")
    @ExcelColumn(name="处理备注")
    private String dealInfo;
    @ApiModelProperty(value = "处理方式 0指派后处理 1直接回复", example = "1")
    @ExcelColumn(name="处理方式 0指派后处理 1直接回复")
    private Integer dealType;
    @ApiModelProperty(value = "项目名称")
    @TableField(exist = false)
    private String projectName;
@@ -158,9 +132,11 @@
    private String queryStatus;
    @ApiModelProperty(value = "楼宇名称")
    @ExcelColumn(name="楼宇",index = 1,width = 10)
    @TableField(exist = false)
    private String buildingName;
    @ApiModelProperty(value = "房源名称")
    @ExcelColumn(name="房源",index = 2,width = 10)
    @TableField(exist = false)
    private String roomName;
    @ApiModelProperty(value = "楼层名称")
@@ -170,6 +146,7 @@
    @TableField(exist = false)
    private String roomNum;
    @ApiModelProperty(value = "提报人姓名")
    @ExcelColumn(name="上报人",index = 4,width = 10)
    @TableField(exist = false)
    private String creatorName;
    @ApiModelProperty(value = "提报人电话")
@@ -177,11 +154,13 @@
    private String creatorMobile;
    @ApiModelProperty(value = "处理人姓名")
    @TableField(exist = false)
    @ExcelColumn(name="处理人",index = 6,width = 10)
    private String dealUserName;
    @ApiModelProperty(value = "处理人组织")
    @TableField(exist = false)
    private String dealUserCompany;
    @ApiModelProperty(value = "类别名称")
    @ExcelColumn(name="工单分类",index = 3,width = 10)
    @TableField(exist = false)
    private String categoryName;
    @ApiModelProperty(value = "分配人姓名")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -25,10 +25,12 @@
import com.doumee.dao.admin.request.UpdateCompanySortDTO;
import com.doumee.dao.admin.response.CompanyDTO;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.YwContractMapper;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.dao.join.CompanyJoinMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.YwContract;
import com.doumee.dao.business.vo.CompanyTree;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.CompanyService;
@@ -63,6 +65,9 @@
    @Autowired
    private CompanyJoinMapper companyJoinMapper;
    @Autowired
    private YwContractMapper ywContractMapper;
    /**
     * 创建财务公司
@@ -77,6 +82,13 @@
                .eq(Company::getType,company.getType())
                .eq(Company::getIsdeleted,Constants.ZERO)) >0){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,名称不能重复~");
        }
        if(StringUtils.isNotBlank(company.getCode())){
            if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                    .eq(Company::getCode,company.getCode())
                    .eq(Company::getIsdeleted,Constants.ZERO)) >0){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,纳税识别号不能重复~");
            }
        }
        company.setCreateDate(new Date());
        company.setCreator(company.getLoginUserInfo().getId());
@@ -105,6 +117,13 @@
                .eq(Company::getName,company.getName())
                .eq(Company::getIsdeleted,Constants.ZERO)) >0){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织名称不能重复~");
        }
        if(StringUtils.isNotBlank(company.getCode())){
            if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                    .eq(Company::getCode,company.getCode())
                    .eq(Company::getIsdeleted,Constants.ZERO)) >0){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,纳税识别号不能重复~");
            }
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user ==null){
@@ -260,6 +279,9 @@
                .eq(Member::getIsdeleted,Constants.ZERO)) >0){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "对不起,该部门下存在人员信息,不能进行删除操作!");
        }
        if(ywContractMapper.selectCount(new QueryWrapper<YwContract>().lambda().eq(YwContract::getCompanyId,id))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "当前公司已关联业务,不可删除");
        }
        Company company = new Company();
        company.setId(id);
@@ -308,6 +330,15 @@
                .eq(Company::getIsdeleted,Constants.ZERO)) >0){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,组织名称不能重复~");
        }
        if(StringUtils.isNotBlank(company.getCode())){
            if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                    .eq(Company::getCode,company.getCode())
                    .ne(Company::getId,company.getId())
                    .eq(Company::getIsdeleted,Constants.ZERO)) >0){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,纳税识别号不能重复~");
            }
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(user == null){
            user = company.getLoginUserInfo();
@@ -367,6 +398,14 @@
                .eq(Company::getIsdeleted,Constants.ZERO)) >0){
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,名称不能重复~");
        }
        if(StringUtils.isNotBlank(company.getCode())){
            if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
                    .eq(Company::getCode,company.getCode())
                    .ne(Company::getId,company.getId())
                    .eq(Company::getIsdeleted,Constants.ZERO)) >0){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,纳税识别号不能重复~");
            }
        }
        companyMapper.updateById(company);
        return company.getId();
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwAccountServiceImpl.java
@@ -8,9 +8,11 @@
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwAccountMapper;
import com.doumee.dao.business.YwContractRevenueMapper;
import com.doumee.dao.business.dao.CompanyMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.YwAccount;
import com.doumee.dao.business.model.YwContractRevenue;
import com.doumee.dao.business.model.YwProject;
import com.doumee.service.business.YwAccountService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -18,6 +20,7 @@
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.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -37,6 +40,8 @@
    private YwAccountMapper ywAccountMapper;
    @Autowired
    private CompanyMapper companyMapper;
    @Autowired
    private YwContractRevenueMapper ywContractRevenueMapper;
    @Override
    public Integer create(YwAccount model) {
@@ -49,6 +54,15 @@
                || !Constants.equalsInteger(ywProject.getType(),Constants.TWO)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,请选择正确的公司信息!");
        }
        if(StringUtils.isNotBlank(model.getTitle())){
            if(ywAccountMapper.selectCount(new QueryWrapper<YwAccount>().lambda()
                    .eq(YwAccount::getTitle,model.getTitle())
                    .eq(YwAccount::getIsdeleted,Constants.ZERO)) >0){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,收支条目不能重复~");
            }
        }
        model.setCreator(model.getLoginUserInfo().getId());
        model.setIsdeleted(Constants.ZERO);
        model.setCreateDate(new Date());
@@ -61,6 +75,9 @@
    @Override
    public void deleteById(Integer id, LoginUserInfo user) {
        if(ywContractRevenueMapper.selectCount(new QueryWrapper<YwContractRevenue>().lambda().eq(YwContractRevenue::getAccountId,id))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"当前收支账户已关联业务,不可删除");
        }
        YwAccount model = new YwAccount();
        model.setId(id);
        model.setIsdeleted(Constants.ONE);
@@ -95,6 +112,15 @@
                || !Constants.equalsInteger(ywProject.getType(),Constants.TWO)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,请选择正确的公司信息!");
        }
        if(StringUtils.isNotBlank(model.getTitle())){
            if(ywAccountMapper.selectCount(new QueryWrapper<YwAccount>().lambda()
                    .eq(YwAccount::getTitle,model.getTitle())
                    .ne(YwAccount::getId,model.getId())
                    .eq(YwAccount::getIsdeleted,Constants.ZERO)) >0){
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "对不起,收支条目不能重复~");
            }
        }
        model.setEditDate(model.getCreateDate());
        model.setEditor(model.getCreator());
        ywAccountMapper.updateById(model);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRevenueServiceImpl.java
@@ -268,6 +268,7 @@
                new MPJLambdaWrapper<YwContractRevenue>().selectAll(YwContractRevenue.class)
                        .selectAs(YwContractBill::getCode,YwContractRevenue::getBillCode)
                        .selectAs(YwContract::getCode,YwContractRevenue::getContractCode)
                        .selectAs(YwContract::getStatus,YwContractRevenue::getContractStatus)
                        .selectAs(YwCustomer::getName,YwContractRevenue::getCustomerName)
                        .selectAs(SystemUser::getRealname,YwContractRevenue::getRealname)
                        .selectAs(YwAccount::getTitle,YwContractRevenue::getAccountTitle)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -75,12 +75,20 @@
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
    public Integer create(YwContract model) {
        isParamValidCreated(model);
        model.setCreator(model.getLoginUserInfo().getId());
        model.setIsdeleted(Constants.ZERO);
        model.setCreateDate(new Date());
        model.setStatus(Constants.ZERO);
        model.setEditDate(model.getCreateDate());
        model.setEditor(model.getCreator());
        if(model.getStartDate().getTime() > System.currentTimeMillis()){
            model.setStatus(Constants.ZERO);
        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && model.getEndDate().getTime() > System.currentTimeMillis()){
            model.setStatus(Constants.ONE);
        }else{
            model.setStatus(Constants.TWO);
        }
        model.setStatus(Constants.ZERO);//待执行
        model.setRemark(getRemarlByParam(model));
        ywContractMapper.insert(model);
@@ -354,9 +362,6 @@
        update.setBtFee(param.getBtFee());
        update.setBtRemark(getbackRentRemarkByParam(param));
        ywContractMapper.updateById(update);
//        if(1==1){
//            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
//        }
        dealLogBiz(param,Constants.YwLogType.CONTRACT_BACK, param.getLoginUserInfo().getRealname(),getbackRentLogByParam(param));
        return param.getId();
    }
@@ -418,16 +423,8 @@
                        closeBills.add(bill);
                        noBills.add(bill);
                    }
//                    if(bill.getStartDate().getTime()>param.getEditDate().getTime()){
//                        //如果还没开始,账单直接关闭
//                        closeBills.add(bill);
//                        noBills.add(bill);
//                    }else{
//                        canBills.add(bill);
//                    }
                }else  if(Constants.equalsInteger(bill.getPayStatus(),Constants.ONE) ){
                    if(bill.getStartDate().getTime()>param.getBtDate().getTime()){
//                    if(bill.getEndDate().getTime()<param.getEditDate().getTime()){
                        //如果已结清,账单直接关闭
                        noBills.add(bill);
                    }else{
@@ -490,6 +487,7 @@
                addBill.setContractId(param.getId());
                addBill.setType(Constants.TWO);
                addBill.setStatus(Constants.ZERO);
                addBill.setTotleFee(addBill.getReceivableFee());
                if(Constants.equalsInteger(addBill.getFeeType(),Constants.ONE)){
                    addBill.setStartDate(addBill.getPlanPayDate());
                    addBill.setEndDate(addBill.getPlanPayDate());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -287,7 +287,7 @@
                .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle())
                //查询有时段交集的数据
                .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()),
                        " t.START_DATE <= '"+Utils.Date.getStart(pageWrap.getModel().getEndDate())+"' and t.END_DATE >= '"+Utils.Date.getStart(pageWrap.getModel().getStartDate())+"' "
                        " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' and t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' "
                )
//                .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
//                .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -404,7 +404,6 @@
                    .like(YwRoom::getRoomNum,pageWrap.getModel().getRoomName())
            );
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.eq(YwWorkorder::getCreator, pageWrap.getModel().getCreator());
        }