MrShi
2025-01-10 363208403f2076fef350a7feaf236e6153f982be
Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1
已添加23个文件
已修改37个文件
3179 ■■■■■ 文件已修改
admin/package-lock.json 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/asset.vue 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/assetCate.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/assetList.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/check.vue 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/components/CateEdit.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/in.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/out.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/query.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/stock/record.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/db/business.yw_quick_model.permissions.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/core/utils/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwQuickModelCloudController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwRoomCloudController.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProblemMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwQuickModelMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwWorkorderDataDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwQuickModel.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MonthDataResponse.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwContractBillDataVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwDeviceCateDataVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwDeviceParentCateDataVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwDeviceStatusDataVO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwWorkorderDataVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwQuickModelService.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwRoomService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwQuickModelServiceImpl.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/package-lock.json
@@ -2915,63 +2915,6 @@
          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
          "dev": true
        },
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "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.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.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        },
        "ssri": {
          "version": "8.0.1",
          "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -2979,28 +2922,6 @@
          "dev": true,
          "requires": {
            "minipass": "^3.1.1"
          }
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        },
        "vue-loader-v16": {
          "version": "npm:vue-loader@16.8.3",
          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
          "dev": true,
          "optional": true,
          "requires": {
            "chalk": "^4.1.0",
            "hash-sum": "^2.0.0",
            "loader-utils": "^2.0.0"
          }
        }
      }
@@ -15821,6 +15742,87 @@
        }
      }
    },
    "vue-loader-v16": {
      "version": "npm:vue-loader@16.8.3",
      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
      "dev": true,
      "optional": true,
      "requires": {
        "chalk": "^4.1.0",
        "hash-sum": "^2.0.0",
        "loader-utils": "^2.0.0"
      },
      "dependencies": {
        "ansi-styles": {
          "version": "4.3.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-convert": "^2.0.1"
          }
        },
        "chalk": {
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
          "dev": true,
          "optional": true,
          "requires": {
            "ansi-styles": "^4.1.0",
            "supports-color": "^7.1.0"
          }
        },
        "color-convert": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
          "dev": true,
          "optional": true,
          "requires": {
            "color-name": "~1.1.4"
          }
        },
        "color-name": {
          "version": "1.1.4",
          "resolved": "https://registry.npmjs.org/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",
          "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",
          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
          "dev": true,
          "optional": true,
          "requires": {
            "big.js": "^5.2.2",
            "emojis-list": "^3.0.0",
            "json5": "^2.1.2"
          }
        },
        "supports-color": {
          "version": "7.2.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
          "dev": true,
          "optional": true,
          "requires": {
            "has-flag": "^4.0.0"
          }
        }
      }
    },
    "vue-property-decorator": {
      "version": "8.5.1",
      "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz",
admin/src/views/stock/asset.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,133 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">新增</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="仓库名称" min-width="120" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="负责人" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="仓库位置" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="排序码" min-width="110" show-overflow-tooltip />
      <el-table-column prop="param1" label="备注" min-width="120" show-overflow-tooltip />
      <el-table-column prop="param2" label="状态" min-width="90" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作" min-width="100" show-overflow-tooltip>
        <template v-slot="{row}">
          <span class="primaryColor pointer">查看详情</span>
          <span class="red pointer">删除</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
        {
            filed: 'carCodeFront',
            type: 'input',
            label: '仓库名称',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '仓库状态',
            options: []
          }
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/stock/assetCate.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
<template>
  <TableLayout>
    <template v-slot:table-wrap>
      <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>
      </ul>
      <el-table row-key="id" :tree-props="{ children: 'childCategoryList' }" v-loading="isWorking.search"
        :data="dataList" stripe @selection-change="handleSelectionChange">
        <el-table-column prop="name" label="资产分类" min-width="100px"></el-table-column>
        <!-- <el-table-column prop="parentName" label="所属分类" min-width="100px"></el-table-column> -->
        <el-table-column prop="sortnum" label="排序码" min-width="100px"></el-table-column>
        <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete'])" label="操作"
          min-width="120" fixed="right">
          <template slot-scope="{row}">
            <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit"
              v-permissions="['business:category:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
              v-permissions="['business:category:delete']">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="tableData.pagination">
      </pagination>
    </template>
    <!-- æ–°å»º/修改 -->
    <CateEdit v-if="isShowEdit" @close="isShowEdit = false" ref="CateEditRef" @success="getList" />
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import CateEdit from './components/CateEdit.vue'
import { fetchList, deleteById } from '@/api/business/category.js'
export default {
  name: 'Category',
  extends: BaseTable,
  components: { TableLayout, Pagination, CateEdit },
  data() {
    return {
      // æœç´¢
      filters: {
        parentId: ''
      },
      isShowEdit: false,
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0,
      },
      dataList: []
    }
  },
  created() {
    this.config({
      module: '车辆信息表',
      api: '/business/category',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.getList()
  },
  methods: {
    handleEdit(row) {
      this.isShowEdit = true
      let str = row && row.id ? '编辑资产分类' : '新建资产分类'
      this.$nextTick(() => {
        this.$refs.CateEditRef.open(str)
        this.$refs.CateEditRef.getList()
        if (row && row.id) {
          this.$refs.CateEditRef.getDetail(row.id)
        }
      })
    },
    deleteById(row) {
      this.$confirm(`您确认要删除该分类吗`, '温馨提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteById(row.id).then(res => {
          this.getList()
        })
      })
    },
    getList() {
      const { pagination, filters } = this
      this.loading = true
      fetchList({
        model: { ...filters, type: 5 },
        capacity: pagination.pageSize,
        page: pagination.page,
      }).then(res => {
        this.loading = false
        this.dataList = res.records || []
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
  }
}
</script>
admin/src/views/stock/assetList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">新增</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="资产编码" min-width="100" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="资产名称" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="条码" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="品牌" min-width="100" show-overflow-tooltip />
      <el-table-column prop="param1" label="规格型号" min-width="100" show-overflow-tooltip />
      <el-table-column prop="param2" label="单位" min-width="70" show-overflow-tooltip />
      <el-table-column prop="param2" label="安全库存(下限)" min-width="120" show-overflow-tooltip />
      <el-table-column prop="param2" label="安全库存(上限)" min-width="120" show-overflow-tooltip />
      <el-table-column prop="param2" label="状态" min-width="80" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作" min-width="100" show-overflow-tooltip>
        <template v-slot="{ row }">
          <span class="primaryColor pointer">编辑</span>
          <span class="red pointer">删除</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '资产信息',
            placeholder: '请输入资产名称/编码'
          },
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '规格型号',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '所属项目',
            options: []
          }
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style></style>
admin/src/views/stock/check.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">添加</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="盘点单名称" min-width="120" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="盘点仓库" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="盘点员" min-width="80" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="盘点日期" min-width="110" show-overflow-tooltip />
      <el-table-column prop="param1" label="创建人" min-width="80" show-overflow-tooltip />
      <el-table-column prop="param2" label="创建时间" min-width="140" show-overflow-tooltip />
      <el-table-column prop="workTime" label="盘点状态" min-width="80" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作" min-width="140" show-overflow-tooltip>
        <template v-slot="{row}">
          <span class="primaryColor pointer">查看详情</span>
          <span class="primaryColor pointer">取消</span>
          <span class="primaryColor pointer">删除</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
        {
            filed: 'carCodeFront',
            type: 'input',
            label: '盘点单',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '盘点状态',
            options: []
          },
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/stock/components/CateEdit.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
<template>
  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" width="600px" @close="close" @confirm="confirm">
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="分类名称" prop="name">
        <el-input v-model="form.name" placeholder="请输入分类名称" v-trim />
      </el-form-item>
      <el-form-item label="所属分类" prop="parentId">
        <el-select :disabled="form.id" v-model="form.parentId" placeholder="不填为则一级分类">
          <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="排序码(升序)" prop="sortnum">
        <el-input v-model="form.sortnum" oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)" v-trim />
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { create, fetchCateList, getInfoById } from '@/api/business/category.js'
export default {
  name: 'OperaCategoryWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data() {
    return {
      // è¡¨å•数据
      form: {
        parentId: null,
        name: '',
        remark: '',
        status: '',
        sortnum: '',
        type: 5
      },
      // éªŒè¯è§„则
      rules: {
        name: [
          { required: true, message: '请输入二级分类名称', trigger: 'blur' }
        ],
        status: [
          { required: true, message: '请选择是否启用', trigger: 'change' }
        ]
      },
      dataList: []
    }
  },
  created() {
    this.config({
      api: '/business/category',
      'field.id': 'id'
    })
  },
  methods: {
    getList() {
      fetchCateList({ type: 5 }).then(res => {
        this.dataList = res || []
      })
    },
    close() {
      this.visible = false
      this.$emit('close')
    },
    getDetail(id) {
      getInfoById(id).then(res => {
        this.form = res
      })
    },
  }
}
</script>
admin/src/views/stock/in.vue
@@ -0,0 +1,138 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导出</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="出库单号" min-width="120" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="出库仓库" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="出库类型" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="出库日期" min-width="110" show-overflow-tooltip />
      <el-table-column prop="param1" label="出库数量" min-width="120" show-overflow-tooltip />
      <el-table-column prop="param2" label="操作人" min-width="90" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作时间" min-width="140" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作" min-width="80" show-overflow-tooltip>
        <template v-slot="{row}">
          <span class="primaryColor pointer">查看详情</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
        {
            filed: 'carCodeFront',
            type: 'input',
            label: '出库单号',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '所在仓库',
            options: []
          },
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '出库类型',
          },
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/stock/out.vue
@@ -0,0 +1,138 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导出</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="出库单号" min-width="120" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="出库仓库" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="出库类型" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="出库日期" min-width="110" show-overflow-tooltip />
      <el-table-column prop="param1" label="出库数量" min-width="120" show-overflow-tooltip />
      <el-table-column prop="param2" label="操作人" min-width="90" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作时间" min-width="140" show-overflow-tooltip />
      <el-table-column prop="workTime" label="操作" min-width="80" show-overflow-tooltip>
        <template v-slot="{row}">
          <span class="primaryColor pointer">查看详情</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
        {
            filed: 'carCodeFront',
            type: 'input',
            label: '出库单号',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '所在仓库',
            options: []
          },
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '出库类型',
          },
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style>
</style>
admin/src/views/stock/query.vue
@@ -0,0 +1,132 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导出</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="资产编码" min-width="100" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="资产名称" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="条码" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="品牌" min-width="100" show-overflow-tooltip />
      <el-table-column prop="param1" label="规格型号" min-width="100" show-overflow-tooltip />
      <el-table-column prop="param2" label="所在仓库" min-width="100" show-overflow-tooltip />
      <el-table-column prop="workTime" label="库存" min-width="80" show-overflow-tooltip />
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '所在仓库',
            options: []
          },
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '资产信息',
            placeholder: '请输入资产名称/编码'
          },
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '型号',
          },
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style></style>
admin/src/views/stock/record.vue
@@ -0,0 +1,150 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
    <div class="mt20">
      <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">导出</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="platformName" label="单据日期" min-width="100" show-overflow-tooltip />
      <el-table-column prop="platformName" label="资产编码" min-width="100" show-overflow-tooltip />
      <el-table-column prop="platformGroupName" label="资产名称" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeFront" label="资产分类" min-width="100" show-overflow-tooltip />
      <el-table-column prop="carCodeBack" label="数量" min-width="80" show-overflow-tooltip />
      <el-table-column prop="param1" label="类型" min-width="80" show-overflow-tooltip />
      <el-table-column prop="workTime" label="仓库" min-width="90" show-overflow-tooltip />
      <el-table-column prop="workTime" label="单据编号" min-width="120" show-overflow-tooltip />
      <el-table-column prop="workTime" label="创建人" min-width="80" show-overflow-tooltip />
      <el-table-column prop="workTime" label="创建时间" min-width="140" show-overflow-tooltip />
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
import { platformLogPage, getPlatformGroupList } from '@/api'
export default {
  components: {
    Pagination,
    QueryForm
  },
  data() {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '资产编码',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '所在仓库',
            options: []
          },
          {
            filed: 'carCodeFront',
            type: 'input',
            label: '单据编号',
          },
          {
            filed: 'platformGroupId',
            type: 'select',
            label: '单据类型',
            options: []
          },
          {
            filed: 'selDate',
            type: 'daterange',
            label: '单据日期',
          },
          {
            filed: 'selTime',
            type: 'daterange',
            label: '创建时间',
          },
        ],
        online: true
      }
    }
  },
  created() {
    // this.getList()
    // this.getGroupList()
  },
  methods: {
    handleSub() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          alert('submit!')
        }
      })
    },
    handleEx() { },
    getGroupList() {
      getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => {
        this.queryFormConfig.formItems[1].options = res.map(i => {
          return {
            value: i.id,
            label: i.name
          }
        })
        // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '全部月台组' })
      })
    },
    getList(page) {
      const { pagination, filters } = this
      this.loading = true
      platformLogPage({
        model: {
          ...filters,
          queryStatus: '6,7,8',
          beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null,
          beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null,
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page,
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.list.forEach(item => {
          item.inTypeTemp = item.inType == 0 ? '整托盘' : '件烟'
          item.taskOrigin = 'WMS获取'
          item.workTime = dayjs.duration(item.param3, 'seconds').format('H时m分s秒')
        })
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear() {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange(capacity) {
      this.pagination.pageSize = capacity
    }
  }
}
</script>
<style></style>
server/db/business.yw_quick_model.permissions.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywquickmodel:create', '新建工作台 - å¿«æ·æ¨¡å—', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywquickmodel:delete', '删除工作台 - å¿«æ·æ¨¡å—', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywquickmodel:update', '修改工作台 - å¿«æ·æ¨¡å—', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywquickmodel:query', '查询工作台 - å¿«æ·æ¨¡å—', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywquickmodel:exportExcel', '导出工作台 - å¿«æ·æ¨¡å—(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -53,6 +53,7 @@
    public static final String YW_PATROL ="YW_PATROL" ;
    public static final String YW_CONTRACT_BILL ="YW_CONTRACT_BILL" ;
    public static final String YW_MATERIAL ="YW_MATERIAL" ;
    public static final String YW_PROBLEM ="YW_PROBLEM" ;
    public static final String RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
    public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
@@ -1388,6 +1389,7 @@
        FN_PATROL_TASK_RECORD_FILE(11, "巡检任务点处理附件 ", "巡检任务点处理附件 "),
        MATERIAL_FILE(12, "资产附件 ", "资产附件 "),
        PROBLEM_FILE(13, "问题附件 ", "问题附件 "),
        FN_DEVICE_MAINTENANCE_FILE(14, "阜宁服务平台设备文件 ", "阜宁服务平台设备文件 "),
        ;
        // æˆå‘˜å˜é‡
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
@@ -10,6 +10,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwContractBill;
import com.doumee.dao.business.vo.YwContractBillDataVO;
import com.doumee.service.business.YwContractBillService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -112,5 +113,11 @@
        return ApiResponse.success("生成成功");
    }
    @ApiOperation("获取待处理账单")
    @GetMapping("/getWaitDealList")
    @CloudRequiredPermission("business:ywcontractbill:query")
    public ApiResponse<YwContractBillDataVO> getWaitDealList(@RequestParam Integer contractId,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywContractBillService.getWaitDealList(contractId));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
@@ -8,6 +8,8 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwDevice;
import com.doumee.dao.business.vo.YwDeviceCateDataVO;
import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
import com.doumee.service.business.YwDeviceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -18,6 +20,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
 * @author æ±Ÿè¹„蹄
@@ -100,6 +103,17 @@
        return ApiResponse.success(ywDeviceService.findByCode(deviceCode));
    }
    @ApiOperation("设备数量分类统计")
    @PostMapping("/getDeviceCateData")
    @CloudRequiredPermission("business:ywdevice:query")
    public ApiResponse<Set<YwDeviceCateDataVO>> getDeviceCateData (@RequestBody YwDevice ywDevice,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywDeviceService.getDeviceCateData(ywDevice));
    }
    @ApiOperation("设备状态统计")
    @PostMapping("/getDeviceStatus")
    @CloudRequiredPermission("business:ywdevice:query")
    public ApiResponse<YwDeviceStatusDataVO> getDeviceStatus (@RequestBody YwDevice ywDevice,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywDeviceService.getDeviceStatus(ywDevice));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
@@ -10,7 +10,9 @@
import com.doumee.core.model.PageData;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwProblem;
import com.doumee.dao.business.model.YwWorkorder;
import com.doumee.service.business.YwProblemService;
import com.doumee.service.business.impl.YwWorkorderServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;    
@@ -33,6 +35,8 @@
    @Autowired
    private YwProblemService ywProblemService;
    @Autowired
    private YwWorkorderServiceImpl ywWorkorderService;
    @LoginNoRequired
    @PreventRepeat
    @ApiOperation("问题提报")
@@ -41,10 +45,23 @@
        return ApiResponse.success(ywProblemService.create(ywProblem));
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/editProblem")
    @CloudRequiredPermission("business:ywproblem:update")
    public ApiResponse editProblem(@RequestBody YwProblem ywProblem,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywProblem.setLoginUserInfo(getLoginUser(token));
        ywProblemService.editProblem(ywProblem,ywWorkorderService);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @CloudRequiredPermission("business:ywproblem:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywProblemService.deleteById(id);
        return ApiResponse.success(null);
    }
@@ -52,7 +69,7 @@
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @CloudRequiredPermission("business:ywproblem:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
@@ -65,7 +82,7 @@
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @CloudRequiredPermission("business:ywproblem:update")
    public ApiResponse updateById(@RequestBody YwProblem ywProblem) {
    public ApiResponse updateById(@RequestBody YwProblem ywProblem,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywProblemService.updateById(ywProblem);
        return ApiResponse.success(null);
    }
@@ -73,21 +90,21 @@
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:ywproblem:query")
    public ApiResponse<PageData<YwProblem>> findPage (@RequestBody PageWrap<YwProblem> pageWrap) {
    public ApiResponse<PageData<YwProblem>> findPage (@RequestBody PageWrap<YwProblem> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywProblemService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @CloudRequiredPermission("business:ywproblem:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwProblem> pageWrap, HttpServletResponse response) {
    public void exportExcel (@RequestBody PageWrap<YwProblem> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ExcelExporter.build(YwProblem.class).export(ywProblemService.findPage(pageWrap).getRecords(), "运维问题上报信息表", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @CloudRequiredPermission("business:ywproblem:query")
    public ApiResponse findById(@PathVariable Integer id) {
        return ApiResponse.success(ywProblemService.findById(id));
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywProblemService.getDetail(id));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwQuickModelCloudController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.doumee.cloud.admin;
import com.doumee.api.BaseController;
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.business.model.YwQuickModel;
import com.doumee.service.business.YwQuickModelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/09 17:47
 */
@Api(tags = "工作台 - å¿«æ·æ¨¡å—")
@RestController
@RequestMapping("/business/ywQuickModel")
public class YwQuickModelCloudController extends BaseController {
    @Autowired
    private YwQuickModelService ywQuickModelService;
    @PreventRepeat
    @ApiOperation("新建")
    @PostMapping("/create")
    @RequiresPermissions("business:ywquickmodel:create")
    public ApiResponse create(@RequestBody YwQuickModel ywQuickModel) {
        return ApiResponse.success(ywQuickModelService.create(ywQuickModel));
    }
    @ApiOperation("根据ID删除")
    @GetMapping("/delete/{id}")
    @RequiresPermissions("business:ywquickmodel:delete")
    public ApiResponse deleteById(@PathVariable Integer id) {
        ywQuickModelService.deleteById(id);
        return ApiResponse.success(null);
    }
    @ApiOperation("批量删除")
    @GetMapping("/delete/batch")
    @RequiresPermissions("business:ywquickmodel:delete")
    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
        String [] idArray = ids.split(",");
        List<Integer> idList = new ArrayList<>();
        for (String id : idArray) {
            idList.add(Integer.valueOf(id));
        }
        ywQuickModelService.deleteByIdInBatch(idList);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID修改")
    @PostMapping("/updateById")
    @RequiresPermissions("business:ywquickmodel:update")
    public ApiResponse updateById(@RequestBody YwQuickModel ywQuickModel) {
        ywQuickModelService.updateById(ywQuickModel);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @RequiresPermissions("business:ywquickmodel:query")
    public ApiResponse<PageData<YwQuickModel>> findPage (@RequestBody PageWrap<YwQuickModel> pageWrap) {
        return ApiResponse.success(ywQuickModelService.findPage(pageWrap));
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcel")
    @RequiresPermissions("business:ywquickmodel:exportExcel")
    public void exportExcel (@RequestBody PageWrap<YwQuickModel> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(YwQuickModel.class).export(ywQuickModelService.findPage(pageWrap).getRecords(), "工作台 - å¿«æ·æ¨¡å—", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
    @RequiresPermissions("business:ywquickmodel:query")
    public ApiResponse findById(@PathVariable Integer id) {
        return ApiResponse.success(ywQuickModelService.findById(id));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwRoomCloudController.java
@@ -9,6 +9,8 @@
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.YwContractRoom;
import com.doumee.dao.business.model.YwRoom;
import com.doumee.dao.business.vo.YwFloorStatusDataVO;
import com.doumee.dao.business.vo.YwRoomContractDataVO;
import com.doumee.service.business.YwRoomService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -99,4 +101,19 @@
    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywRoomService.findById(id));
    }
    @ApiOperation("查询房间态势数据")
    @PostMapping("/getRoomStatusList")
    @CloudRequiredPermission("business:ywroom:query")
    public ApiResponse<List<YwFloorStatusDataVO>> getRoomStatusList (@RequestBody  YwRoom model, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywRoomService.getRoomStatusList(model));
    }
    @ApiOperation("查询房间租赁信息")
    @PostMapping("/getRoomContract")
    @CloudRequiredPermission("business:ywroom:query")
    public ApiResponse<YwRoomContractDataVO> getRoomContract (@RequestBody  YwRoom model, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        return ApiResponse.success(ywRoomService.getRoomContract(model));
    }
}
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkorderCloudController.java
@@ -7,7 +7,9 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.dto.YwWorkorderDataDTO;
import com.doumee.dao.business.model.YwWorkorder;
import com.doumee.dao.business.vo.YwWorkorderDataVO;
import com.doumee.service.business.YwWorkorderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -37,6 +39,7 @@
    @CloudRequiredPermission("business:ywworkorder:create")
    public ApiResponse create(@RequestBody YwWorkorder ywWorkorder,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        ywWorkorder.setLoginUserInfo(this.getLoginUser(token));
        ywWorkorder.setOrigin(Constants.ZERO);
        return ApiResponse.success(ywWorkorderService.create(ywWorkorder));
    }
@@ -86,6 +89,19 @@
        return ApiResponse.success(null);
    }
    @ApiOperation("获取工单数量信息")
    @PostMapping("/getDataVO")
    @CloudRequiredPermission("business:ywworkorder:update")
    public ApiResponse<YwWorkorderDataVO> getDataVO(@RequestBody YwWorkorderDataDTO dto,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        YwWorkorderDataVO ywWorkorderDataVO = ywWorkorderService.getDataVO(dto);
        return ApiResponse.success(ywWorkorderDataVO);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
    @CloudRequiredPermission("business:ywworkorder:query")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProblemMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwProblem;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/06 11:05
 */
public interface YwProblemMapper extends BaseMapper<YwProblem> {
public interface YwProblemMapper extends MPJBaseMapper<YwProblem> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwQuickModelMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.doumee.dao.business;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.YwQuickModel;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/09 17:47
 */
public interface YwQuickModelMapper extends MPJBaseMapper<YwQuickModel> {
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwWorkorderDataDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.doumee.dao.business.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:37
 */
@Data
public class YwWorkorderDataDTO {
    @ApiModelProperty(value = "查询类型:1=项目;2=楼层;3=房间", example = "1")
    private Integer queryType;
    @ApiModelProperty(value = "业务主键", example = "1")
    private Integer queryId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwBuilding.java
@@ -115,4 +115,11 @@
    @ApiModelProperty(value = "项目名称")
    @TableField(exist = false)
    private String projectName;
    @ApiModelProperty(value = "房间计费面积(平方米)", example = "1")
    @TableField(exist = false)
    private BigDecimal roomFeeArea;
    @ApiModelProperty(value = "房间计租面积(平方米)", example = "1")
    @TableField(exist = false)
    private BigDecimal roomRentArea;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
@@ -202,6 +202,9 @@
    @ExcelColumn(name="物业费总金额")
    private BigDecimal wyTotalFee;
    @ApiModelProperty(value = "房间主键 æŸ¥è¯¢ä½¿ç”¨")
    @TableField(exist = false)
    private Integer roomId;
    @ApiModelProperty(value = "附件集合")
    @TableField(exist = false)
    private List<Multifile> fileList;
@@ -244,6 +247,9 @@
    @ApiModelProperty(value = "重新开始时间")
    @TableField(exist = false)
    private Date queryStartTime;
    @ApiModelProperty(value = "合同总费用",notes = "合同初始化时金额", example = "1")
    @TableField(exist = false)
    private BigDecimal totalFee;
    @ApiModelProperty(value = "查询结束时间")
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
@@ -12,6 +12,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * è¿ç»´è®¾å¤‡ä¿¡æ¯è¡¨
@@ -94,9 +95,46 @@
    @ExcelColumn(name="所在位置")
    private String addr;
    @ApiModelProperty(value = "所属项目编码(关联yw_project)", example = "1")
    private Integer projectId;
    @ApiModelProperty(value = "所属楼层编码(关联yw_floor)", example = "1")
    private Integer floorId;
    @ApiModelProperty(value = "所属楼宇编码(关联yw_building)", example = "1")
    private Integer buildingId;
    @ApiModelProperty(value = "所属房间编码(关联yw_room)", example = "1")
    private Integer roomId;
    @ApiModelProperty(value = "供应商联系人")
    private String supplierLinker;
    @ApiModelProperty(value = "供应商联系电话")
    private String supplierPhone;
    @ApiModelProperty(value = "维保人员主键(关联system_user)")
    private Integer maintenanceUserId;
    @ApiModelProperty(value = "维保到期日")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date maintenanceOverDate;
    @ApiModelProperty(value = "维保说明")
    private String maintenanceContent;
    @ApiModelProperty(value = "分类名称")
    @TableField(exist = false)
    private String categoryName;
    @ApiModelProperty(value = "父级分类名称")
    @TableField(exist = false)
    private String categoryParentName;
    @ApiModelProperty(value = "所属父级分类编码(关联category)", example = "1")
    @TableField(exist = false)
    private Integer cateParentId;
    @ApiModelProperty(value = "管理员名称")
    @TableField(exist = false)
@@ -110,6 +148,12 @@
    @TableField(exist = false)
    private String fileFullUrl;
    @ApiModelProperty(value = "附件信息")
    @TableField(exist = false)
    private List<Multifile> multifileList;
//    @ApiModelProperty(value = "附件信息")
//    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
@@ -119,5 +119,13 @@
    @TableField(exist = false)
    private Integer projectId;
    @ApiModelProperty(value = "楼宇主键", example = "1")
    @TableField(exist = false)
    private Integer buildingId;
    @ApiModelProperty(value = "楼层主键", example = "1")
    @TableField(exist = false)
    private Integer floorId;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
@@ -11,6 +11,7 @@
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
/**
 * è¿ç»´å·¡æ£€è®¡åˆ’信息表
@@ -133,4 +134,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endDateSec;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
@@ -119,4 +119,26 @@
    @TableField(exist = false)
    private List<Multifile> multifileList;
    @ApiModelProperty(value = "巡检计划名称")
    @TableField(exist = false)
    private String schemeTitle;
    @ApiModelProperty(value = "巡检任务编号")
    @TableField(exist = false)
    private String taskCode;
    @ApiModelProperty(value = "开始日期")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startDate;
    @ApiModelProperty(value = "结束日期")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endDate;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.system.model.Multifile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -21,7 +22,7 @@
@Data
@ApiModel("运维问题上报信息表")
@TableName("`yw_problem`")
public class YwProblem {
public class YwProblem extends LoginUserModel {
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键", example = "1")
@@ -93,7 +94,7 @@
    @ApiModelProperty(value = "处理时间")
    @ExcelColumn(name="处理时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dealDate;
    @ApiModelProperty(value = "处理备注")
@@ -111,4 +112,51 @@
    @ApiModelProperty(value = "附件信息")
    @TableField(exist = false)
    private List<Multifile> fileList;
    @ApiModelProperty(value = "处理人名称")
    @TableField(exist = false)
    private String dealUserName;
    @ApiModelProperty(value = "处理人组织名称")
    @TableField(exist = false)
    private String dealUserCompanyName;
    @ApiModelProperty(value = "处理开始时间 æŸ¥è¯¢ä½¿ç”¨")
    @TableField(exist = false)
    private Date dealDateStart;
    @ApiModelProperty(value = "处理结束时间 æŸ¥è¯¢ä½¿ç”¨")
    @TableField(exist = false)
    private Date dealDateEnd;
    @ApiModelProperty(value = "保修区域类型 0室内维修 1公共区域", example = "1")
    @TableField(exist = false)
    private Integer workOrderAreaType;
    @ApiModelProperty(value = "所属房间编码(关联yw_room)", example = "1")
    @TableField(exist = false)
    private Integer workOrderRoomId;
    @ApiModelProperty(value = "所属楼层编码(关联yw_floor)", example = "1")
    @TableField(exist = false)
    private Integer workOrderFloorId;
    @ApiModelProperty(value = "工单分类编码(关联category)", example = "1")
    @TableField(exist = false)
    private Integer workOrderCateId;
    @ApiModelProperty(value = "上门时间")
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date workOrderGetDate;
    @ApiModelProperty(value = "情况说明")
    @TableField(exist = false)
    private String workOrderContent;
    @ApiModelProperty(value = "转工单附件信息")
    @TableField(exist = false)
    private List<Multifile> workOrderFileList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwQuickModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
package com.doumee.dao.business.model;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
/**
 * å·¥ä½œå° - å¿«æ·æ¨¡å—
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/09 17:47
 */
@Data
@ApiModel("工作台 - å¿«æ·æ¨¡å—")
@TableName("`yw_quick_model`")
public class YwQuickModel extends LoginUserModel {
    @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")
    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 = "用户主键", example = "1")
    @ExcelColumn(name="用户主键")
    private Integer userId;
    @ApiModelProperty(value = "模块名称")
    @ExcelColumn(name="模块名称")
    private String name;
    @ApiModelProperty(value = "模块地址")
    @ExcelColumn(name="模块地址")
    private String path;
    @ApiModelProperty(value = "图标地址")
    @ExcelColumn(name="图标地址")
    private String icoPath;
    @ApiModelProperty(value = "排序码", example = "1")
    @ExcelColumn(name="排序码")
    private Integer sort;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
@@ -73,6 +73,7 @@
    @ApiModelProperty(value = "所属房间编码(关联yw_room)", example = "1")
    private Integer roomId;
    @ApiModelProperty(value = "所属楼层编码(关联yw_floor)", example = "1")
    private Integer floorId;
@@ -123,6 +124,10 @@
    @ApiModelProperty(value = "处理方式 0指派后处理 1直接回复", example = "1")
    private Integer dealType;
    @ApiModelProperty(value = "来源 0自建 1问题转工单", example = "1")
    private Integer origin;
    @ApiModelProperty(value = "项目名称")
    @TableField(exist = false)
    private String projectName;
@@ -138,6 +143,9 @@
    @ApiModelProperty(value = "房源名称")
    @TableField(exist = false)
    private String roomName;
    @ApiModelProperty(value = "问题主键")
    @TableField(exist = false)
    private String problemId;
    @ApiModelProperty(value = "报修区域")
    @ExcelColumn(name="报修区域",index = 2,width = 10)
    @TableField(exist = false)
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MonthDataResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.doumee.dao.business.vo;
import com.doumee.dao.system.model.Notices;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/5/6 10:20
 */
@Data
public class MonthDataResponse {
    @ApiModelProperty(value = "日期")
    private String monthDate;
    @ApiModelProperty(value = "周几")
    private String weekMsg;
    @ApiModelProperty(value = "通知列表")
    private List<Notices> noticeList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwContractBillDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.doumee.dao.business.vo;
import com.doumee.dao.business.model.YwContractBill;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwContractBillDataVO {
    @ApiModelProperty(value = "收款账单数", example = "1")
    private Integer inAmount;
    @ApiModelProperty(value = "收款账单金额", example = "1")
    private BigDecimal inFee;
    @ApiModelProperty(value = "付款账单数", example = "1")
    private Integer payAmount;
    @ApiModelProperty(value = "付款账单金额", example = "1")
    private BigDecimal payFee;
    @ApiModelProperty(value = "账单列表", example = "1")
    private List<YwContractBill> ywContractBillList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwDeviceCateDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/12/2 10:02
 */
@Data
public class YwDeviceCateDataVO {
    @ApiModelProperty(value = "分类主键", example = "1")
    private Integer cateId;
    @ApiModelProperty(value = "分类名称", example = "1")
    private String cateName;
    @ApiModelProperty(value = "父级分类主键", example = "1")
    private Integer cateParentId;
    @ApiModelProperty(value = "数量", example = "1")
    private Integer deviceAmount ;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwDeviceParentCateDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/12/2 10:02
 */
@Data
public class YwDeviceParentCateDataVO {
    @ApiModelProperty(value = "分类主键", example = "1")
    private Integer cateId;
    @ApiModelProperty(value = "分类名称", example = "1")
    private String cateName;
    @ApiModelProperty(value = "数量", example = "1")
    private Integer deviceAmount ;
    @ApiModelProperty(value = "子分类数据", example = "1")
    private List<YwDeviceCateDataVO> ywDeviceCateDataVOList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwDeviceStatusDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwDeviceStatusDataVO {
    @ApiModelProperty(value = "正常数量", example = "1")
    private Integer workAmount;
    @ApiModelProperty(value = "异常数量", example = "1")
    private Integer exceptionAmount;
    @ApiModelProperty(value = "报废数量", example = "1")
    private Integer errAmount;
    @ApiModelProperty(value = "累计总数", example = "1")
    private Integer amount;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwFloorStatusDataVO {
    @ApiModelProperty(value = "楼层主键", example = "1")
    private Integer floorId;
    @ApiModelProperty(value = "楼层面积", example = "1")
    private BigDecimal floorArea;
    @ApiModelProperty(value = "楼层名称", example = "1")
    private String floorName;
    @ApiModelProperty(value = "楼层数", example = "1")
    private Integer floor;
    @ApiModelProperty(value = "房间状态数据", example = "1")
    private List<YwRoomStatusDataVO> ywRoomStatusDataVOList;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.doumee.dao.business.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwRoomContractDataVO {
    @ApiModelProperty(value = "在租合同数", example = "1")
    private Integer leaseContractAmount;
    @ApiModelProperty(value = "在租合房源数", example = "1")
    private Integer leaseRoomAmount;
    @ApiModelProperty(value = "可招商面积", example = "1")
    private BigDecimal investmentArea;
    @ApiModelProperty(value = "可招商房源数", example = "1")
    private Integer investmentRoomAmount;
    @ApiModelProperty(value = "在租实时均价", example = "1")
    private BigDecimal leasePrice;
    @ApiModelProperty(value = "在租面积", example = "1")
    private BigDecimal leaseArea;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.doumee.dao.business.vo;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwRoomStatusDataVO {
    @ApiModelProperty(value = "楼层主键", example = "1")
    private Integer floorId;
    @ApiModelProperty(value = "房间主键", example = "1")
    private Integer roomId;
    @ApiModelProperty(value = "房间编号", example = "1")
    private String roomCode;
    @ApiModelProperty(value = "计租面积(平方米)", example = "1")
    private BigDecimal roomRentArea;
    @ApiModelProperty(value = "租客名称", example = "1")
    private String customerName;
    @ApiModelProperty(value = "房间状态:0=待租;1=已租;2=即将到期", example = "1")
    private Integer roomStatus;
    @ApiModelProperty(value = "到期日期", example = "1")
    private Date overData;
    @ApiModelProperty(value = "空闲天数", example = "1")
    private Integer freeDayAmount;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwWorkorderDataVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.doumee.dao.business.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/1/8 15:32
 */
@Data
public class YwWorkorderDataVO {
    @ApiModelProperty(value = "待指派数量", example = "1")
    private Integer waitAssignAmount;
    @ApiModelProperty(value = "待处理数量", example = "1")
    private Integer waitDealAmount;
    @ApiModelProperty(value = "本月总数", example = "1")
    private Integer monthAmount;
    @ApiModelProperty(value = "累计总数", example = "1")
    private Integer amount;
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.doumee.service.business;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.dao.business.model.YwQuickModel;
import com.doumee.dao.business.vo.MonthDataResponse;
import java.util.List;
/**
 * å®¡æ‰¹ä¿¡æ¯è®°å½•表Service定义
 * @author æ±Ÿè¹„蹄
 * @date 2023/12/28 14:09
 */
public interface WorkbenchesService {
    List<YwQuickModel> getYwQuickList(LoginUserInfo loginUserInfo);
    void updMyYwQuickModel(List<Integer> idList, LoginUserInfo loginUserInfo);
    List<MonthDataResponse> getMonthNotices(String yearMonth, LoginUserInfo loginUserInfo);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
@@ -4,6 +4,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwContractBill;
import com.doumee.dao.business.vo.YwContractBillDataVO;
import java.util.List;
/**
@@ -104,4 +106,7 @@
    void dealDayBillCode();
    List<YwContractBill> getCanBackBill(YwContractBill model);
    YwContractBillDataVO getWaitDealList(Integer contractId);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
@@ -4,9 +4,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwDevice;
import com.doumee.dao.business.vo.YwDeviceCateDataVO;
import com.doumee.dao.business.vo.YwDeviceDataVO;
import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
import java.util.List;
import java.util.Set;
/**
 * è¿ç»´è®¾å¤‡ä¿¡æ¯è¡¨Service定义
@@ -105,5 +108,7 @@
    YwDevice findByCode(String deviceCode);
    Set<YwDeviceCateDataVO> getDeviceCateData(YwDevice model);
    YwDeviceStatusDataVO getDeviceStatus(YwDevice model);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
@@ -3,6 +3,8 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwProblem;
import com.doumee.service.business.impl.YwWorkorderServiceImpl;
import java.util.List;
/**
@@ -63,6 +65,9 @@
     */
    YwProblem findById(Integer id);
    YwProblem getDetail(Integer id);
    /**
     * æ¡ä»¶æŸ¥è¯¢å•条记录
     *
@@ -94,4 +99,7 @@
     * @return long
     */
    long count(YwProblem ywProblem);
    void editProblem(YwProblem ywProblem, YwWorkorderServiceImpl ywWorkorderService);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwQuickModelService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.doumee.service.business;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwQuickModel;
import java.util.List;
/**
 * å·¥ä½œå° - å¿«æ·æ¨¡å—Service定义
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/09 17:47
 */
public interface YwQuickModelService {
    /**
     * åˆ›å»º
     *
     * @param ywQuickModel å®žä½“对象
     * @return Integer
     */
    Integer create(YwQuickModel ywQuickModel);
    /**
     * ä¸»é”®åˆ é™¤
     *
     * @param id ä¸»é”®
     */
    void deleteById(Integer id);
    /**
     * åˆ é™¤
     *
     * @param ywQuickModel å®žä½“对象
     */
    void delete(YwQuickModel ywQuickModel);
    /**
     * æ‰¹é‡ä¸»é”®åˆ é™¤
     *
     * @param ids ä¸»é”®é›†
     */
    void deleteByIdInBatch(List<Integer> ids);
    /**
     * ä¸»é”®æ›´æ–°
     *
     * @param ywQuickModel å®žä½“对象
     */
    void updateById(YwQuickModel ywQuickModel);
    /**
     * æ‰¹é‡ä¸»é”®æ›´æ–°
     *
     * @param ywQuickModels å®žä½“集
     */
    void updateByIdInBatch(List<YwQuickModel> ywQuickModels);
    /**
     * ä¸»é”®æŸ¥è¯¢
     *
     * @param id ä¸»é”®
     * @return YwQuickModel
     */
    YwQuickModel findById(Integer id);
    /**
     * æ¡ä»¶æŸ¥è¯¢å•条记录
     *
     * @param ywQuickModel å®žä½“对象
     * @return YwQuickModel
     */
    YwQuickModel findOne(YwQuickModel ywQuickModel);
    /**
     * æ¡ä»¶æŸ¥è¯¢
     *
     * @param ywQuickModel å®žä½“对象
     * @return List<YwQuickModel>
     */
    List<YwQuickModel> findList(YwQuickModel ywQuickModel);
    /**
     * åˆ†é¡µæŸ¥è¯¢
     *
     * @param pageWrap åˆ†é¡µå¯¹è±¡
     * @return PageData<YwQuickModel>
     */
    PageData<YwQuickModel> findPage(PageWrap<YwQuickModel> pageWrap);
    /**
     * æ¡ä»¶ç»Ÿè®¡
     *
     * @param ywQuickModel å®žä½“对象
     * @return long
     */
    long count(YwQuickModel ywQuickModel);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwRoomService.java
@@ -4,6 +4,9 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.YwRoom;
import com.doumee.dao.business.vo.YwFloorStatusDataVO;
import com.doumee.dao.business.vo.YwRoomContractDataVO;
import java.util.List;
/**
@@ -95,4 +98,9 @@
     * @return long
     */
    long count(YwRoom ywRoom);
    List<YwFloorStatusDataVO>  getRoomStatusList(YwRoom model);
    YwRoomContractDataVO getRoomContract(YwRoom model);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWorkorderService.java
@@ -3,7 +3,10 @@
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.dto.YwWorkorderDataDTO;
import com.doumee.dao.business.model.YwWorkorder;
import com.doumee.dao.business.vo.YwWorkorderDataVO;
import java.util.List;
/**
@@ -98,4 +101,6 @@
    void dispatchOrder(YwWorkorder ywWorkorder);
    void dealOrder(YwWorkorder ywWorkorder);
    YwWorkorderDataVO getDataVO(YwWorkorderDataDTO dto);
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.doumee.service.business.impl;
import com.alibaba.druid.sql.visitor.functions.Concat;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.LoginUserModel;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.ApproveParamMapper;
import com.doumee.dao.business.PlatformLogMapper;
import com.doumee.dao.business.YwQuickModelMapper;
import com.doumee.dao.business.model.YwQuickModel;
import com.doumee.dao.business.vo.MonthDataResponse;
import com.doumee.service.business.WorkbenchesService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import io.jsonwebtoken.lang.Objects;
import io.swagger.models.auth.In;
import org.apache.tomcat.util.bcel.classfile.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * å®¡æ‰¹æ¨¡ç‰ˆé…ç½®ä¿¡æ¯è¡¨Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2023/12/28 11:46
 */
@Service
public class WorkbenchesServiceImpl implements WorkbenchesService {
    @Autowired
    private YwQuickModelMapper ywQuickModelMapper;
    @Override
    public List<YwQuickModel> getYwQuickList(LoginUserInfo loginUserInfo){
        List<YwQuickModel> ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
                .eq(YwQuickModel::getUserId,loginUserInfo.getId())
                .orderByAsc(YwQuickModel::getSort)
        );
        if(CollectionUtils.isEmpty(ywQuickModelList)){
            ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                    .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
                    .isNull(YwQuickModel::getUserId)
                    .orderByAsc(YwQuickModel::getSort)
            );
        }
        return ywQuickModelList;
    }
    @Override
    public void updMyYwQuickModel(List<Integer> idList, LoginUserInfo loginUserInfo){
        List<YwQuickModel> ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
                .isNull(YwQuickModel::getUserId)
                .orderByAsc(YwQuickModel::getSort)
        );
        if(CollectionUtils.isEmpty(ywQuickModelList) || Constants.equalsInteger(idList.size(),ywQuickModelList.size())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"快捷模块配置异常,请联系管理员");
        }
        ywQuickModelMapper.delete(new QueryWrapper<YwQuickModel>().lambda().eq(YwQuickModel::getUserId,loginUserInfo.getId()));
        List<YwQuickModel> newList = new ArrayList<>();
        for (int i = 0; i < idList.size(); i++) {
            Integer id = idList.get(i);
            List<YwQuickModel> ywQuickModels = ywQuickModelList.stream().filter(j->Constants.equalsInteger(j.getId(),id)).collect(Collectors.toList());
            if(CollectionUtils.isEmpty(ywQuickModels)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"快捷模块配置异常,请联系管理员");
            }
            YwQuickModel ywQuickModel = ywQuickModels.get(Constants.ZERO);
            ywQuickModel.setId(null);
            ywQuickModel.setCreator(loginUserInfo.getId());
            ywQuickModel.setCreateDate(new Date());
            ywQuickModel.setSort(i+1);
            ywQuickModel.setUserId(loginUserInfo.getId());
            newList.add(ywQuickModel);
        }
        ywQuickModelMapper.insert(newList);
    }
    @Override
    public List<MonthDataResponse> getMonthNotices(String yearMonth, LoginUserInfo loginUserInfo){
        List<String> dataList = DateUtil.getDayByMonth(yearMonth);
        List<MonthDataResponse> monthDataResponseList = new ArrayList<>();
        for (String str:dataList) {
            MonthDataResponse  monthDataResponse = new MonthDataResponse();
            monthDataResponse.setWeekMsg(DateUtil.getWeek(DateUtil.StringToDate(str,"yyyy-MM-dd")).getChineseName());
            monthDataResponse.setMonthDate(str);
            monthDataResponseList.add(monthDataResponse);
        }
        return monthDataResponseList;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
@@ -111,11 +111,12 @@
    @Override
    public YwBuilding findById(Integer id) {
        MPJLambdaWrapper<YwBuilding> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(YwBuilding.class )
                .selectAs(YwProject::getName,YwBuilding::getProjectName)
                .select(" (select ifnull(sum(y.FEE_AREA),0) from yw_room y where y.ISDELETED = 0 and y.status = 0 and y.IS_INVESTMENT = 1 and y.BUILDING_ID = t.id ) ",YwBuilding::getRoomFeeArea)
                .select(" (select ifnull(sum(y.RENT_AREA),0) from yw_room y where y.ISDELETED = 0 and y.status = 0 and y.IS_INVESTMENT = 1 and y.BUILDING_ID = t.id ) ",YwBuilding::getRoomRentArea)
                .select("",YwBuilding::getRoomFeeArea)
                .leftJoin(YwProject.class,YwProject::getId,YwBuilding::getProjectId)
                .eq(YwBuilding::getId,id)
                .last(" limit 1 ")
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
@@ -10,6 +10,7 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.YwContractBillDataVO;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
@@ -20,6 +21,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -282,7 +284,6 @@
        YwContractBill model = pageWrap.getModel();
        IPage<YwContractBill> iPage = ywContractBillMapper.selectJoinPage(page,YwContractBill.class,
            queryWrapper.selectAll(YwContractBill.class)
//                    .select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE  else  -yw.ACT_RECEIVABLE_FEE end),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                    .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                    .selectAs(YwContract::getCode,YwContractBill::getContractCode)
                    .selectAs(YwCustomer::getName,YwContractBill::getCustomerName)
@@ -486,4 +487,59 @@
        return list;
    }
    @Override
    public YwContractBillDataVO getWaitDealList(Integer contractId){
        YwContractBillDataVO ywContractBillDataVO = new YwContractBillDataVO();
        ywContractBillDataVO.setInAmount(Constants.ZERO);
        ywContractBillDataVO.setInFee(BigDecimal.ZERO);
        ywContractBillDataVO.setPayAmount(Constants.ZERO);
        ywContractBillDataVO.setPayFee(BigDecimal.ZERO);
        MPJLambdaWrapper<YwContractBill> queryWrapper = new MPJLambdaWrapper<YwContractBill>();
        queryWrapper.selectAll(YwContractBill.class)
            .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
            .selectAs(YwContract::getCode,YwContractBill::getContractCode)
            .selectAs(YwCustomer::getName,YwContractBill::getCustomerName)
            .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
            .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
            .eq(YwContractBill::getIsdeleted,Constants.ZERO)
            .in(YwContractBill::getPayStatus,Constants.ZERO,Constants.TWO,Constants.THREE,Constants.FOUR)
            .eq(YwContractBill::getContractId,contractId)
            .orderByDesc(YwContractBill::getId);
        List<YwContractBill> list = ywContractBillMapper.selectJoinList(YwContractBill.class,queryWrapper);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            for (YwContractBill ywContractBill:list) {
                //需收金额
                ywContractBill.setNeedReceivableFee(
                        ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())
                );
                //收款账单
                if(Constants.equalsInteger(ywContractBill.getBillType(),Constants.ZERO)){
                    //应收金额 å°äºŽ å®žæ”¶é‡‘额 å¤šæ”¶é‡‘额  åº”该是退款
                     if(ywContractBill.getNeedReceivableFee().compareTo(BigDecimal.ZERO)<Constants.ZERO){
                         ywContractBillDataVO.setPayAmount(ywContractBillDataVO.getPayAmount()+1);
                         ywContractBillDataVO.setPayFee(ywContractBillDataVO.getPayFee().add(ywContractBill.getNeedReceivableFee().abs()));
                     }else if(ywContractBill.getNeedReceivableFee().compareTo(BigDecimal.ZERO)>Constants.ZERO){
                         ywContractBillDataVO.setInAmount(ywContractBillDataVO.getInAmount()+1);
                         ywContractBillDataVO.setInFee(ywContractBillDataVO.getInFee().add(ywContractBill.getNeedReceivableFee().abs()));
                     }
                }else{
                    //付款账单
                    //应付金额 å°äºŽ å®žä»˜é‡‘额 åº”该是付款款
                    if(ywContractBill.getNeedReceivableFee().compareTo(BigDecimal.ZERO)<Constants.ZERO){
                        ywContractBillDataVO.setPayAmount(ywContractBillDataVO.getPayAmount()+1);
                        ywContractBillDataVO.setPayFee(ywContractBillDataVO.getPayFee().add(ywContractBill.getNeedReceivableFee().abs()));
                    }else{
                        ywContractBillDataVO.setInAmount(ywContractBillDataVO.getInAmount()+1);
                        ywContractBillDataVO.setInFee(ywContractBillDataVO.getInFee().add(ywContractBill.getNeedReceivableFee().abs()));
                    }
                }
            }
            ywContractBillDataVO.setYwContractBillList(list);
        }
        return ywContractBillDataVO;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -1525,10 +1525,6 @@
            queryWrapper.le(YwContract::getWyFreeEndDate, Utils.Date.getEnd(pageWrap.getModel().getWyFreeEndDate()));
        }
        if (pageWrap.getModel().getZlTotalFee() != null) {
            queryWrapper.eq(YwContract::getZlTotalFee, pageWrap.getModel().getZlTotalFee());
        }
@@ -1538,6 +1534,9 @@
        if (pageWrap.getModel().getCompanyName() != null) {
            queryWrapper.like(Company::getName, pageWrap.getModel().getCompanyName());
        }
        if (pageWrap.getModel().getRoomId() != null) {
            queryWrapper.apply(" t.id in ( select ycr.CONTRACT_ID from yw_contract_room ycr where ycr.type = 0 and  ycr.ROOM_ID = "+pageWrap.getModel().getRoomId()+" )  ");
        }
        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 );
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceRecordServiceImpl.java
@@ -178,6 +178,7 @@
                        .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getDeviceName()),i->i.like(YwDevice::getName,model.getDeviceName()).or().like(YwDevice::getCode,model.getDeviceName()))
                        .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()))
                        .eq(Objects.nonNull(model.getDeviceId()),YwDeviceRecord::getDeviceId,model.getDeviceId())
                        .eq(YwDeviceRecord::getIsdeleted,Constants.ZERO)
                        .orderByDesc(YwDeviceRecord::getCreateDate)
        );
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
@@ -15,7 +15,10 @@
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.YwDevice;
import com.doumee.dao.business.model.YwDeviceRecord;
import com.doumee.dao.business.vo.YwDeviceCateDataVO;
import com.doumee.dao.business.vo.YwDeviceDataVO;
import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
@@ -33,9 +36,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -66,6 +67,10 @@
            || StringUtils.isBlank(ywDevice.getName())
            || StringUtils.isBlank(ywDevice.getCode())
            || Objects.isNull(ywDevice.getStatus())
            || Objects.isNull(ywDevice.getProjectId())
            || Objects.isNull(ywDevice.getFloorId())
            || Objects.isNull(ywDevice.getBuildingId())
            || Objects.isNull(ywDevice.getRoomId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -87,6 +92,28 @@
            multifile.setObjId(ywDevice.getId());
            multifile.setFileurl(ywDevice.getFileUrl());
            multifileMapper.insert(multifile);
        }
        List<Multifile> fileList = new ArrayList<>();
        if(ywDevice.getMultifileList()!=null && ywDevice.getMultifileList().size()>0){
            for (int i = 0; i <  ywDevice.getMultifileList().size(); i++) {
                Multifile multifile =  ywDevice.getMultifileList().get(i);
                if(StringUtils.isBlank(multifile.getFileurl())){
                    continue;
                }
                multifile.setCreateDate(ywDevice.getCreateDate());
                multifile.setEditDate(ywDevice.getCreateDate());
                multifile.setCreator(ywDevice.getEditor());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(ywDevice.getId());
                multifile.setEditor(ywDevice.getCreator());
                multifile.setObjType(Constants.MultiFile.FN_DEVICE_MAINTENANCE_FILE.getKey());
                multifile.setSortnum(i+1);
                fileList.add(multifile);
            }
        }
        if(fileList.size()>0){
            multifileMapper.insert(fileList);
        }
        return ywDevice.getId();
@@ -126,6 +153,10 @@
                || StringUtils.isBlank(ywDevice.getName())
                || StringUtils.isBlank(ywDevice.getCode())
                || Objects.isNull(ywDevice.getStatus())
                || Objects.isNull(ywDevice.getProjectId())
                || Objects.isNull(ywDevice.getFloorId())
                || Objects.isNull(ywDevice.getBuildingId())
                || Objects.isNull(ywDevice.getRoomId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
@@ -140,7 +171,7 @@
        ywDeviceMapper.updateById(ywDevice);
        multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,ywDevice.getId())
                .eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE.getKey())
                .in(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE.getKey(),Constants.MultiFile.FN_DEVICE_MAINTENANCE_FILE.getKey())
        );
        if(Objects.nonNull(ywDevice.getFileUrl())){
            Multifile multifile = new Multifile();
@@ -151,6 +182,28 @@
            multifile.setObjId(ywDevice.getId());
            multifile.setFileurl(ywDevice.getFileUrl());
            multifileMapper.insert(multifile);
        }
        List<Multifile> fileList = new ArrayList<>();
        if(ywDevice.getMultifileList()!=null && ywDevice.getMultifileList().size()>0){
            for (int i = 0; i <  ywDevice.getMultifileList().size(); i++) {
                Multifile multifile =  ywDevice.getMultifileList().get(i);
                if(StringUtils.isBlank(multifile.getFileurl())){
                    continue;
                }
                multifile.setCreateDate(ywDevice.getCreateDate());
                multifile.setEditDate(ywDevice.getCreateDate());
                multifile.setCreator(ywDevice.getEditor());
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setObjId(ywDevice.getId());
                multifile.setEditor(ywDevice.getCreator());
                multifile.setObjType(Constants.MultiFile.FN_DEVICE_MAINTENANCE_FILE.getKey());
                multifile.setSortnum(i+1);
                fileList.add(multifile);
            }
        }
        if(fileList.size()>0){
            multifileMapper.insert(fileList);
        }
@@ -181,6 +234,26 @@
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_DEVICE).getCode();
            ywDevice.setFileFullUrl(path + multifile.getFileurl());
        }
        //附件数据
        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,ywDevice.getId())
                .eq(Multifile::getIsdeleted,Constants.ZERO)
                .eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_MAINTENANCE_FILE.getKey()));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode();
            for (Multifile m:multifileList) {
                if(StringUtils.isNotBlank(m.getFileurl())){
                    m.setFileurlFull(path + m.getFileurl());
                }
            }
            ywDevice.setMultifileList(multifileList);
        }
        return ywDevice;
    }
@@ -228,12 +301,18 @@
        Utils.MP.blankToNull(pageWrap.getModel());
        YwDevice model = pageWrap.getModel();
        queryWrapper.selectAll(YwDevice.class)
                .selectAs(Category::getName,YwDevice::getCategoryName)
                .select("c.name",YwDevice::getCategoryName)
                .select("c1.name",YwDevice::getCategoryParentName)
                .selectAs(SystemUser::getRealname,YwDevice::getRealName)
                .leftJoin(Category.class,Category::getId,YwDevice::getCateId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwDevice::getUserId)
                .leftJoin("category c on t.CATE_ID = c.id")
                .leftJoin("category c1 on c.PARENT_ID = c1.id")
                .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(YwDevice::getName,model.getName()).or().like(YwDevice::getCode,model.getName()))
                .eq(Objects.nonNull(model.getStatus()),YwDevice::getStatus,model.getStatus())
                .eq(Objects.nonNull(model.getRoomId()),YwDevice::getRoomId,model.getRoomId())
                .eq(Objects.nonNull(model.getFloorId()),YwDevice::getFloorId,model.getFloorId())
                .eq(Objects.nonNull(model.getProjectId()),YwDevice::getProjectId,model.getProjectId())
                .eq(Objects.nonNull(model.getBuildingId()),YwDevice::getBuildingId,model.getBuildingId())
                .eq(YwDevice::getIsdeleted,Constants.ZERO)
                .orderByDesc(YwDevice::getCreateDate)
        ;
@@ -263,6 +342,80 @@
        return ywDeviceDataVO;
    }
    @Override
    public Set<YwDeviceCateDataVO> getDeviceCateData(YwDevice model){
        MPJLambdaWrapper<YwDevice> queryWrapper = new MPJLambdaWrapper<YwDevice>();
        queryWrapper.selectAll(YwDevice.class)
                .select("c.name",YwDevice::getCategoryName)
                .select("c1.name",YwDevice::getCategoryParentName)
                .select("c1.id",YwDevice::getCateParentId)
                .selectAs(SystemUser::getRealname,YwDevice::getRealName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwDevice::getUserId)
                .leftJoin("category c on t.CATE_ID = c.id")
                .leftJoin("category c1 on c.PARENT_ID = c1.id")
                .eq(Objects.nonNull(model.getRoomId()),YwDevice::getRoomId,model.getRoomId())
                .eq(Objects.nonNull(model.getFloorId()),YwDevice::getFloorId,model.getFloorId())
                .eq(Objects.nonNull(model.getProjectId()),YwDevice::getProjectId,model.getProjectId())
                .eq(Objects.nonNull(model.getBuildingId()),YwDevice::getBuildingId,model.getBuildingId())
                .eq(YwDevice::getIsdeleted,Constants.ZERO)
                .isNotNull(YwDevice::getCateId)
                .orderByDesc(YwDevice::getCreateDate)
        ;
        List<YwDevice> ywDeviceList = ywDeviceMapper.selectJoinList(YwDevice.class,queryWrapper);
        Set<YwDeviceCateDataVO> ywDeviceCateDataVOSet = new HashSet<>();
        Set<YwDeviceParentCateDataVO> ywDeviceParentCateDataVOSet = new HashSet<>();
        for (YwDevice y: ywDeviceList) {
            YwDeviceCateDataVO ywDeviceCateDataVO = new YwDeviceCateDataVO();
            ywDeviceCateDataVO.setCateId(y.getCateId());
            ywDeviceCateDataVO.setCateName(y.getCategoryName());
            ywDeviceCateDataVO.setCateParentId(y.getCateParentId());
            ywDeviceCateDataVOSet.add(ywDeviceCateDataVO);
            YwDeviceParentCateDataVO ywDeviceParentCateDataVO = new YwDeviceParentCateDataVO();
            ywDeviceParentCateDataVO.setCateId(y.getCateParentId());
            ywDeviceParentCateDataVO.setCateName(y.getCategoryParentName());
            ywDeviceParentCateDataVOSet.add(ywDeviceParentCateDataVO);
        }
        for (YwDeviceCateDataVO ywDeviceCateDataVO:ywDeviceCateDataVOSet) {
            ywDeviceCateDataVO.setDeviceAmount(
                    ywDeviceList.stream().filter(i->Objects.nonNull(i.getCateId()) && Constants.equalsInteger(i.getCateId(),ywDeviceCateDataVO.getCateId())).collect(Collectors.toList()).size()
            );
        }
        for (YwDeviceParentCateDataVO ywDeviceParentCateDataVO:ywDeviceParentCateDataVOSet) {
            ywDeviceParentCateDataVO.setDeviceAmount(
                    ywDeviceList.stream().filter(i->Objects.nonNull(i.getCateParentId()) && Constants.equalsInteger(i.getCateParentId(),ywDeviceParentCateDataVO.getCateId())).collect(Collectors.toList()).size()
            );
            ywDeviceParentCateDataVO.setYwDeviceCateDataVOList(
                    ywDeviceCateDataVOSet.stream().filter(i->Constants.equalsInteger(i.getCateParentId(),ywDeviceParentCateDataVO.getCateId())).collect(Collectors.toList())
            );
        }
        return ywDeviceCateDataVOSet;
    }
    @Override
    public YwDeviceStatusDataVO getDeviceStatus(YwDevice model){
        YwDeviceStatusDataVO ywDeviceStatusDataVO = new YwDeviceStatusDataVO();
        MPJLambdaWrapper<YwDevice> queryWrapper = new MPJLambdaWrapper<YwDevice>();
        queryWrapper.selectAll(YwDevice.class)
                .eq(Objects.nonNull(model.getRoomId()),YwDevice::getRoomId,model.getRoomId())
                .eq(Objects.nonNull(model.getFloorId()),YwDevice::getFloorId,model.getFloorId())
                .eq(Objects.nonNull(model.getProjectId()),YwDevice::getProjectId,model.getProjectId())
                .eq(Objects.nonNull(model.getBuildingId()),YwDevice::getBuildingId,model.getBuildingId())
                .eq(YwDevice::getIsdeleted,Constants.ZERO)
        ;
        List<YwDevice> ywDeviceList = ywDeviceMapper.selectJoinList(YwDevice.class,queryWrapper);
        ywDeviceStatusDataVO.setAmount(ywDeviceList.size());
        ywDeviceStatusDataVO.setWorkAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
        ywDeviceStatusDataVO.setExceptionAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size());
        ywDeviceStatusDataVO.setErrAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size());
        return ywDeviceStatusDataVO;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
@@ -221,6 +221,8 @@
                .like(StringUtils.isNotBlank(model.getAttr()),YwMaterial::getAttr,model.getAttr())
                .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
                .eq(Objects.nonNull(model.getRoomId()),YwMaterial::getRoomId,model.getRoomId())
                .eq(Objects.nonNull(model.getFloorId()),YwRoom::getFloor,model.getFloorId())
                .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                .eq(YwMaterial::getIsdeleted,Constants.ZERO)
                .orderByAsc(YwMaterial::getCode)
        ;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -15,6 +15,7 @@
import com.doumee.dao.business.YwPatrolTaskMapper;
import com.doumee.dao.business.YwPatrolTaskRecordMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.YwPatrolSchemeService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -48,6 +49,8 @@
    private YwLinePointMapper ywLinePointMapper;
    @Autowired
    private YwPatrolTaskRecordMapper ywPatrolTaskRecordMapper;
    @Autowired
    private SystemUserMapper systemUserMapper;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
@@ -315,8 +318,8 @@
        YwPatrolScheme model = pageWrap.getModel();
        queryWrapper.selectAll(YwPatrolScheme.class)
                .select(" t2.realName as createUserName ")
                .select(" t1.realName as userName ")
                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolScheme::getUserIds)
//                .select(" t1.realName as userName ")
//                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolScheme::getUserIds)
                .leftJoin(" system_user t2 on t.creator =  t2.id  ")
                .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO)
                .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle())
@@ -333,10 +336,24 @@
        IPage<YwPatrolScheme> iPage = ywPatrolSchemeMapper.selectJoinPage(page,YwPatrolScheme.class,queryWrapper);
        for (YwPatrolScheme ywPatrolScheme:iPage.getRecords()) {
            this.getSchemeStatus(ywPatrolScheme);
            //巡检人员
            this.getUserNames(ywPatrolScheme);
        }
        return PageData.from(iPage);
    }
    public void getUserNames(YwPatrolScheme ywPatrolScheme){
        if(Objects.nonNull(ywPatrolScheme)&&StringUtils.isNotBlank(ywPatrolScheme.getUserIds())){
            List<SystemUser>  systemUserList = systemUserMapper.selectList(new QueryWrapper<SystemUser>().lambda()
                    .apply(" find_in_set(id,'"+ywPatrolScheme.getUserIds()+"') ")
            );
            String userName = String.join(",",systemUserList.stream().map(i->i.getRealname()).collect(Collectors.toList()));
            ywPatrolScheme.setUserName(userName);
        }
    }
    //获取状态
    public void getSchemeStatus(YwPatrolScheme ywPatrolScheme){
        List<YwPatrolTask> ywPatrolTaskList = ywPatrolTaskMapper.selectList(new QueryWrapper<YwPatrolTask>().lambda()
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
@@ -127,13 +127,22 @@
                .selectAs(YwPatrolPoint::getName,YwPatrolTaskRecord::getPointName)
                .selectAs(YwPatrolPoint::getContent,YwPatrolTaskRecord::getContent)
                .selectAs(SystemUser::getRealname,YwPatrolTaskRecord::getRealname)
                .selectAs(YwPatrolScheme::getTitle,YwPatrolTaskRecord::getSchemeTitle)
                .selectAs(YwPatrolTask::getTitle,YwPatrolTaskRecord::getTaskCode)
                .selectAs(YwPatrolTask::getStartDate,YwPatrolTaskRecord::getStartDate)
                .selectAs(YwPatrolTask::getEndDate,YwPatrolTaskRecord::getEndDate)
                .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwPatrolTaskRecord::getPointId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTaskRecord::getDealUserId)
                .leftJoin(YwPatrolTask.class,YwPatrolTask::getId,YwPatrolTaskRecord::getTaskId)
                .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
                .eq(YwPatrolScheme::getIsdeleted, Constants.ZERO)
                .eq(Objects.nonNull(model) && Objects.nonNull(model.getTaskId()),YwPatrolTaskRecord::getTaskId, model.getTaskId())
                .eq(Objects.nonNull(model) && Objects.nonNull(model.getDealUserId()),YwPatrolTaskRecord::getDealUserId, model.getDealUserId())
                .like(StringUtils.isNotBlank(model.getPointName()),YwPatrolPoint::getName,model.getPointName())
                .eq(Objects.nonNull(model) && Objects.nonNull(model.getStatus()) , YwPatrolTaskRecord::getStatus,model.getStatus())
                .eq(Objects.nonNull(model) && Objects.nonNull(model.getDeviceId()) , YwPatrolPoint::getDeviceId,model.getDeviceId())
                .orderByDesc(YwPatrolScheme::getCreateDate)
        ;
        IPage<YwPatrolTaskRecord> iPage = ywPatrolTaskRecordMapper.selectJoinPage(page,YwPatrolTaskRecord.class,queryWrapper); 
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
@@ -1,29 +1,33 @@
package com.doumee.service.business.impl;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwProblemMapper;
import com.doumee.dao.business.model.YwProblem;
import com.doumee.dao.business.YwRoomMapper;
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.YwProblemService;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
/**
 * è¿ç»´é—®é¢˜ä¸ŠæŠ¥ä¿¡æ¯è¡¨Service实现
@@ -37,9 +41,16 @@
    private YwProblemMapper ywProblemMapper;
    @Autowired
    private YwRoomMapper ywRoomMapper;
    @Autowired
    private MultifileMapper multifileMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public Integer create(YwProblem ywProblem) {
        if(Objects.isNull(ywProblem)
            || Objects.isNull(ywProblem.getSubmitDate())
@@ -116,6 +127,110 @@
        return ywProblemMapper.selectById(id);
    }
    @Override
    public YwProblem getDetail(Integer id) {
        MPJLambdaWrapper<YwProblem> queryWrapper = new MPJLambdaWrapper<YwProblem>();
        queryWrapper.selectAll(YwProblem.class)
                .selectAs(SystemUser::getRealname,YwProblem::getDealUserName)
                .selectAs(Company::getName,YwProblem::getDealUserCompanyName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwProblem::getDealUserId)
                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
                .eq(YwProblem::getId,id)
        ;
        YwProblem ywProblem = ywProblemMapper.selectJoinOne(YwProblem.class,queryWrapper);
        if(Objects.isNull(ywProblem)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId, ywProblem.getId() )
                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.PROBLEM_FILE.getKey() }))
                .eq(Multifile::getIsdeleted,Constants.ZERO));
        if(multifiles!=null){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PROBLEM).getCode();
            for(Multifile f : multifiles){
                if(StringUtils.isBlank(f.getFileurl())){
                    continue;
                }
                f.setFileurlFull(path+f.getFileurl());
            }
            ywProblem.setFileList(multifiles);
        }
        return ywProblem;
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void editProblem(YwProblem ywProblem,YwWorkorderServiceImpl ywWorkorderService){
        if(Objects.isNull(ywProblem)
            || Objects.isNull(ywProblem.getId())
            || Objects.isNull(ywProblem.getDealStatus())
            || !(Constants.equalsInteger(ywProblem.getDealStatus(),Constants.ONE)||Constants.equalsInteger(ywProblem.getDealStatus(),Constants.TWO))
            || (Constants.equalsInteger(ywProblem.getDealStatus(),Constants.TWO)&&StringUtils.isBlank(ywProblem.getDealInfo()))
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = ywProblem.getLoginUserInfo();
        //关闭问题
        if(Constants.equalsInteger(ywProblem.getDealStatus(),Constants.TWO)){
            ywProblemMapper.update(new UpdateWrapper<YwProblem>().lambda()
                    .set(YwProblem::getDealDate, DateUtil.getCurrDateTime())
                    .set(YwProblem::getDealInfo,ywProblem.getDealInfo())
                    .set(YwProblem::getDealType,Constants.ONE)
                    .set(YwProblem::getDealStatus,ywProblem.getDealStatus())
                    .set(YwProblem::getDealUserId,loginUserInfo.getId())
                    .set(YwProblem::getEditor,loginUserInfo.getId())
                    .set(YwProblem::getEditDate, DateUtil.getCurrDateTime())
                    .eq(YwProblem::getId,ywProblem.getId())
            );
        }else{
            if(Objects.isNull(ywProblem.getWorkOrderAreaType())
                    ||Objects.isNull(ywProblem.getWorkOrderCateId())
                    ||StringUtils.isBlank(ywProblem.getWorkOrderContent())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
            YwWorkorder ywWorkorder = new YwWorkorder();
            ywWorkorder.setAreaType(ywProblem.getWorkOrderAreaType());
            ywWorkorder.setCateId(ywProblem.getWorkOrderCateId());
            ywWorkorder.setContent(ywProblem.getWorkOrderContent());
            ywWorkorder.setRoomId(ywProblem.getWorkOrderRoomId());
            ywWorkorder.setFloorId(ywProblem.getWorkOrderFloorId());
            ywWorkorder.setGetDate(ywProblem.getWorkOrderGetDate());
            ywWorkorder.setOrigin(Constants.ONE);
            ywWorkorder.setLoginUserInfo(loginUserInfo);
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywProblem.getWorkOrderFileList())){
                ywWorkorder.setFileList(ywProblem.getWorkOrderFileList());
            }
            Integer workOrderId = ywWorkorderService.create(ywWorkorder);
            ywProblemMapper.update(new UpdateWrapper<YwProblem>().lambda()
                    .set(YwProblem::getDealDate, DateUtil.getCurrDateTime())
                    .set(YwProblem::getDealInfo,ywProblem.getDealInfo())
                    .set(YwProblem::getDealType,Constants.ZERO)
                    .set(YwProblem::getDealStatus,ywProblem.getDealStatus())
                    .set(YwProblem::getDealUserId,loginUserInfo.getId())
                    .set(YwProblem::getEditor,loginUserInfo.getId())
                    .set(YwProblem::getEditDate, DateUtil.getCurrDateTime())
                    .set(YwProblem::getWorkorderId,workOrderId)
                    .eq(YwProblem::getId,ywProblem.getId())
            );
        }
    }
    @Override
    public YwProblem findOne(YwProblem ywProblem) {
        QueryWrapper<YwProblem> wrapper = new QueryWrapper<>(ywProblem);
@@ -131,77 +246,19 @@
    @Override
    public PageData<YwProblem> findPage(PageWrap<YwProblem> pageWrap) {
        IPage<YwProblem> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<YwProblem> queryWrapper = new QueryWrapper<>();
        MPJLambdaWrapper<YwProblem> queryWrapper = new MPJLambdaWrapper<YwProblem>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(YwProblem::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(YwProblem::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(YwProblem::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(YwProblem::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(YwProblem::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(YwProblem::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(YwProblem::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(YwProblem::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getPosition() != null) {
            queryWrapper.lambda().eq(YwProblem::getPosition, pageWrap.getModel().getPosition());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(YwProblem::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(YwProblem::getStatus, pageWrap.getModel().getStatus());
        }
        if (pageWrap.getModel().getContent() != null) {
            queryWrapper.lambda().eq(YwProblem::getContent, pageWrap.getModel().getContent());
        }
        if (pageWrap.getModel().getPhone() != null) {
            queryWrapper.lambda().eq(YwProblem::getPhone, pageWrap.getModel().getPhone());
        }
        if (pageWrap.getModel().getSubmitDate() != null) {
            queryWrapper.lambda().ge(YwProblem::getSubmitDate, Utils.Date.getStart(pageWrap.getModel().getSubmitDate()));
            queryWrapper.lambda().le(YwProblem::getSubmitDate, Utils.Date.getEnd(pageWrap.getModel().getSubmitDate()));
        }
        if (pageWrap.getModel().getCode() != null) {
            queryWrapper.lambda().eq(YwProblem::getCode, pageWrap.getModel().getCode());
        }
        if (pageWrap.getModel().getDealStatus() != null) {
            queryWrapper.lambda().eq(YwProblem::getDealStatus, pageWrap.getModel().getDealStatus());
        }
        if (pageWrap.getModel().getDealUserId() != null) {
            queryWrapper.lambda().eq(YwProblem::getDealUserId, pageWrap.getModel().getDealUserId());
        }
        if (pageWrap.getModel().getDealDate() != null) {
            queryWrapper.lambda().ge(YwProblem::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
            queryWrapper.lambda().le(YwProblem::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
        }
        if (pageWrap.getModel().getDealInfo() != null) {
            queryWrapper.lambda().eq(YwProblem::getDealInfo, pageWrap.getModel().getDealInfo());
        }
        if (pageWrap.getModel().getDealType() != null) {
            queryWrapper.lambda().eq(YwProblem::getDealType, pageWrap.getModel().getDealType());
        }
        if (pageWrap.getModel().getWorkorderId() != null) {
            queryWrapper.lambda().eq(YwProblem::getWorkorderId, pageWrap.getModel().getWorkorderId());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(ywProblemMapper.selectPage(page, queryWrapper));
        YwProblem model = pageWrap.getModel();
        queryWrapper.selectAll(YwProblem.class)
                .selectAs(SystemUser::getRealname,YwProblem::getDealUserName)
                .leftJoin(SystemUser.class,SystemUser::getId,YwProblem::getDealUserId)
                .like(StringUtils.isNotBlank(model.getContent()),YwProblem::getContent,model.getContent())
                .ge(Objects.nonNull(model.getDealDateStart()),YwProblem::getDealDate, Utils.Date.getStart(model.getDealDateStart()))
                .le(Objects.nonNull(model.getDealDateEnd()),YwProblem::getDealDate, Utils.Date.getEnd(model.getDealDateEnd()))
                .eq(Objects.nonNull(model.getDealStatus()),YwProblem::getDealStatus,model.getDealStatus())
        ;
        IPage iPage = ywProblemMapper.selectJoinPage(page,YwProblem.class,queryWrapper);
        return PageData.from(iPage);
    }
    @Override
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
@@ -140,7 +140,21 @@
    @Override
    public YwProject findById(Integer id) {
        return ywProjectMapper.selectById(id);
        YwProject ywProject = ywProjectMapper.selectById(id);
        if(Objects.isNull(ywProject)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(Objects.nonNull(ywProject.getAreaId())){
            Areas a = areasService.findById(ywProject.getAreaId(),Constants.TWO);
            if(a != null){
                ywProject.setAreaName(a.getName());
                ywProject.setCityId(a.getCityId());
                ywProject.setCityName(a.getCityName());
                ywProject.setProvinceId(a.getProvinceId());
                ywProject.setProvinceName(a.getProvinceName());
            }
        }
        return ywProject;
    }
    @Override
@@ -308,7 +322,6 @@
        ProjectTree treeBuild = new ProjectTree(projectDataVOList);
        projectDataVOList = treeBuild.buildTree();
        return  projectDataVOList;
    }
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwQuickModelServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
package com.doumee.service.business.impl;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwQuickModelMapper;
import com.doumee.dao.business.model.YwQuickModel;
import com.doumee.service.business.YwQuickModelService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
 * å·¥ä½œå° - å¿«æ·æ¨¡å—Service实现
 * @author æ±Ÿè¹„蹄
 * @date 2025/01/09 17:47
 */
@Service
public class YwQuickModelServiceImpl implements YwQuickModelService {
    @Autowired
    private YwQuickModelMapper ywQuickModelMapper;
    @Override
    public Integer create(YwQuickModel ywQuickModel) {
        ywQuickModelMapper.insert(ywQuickModel);
        return ywQuickModel.getId();
    }
    @Override
    public void deleteById(Integer id) {
        ywQuickModelMapper.deleteById(id);
    }
    @Override
    public void delete(YwQuickModel ywQuickModel) {
        UpdateWrapper<YwQuickModel> deleteWrapper = new UpdateWrapper<>(ywQuickModel);
        ywQuickModelMapper.delete(deleteWrapper);
    }
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        ywQuickModelMapper.deleteBatchIds(ids);
    }
    @Override
    public void updateById(YwQuickModel ywQuickModel) {
        ywQuickModelMapper.updateById(ywQuickModel);
    }
    @Override
    public void updateByIdInBatch(List<YwQuickModel> ywQuickModels) {
        if (CollectionUtils.isEmpty(ywQuickModels)) {
            return;
        }
        for (YwQuickModel ywQuickModel: ywQuickModels) {
            this.updateById(ywQuickModel);
        }
    }
    @Override
    public YwQuickModel findById(Integer id) {
        return ywQuickModelMapper.selectById(id);
    }
    @Override
    public YwQuickModel findOne(YwQuickModel ywQuickModel) {
        QueryWrapper<YwQuickModel> wrapper = new QueryWrapper<>(ywQuickModel);
        return ywQuickModelMapper.selectOne(wrapper);
    }
    @Override
    public List<YwQuickModel> findList(YwQuickModel ywQuickModel) {
        QueryWrapper<YwQuickModel> wrapper = new QueryWrapper<>(ywQuickModel);
        return ywQuickModelMapper.selectList(wrapper);
    }
    @Override
    public PageData<YwQuickModel> findPage(PageWrap<YwQuickModel> pageWrap) {
        IPage<YwQuickModel> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<YwQuickModel> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(YwQuickModel::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(YwQuickModel::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEditor() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getEditor, pageWrap.getModel().getEditor());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(YwQuickModel::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(YwQuickModel::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getUserId() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getUserId, pageWrap.getModel().getUserId());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getPath() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getPath, pageWrap.getModel().getPath());
        }
        if (pageWrap.getModel().getIcoPath() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getIcoPath, pageWrap.getModel().getIcoPath());
        }
        if (pageWrap.getModel().getSort() != null) {
            queryWrapper.lambda().eq(YwQuickModel::getSort, pageWrap.getModel().getSort());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        return PageData.from(ywQuickModelMapper.selectPage(page, queryWrapper));
    }
    @Override
    public long count(YwQuickModel ywQuickModel) {
        QueryWrapper<YwQuickModel> wrapper = new QueryWrapper<>(ywQuickModel);
        return ywQuickModelMapper.selectCount(wrapper);
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
@@ -6,12 +6,13 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.YwBuildingMapper;
import com.doumee.dao.business.YwContractRoomMapper;
import com.doumee.dao.business.YwRoomMapper;
import com.doumee.dao.business.YwWorkorderMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.YwFloorStatusDataVO;
import com.doumee.dao.business.vo.YwRoomContractDataVO;
import com.doumee.dao.business.vo.YwRoomStatusDataVO;
import com.doumee.service.business.YwRoomService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -23,8 +24,12 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * è¿ç»´æˆ¿æºä¿¡æ¯è¡¨Service实现
@@ -41,7 +46,13 @@
    @Autowired
    private YwContractRoomMapper ywContractRoomMapper;
    @Autowired
    private YwContractMapper ywContractMapper;
    @Autowired
    private YwWorkorderMapper ywWorkorderMapper;
    @Autowired
    private YwFloorMapper ywFloorMapper;
    @Override
    public Integer create(YwRoom model) {
@@ -126,7 +137,19 @@
    @Override
    public YwRoom findById(Integer id) {
        return ywRoomMapper.selectById(id);
        MPJLambdaWrapper<YwRoom> queryWrapper = new MPJLambdaWrapper<>();
        queryWrapper.selectAll(YwRoom.class )
                .selectAs(YwProject::getName,YwRoom::getProjectName)
                .selectAs(YwFloor::getName,YwRoom::getFloorName)
                .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
                .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
                .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                .eq(YwRoom::getId,id)
                .last(" limit 1 ")
        ;
        YwRoom ywRoom = ywRoomMapper.selectJoinOne(YwRoom.class,queryWrapper);
        return ywRoom;
    }
    @Override
@@ -235,4 +258,172 @@
        QueryWrapper<YwRoom> wrapper = new QueryWrapper<>(ywRoom);
        return ywRoomMapper.selectCount(wrapper);
    }
    @Override
    public List<YwFloorStatusDataVO>  getRoomStatusList(YwRoom model){
        if(Objects.isNull(model)
        || (Objects.isNull(model.getBuildingId()) && Objects.isNull(model.getFloor()))){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        List<YwFloorStatusDataVO> ywFloorStatusDataVOList = new ArrayList<>();
        List<YwFloor> ywFloorList = ywFloorMapper.selectList(new QueryWrapper<YwFloor>().lambda()
                .eq(YwFloor::getIsdeleted,Constants.ZERO)
                .eq(Objects.nonNull(model.getBuildingId()),YwFloor::getBuildingId,model.getBuildingId())
                .eq(Objects.nonNull(model.getFloor()),YwFloor::getId,model.getFloor())
                .orderByAsc(YwFloor::getFloor)
        );
        List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
                .eq(YwRoom::getIsInvestment,Constants.ONE)
                .eq(YwRoom::getStatus,Constants.ZERO)
                .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                .eq(Objects.nonNull(model.getFloor()),YwRoom::getFloor,model.getFloor())
                .orderByAsc(YwRoom::getSortnum)
        );
        List<YwRoomStatusDataVO> roomStatusDataList = new ArrayList<>();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywRoomList)){
            for (YwRoom ywRoom:ywRoomList) {
                YwRoomStatusDataVO roomStatusDataVO = new YwRoomStatusDataVO();
                roomStatusDataVO.setFloorId(ywRoom.getFloor());
                roomStatusDataVO.setRoomId(ywRoom.getId());
                roomStatusDataVO.setRoomCode(ywRoom.getCode());
                roomStatusDataVO.setRoomRentArea(ywRoom.getRentArea());
                List<YwContract> roomContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
                        .selectAll(YwContract.class)
                        .selectAs(YwCustomer::getName,YwContract::getRenterName)
                        .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId)
                        .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                        .eq(YwContract::getIsdeleted,Constants.ZERO)
                        .ge(YwContract::getStartDate, DateUtil.getCurrDateTime())
                        .eq(YwContractRoom::getType,Constants.ZERO)
                        .eq(YwContractRoom::getRoomId,ywRoom.getId())
                        .ne(YwContract::getBillStatus,Constants.THREE)
                        .orderByDesc(YwContract::getStartDate)
                );
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
                    roomStatusDataVO.setRoomStatus(Constants.ZERO);
                    roomStatusDataVO.setFreeDayAmount(Constants.ZERO);
                }else{
                    YwContract ywContract = roomContractList.get(Constants.ZERO);
                    //合同状态 0待执行 1执行中 2已到期 3退租中 4已退租
                    //待执行/执行中/退租中 å‡å±žäºŽå·²å‡ºç§Ÿ æ ¹æ®å…·ä½“到期时间判断是否处于即将到期 90天
                    if(Constants.equalsInteger(ywContract.getStatus(),Constants.ZERO)||Constants.equalsInteger(ywContract.getStatus(),Constants.ONE)||
                            Constants.equalsInteger(ywContract.getStatus(),Constants.THREE)){
                        roomStatusDataVO.setRoomStatus(Constants.ONE);
                        roomStatusDataVO.setCustomerName(ywContract.getRenterName());
                        if(Constants.equalsInteger(ywContract.getStatus(),Constants.THREE)){
                            if(Objects.nonNull(ywContract.getBtDate()) && DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getBtDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"))<=90){
                                roomStatusDataVO.setRoomStatus(Constants.TWO);
                                roomStatusDataVO.setOverData(ywContract.getBtDate());
                            }
                        }else{
                            if(Objects.nonNull(ywContract.getEndDate()) && DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getEndDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"))<=90){
                                roomStatusDataVO.setRoomStatus(Constants.TWO);
                                roomStatusDataVO.setOverData(ywContract.getEndDate());
                            }
                        }
                    }
                }
                roomStatusDataList.add(roomStatusDataVO);
            }
        }
        for (YwFloor ywFloor:ywFloorList) {
            YwFloorStatusDataVO ywFloorStatusDataVO = new YwFloorStatusDataVO();
            ywFloorStatusDataVO.setFloor(ywFloor.getFloor());
            ywFloorStatusDataVO.setFloorId(ywFloor.getId());
            ywFloorStatusDataVO.setFloorArea(ywFloor.getArea());
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(roomStatusDataList)){
                List<YwRoomStatusDataVO> floorRoomList = roomStatusDataList.stream().filter(i->Objects.nonNull(i.getFloorId())&&Constants.equalsInteger(i.getFloorId(),ywFloor.getId())).collect(Collectors.toList());
                ywFloorStatusDataVO.setYwRoomStatusDataVOList(floorRoomList);
            }
            ywFloorStatusDataVOList.add(ywFloorStatusDataVO);
        }
        return ywFloorStatusDataVOList;
    }
    @Override
    public YwRoomContractDataVO getRoomContract(YwRoom model){
        if(Objects.isNull(model)
                || (Objects.isNull(model.getBuildingId()) && Objects.isNull(model.getProjectId()))){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        YwRoomContractDataVO ywRoomContractDataVO = new YwRoomContractDataVO();
        ywRoomContractDataVO.setInvestmentRoomAmount(Constants.ZERO);
        ywRoomContractDataVO.setInvestmentArea(BigDecimal.ZERO);
        ywRoomContractDataVO.setLeaseContractAmount(Constants.ZERO);
        ywRoomContractDataVO.setLeasePrice(BigDecimal.ZERO);
        ywRoomContractDataVO.setLeaseArea(BigDecimal.ZERO);
        ywRoomContractDataVO.setLeaseRoomAmount(Constants.ZERO);
        List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
                .eq(YwRoom::getStatus,Constants.ZERO)
                .eq(YwRoom::getIsInvestment,Constants.ONE)
                .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
                .orderByAsc(YwRoom::getSortnum)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywRoomList)){
            return ywRoomContractDataVO;
        }
        ywRoomContractDataVO.setInvestmentRoomAmount(ywRoomList.size());
        ywRoomContractDataVO.setInvestmentArea(ywRoomList.stream().filter(i->Objects.nonNull(i.getRentArea())).map(i->i.getRentArea()).reduce(BigDecimal.ZERO,BigDecimal::add));
        List<YwContract> roomContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
                .selectAll(YwContract.class)
                .select(" ( select  ifnull(sum(yr.RENT_AREA),0)  from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and y.CONTRACT_ID = t.id ) " , YwContract::getTotalArea)
                .select(" ( select  ifnull(sum(y.TOTLE_FEE),0)  from yw_contract_bill y   where y.CONTRACT_ID = t.id and y.type = 0  ) " , YwContract::getTotalFee)
                .eq(YwContract::getIsdeleted,Constants.ZERO)
                .in(YwContract::getStatus,Constants.ONE,Constants.TWO,Constants.THREE)
                .ne(YwContract::getBillStatus,Constants.THREE)
                .apply(Objects.nonNull(model.getBuildingId()),
                        " t.id in ( select y.CONTRACT_ID from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and  yr.BUILDING_ID = "+model.getBuildingId()+" ) ")
                .apply(Objects.nonNull(model.getProjectId()),
                        " t.id in ( select y.CONTRACT_ID from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and  yr.PROJECT_ID = "+model.getProjectId()+" ) ")
                .apply(Objects.nonNull(model.getProjectId())," ")
                .orderByDesc(YwContract::getStartDate)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
            return ywRoomContractDataVO;
        }
        //处理租赁单价 æ ¹æ®  åˆåŒç§Ÿèµæ€»é¢ /  ï¼ˆç§Ÿèµæ—¶é•¿ * ç§Ÿèµé¢ç§¯ï¼‰
        for (YwContract ywContract:roomContractList) {
            long contractDayAmount = DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getEndDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(ywContract.getStartDate(),"yyyy-MM-dd"));
            if(Objects.nonNull(contractDayAmount) && Objects.nonNull(ywContract.getTotalArea()) && Objects.nonNull(ywContract.getTotalFee())){
                ywRoomContractDataVO.setLeasePrice(
                        ywRoomContractDataVO.getLeasePrice().add(
                            ywContract.getTotalFee().divide((ywContract.getTotalArea().multiply(new BigDecimal(Long.toString(contractDayAmount)))),2,BigDecimal.ROUND_HALF_UP)
                        )
                );
            }
        }
        ywRoomContractDataVO.setLeaseContractAmount(roomContractList.size());
        List<Integer> contractId = roomContractList.stream().map(i->i.getId()).collect(Collectors.toList());
        List<YwRoom> ywLeaseRoomList = ywRoomMapper.selectJoinList(YwRoom.class,new MPJLambdaWrapper<YwRoom>()
                .selectAll(YwRoom.class)
                .leftJoin(YwContractRoom.class,YwContractRoom::getRoomId,YwRoom::getId)
                .eq(YwRoom::getIsdeleted,Constants.ZERO)
                .eq(YwRoom::getIsInvestment,Constants.ONE)
                .eq(YwRoom::getStatus,Constants.ZERO)
                .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
                .in(YwContractRoom::getContractId,contractId)
                .orderByAsc(YwRoom::getSortnum)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywLeaseRoomList)){
            ywRoomContractDataVO.setLeaseArea(
                    ywLeaseRoomList.stream().filter(i->Objects.nonNull(i.getRentArea())).map(i->i.getRentArea()).reduce(BigDecimal.ZERO,BigDecimal::add)
            );
            ywRoomContractDataVO.setLeaseRoomAmount(ywLeaseRoomList.size());
        }
        return ywRoomContractDataVO;
    }
}
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -8,9 +8,12 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.dto.YwWorkorderDataDTO;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.YwWorkorderDataVO;
import com.doumee.dao.system.MultifileMapper;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.Multifile;
@@ -29,6 +32,7 @@
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
 * è¿ç»´å·¥å•信息表Service实现
@@ -383,6 +387,7 @@
                .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
                .selectAs(YwBuilding::getName,YwWorkorder::getBuildingName)
                .selectAs(YwProject::getName,YwWorkorder::getProjectName)
                .selectAs(YwProblem::getId,YwWorkorder::getProblemId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getDealUserId)
                .leftJoin(Category.class,Category::getId,YwWorkorder::getCateId)
                .leftJoin(SystemUser.class,SystemUser::getId,YwWorkorder::getCreator)
@@ -390,6 +395,7 @@
                .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
                .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId)
                .leftJoin(YwProject.class,YwProject::getId,YwBuilding::getProjectId)
                .leftJoin(YwProblem.class,YwProblem::getWorkorderId,YwWorkorder::getId)
                .apply(StringUtils.isNotBlank(pageWrap.getModel().getQueryStatus())," find_in_set(t.DEAL_STATUS ,'"+pageWrap.getModel().getQueryStatus()+"') ");
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        Utils.MP.blankToNull(pageWrap.getModel());
@@ -406,6 +412,9 @@
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.eq(YwWorkorder::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getOrigin() != null) {
            queryWrapper.eq(YwWorkorder::getOrigin, pageWrap.getModel().getOrigin());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.ge(YwWorkorder::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
@@ -528,4 +537,27 @@
        QueryWrapper<YwWorkorder> wrapper = new QueryWrapper<>(ywWorkorder);
        return ywWorkorderMapper.selectCount(wrapper);
    }
    @Override
    public YwWorkorderDataVO getDataVO(YwWorkorderDataDTO dto){
        YwWorkorderDataVO ywWorkorderDataVO = new YwWorkorderDataVO();
        List<YwWorkorder> list = ywWorkorderMapper.selectList(new QueryWrapper<YwWorkorder>().lambda()
                .eq(YwWorkorder::getIsdeleted,Constants.ZERO)
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.ONE),YwWorkorder::getProjectId,dto.getQueryId())
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.TWO),YwWorkorder::getFloorId,dto.getQueryId())
                .eq(Constants.equalsInteger(dto.getQueryType(),Constants.THREE),YwWorkorder::getRoomId,dto.getQueryId()));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
            ywWorkorderDataVO.setAmount(list.size());
            ywWorkorderDataVO.setMonthAmount(list.stream().filter(i-> DateUtil.formatDate(i.getSubmitDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setWaitDealAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ONE)).collect(Collectors.toList()).size());
            ywWorkorderDataVO.setWaitAssignAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
        }
        return ywWorkorderDataVO;
    }
}