liukangdong
2024-11-27 a856cfc04747d4d8f3605168531b253240d2e87c
Merge branch 'master' of http://139.186.142.91:10010/r/productDev/funingyunwei
已添加5个文件
已修改32个文件
1146 ■■■■ 文件已修改
admin/package-lock.json 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/areas.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaAreasWindow.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaInternalCompanyWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/areas.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalCompany.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/internalMember.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/AreasCloudController.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractRoomCloudController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProject.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectTree.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractRoomService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRoomServiceImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java 231 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package-lock.json
@@ -6,7 +6,7 @@
  "dependencies": {
    "@amap/amap-jsapi-loader": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
      "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
      "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw=="
    },
    "@babel/code-frame": {
@@ -2917,7 +2917,7 @@
        },
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "dev": true,
          "optional": true,
@@ -2927,7 +2927,7 @@
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
@@ -2938,7 +2938,7 @@
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
@@ -2948,21 +2948,21 @@
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
          "dev": true,
          "optional": true
        },
        "has-flag": {
          "version": "4.0.0",
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
          "dev": true,
          "optional": true
        },
        "loader-utils": {
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
@@ -2983,7 +2983,7 @@
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
@@ -2993,7 +2993,7 @@
        },
        "vue-loader-v16": {
          "version": "npm:vue-loader@16.8.3",
          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
          "dev": true,
          "optional": true,
admin/src/api/business/areas.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  // return request.post('/visitsAdmin/cloudService/business/areas/treeList', data, {
  //   trim: true
  // })
  return request.post('/visitsAdmin/cloudService/business/areas/page', data, {
    trim: true
  })
}
export function listByParentId (data) {
  return request.post('/visitsAdmin/cloudService/business/areas/listByParentId', data)
}
// åˆ›å»º
export function create (data) {
  return request.post('/visitsAdmin/cloudService/business/areas/create', data)
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/visitsAdmin/cloudService/business/areas/updateById', data)
}
// æ ‘å½¢
export function treeList (data) {
  return request.post('/visitsAdmin/cloudService/business/areas/listByParentId', data)
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/visitsAdmin/cloudService/business/areas/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/visitsAdmin/cloudService/business/areas/delete/batch', {
    params: {
      ids
    }
  })
}
admin/src/components/business/OperaAreasWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
<template>
  <GlobalAlertWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" label-width="100px" label-suffix=":" :rules="rules">
      <el-form-item :label="form.type==0?'市名称':'县区名称'" prop="name">
        <el-input v-model="form.name" :placeholder="form.type==0?'输入市名称':'输入县区名称'" v-trim/>
      </el-form-item>
      <el-form-item label="排序码" prop="sortnum">
        <el-input v-model="form.sortnum" placeholder="请输入排序码" v-trim/>
      </el-form-item>
    </el-form>
  </GlobalAlertWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
export default {
  name: 'OperaAreasWindow',
  extends: BaseOpera,
  components: { GlobalAlertWindow },
  data () {
    return {
      // è¡¨å•数据
      form: {
        id: null,
        parentId: null,
        name: null,
        sortnum: '0',
        type: '',
      },
      // éªŒè¯è§„则
      rules: {
      }
    }
  },
  created () {
    this.config({
      api: '/business/areas',
      'field.id': 'id'
    })
  },
  methods: {
    // ç¡®è®¤æ–°å»º
    __confirmCreate () {
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        // è°ƒç”¨æ–°å»ºæŽ¥å£
        this.isWorking = true
        this.api.create(this.form)
          .then(() => {
            this.visible = false
            this.$message.success('新建成功')
            this.$emit('success', this.form.parentId)
          })
          .catch(e => {
            this.$message.error(e)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    },
    // ç¡®è®¤ä¿®æ”¹
    __confirmEdit () {
      this.$refs.form.validate((valid) => {
        if (!valid) {
          return
        }
        // è°ƒç”¨æ–°å»ºæŽ¥å£
        this.isWorking = true
        this.api.updateById(this.form)
          .then(() => {
            this.visible = false
            this.$message.success('修改成功')
            this.$emit('success', this.form.parentId)
          })
          .catch(e => {
            this.$message.error(e)
          })
          .finally(() => {
            this.isWorking = false
          })
      })
    }
  },
}
</script>
admin/src/components/business/OperaInternalCompanyWindow.vue
@@ -17,7 +17,7 @@
            </el-form-item>
          <el-form-item label="组织类型" prop="type">
            <el-radio-group v-model="form.type" :disabled="form.parentType == 0">
              <el-radio :label="0">相关方组织</el-radio>
<!--              <el-radio :label="0">相关方组织</el-radio>-->
              <el-radio :label="1">内部组织</el-radio>
            </el-radio-group>
          </el-form-item>
@@ -74,7 +74,7 @@
      console.log(target)
      this.form= {
        id: null,
        type: 0,
        type: 1,
        name: '',
        parentId: null,
        disable: false,
admin/src/views/business/areas.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,166 @@
<template>
  <TableLayout :permissions="['business:areas:query']">
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <el-table
        ref="table"
        v-loading="isWorking.search"
        :data="tableData.list"
        lazy
        :load="load"
        :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }"
        row-key="id"
        stripe
        border
        :header-row-class-name="'table-header'"
        class="doumee-element-table"
        @selection-change="handleSelectionChange"
      >
        <el-table-column prop="name" label="地区名称" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="创建时间" align="center" min-width="140px"></el-table-column>
        <el-table-column prop="sortnum" label="排序码" align="center" min-width="140px"></el-table-column>
        <el-table-column
          v-if="containPermissions(['business:areas:update', 'business:areas:create', 'business:areas:delete'])"
          label="操作"
          align="center"
          min-width="220"
          fixed="right"
        >
          <template slot-scope="{ row }">
            <el-button type="text" @click="edit(row)" v-permissions="['business:areas:update']">编辑</el-button>
            <el-button v-if="row.type!=2" type="text" @click="createChild(row)" v-permissions="['business:areas:create']">新建{{ row.type==0 ? '市' : '区县' }}</el-button>
            <el-button type="text" @click="deleteById(row)" v-permissions="['business:areas:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaAreasWindow ref="operaAreasWindow" @success="update"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaAreasWindow from '@/components/business/OperaAreasWindow'
import { listByParentId } from '@/api/business/areas'
export default {
  name: 'Areas',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaAreasWindow },
  data () {
    return {
      // æœç´¢
      searchForm: {
        type: 0,
        parentId: ''
      },
      treeMaps: new Map(),
      parentId: null
    }
  },
  created () {
    this.config({
      module: '省市区信息表',
      api: '/business/areas',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
    // é¡µç å˜æ›´å¤„理
    handlePageChange (pageIndex) {
      this.isWorking.search = true
      listByParentId(this.searchForm)
        .then(data => {
          this.tableData.list = this.dataAddBool(data)
        })
        .catch(e => {
          console.log(e)
          this.$tip.error('操作失败')
        })
        .finally(() => {
          this.isWorking.search = false
        })
    },
    dataAddBool(array) {
      if(array==null){
        return  []
      }
      array.forEach(item => {
        item.hasChildren = item.type != 2
        // item.childList = item.childList && this.dataAddBool(item.childList)
      })
      return array
    },
    load(tree, treeNode, resolve) {
      this.treeMaps.set(tree.id, { tree, treeNode, resolve })
      listByParentId({ parentId: tree.id, type: tree.type + 1 })
        .then(data => {
          resolve(this.dataAddBool(data || []))
        })
        .catch(e => {
          console.log(e)
          this.$tip.error('操作失败')
        })
        .finally(() => {
          this.isWorking.search = false
        })
    },
    refreshLoadTree(parentId) {
      if (this.treeMaps.get(parentId)) {
        const { tree, treeNode, resolve } = this.treeMaps.get(parentId)
        this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, [])
        if (tree) { // é‡æ–°æ‰§è¡Œçˆ¶èŠ‚ç‚¹åŠ è½½å­çº§æ“ä½œ
          this.load(tree, treeNode, resolve)
          if (tree.parentId) { // è‹¥å­˜åœ¨çˆ·çˆ·ç»“点,则执行爷爷节点加载子级操作,防止最后一个子节点被删除后父节点不显示删除按钮
            const a = this.treeMaps.get(tree.parentId)
            this.load(a.tree, a.treeNode, a.resolve)
          }
        }
      } else {
        this.handlePageChange()
      }
    },
    deleteById (row, childConfirm = true) {
      // let message = `确认删除${this.module}【${row[this.configData['field.main']]}】吗?`
      let message = `确认删除该记录吗?`
      if (childConfirm && row.childList != null && row.childList.length > 0) {
        // message = `确认删除${this.module}【${row[this.configData['field.main']]}】及其子${this.module}吗?`
        message = `确认删除该记录及其子数据吗?`
      }
      this.$dialog.deleteConfirm(message)
        .then(() => {
          this.isWorking.delete = true
          this.api.deleteById(row[this.configData['field.id']])
            .then(() => {
              this.$tip.apiSuccess('删除成功')
              this.refreshLoadTree(row.parentId)
            })
            .catch(e => {
              console.log(e)
              this.$tip.error('操作失败')
            })
            .finally(() => {
              this.isWorking.delete = false
            })
        })
        .catch(() => {})
    },
    edit(row) {
      // this.parentId = row.type==0 ? null : row.type==1 ? '编辑市' : '编辑区县'
      this.$refs.operaAreasWindow.open(row.type==0 ? '编辑省' : row.type==1 ? '编辑市' : '编辑区县', row)
    },
    createChild(row) {
      this.$refs.operaAreasWindow.open(row.type == 0 ? '新建市' : '新建县区', { parentId: row.id, name: '', type: row.type + 1 })
    },
    update(parentId) {
      this.refreshLoadTree(parentId)
    }
  }
}
</script>
admin/src/views/business/internalCompany.vue
@@ -17,8 +17,8 @@
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:company:create', 'business:company:sync']">
               <li><el-button type="primary" v-permissions="['business:company:create']" @click="$refs.OperaInternalCompanyWindow.open('新建企业',null,null)">新建</el-button></li>
              <li><el-button @click="sort('top')" :loading="sorting" icon="el-icon-sort-up" v-permissions="['business:company:sort']">上移</el-button></li>
               <li><el-button type="primary" v-permissions="['business:company:create']" @click="$refs.OperaInternalCompanyWindow.open('新建组织',null,null)">新建</el-button></li>
              <li><el-button @click="sort('top')" :loaing="sorting" icon="el-icon-sort-up" v-permissions="['business:company:sort']">上移</el-button></li>
              <li><el-button @click="sort('bottom')" :loading="sorting" icon="el-icon-sort-down" v-permissions="['business:company:sort']">下移</el-button></li>
              <li><el-button type="primary"  v-permissions="['business:company:sync']" :loading="loading" @click="synchronous()">同步</el-button></li>
            </ul>
@@ -29,8 +29,7 @@
                :tree-props="{children: 'childList',hasChildren: 'hasChildren'}"
                row-key="id"
                @selection-change="handleSelectionChange"
                default-expand-all
            >
                default-expand-all>
                <el-table-column type="selection" width="55"></el-table-column>
                <el-table-column prop="name" label="组织名称" min-width="100px"></el-table-column>
                <el-table-column prop="name" label="组织类型" min-width="80px">
@@ -45,10 +44,9 @@
                <el-table-column
                    label="操作"
                    width="230"
                    fixed="right"
                >
                    fixed="right">
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('编辑企业信息',{  id: row.parentId,name:row.parentName,type:row.parentType, companyPath:row.parentCompanyPath}, row)" icon="el-icon-edit" v-permissions="['business:company:update']">编辑</el-button>
                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('编辑组织信息',{  id: row.parentId,name:row.parentName,type:row.parentType, companyPath:row.parentCompanyPath}, row)" icon="el-icon-edit" v-permissions="['business:company:update']">编辑</el-button>
                        <el-button type="text" @click="$refs.OperaInternalCompanyWindow.open('新建子级',  row,null)" icon="el-icon-plus">新建子级</el-button>
                        <el-button type="text" @click="deleteById(row)" style="color: red" icon="el-icon-delete" v-permissions="['business:company:delete']">删除</el-button>
                    </template>
@@ -83,7 +81,7 @@
  },
  created () {
    this.config({
      module: '企业信息表',
      module: '组织信息表',
      api: '/business/company',
      'field.id': 'id',
      'field.main': 'id'
admin/src/views/business/internalMember.vue
@@ -53,7 +53,7 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:member:delete', 'business:member:create,business:empower:create']">
        <li><el-button type="primary"
            @click="$refs.OperaMemberWindow.open('新建员工', null, department, searchForm.companyType)" icon="el-icon-plus"
            v-permissions="['business:member:create']">新建员工</el-button></li>
@@ -118,7 +118,7 @@
            </el-switch>
          </template>
        </el-table-column>
        <el-table-column label="是否可拜访">
<!--        <el-table-column label="是否可拜访">
          <template slot-scope="{row}">
            <el-switch @change="changeCanvisit($event, row)" v-model="row.canVisit" active-color="#13ce66"
              inactive-color="#ff4949" :active-value="1" :inactive-value="0">
@@ -162,7 +162,7 @@
            <el-button @click="$refs.cardOpeningRecord.open('开卡记录', row.id)" type="text">{{ row.memberCardCount ||
              '0'}}</el-button>
          </template>
        </el-table-column>
        </el-table-column>-->
        <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column>
        <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column>
        <el-table-column
@@ -171,6 +171,8 @@
          <template slot-scope="{row}">
            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaMemberWindow.open('编辑员工信息', row, department)"
              v-permissions="['business:empower:update']">编辑</el-button>
<!--            <el-button type="text" icon="el-icon-plus" @click="empower(row.id)"
              v-permissions="['business:empower:create']">重新授权</el-button>-->
            <el-button type="text" :loading="heading" style="color: red" icon="el-icon-delete"
              @click="updateHead(row, 0)" v-if="row.headStatus == 1"
              v-permissions="['business:member:head']">取消主管</el-button>
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -184,6 +184,45 @@
    public static final String TIMEOUT_WARNING = "TIMEOUT_WARNING";
    // FTP文件服务器资源访问地址
    /**
     *    ä»˜æ¬¾å‘¨æœŸç±»åž‹ 0=元每平米天;1=元每平米月;2=元每平米年;3=元每天;4=元每月;5=元每年;6=元每场;
     * @param circleType
     * @return
     */
    public static String getUnitTypeByNum(Integer circleType) {
        int zlPayType = Constants.formatIntegerNum(circleType);
        if(zlPayType == 1){
            return "元/㎡·月";
        }else   if(zlPayType == 2){
            return "元/㎡·天";
        }else  if(zlPayType == 3){
            return "元/天";
        }else  if(zlPayType == 4){
            return "元/月";
        }else  if(zlPayType == 5){
            return "元/å¹´";
        }else  if(zlPayType == 6){
            return "元/场";
        }
        return "元/㎡·天";
    }
    /**
     *  å‘¨æœŸæ”¯ä»˜æ–¹å¼ 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付
     * @param zlPayType
     * @return
     */
    public static String getPayTypeByNum(Integer zlPayType) {
        if(zlPayType == 1){
            return "3个月一付";
        }else   if(zlPayType == 2){
            return "6个月一付";
        }else  if(zlPayType == 3){
            return "1年一付";
        }
        return "一次性付款";
    }
    public static String getRandom6Num( ) {
        Random random = new Random();
server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.system.model.Multifile;
import com.github.yulichang.base.MPJBaseMapper;
import java.util.List;
@@ -9,6 +10,6 @@
 * @author æ±Ÿè¹„蹄
 * @date 2023/05/04 18:18
 */
public interface MultifileMapper extends BaseMapper<Multifile> {
public interface MultifileMapper extends MPJBaseMapper<Multifile> {
}
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -79,6 +79,9 @@
    @TableField(exist = false)
    private String fileurlFull;
    @ApiModelProperty(value = "创建人名称")
    @TableField(exist = false)
    private String userName;
    @ApiModelProperty(value = "内网文件地址")
    @TableField(exist = false)
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/AreasCloudController.java
@@ -1,6 +1,7 @@
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;
@@ -12,7 +13,6 @@
import com.doumee.service.business.AreasService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -36,7 +36,7 @@
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:areas:create")
    @CloudRequiredPermission("business:areas:create")
    public ApiResponse create(@RequestBody Areas areas,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        areas.setLoginUserInfo(getLoginUser(token));
        return ApiResponse.success(areasService.create(areas));
@@ -44,7 +44,7 @@
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:areas:delete")
    @CloudRequiredPermission("business:areas:delete")
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        areasService.deleteById(id);
        return ApiResponse.success(null);
@@ -52,7 +52,7 @@
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:areas:delete")
    @CloudRequiredPermission("business:areas:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
@@ -65,7 +65,7 @@
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @RequiresPermissions("business:areas:update")
    @CloudRequiredPermission("business:areas:update")
    public ApiResponse updateById(@RequestBody Areas areas,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        areas.setLoginUserInfo(getLoginUser(token));
        areasService.updateById(areas);
@@ -74,14 +74,14 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
//    @RequiresPermissions("business:areas:query")
//    @CloudRequiredPermission("business:areas:query")
    public ApiResponse<PageData<Areas>> findPage (@RequestBody PageWrap<Areas> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(areasService.findPage(pageWrap));
    }
    @ApiOperation("全部树形查询")
    @PostMapping("/treeList")
//    @RequiresPermissions("business:areas:query")
//    @CloudRequiredPermission("business:areas:query")
    public ApiResponse<List<Areas>> treeList (@RequestBody AreasDto pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        Areas a = new Areas();
        BeanUtils.copyProperties(pageWrap,a);
@@ -89,7 +89,7 @@
    }
    @ApiOperation("根据父节点查下")
    @PostMapping("/listByParentId")
//    @RequiresPermissions("business:areas:query")
//    @CloudRequiredPermission("business:areas:query")
    public ApiResponse<List<Areas>> listByParentId (@RequestBody AreasDto pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        Areas a = new Areas();
        BeanUtils.copyProperties(pageWrap,a);
@@ -101,14 +101,14 @@
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:areas:exportExcel")
    @CloudRequiredPermission("business:areas:exportExcel")
    public void exportExcel (@RequestBody PageWrap<Areas> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(Areas.class).export(areasService.findPage(pageWrap).getRecords(), "省市区信息表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:areas:query")
    @CloudRequiredPermission("business:areas:query")
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(areasService.findById(id));
    }
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractCloudController.java
@@ -9,6 +9,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwContract;
import com.doumee.dao.business.model.YwContractBill;
import com.doumee.service.business.YwContractService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -39,6 +40,14 @@
    public ApiResponse create(@RequestBody YwContract ywContract,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywContract.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(ywContractService.create(ywContract));
    }
    @PreventRepeat
    @ApiOperation("根据参数预生成账单信息")
    @PostMapping("/getBillList")
    @CloudRequiredPermission("business:ywcontract:create")
    public ApiResponse< List<YwContractBill> > getBillList(@RequestBody YwContract ywContract, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywContract.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(ywContractService.getBillList(ywContract));
    }
    @PreventRepeat
    @ApiOperation("退租")
@@ -87,6 +96,15 @@
        return ApiResponse.success(ywContractService.findPage(pageWrap));
    }
    @ApiOperation("列表")
    @PostMapping("/list")
    @CloudRequiredPermission("business:ywcontract:query")
    public ApiResponse<List<YwContract>> list (@RequestBody YwContract model,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywContractService.findList(model));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywcontract:exportExcel")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractRoomCloudController.java
@@ -93,6 +93,17 @@
        pageWrap.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(ywContractRoomService.findList(pageWrap));
    }
    @ApiOperation("查询合同或账单房间信息")
    @PostMapping("/getContractRoom")
    @CloudRequiredPermission("business:ywcontractroom:query")
    public ApiResponse<List<YwContractRoom>> getContractRoom (@RequestBody  YwContractRoom pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        pageWrap.setLoginUserInfo(this.getLoginUser(token));
        return ApiResponse.success(ywContractRoomService.getContractRoom(pageWrap));
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywcontractroom:query")
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java
@@ -9,6 +9,7 @@
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwProject;
import com.doumee.dao.business.model.YwRoom;
import com.doumee.dao.business.vo.ProjectDataVO;
import com.doumee.service.business.YwProjectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -85,6 +86,16 @@
        return ApiResponse.success(ywProjectService.findPage(pageWrap));
    }
    @ApiOperation("项目树")
    @PostMapping("/tree")
    @CloudRequiredPermission("business:ywproject:query")
    public ApiResponse<List<ProjectDataVO>> tree (@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywProjectService.projectTree());
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywproject:exportExcel")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
@@ -142,6 +142,18 @@
    @ApiModelProperty(value = "租赁条款押金(元)", example = "1")
    @ExcelColumn(name="租赁条款押金(元)")
    private BigDecimal zlDeposit;
    @ApiModelProperty(value = "首期租赁条款单价(元)", example = "1")
    @ExcelColumn(name="首期租赁条款单价(元)")
    private BigDecimal zlFirstPrice;
    @ApiModelProperty(value = "首期租赁条款价格单位", example = "1")
    @ExcelColumn(name="首期租赁条款价格单位")
    private Integer zlFirstCircle;
    @ApiModelProperty(value = "物业租赁条款单价(元)", example = "1")
    @ExcelColumn(name="物业租赁条款单价(元)")
    private BigDecimal wyFirstPrice;
    @ApiModelProperty(value = "物业租赁条款价格单位", example = "1")
    @ExcelColumn(name="物业租赁条款价格单位")
    private Integer wyFirstCircle;
    @ApiModelProperty(value = "租赁支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付", example = "1")
    @ExcelColumn(name="租赁支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付")
@@ -232,7 +244,16 @@
    @ApiModelProperty(value = "退款未结清账单数")
    @TableField(exist = false)
    private int btWaitBill;
    @ApiModelProperty(value = "生成账单类型 0租赁账单  1物业账单")
    @TableField(exist = false)
    private int billType;
    @ApiModelProperty(value = "租赁租赁条款价格单位,概念名称", example = "1")
    @TableField(exist = false)
    private String zlFirstCircleStr;
    @ApiModelProperty(value = "物业租赁条款价格单位,概念名称", example = "1")
    @TableField(exist = false)
    private String wyFirstCircleStr;
    @ApiModelProperty(value = "退租时新增的收付款账单")
    @TableField(exist = false)
    private List<YwContractBill> addBillList;
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
@@ -68,7 +68,7 @@
    @ApiModelProperty(value = "设备型号", example = "1")
    @ExcelColumn(name="设备型号")
    private Integer modelNo;
    private String modelNo;
    @ApiModelProperty(value = "所属分类编码(管理category)", example = "1")
    @ExcelColumn(name="所属分类编码(管理category)")
@@ -80,8 +80,7 @@
    @ApiModelProperty(value = "供应商")
    @ExcelColumn(name="供应商")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date company;
    private String supplier;
    @ApiModelProperty(value = "运维内容")
    @ExcelColumn(name="运维内容")
@@ -103,7 +102,16 @@
    @TableField(exist = false)
    private String realName;
    @ApiModelProperty(value = "附件信息")
    @ApiModelProperty(value = "图片地址")
    @TableField(exist = false)
    private Multifile multifile;
    private String fileUrl;
    @ApiModelProperty(value = "图片地址全路径")
    @TableField(exist = false)
    private String fileFullUrl;
//    @ApiModelProperty(value = "附件信息")
//    @TableField(exist = false)
//    private Multifile multifile;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
@@ -33,14 +33,14 @@
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间",index = 5, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
    private Integer editor;
    @ApiModelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date editDate;
    @ApiModelProperty(value = "是否删除0否 1是", example = "1")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwLinePoint.java
@@ -73,5 +73,7 @@
    @TableField(exist = false)
    private String pointName;
    @ApiModelProperty(value = "巡检点编码")
    @TableField(exist = false)
    private String code;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolPoint.java
@@ -107,9 +107,13 @@
    @TableField(exist = false)
    private String deviceName;
    @ApiModelProperty(value = "附件信息")
    @ApiModelProperty(value = "附件地址")
    @TableField(exist = false)
    private Multifile multifile;
    private String fileUrl;
    @ApiModelProperty(value = "附件全路径地址")
    @TableField(exist = false)
    private String fileFullUrl;
    @ApiModelProperty(value = "过滤数据")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProject.java
@@ -82,5 +82,20 @@
    @ApiModelProperty(value = "可招商房源数")
    @TableField(exist = false)
    private Integer roomeRentNum;
    @ApiModelProperty(value = "城市名称")
    @TableField(exist = false)
    private String cityName;
    @ApiModelProperty(value = "区域名称")
    @TableField(exist = false)
    private String areaName;
    @ApiModelProperty(value = "城市編碼")
    @TableField(exist = false)
    private Integer cityId;
    @ApiModelProperty(value = "省份名称")
    @TableField(exist = false)
    private String provinceName;
    @ApiModelProperty(value = "省id")
    @TableField(exist = false)
    private Integer provinceId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.doumee.dao.business.vo;
import com.doumee.dao.business.model.Approve;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/5/23 14:56
 */
@Data
public class ProjectDataVO {
    @ApiModelProperty(value = "业务主键")
    private Integer id;
    @ApiModelProperty(value = "业务名称")
    private String name;
    @ApiModelProperty(value = "父级主键")
    private Integer pId;
    @ApiModelProperty(value = "级别")
    private Integer lv;
    @ApiModelProperty(value = "子集数据")
    private List<ProjectDataVO> projectDataVOList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectTree.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.doumee.dao.business.vo;
import com.doumee.config.DataSyncConfig;
import com.doumee.core.utils.Constants;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/7/13 10:40
 */
public class ProjectTree {
    // ä¿å­˜å‚与构建树形的所有数据(通常数据库查询结果)
    public List<ProjectDataVO> nodeList = new ArrayList<>();
    /**
     *  æž„造方法
     *  @param nodeList å°†æ•°æ®é›†åˆèµ‹å€¼ç»™nodeList,即所有数据作为所有节点。
     */
    public ProjectTree(List<ProjectDataVO> nodeList){
        this.nodeList = nodeList;
    }
    /**
     *   èŽ·å–éœ€æž„å»ºçš„æ‰€æœ‰æ ¹èŠ‚ç‚¹ï¼ˆé¡¶çº§èŠ‚ç‚¹ï¼‰ "0"
     *   @return æ‰€æœ‰æ ¹èŠ‚ç‚¹List集合
     */
    public List<ProjectDataVO> getRootNode(){
        // ä¿å­˜æ‰€æœ‰æ ¹èŠ‚ç‚¹ï¼ˆæ‰€æœ‰æ ¹èŠ‚ç‚¹çš„æ•°æ®ï¼‰
        List<ProjectDataVO> rootNodeList = new ArrayList<>();
        // treeNode:查询出的每一条数据(节点)
        for (ProjectDataVO treeNode : nodeList){
            if (Objects.isNull(treeNode.getPId()) && Constants.equalsInteger(treeNode.getLv(),Constants.ZERO)) {
                // æ˜¯ï¼Œæ·»åŠ 
                rootNodeList.add(treeNode);
            }
        }
        return rootNodeList;
    }
    /**
     *  æ ¹æ®æ¯ä¸€ä¸ªé¡¶çº§èŠ‚ç‚¹ï¼ˆæ ¹èŠ‚ç‚¹ï¼‰è¿›è¡Œæž„å»ºæ ‘å½¢ç»“æž„
     *  @return  æž„建整棵树
     */
    public List<ProjectDataVO> buildTree(){
        // treeNodes:保存一个顶级节点所构建出来的完整树形
        List<ProjectDataVO> treeNodes = new ArrayList<ProjectDataVO>();
        // getRootNode():获取所有的根节点
        for (ProjectDataVO treeRootNode : getRootNode()) {
            // å°†é¡¶çº§èŠ‚ç‚¹è¿›è¡Œæž„å»ºå­æ ‘
            treeRootNode = buildChildTree(treeRootNode);
            // å®Œæˆä¸€ä¸ªé¡¶çº§èŠ‚ç‚¹æ‰€æž„å»ºçš„æ ‘å½¢ï¼Œå¢žåŠ è¿›æ¥
            treeNodes.add(treeRootNode);
        }
        return treeNodes;
    }
    /**
     *  é€’å½’-----构建子树形结构
     *  @param  pNode æ ¹èŠ‚ç‚¹ï¼ˆé¡¶çº§èŠ‚ç‚¹ï¼‰
     *  @return æ•´æ£µæ ‘
     */
    public ProjectDataVO buildChildTree(ProjectDataVO pNode){
        List<ProjectDataVO> childTree = new ArrayList<ProjectDataVO>();
        // nodeList:所有节点集合(所有数据)
        for (ProjectDataVO treeNode : nodeList) {
            // åˆ¤æ–­å½“前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点
            if (!Objects.isNull(treeNode.getPId())
                    && Constants.equalsInteger(treeNode.getPId(),pNode.getId())
                    && Constants.equalsInteger((treeNode.getLv() -  1 ),pNode.getLv())
            ) {
                // å†é€’归进行判断当前节点的情况,调用自身方法
                childTree.add(buildChildTree(treeNode));
            }
        }
        // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果
        pNode.setProjectDataVOList(childTree);
        return pNode;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractRoomService.java
@@ -79,6 +79,9 @@
     * @return List<YwContractRoom>
     */
    List<YwContractRoom> findList(YwContractRoom ywContractRoom);
    List<YwContractRoom> getContractRoom(YwContractRoom ywContractRoom);
  
    /**
     * åˆ†é¡µæŸ¥è¯¢
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
@@ -4,6 +4,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwContract;
import com.doumee.dao.business.model.YwContractBill;
import java.util.List;
/**
@@ -20,7 +22,7 @@
     * @return Integer
     */
    Integer create(YwContract ywContract);
    List<YwContractBill> getBillList(YwContract ywContract);
    /**
     * ä¸»é”®åˆ é™¤
     *
@@ -97,4 +99,6 @@
    long count(YwContract ywContract);
    Integer backRent(YwContract ywContract);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProjectService.java
@@ -4,6 +4,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwProject;
import com.doumee.dao.business.vo.ProjectDataVO;
import java.util.List;
/**
@@ -95,4 +97,7 @@
     * @return long
     */
    long count(YwProject ywProject);
    List<ProjectDataVO> projectTree();
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java
@@ -21,6 +21,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -316,6 +317,7 @@
        return result;
    }
    @Override
    @PostConstruct
    public  void cacheData() {
       Areas a = new Areas();
       a.setIsdeleted(Constants.ZERO);
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -340,7 +340,7 @@
                        .setSql("hk_company_path=REPLACE(hk_company_path,'"+ model.getCompanyNamePath()+"','"+newName+"')")
                .likeRight(Company::getCompanyPath,model.getCompanyPath()));
        //下发海康安防平台
        if(StringUtils.isNotBlank(model.getHkId())){
      /*  if(StringUtils.isNotBlank(model.getHkId())){
             if(!editHkOrg(company)){
                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,组织同步下发失败,请稍后重试");
             }
@@ -348,7 +348,7 @@
            if(!addHkOrg(company)){
                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,组织同步下发失败,请稍后重试");
            }
        }
        }*/
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InitServiceImpl.java
@@ -26,7 +26,7 @@
    @Autowired
    private InterfaceLogService interfaceLogService;
    @PostConstruct
//    @PostConstruct
    public  int  initHkConfig(){
            ArtemisConfig.host = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_HOST).getCode();
            ArtemisConfig.appKey = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_APPKEY).getCode();
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
@@ -12,6 +12,7 @@
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwContractBillService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -194,7 +195,10 @@
        ));
        //附件数据
        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
        List<Multifile> multifileList = multifileMapper.selectJoinList(Multifile.class,new MPJLambdaWrapper<Multifile>()
                        .selectAll(Multifile.class)
                        .selectAs(SystemUser::getRealname,Multifile::getUserName)
                        .leftJoin(SystemUser.class,SystemUser::getId,Multifile::getCreator)
                .eq(Multifile::getObjId,id)
                .eq(Multifile::getObjType,Constants.MultiFile.FN_CONTRACT_BILL_FILE.getKey()));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractRoomServiceImpl.java
@@ -5,17 +5,19 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwContractRoomMapper;
import com.doumee.dao.business.model.YwContractRoom;
import com.doumee.dao.business.model.*;
import com.doumee.service.business.YwContractRoomService;
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 com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
/**
 * è¿ç»´åˆåŒæˆ¿æºå…³è”信息表Service实现
@@ -84,7 +86,31 @@
        QueryWrapper<YwContractRoom> wrapper = new QueryWrapper<>(ywContractRoom);
        return ywContractRoomMapper.selectList(wrapper);
    }
    @Override
    public List<YwContractRoom> getContractRoom(YwContractRoom ywContractRoom){
        List<YwContractRoom> ywContractRoomList  = ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
                .selectAll(YwContractRoom.class)
                .selectAs(YwProject::getName, YwRoom::getProjectName)
                .selectAs(YwFloor::getName,YwRoom::getFloorName)
                .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
                .selectAs(YwRoom::getName,YwContractRoom::getRoomName)
                .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
                .eq(Objects.nonNull(ywContractRoom.getType()),YwContractRoom::getType,ywContractRoom.getType())
                .eq(Objects.nonNull(ywContractRoom.getContractId()),YwContractRoom::getContractId,ywContractRoom.getContractId()))
                ;
        return ywContractRoomList;
    }
    @Override
    public PageData<YwContractRoom> findPage(PageWrap<YwContractRoom> pageWrap) {
        IPage<YwContractRoom> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -85,6 +85,124 @@
        dealLogBiz(model,Constants.YwLogType.CONTRACT_CREATE,null,null);//记录新建日志
        return model.getId();
    }
    @Override
    public   List<YwContractBill> getBillList(YwContract model){
        isParamValidForBill(model);
        model.setCreateDate(new Date());
        model.setEditDate(model.getCreateDate());
        dealDetailListBiz(model);//处理条款信息
        return model.getBillList();
    }
    private void isParamValidForBill(YwContract model) {
        if(model.getStartDate() == null
                ||model.getEndDate() == null
                ||model.getProjectId() == null
                ||model.getCompanyId() == null
                ||model.getRoundedUp() == null
                ||model.getRoomIds() == null
                ||model.getRoomIds().size() == 0
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写合同信息");
        }
        if(model.getEndDate().getTime()<= model.getStartDate().getTime()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,合同有效期结束时间不得早于开始时间!");
        }
        if(model.getBillType() ==0 ){
            //如果生成租赁条款
            if(  model.getZlDeposit() == null
                    ||model.getZlPayType() == null
                    || model.getZlPayType()>3
                    || model.getZlPayType()<0
                    ||model.getZlDetailList()==null
                    ||model.getZlDetailList().size() ==0){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写租赁条款信息");
            }
            if(!(model.getZlFreeEndDate()==null &&  model.getZlFreeStartDate()==null) && (
                    (model.getZlFreeEndDate()!=null &&  model.getZlFreeStartDate()==null)
                            ||(model.getZlFreeEndDate()==null &&  model.getZlFreeStartDate()!=null)
                            ||model.getZlFreeEndDate().getTime()<= model.getZlFreeStartDate().getTime())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择正确的租赁条款免租期信息!");
            }
            for(YwContractDetail d :model.getZlDetailList()){
                if(  d.getStartDate() == null
                        ||d.getEndDate() == null
                        ||d.getPrice() == null
                        ||d.getCircleType() == null
                        || d.getCircleType()>6
                        || d.getCircleType()<0
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写租赁条款信息!");
                }
                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,租赁条款有效期结束时间不得早于开始时间!");
                }
                if(!Constants.equalsInteger(model.getWyPayType(),Constants.ZERO) &&
                        Constants.equalsInteger(d.getCircleType(),Constants.SIX)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,租赁条款只有选择一次性付款时,才能选择该按每场收费;");
                }
            }
        }
        if(model.getBillType() == 1 ){
            //如果生成物业条款
            if(  model.getWyDeposit() == null
                    ||model.getWyPayType() == null
                    || model.getWyPayType()>3
                    || model.getWyPayType()<0
                    ||model.getWyDetailList()==null
                    ||model.getWyDetailList().size() ==0
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写物业条款信息");
            }
            if(!(model.getWyFreeEndDate()==null &&  model.getWyFreeStartDate()==null) && (
                    (model.getWyFreeEndDate()!=null &&  model.getWyFreeStartDate()==null)
                            ||(model.getWyFreeEndDate()==null &&  model.getWyFreeStartDate()!=null)
                            ||model.getWyFreeEndDate().getTime()<= model.getWyFreeStartDate().getTime())){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择正确的物业条款免租期信息!");
            }
            for(YwContractDetail d :model.getWyDetailList()){
                if(  d.getStartDate() == null
                        ||d.getEditDate() == null
                        ||d.getPrice() == null
                        ||d.getCircleType() == null
                        || d.getCircleType()>6
                        || d.getCircleType()<0
                ){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写物业条款信息!");
                }
                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,物业条款有效期结束时间不得早于开始时间!");
                }
                if(!Constants.equalsInteger(model.getWyPayType(),Constants.ZERO) &&
                        Constants.equalsInteger(d.getCircleType(),Constants.SIX)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,物业条款只有选择一次性付款时,才能选择该按每场收费;");
                }
            }
        }
        YwProject project = projectMapper.selectById(model.getCompanyId());
        if(project ==null || Constants.equalsInteger(project.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,请选择正确的项目信息!");
        }
        List<YwRoom> rooms = roomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
                .in(YwRoom::getId,model.getRoomIds())
                .eq(YwRoom::getProjectId,model.getProjectId())  );
        if(rooms ==null || rooms.size()==0){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请选择对应项目下正确的房源信息");
        }
        if(rooms.size() != rooms.size()){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,存在无效的房源信息!");
        }
        model.setTotalArea(new BigDecimal(0));
        for(YwRoom r : rooms){
            model.setTotalArea(model.getTotalArea().add(Constants.formatBigdecimal(r.getArea())));
        }
    }
    private String getRemarlByParam(YwContract model) {
@@ -106,12 +224,12 @@
        }
        str = str.replace("{param1}",DateUtil.getDateLongSlash(model.getStartDate()))
                .replace("{param2}",model.getTotalArea().intValue()+"")
                .replace("{param3}",getPayTypeByNum(model.getZlPayType()))
                .replace("{param3}",Constants.getPayTypeByNum(model.getZlPayType()))
                .replace("{param4}",zl!=null&&zl.getPrice()!=null?(zl.getPrice().intValue()+""):"0")
                .replace("{param5}",getPayTypeByNum(model.getWyPayType()))
                .replace("{param6}",getUnitTypeByNum(zl))
                .replace("{param5}",Constants.getPayTypeByNum(model.getWyPayType()))
                .replace("{param6}",Constants.getUnitTypeByNum(zl!=null?zl.getCircleType():null))
                .replace("{param7}",zl!=null&&yw.getPrice()!=null?(zl.getPrice().intValue()+""):"0")
                .replace("{param8}",getUnitTypeByNum(yw));
                .replace("{param8}",Constants.getUnitTypeByNum(yw!=null?yw.getCircleType():null));
        return  str;
    }
    private String getbackRentRemarkByParam(YwContract model) {
@@ -126,39 +244,6 @@
        return  str;
    }
    private CharSequence getUnitTypeByNum(YwContractDetail zl) {
        if(zl==null){
            return "";
        }
     //   ä»˜æ¬¾å‘¨æœŸç±»åž‹ 0=元每平米天;1=元每平米月;2=元每平米年;3=元每天;4=元每月;5=元每年;6=元每场;
        int zlPayType = Constants.formatIntegerNum(zl.getCircleType());
        if(zlPayType == 1){
            return "元/㎡·月";
        }else   if(zlPayType == 2){
            return "元/㎡·天";
        }else  if(zlPayType == 3){
            return "元/天";
        }else  if(zlPayType == 4){
            return "元/月";
        }else  if(zlPayType == 5){
            return "元/å¹´";
        }else  if(zlPayType == 6){
            return "元/场";
        }
        return "元/㎡·天";
    }
    private CharSequence getPayTypeByNum(Integer zlPayType) {
        //租赁支付方式 0=一次性付款;1=每三个月一付;2=六个月一付;3=一年一付
        if(zlPayType == 1){
            return "3个月一付";
        }else   if(zlPayType == 2){
            return "6个月一付";
        }else  if(zlPayType == 3){
            return "1年一付";
        }
        return "一次性付款";
    }
    /**
@@ -399,7 +484,9 @@
                details.add(d);
            }
        }
        ywContractDetailMapper.insert(details);//批量插入条款信息信息
        if(model.getId()!=null){
            ywContractDetailMapper.insert(details);//批量插入条款信息信息
        }
        //处理账单信息
        dealBillListBiz(model,details);
    }
@@ -410,26 +497,27 @@
     * @param details
     */
    private void dealBillListBiz(YwContract model, List<YwContractDetail> details) {
        List<YwContractBill> billList = new ArrayList<>();
        List<YwContractBill> billList1 = new ArrayList<>();
        List<YwContractBill> billList2 = new ArrayList<>();
        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
                || Constants.equalsInteger(model.getType(),Constants.ONE)){
            //如果有租赁条款
            if(Constants.formatBigdecimal(model.getZlDeposit()).compareTo(new BigDecimal(0))>0){
                    //如果有租赁押金
                billList.add(initDepoistBill(Constants.THREE,model));
                billList1.add(initDepoistBill(Constants.THREE,model));
            }
            if(Constants.equalsInteger(model.getZlPayType(), Constants.ZERO)){
                //如果是一次性付清
                billList.addAll(getBillsByParamOnce(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
                billList1.addAll(getBillsByParamOnce(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
            }else if(Constants.equalsInteger(model.getZlPayType(), Constants.ONE)){
                //如果每三个月一付
                billList.addAll(getBillsByParam3Months(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
                billList1.addAll(getBillsByParam3Months(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
            }else if(Constants.equalsInteger(model.getZlPayType(), Constants.TWO)){
                //如果六个月一付
                billList.addAll(getBillsByParam6Months(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
                billList1.addAll(getBillsByParam6Months(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
            }else if(Constants.equalsInteger(model.getZlPayType(), Constants.THREE)){
                //如果一年一付
                billList.addAll(getBillsByParam1Year(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
                billList1.addAll(getBillsByParam1Year(model,details,model.getZlFreeStartDate(),model.getZlFreeEndDate()));
            }
        }
        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
@@ -437,27 +525,38 @@
            //如果物业条款
            if(Constants.formatBigdecimal(model.getWyDeposit()).compareTo(new BigDecimal(0))>0){
                //如果有租赁押金
                billList.add(initDepoistBill(Constants.FOUR,model));
                billList2.add(initDepoistBill(Constants.FOUR,model));
            }
            if(Constants.equalsInteger(model.getWyPayType(), Constants.ZERO)){
                //如果是一次性付清
                billList.addAll(getBillsByParamOnce(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
                billList2.addAll(getBillsByParamOnce(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
            }else if(Constants.equalsInteger(model.getWyPayType(), Constants.ONE)){
                //如果每三个月一付
                billList.addAll(getBillsByParam3Months(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
                billList2.addAll(getBillsByParam3Months(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
            }else if(Constants.equalsInteger(model.getWyPayType(), Constants.TWO)){
                //如果六个月一付
                billList.addAll(getBillsByParam6Months(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
                billList2.addAll(getBillsByParam6Months(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
            }else if(Constants.equalsInteger(model.getWyPayType(), Constants.THREE)){
                //如果一年一付
                billList.addAll(getBillsByParam1Year(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
                billList2.addAll(getBillsByParam1Year(model,details,model.getWyFreeStartDate(),model.getWyFreeEndDate()));
            }
        }
        for(int i=0;i<billList.size();i++){
            billList.get(i).setSortnum(i+1);
        }
        ywContractBillMapper.insert(billList);
        if(model.getBillType() == 0){
            model.setBillList(billList1);
        }else  if(model.getBillType() == 0){
            model.setBillList(billList2);
        }
        if(model.getId()!=null){
            for(int i=0;i<billList1.size();i++){
                billList1.get(i).setSortnum(i+1);
            }
            for(int i=0;i<billList2.size();i++){
                billList2.get(i).setSortnum(i+1);
            }
            ywContractBillMapper.insert(billList1);
            ywContractBillMapper.insert(billList2);
        }
    }
    private YwContractBill initDepoistBill(int type,  YwContract model) {
@@ -787,12 +886,15 @@
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,请按页面要求填写租赁条款信息!");
                }
                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,租赁条款有效期结束时间不得早于开始时间!");
                }
                if(!Constants.equalsInteger(model.getWyPayType(),Constants.ZERO) &&
                        Constants.equalsInteger(d.getCircleType(),Constants.SIX)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,租赁条款只有选择一次性付款时,才能选择该按每场收费;");
                }
                if(model.getZlFirstCircle() == null){//首期信息
                    model.setZlFirstPrice(d.getPrice());
                    model.setZlFirstCircle(d.getCircleType());
                }
            }
        }
@@ -829,6 +931,11 @@
                if(!Constants.equalsInteger(model.getWyPayType(),Constants.ZERO) &&
                        Constants.equalsInteger(d.getCircleType(),Constants.SIX)){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,物业条款只有选择一次性付款时,才能选择该按每场收费;");
                }
                if(model.getWyFirstCircle() == null){
                    //首期信息
                    model.setWyFirstPrice(d.getPrice());
                    model.setWyFirstCircle(d.getCircleType());
                }
            }
        }
@@ -952,7 +1059,8 @@
                    .eq(YwRoom::getIsdeleted,Constants.ZERO)
                    .exists("(select a.id from yw_contract_room a where a.isdeleted=1 and a.room_id=t.id and a.contract_id="+model.getId()+")");
            model.setRoomList(roomMapper.selectJoinList(YwRoom.class,rw));
            model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
            model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
            //查询租賃条款信息
            MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>();
            dw.selectAll(YwContractDetail.class )
@@ -1026,7 +1134,9 @@
    @Override
    public List<YwContract> findList(YwContract ywContract) {
        QueryWrapper<YwContract> wrapper = new QueryWrapper<>(ywContract);
        QueryWrapper<YwContract> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(YwContract::getIsdeleted,Constants.ZERO);
        wrapper.lambda().in(YwContract::getStatus,Constants.ZERO,Constants.ONE,Constants.TWO);
        return ywContractMapper.selectList(wrapper);
    }
  
@@ -1142,7 +1252,14 @@
        queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwContract::getStartDate, pageWrap.getModel().getQueryStartTime())
                        .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwContract::getEndDate, pageWrap.getModel().getQueryEndTime());
        queryWrapper.orderByDesc(YwContract::getCreateDate );
        return PageData.from(ywContractMapper.selectJoinPage(page, YwContract.class,queryWrapper));
        PageData<YwContract> data = PageData.from(ywContractMapper.selectJoinPage(page, YwContract.class,queryWrapper));
        if(data!=null && data.getRecords()!=null){
            for(YwContract model : data.getRecords()){
                model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
                model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
            }
        }
        return data;
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
@@ -64,27 +64,20 @@
        if(ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO).eq(YwDevice::getCode,ywDevice.getCode()))>Constants.ZERO){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"设备编号重复!");
        }
//        if(StringUtils.isBlank(ywDevice.getCode())){
//            String code = this.getMaxAutoMaticDeviceCode();
//            while (ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO).eq(YwDevice::getCode,code))>Constants.ZERO){
//                code = this.getMaxAutoMaticDeviceCode();
//            }
//             ywDevice.setCode(code);
//        }else{
//
//        }
        ywDevice.setCreateDate(new Date());
        ywDevice.setCreator(loginUserInfo.getId());
        ywDevice.setIsdeleted(Constants.ZERO);
        ywDeviceMapper.insert(ywDevice);
        if(Objects.nonNull(ywDevice.getMultifile())){
            ywDevice.getMultifile().setCreator(loginUserInfo.getId());
            ywDevice.getMultifile().setCreateDate(new Date());
            ywDevice.getMultifile().setIsdeleted(Constants.ZERO);
            ywDevice.getMultifile().setObjType(Constants.MultiFile.FN_DEVICE_FILE.getKey());
            ywDevice.getMultifile().setObjId(ywDevice.getId());
            multifileMapper.insert(ywDevice.getMultifile());
        if(Objects.nonNull(ywDevice.getFileUrl())){
            Multifile multifile = new Multifile();
            multifile.setCreator(loginUserInfo.getId());
            multifile.setCreateDate(new Date());
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setObjType(Constants.MultiFile.FN_DEVICE_FILE.getKey());
            multifile.setObjId(ywDevice.getId());
            multifile.setFileurl(ywDevice.getFileUrl());
            multifileMapper.insert(multifile);
        }
        return ywDevice.getId();
@@ -135,13 +128,15 @@
                .eq(Multifile::getObjId,ywDevice.getId())
                .eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE.getKey())
        );
        if(Objects.nonNull(ywDevice.getMultifile())){
            ywDevice.getMultifile().setCreator(loginUserInfo.getId());
            ywDevice.getMultifile().setCreateDate(new Date());
            ywDevice.getMultifile().setIsdeleted(Constants.ZERO);
            ywDevice.getMultifile().setObjType(Constants.MultiFile.FN_DEVICE_FILE.getKey());
            ywDevice.getMultifile().setObjId(ywDevice.getId());
            multifileMapper.insert(ywDevice.getMultifile());
        if(Objects.nonNull(ywDevice.getFileUrl())){
            Multifile multifile = new Multifile();
            multifile.setCreator(loginUserInfo.getId());
            multifile.setCreateDate(new Date());
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setObjType(Constants.MultiFile.FN_DEVICE_FILE.getKey());
            multifile.setObjId(ywDevice.getId());
            multifile.setFileurl(ywDevice.getFileUrl());
            multifileMapper.insert(multifile);
        }
@@ -169,8 +164,7 @@
        if(Objects.nonNull(multifile)){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_DEVICE).getCode();
            multifile.setFileurlFull(path + multifile.getFileurl());
            ywDevice.setMultifile(multifile);
            ywDevice.setFileFullUrl(path + multifile.getFileurl());
        }
        return ywDevice;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolLineServiceImpl.java
@@ -68,7 +68,7 @@
            ywLinePoint.setCreateDate(new Date());
            ywLinePoint.setCreator(loginUserInfo.getId());
            ywLinePoint.setIsdeleted(Constants.ZERO);
            ywLinePoint.setLineId(ywLinePoint.getId());
            ywLinePoint.setLineId(ywPatrolLine.getId());
        }
        ywLinePointMapper.insert(ywLinePointList);
        return ywPatrolLine.getId();
@@ -117,7 +117,7 @@
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"巡检点配置错误");
            }
            ywLinePoint.setLineId(ywLinePoint.getId());
            ywLinePoint.setLineId(ywPatrolLine.getId());
            ywLinePoint.setCreateDate(new Date());
            ywLinePoint.setCreator(loginUserInfo.getId());
            ywLinePoint.setIsdeleted(Constants.ZERO);
@@ -148,7 +148,8 @@
        List<YwLinePoint> ywLinePointList = ywLinePointMapper.selectJoinList(YwLinePoint.class,new MPJLambdaWrapper<YwLinePoint>()
                .selectAll(YwLinePoint.class)
                .selectAs(YwPatrolPoint::getName,YwLinePoint::getPointName)
                .leftJoin(YwPatrolLine.class,YwPatrolLine::getId,YwLinePoint::getPointId)
                .selectAs(YwPatrolPoint::getCode,YwLinePoint::getCode)
                .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwLinePoint::getPointId)
                .eq(YwLinePoint::getLineId,id)
                .orderByAsc(YwLinePoint::getSortnum)
        );
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
@@ -65,13 +65,15 @@
        ywPatrolPointMapper.insert(ywPatrolPoint);
        if(Objects.nonNull(ywPatrolPoint.getMultifile())){
            ywPatrolPoint.getMultifile().setCreator(loginUserInfo.getId());
            ywPatrolPoint.getMultifile().setCreateDate(new Date());
            ywPatrolPoint.getMultifile().setIsdeleted(Constants.ZERO);
            ywPatrolPoint.getMultifile().setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
            ywPatrolPoint.getMultifile().setObjId(ywPatrolPoint.getId());
            multifileMapper.insert(ywPatrolPoint.getMultifile());
        if(Objects.nonNull(ywPatrolPoint.getFileUrl())){
            Multifile multifile = new Multifile();
            multifile.setCreator(loginUserInfo.getId());
            multifile.setCreateDate(new Date());
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
            multifile.setObjId(ywPatrolPoint.getId());
            multifile.setFileurl(ywPatrolPoint.getFileUrl());
            multifileMapper.insert(multifile);
        }
        return ywPatrolPoint.getId();
@@ -123,13 +125,15 @@
                .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_POINT_FILE.getKey())
        );
        if(Objects.nonNull(ywPatrolPoint.getMultifile())){
            ywPatrolPoint.getMultifile().setCreator(loginUserInfo.getId());
            ywPatrolPoint.getMultifile().setCreateDate(new Date());
            ywPatrolPoint.getMultifile().setIsdeleted(Constants.ZERO);
            ywPatrolPoint.getMultifile().setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
            ywPatrolPoint.getMultifile().setObjId(ywPatrolPoint.getId());
            multifileMapper.insert(ywPatrolPoint.getMultifile());
        if(Objects.nonNull(ywPatrolPoint.getFileUrl())){
            Multifile multifile = new Multifile();
            multifile.setCreator(loginUserInfo.getId());
            multifile.setCreateDate(new Date());
            multifile.setIsdeleted(Constants.ZERO);
            multifile.setObjType(Constants.MultiFile.FN_PATROL_POINT_FILE.getKey());
            multifile.setObjId(ywPatrolPoint.getId());
            multifile.setFileurl(ywPatrolPoint.getFileUrl());
            multifileMapper.insert(multifile);
        }
    }
@@ -157,8 +161,7 @@
        if(Objects.nonNull(multifile)){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode();
            multifile.setFileurlFull(path + multifile.getFileurl());
            ywPatrolPoint.setMultifile(multifile);
            ywPatrolPoint.setFileFullUrl(path + multifile.getFileurl());
        }
        return ywPatrolPoint;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -26,6 +26,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
@@ -51,6 +52,7 @@
    private RedisTemplate<String, Object> redisTemplate;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer create(YwPatrolScheme ywPatrolScheme) {
        if(Objects.isNull(ywPatrolScheme)
        || StringUtils.isBlank(ywPatrolScheme.getTitle())
@@ -122,9 +124,10 @@
            //每月根据日期生成 æ ¹æ®æ—¥æœŸèŽ·å–æ˜¯å“ªå¤©
            List<String> days = Arrays.asList(ywPatrolScheme.getCircleDays().split(","));
            String dayStr = DateUtil.getFomartDate(schemeDate,"dd");
            if(Objects.isNull(days.stream().filter(i->StringUtils.equals(i,dayStr)).findFirst().get())){
            Optional<String>  optional = days.stream().filter(i->StringUtils.equals(i,dayStr)).findAny();
            if(Objects.isNull(optional)){
                return;
            };
            }
        }
        String schemeDateStr = DateUtil.getDate(schemeDate,"yyyy-MM-dd");
        //查询当天是否生成过数据
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
@@ -121,6 +121,7 @@
        YwPatrolTask model = pageWrap.getModel();
        queryWrapper.selectAll(YwPatrolTask.class)
                .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode)
                .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle)
                .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTask::getDealUserId)
                .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
@@ -5,18 +5,27 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwBuildingMapper;
import com.doumee.dao.business.YwFloorMapper;
import com.doumee.dao.business.YwProjectMapper;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.YwProject;
import com.doumee.dao.business.YwRoomMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.CompanyTree;
import com.doumee.dao.business.vo.ProjectDataVO;
import com.doumee.dao.business.vo.ProjectTree;
import com.doumee.service.business.AreasService;
import com.doumee.service.business.YwProjectService;
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.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -30,6 +39,17 @@
    @Autowired
    private YwProjectMapper ywProjectMapper;
    @Autowired
    private AreasService areasService;
    @Autowired
    private YwFloorMapper ywFloorMapper;
    @Autowired
    private YwRoomMapper ywRoomMapper;
    @Autowired
    private YwBuildingMapper ywBuildingMapper;
    @Override
    public Integer create(YwProject  model) {
@@ -154,7 +174,22 @@
            queryWrapper.lambda().eq(YwProject::getAddr, pageWrap.getModel().getAddr());
        }
        queryWrapper.lambda().orderByDesc(YwProject::getCreateDate);
        return PageData.from(ywProjectMapper.selectPage(page, queryWrapper));
        PageData<YwProject> data = PageData.from(ywProjectMapper.selectPage(page, queryWrapper));
        if(data!=null && data.getRecords()!=null){
            for(YwProject model :data.getRecords()){
                    if(model.getAreaId()!=null){
                        Areas a = areasService.findById(model.getAreaId(),Constants.TWO);
                        if(a != null){
                            model.setAreaName(a.getName());
                            model.setCityId(a.getCityId());
                            model.setCityName(a.getCityName());
                            model.setProvinceId(a.getProvinceId());
                            model.setProvinceName(a.getProvinceName());
                        }
                    }
            }
        }
        return data;
    }
    @Override
@@ -162,4 +197,78 @@
        QueryWrapper<YwProject> wrapper = new QueryWrapper<>(ywProject);
        return ywProjectMapper.selectCount(wrapper);
    }
    @Override
    public List<ProjectDataVO> projectTree(){
        List<ProjectDataVO> projectDataVOList = new ArrayList<>();
        List<YwProject>  ywProjectList = ywProjectMapper.selectList(new QueryWrapper<YwProject>().lambda()
                .eq(YwProject::getIsdeleted,Constants.ZERO)
                .eq(YwProject::getStatus,Constants.ZERO)
                .orderByAsc(YwProject::getSortnum)
        );
        for (YwProject ywProject:ywProjectList) {
            ProjectDataVO projectDataVO = new ProjectDataVO();
            BeanUtils.copyProperties(ywProject,projectDataVO);
            projectDataVO.setLv(Constants.ZERO);
            projectDataVOList.add(projectDataVO);
        }
        List<YwBuilding>  ywBuildingList = ywBuildingMapper.selectList(new QueryWrapper<YwBuilding>().lambda()
                .eq(YwBuilding::getIsdeleted,Constants.ZERO)
                .eq(YwBuilding::getStatus,Constants.ZERO)
                .orderByAsc(YwBuilding::getSortnum)
        );
        for (YwBuilding data:ywBuildingList) {
            ProjectDataVO projectDataVO = new ProjectDataVO();
            BeanUtils.copyProperties(data,projectDataVO);
            projectDataVO.setPId(data.getProjectId());
            projectDataVO.setLv(Constants.ONE);
            projectDataVOList.add(projectDataVO);
        }
        List<YwFloor>  ywFloorList = ywFloorMapper.selectList(new QueryWrapper<YwFloor>().lambda()
                .eq(YwFloor::getIsdeleted,Constants.ZERO)
                .eq(YwFloor::getStatus,Constants.ZERO)
                .orderByAsc(YwFloor::getSortnum)
        );
        for (YwFloor data:ywFloorList) {
            ProjectDataVO projectDataVO = new ProjectDataVO();
            BeanUtils.copyProperties(data,projectDataVO);
            projectDataVO.setPId(data.getBuildingId());
            projectDataVO.setLv(Constants.TWO);
            projectDataVOList.add(projectDataVO);
        }
        List<YwRoom>  ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
                .eq(YwRoom::getStatus,Constants.ZERO)
                .orderByAsc(YwRoom::getSortnum)
        );
        for (YwRoom data:ywRoomList) {
            ProjectDataVO projectDataVO = new ProjectDataVO();
            BeanUtils.copyProperties(data,projectDataVO);
            projectDataVO.setName(data.getCode());
            projectDataVO.setPId(data.getFloor());
            projectDataVO.setLv(Constants.THREE);
            projectDataVOList.add(projectDataVO);
        }
        ProjectTree treeBuild = new ProjectTree(projectDataVOList);
        projectDataVOList = treeBuild.buildTree();
        return  projectDataVOList;
    }
}