From a2e2ae9baacd6bdf8de98f32497a603170de3153 Mon Sep 17 00:00:00 2001
From: purple <purple_lihe@163.com>
Date: Fri, 29 May 2020 18:46:12 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=B9=B3=E5=8F=B0=E6=8E=A5?=
 =?UTF-8?q?=E5=8F=A3=E8=BF=81=E7=A7=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ruoyi-ui/package.json                         | 220 +++---
 .../api/data/artificialResidenceRentPrice.js  |  10 +
 .../src/api/data/computeResidenceRentPrice.js |  36 +
 .../price/ArtificialResidenceRentPrice.vue    | 183 +++++
 .../data/price/ComputeOfficeBasePrice.vue     | 405 +++++++++++
 .../data/price/ComputeResidenceRentPrice.vue  | 471 +++++++++++++
 .../IOfficeBasePriceUltimateService.java      |  41 --
 .../ArtificialOfficeBasePriceController.java  | 107 +++
 ...icialResidenceSaleBasePriceController.java |   4 +
 .../ComputeOfficeBasePriceController.java}    |  30 +-
 ...mputeResidenceSaleBasePriceController.java |   4 +
 .../ResidenceRentBasePriceController.java     | 189 +++++
 ...imateResidenceSaleBasePriceController.java |   4 +
 .../ArtificialResidenceRentBasePrice.java     | 127 ++++
 .../ArtificialResidenceSaleBasePrice.java}    |   6 +-
 .../domain/ComputeResidenceRentBasePrice.java | 646 ++++++++++++++++++
 .../domain/ComputeResidenceSaleBasePrice.java | 176 +++++
 .../price/domain/UltimateOfficeBasePrice.java | 357 ++++++++++
 .../UltimateResidenceRentBasePrice.java       | 277 ++++++++
 .../UltimateResidenceSaleBasePrice.java       | 176 +++++
 .../ArtificialResidenceRentPriceMapper.java   |  20 +
 .../ComputeResidenceRentPriceMapper.java      |  43 ++
 .../UltimateOfficeBasePriceMapper.java}       |  14 +-
 .../UltimateResidenceRentPriceMapper.java     |  35 +
 .../release/controller/HomeController.java    |   4 -
 .../IArtificialResidenceRentPriceService.java |  32 +
 .../IComputeResidenceRentPriceService.java    |  52 ++
 .../IUltimateOfficeBasePriceService.java      |  40 ++
 ...UltimateResidenceRentBasePriceService.java |  25 +
 ...tificialResidenceRentPriceServiceImpl.java |  39 ++
 .../ComputeResidenceRentPriceServiceImpl.java |  51 ++
 .../UltimateOfficeBasePriceServiceImpl.java}  |  53 +-
 ...mateResidenceRentBasePriceServiceImpl.java |  52 ++
 .../src/main/resources/application-druid.yml  |   7 +-
 ruoyi/src/main/resources/application.yml      | 254 +++----
 .../ArtificialResidenceRentPriceMapper.xml    |  37 +
 .../data/ComputeResidenceRentPriceMapper.xml  | 165 +++++
 ....xml => UltimateOfficeBasePriceMapper.xml} |  21 +-
 .../UltimateResidenceRentBasePriceMapper.xml  |  65 ++
 .../compute/MapperXmlGeneratorTests.java      |  32 +
 40 files changed, 4153 insertions(+), 357 deletions(-)
 create mode 100644 ruoyi-ui/src/api/data/artificialResidenceRentPrice.js
 create mode 100644 ruoyi-ui/src/api/data/computeResidenceRentPrice.js
 create mode 100644 ruoyi-ui/src/views/data/price/ArtificialResidenceRentPrice.vue
 create mode 100644 ruoyi-ui/src/views/data/price/ComputeOfficeBasePrice.vue
 create mode 100644 ruoyi-ui/src/views/data/price/ComputeResidenceRentPrice.vue
 delete mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/IOfficeBasePriceUltimateService.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialOfficeBasePriceController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialResidenceSaleBasePriceController.java
 rename ruoyi/src/main/java/com/ruoyi/project/data/price/{compute/controller/OfficeBasePriceUltimateController.java => controller/ComputeOfficeBasePriceController.java} (79%)
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeResidenceSaleBasePriceController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ResidenceRentBasePriceController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/controller/UltimateResidenceSaleBasePriceController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceRentBasePrice.java
 rename ruoyi/src/main/java/com/ruoyi/project/data/price/{compute/domain/OfficeBasePriceUltimate.java => domain/ArtificialResidenceSaleBasePrice.java} (94%)
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceRentBasePrice.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceSaleBasePrice.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateOfficeBasePrice.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceRentBasePrice.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceSaleBasePrice.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ArtificialResidenceRentPriceMapper.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ComputeResidenceRentPriceMapper.java
 rename ruoyi/src/main/java/com/ruoyi/project/data/price/{compute/mapper/OfficeBasePriceUltimateMapper.java => mapper/UltimateOfficeBasePriceMapper.java} (54%)
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateResidenceRentPriceMapper.java
 delete mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/release/controller/HomeController.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/IArtificialResidenceRentPriceService.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/IComputeResidenceRentPriceService.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateOfficeBasePriceService.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateResidenceRentBasePriceService.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ArtificialResidenceRentPriceServiceImpl.java
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ComputeResidenceRentPriceServiceImpl.java
 rename ruoyi/src/main/java/com/ruoyi/project/data/price/{compute/service/impl/OfficeBasePriceUltimateServiceImpl.java => service/impl/UltimateOfficeBasePriceServiceImpl.java} (65%)
 create mode 100644 ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateResidenceRentBasePriceServiceImpl.java
 create mode 100644 ruoyi/src/main/resources/mybatis/data/ArtificialResidenceRentPriceMapper.xml
 create mode 100644 ruoyi/src/main/resources/mybatis/data/ComputeResidenceRentPriceMapper.xml
 rename ruoyi/src/main/resources/mybatis/data/{OfficeBasePriceUltimateMapper.xml => UltimateOfficeBasePriceMapper.xml} (80%)
 create mode 100644 ruoyi/src/main/resources/mybatis/data/UltimateResidenceRentBasePriceMapper.xml
 create mode 100644 ruoyi/src/test/java/com/uvaluation/compute/MapperXmlGeneratorTests.java

diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 62c2bddb1..5c3154efe 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,109 +1,111 @@
-{
-  "name": "ruoyi",
-  "version": "2.2.0",
-  "description": "若依管理系统",
-  "author": "若依",
-  "license": "MIT",
-  "scripts": {
-    "dev": "vue-cli-service serve",
-    "build:prod": "vue-cli-service build",
-    "build:stage": "vue-cli-service build --mode staging",
-    "preview": "node build/index.js --preview",
-    "lint": "eslint --ext .js,.vue src",
-    "test:unit": "jest --clearCache && vue-cli-service test:unit",
-    "test:ci": "npm run lint && npm run test:unit",
-    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
-    "new": "plop"
-  },
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },
-  "lint-staged": {
-    "src/**/*.{js,vue}": [
-      "eslint --fix",
-      "git add"
-    ]
-  },
-  "keywords": [
-    "vue",
-    "admin",
-    "dashboard",
-    "element-ui",
-    "boilerplate",
-    "admin-template",
-    "management-system"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "https://gitee.com/y_project/RuoYi-Vue.git"
-  },
-  "dependencies": {
-    "@riophae/vue-treeselect": "0.4.0",
-    "axios": "0.18.1",
-    "clipboard": "2.0.4",
-    "echarts": "4.2.1",
-    "element-ui": "2.13.0",
-    "file-saver": "2.0.1",
-    "js-beautify": "^1.10.2",
-    "fuse.js": "3.4.4",
-    "js-cookie": "2.2.0",
-    "jsencrypt": "3.0.0-rc.1",
-    "normalize.css": "7.0.0",
-    "nprogress": "0.2.0",
-    "path-to-regexp": "2.4.0",
-    "screenfull": "4.2.0",
-    "sortablejs": "1.8.4",
-    "vue": "2.6.10",
-    "vue-count-to": "1.0.13",
-    "vue-quill-editor": "3.0.6",
-    "vue-cropper": "0.4.9",
-    "vue-router": "3.0.2",
-    "vue-splitpane": "1.0.4",
-    "vuedraggable": "2.20.0",
-    "vuex": "3.1.0"
-  },
-  "devDependencies": {
-    "@babel/core": "7.0.0",
-    "@babel/register": "7.0.0",
-    "@babel/parser": "^7.7.4",
-    "@vue/cli-plugin-babel": "3.5.3",
-    "@vue/cli-plugin-eslint": "^3.9.1",
-    "@vue/cli-plugin-unit-jest": "3.5.3",
-    "@vue/cli-service": "3.5.3",
-    "@vue/test-utils": "1.0.0-beta.29",
-    "autoprefixer": "^9.5.1",
-    "babel-core": "7.0.0-bridge.0",
-    "babel-eslint": "10.0.1",
-    "babel-jest": "23.6.0",
-    "chalk": "2.4.2",
-    "chokidar": "2.1.5",
-    "connect": "3.6.6",
-    "eslint": "5.15.3",
-    "eslint-plugin-vue": "5.2.2",
-    "html-webpack-plugin": "3.2.0",
-    "http-proxy-middleware": "^0.19.1",
-    "husky": "1.3.1",
-    "lint-staged": "8.1.5",
-    "mockjs": "1.0.1-beta3",
-    "node-sass": "^4.9.0",
-    "plop": "2.3.0",
-    "runjs": "^4.3.2",
-    "sass-loader": "^7.1.0",
-    "script-ext-html-webpack-plugin": "2.1.3",
-    "script-loader": "0.7.2",
-    "serve-static": "^1.13.2",
-    "svg-sprite-loader": "4.1.3",
-    "svgo": "1.2.0",
-    "vue-template-compiler": "2.6.10"
-  },
-  "engines": {
-    "node": ">=8.9",
-    "npm": ">= 3.0.0"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions"
-  ]
-}
+{
+  "name": "ruoyi",
+  "version": "2.2.0",
+  "description": "若依管理系统",
+  "author": "若依",
+  "license": "MIT",
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "build:prod": "vue-cli-service build",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "lint": "eslint --ext .js,.vue src",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "new": "plop"
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  },
+  "lint-staged": {
+    "src/**/*.{js,vue}": [
+      "eslint --fix",
+      "git add"
+    ]
+  },
+  "keywords": [
+    "vue",
+    "admin",
+    "dashboard",
+    "element-ui",
+    "boilerplate",
+    "admin-template",
+    "management-system"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://gitee.com/y_project/RuoYi-Vue.git"
+  },
+  "dependencies": {
+    "@handsontable/vue": "^4.1.1",
+    "@riophae/vue-treeselect": "0.4.0",
+    "axios": "0.18.1",
+    "clipboard": "2.0.4",
+    "echarts": "4.2.1",
+    "element-ui": "2.13.0",
+    "file-saver": "2.0.1",
+    "fuse.js": "3.4.4",
+    "handsontable": "^7.4.2",
+    "js-beautify": "^1.10.2",
+    "js-cookie": "2.2.0",
+    "jsencrypt": "3.0.0-rc.1",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "screenfull": "4.2.0",
+    "sortablejs": "1.8.4",
+    "vue": "2.6.10",
+    "vue-count-to": "1.0.13",
+    "vue-cropper": "0.4.9",
+    "vue-quill-editor": "3.0.6",
+    "vue-router": "3.0.2",
+    "vue-splitpane": "1.0.4",
+    "vuedraggable": "2.20.0",
+    "vuex": "3.1.0"
+  },
+  "devDependencies": {
+    "@babel/core": "7.0.0",
+    "@babel/register": "7.0.0",
+    "@babel/parser": "^7.7.4",
+    "@vue/cli-plugin-babel": "3.5.3",
+    "@vue/cli-plugin-eslint": "^3.9.1",
+    "@vue/cli-plugin-unit-jest": "3.5.3",
+    "@vue/cli-service": "3.5.3",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "autoprefixer": "^9.5.1",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-eslint": "10.0.1",
+    "babel-jest": "23.6.0",
+    "chalk": "2.4.2",
+    "chokidar": "2.1.5",
+    "connect": "3.6.6",
+    "eslint": "5.15.3",
+    "eslint-plugin-vue": "5.2.2",
+    "html-webpack-plugin": "3.2.0",
+    "http-proxy-middleware": "^0.19.1",
+    "husky": "1.3.1",
+    "lint-staged": "8.1.5",
+    "mockjs": "1.0.1-beta3",
+    "node-sass": "^4.9.0",
+    "plop": "2.3.0",
+    "runjs": "^4.3.2",
+    "sass-loader": "^7.1.0",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "script-loader": "0.7.2",
+    "serve-static": "^1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.0",
+    "vue-template-compiler": "2.6.10"
+  },
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}
diff --git a/ruoyi-ui/src/api/data/artificialResidenceRentPrice.js b/ruoyi-ui/src/api/data/artificialResidenceRentPrice.js
new file mode 100644
index 000000000..7e10835b6
--- /dev/null
+++ b/ruoyi-ui/src/api/data/artificialResidenceRentPrice.js
@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 查询人工住宅租赁基价列表
+export function list(query) {
+  return request({
+    url: '/data/rentprice/residence/artificial/list',
+    method: 'get',
+    params: query
+  })
+}
diff --git a/ruoyi-ui/src/api/data/computeResidenceRentPrice.js b/ruoyi-ui/src/api/data/computeResidenceRentPrice.js
new file mode 100644
index 000000000..fe25c589e
--- /dev/null
+++ b/ruoyi-ui/src/api/data/computeResidenceRentPrice.js
@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+// 查询【请填写功能名称】列表
+export function list(query) {
+  return request({
+    url: '/data/rentprice/residence/compute/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询【请填写功能名称】详细
+export function get(id) {
+  return request({
+    url: '/data/rentprice/residence/compute/' + id,
+    method: 'get'
+  })
+}
+
+// 修改【请填写功能名称】
+export function update(data) {
+  return request({
+    url: '/data/rentprice/residence/compute',
+    method: 'put',
+    data: data
+  })
+}
+
+// 导出【请填写功能名称】
+export function export2File(query) {
+  return request({
+    url: '/data/rentprice/residence/compute/export',
+    method: 'get',
+    params: query
+  })
+}
diff --git a/ruoyi-ui/src/views/data/price/ArtificialResidenceRentPrice.vue b/ruoyi-ui/src/views/data/price/ArtificialResidenceRentPrice.vue
new file mode 100644
index 000000000..d68ed71c7
--- /dev/null
+++ b/ruoyi-ui/src/views/data/price/ArtificialResidenceRentPrice.vue
@@ -0,0 +1,183 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="100px">
+      <el-form-item label="年月" prop="yearMonth" clearable>
+        <el-date-picker
+          v-model="queryParams.yearMonth"
+          format="yyyyMM"
+          value-format="yyyyMM"
+          type="month"
+          placeholder="选择年月"
+          @keyup.enter.native="handleQuery"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item label="联城小区ID" prop="communityId" clearable>
+        <el-input
+          v-model="queryParams.communityId"
+          placeholder="请输入案例小区名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="年月" align="center" prop="yearMonth" />
+      <el-table-column label="小区ID" align="center" prop="communityId" />
+      <el-table-column label="租金主力面积系数" align="center" prop="mainRentCoefficient" />
+      <el-table-column label="平均租金" align="center" prop="rentPrice" />
+      <el-table-column label="主力面积租金" align="center" prop="mainRentPrice" />
+      <el-table-column label="平均租金(上周期)" align="center" prop="rentPrice_1" />
+      <el-table-column label="价格涨跌幅类型-调整后" align="center" prop="voppat" />
+      <el-table-column label="价格涨跌幅-调整后" align="center" prop="voppa" />
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import {
+  list
+} from "@/api/data/artificialResidenceRentPrice";
+
+export default {
+  name: "artificialResidenceRentBasePrice",
+  data() {
+    // 年月
+    var checkYearMonth = (rule, value, callback) => {
+      console.log(value);
+      if (value === "" || !isNaN(parseInt(value))) {
+        callback(new Error("请输入年月"));
+      } else {
+        callback();
+      }
+    };
+
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 办公基价表格数据
+      dataList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        yearMonth: undefined,
+        communityId: undefined,
+        communityName: undefined,
+        pageIndex: 1,
+        pageSize: 10
+      },
+      statusOptions: [
+        { value: 1, text: "正常" },
+        { value: 1, text: "失效" }
+      ],
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url:
+          process.env.VUE_APP_BASE_API +
+          "/data/rentprice/residence/artificial/importData"
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        yearMonth: [{ validator: checkYearMonth, trigger: "blur" }]
+      }
+    };
+  },
+  created() {
+    this.loading = false;
+    // this.getList();
+  },
+  methods: {
+    yesOrNotFormatter: function(row, column, cellValue, index) {
+      if (cellValue) return "是";
+      return "否";
+    },
+    statusFormatter: function(row, column, cellValue, index) {
+      if (cellValue) return "正常";
+      return "失效";
+    },
+    dateFormatter: function(row, column, cellValue, index) {
+      if (cellValue) {
+        return cellValue.substring(0, 10);
+      }
+      return "";
+    },
+    /** 查询办公基价列表 */
+    getList() {
+      this.loading = true;
+      this.$refs["queryForm"].validate(valid => {
+        if (valid) {
+          list(this.queryParams).then(response => {
+            this.dataList = response.rows;
+            this.total = response.total;
+            this.loading = false;
+          });
+        }
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageIndex = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/data/price/ComputeOfficeBasePrice.vue b/ruoyi-ui/src/views/data/price/ComputeOfficeBasePrice.vue
new file mode 100644
index 000000000..ce2f40e67
--- /dev/null
+++ b/ruoyi-ui/src/views/data/price/ComputeOfficeBasePrice.vue
@@ -0,0 +1,405 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="100px">
+      <el-form-item label="年月" prop="yearMonth" clearable>
+        <el-date-picker
+          v-model="queryParams.yearMonth"
+          format="yyyyMM"
+          type="month"
+          placeholder="选择年月"
+          @keyup.enter.native="handleQuery"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item label="联城小区ID" prop="communityId" clearable>
+        <el-input
+          v-model="queryParams.communityId"
+          placeholder="请输入案例小区名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联城楼栋ID" prop="buildingId" clearable>
+        <el-input
+          v-model="queryParams.buildingId"
+          placeholder="请输入联城楼栋ID"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="状态">
+        <el-select v-model="queryParams.status" clearable>
+          <el-option label="正常" value="1"></el-option>
+          <el-option label="失效" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:ultimate:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:user:export']"
+        >导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['system:user:import']"
+        >导入</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="ultimateList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="年月" align="center" prop="yearMonth" />
+      <el-table-column label="小区ID" align="center" prop="communityId" />
+      <el-table-column label="楼栋ID" align="center" prop="buildingId" />
+      <el-table-column label="主力基价" align="center" prop="mainPrice" />
+      <el-table-column label="主力租金" align="center" prop="mainPriceRent" />
+      <el-table-column label="主力基价涨跌幅" align="center" prop="mainPricePst" />
+      <el-table-column label="主力租金涨跌幅" align="center" prop="mainPriceRentPst" />
+      <el-table-column label="主力基价类型" align="center" prop="mainPriceType" />
+      <el-table-column label="主力租金类型" align="center" prop="mainPriceRentType" />
+      <el-table-column label="状态" align="center" prop="status" :formatter="statusFormatter" />
+      <el-table-column
+        label="标准楼栋"
+        align="center"
+        prop="standardBuilding"
+        :formatter="yesOrNotFormatter"
+      />
+      <el-table-column label="价格更改说明" align="center" prop="adjustPriceComment" />
+      <el-table-column label="更新日期" align="center" prop="updateDate" :formatter="dateFormatter" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:user:edit']"
+          >修改</el-button>
+          <!-- <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:user:remove']"
+          >删除</el-button>-->
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改办公基价对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="160px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="小区ID">
+              <el-input v-model="form.communityId" disabled="true" readonly />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="楼栋ID">
+              <el-input v-model="form.buildingId" disabled="true" readonly />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="主力基价(元/㎡)">
+              <el-input v-model="form.mainPrice" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主力租金(元/月·㎡)">
+              <el-input v-model="form.mainPriceRent" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="主力基价涨跌幅">
+              <el-input v-model="form.mainPricePst" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主力租金涨跌幅">
+              <el-input v-model="form.mainPriceRentPst" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="主力基价类型">
+              <el-input v-model="form.mainPriceType" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主力租金类型">
+              <el-input v-model="form.mainPriceRentType" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import {
+  listUltimate,
+  getUltimate,
+  updateUltimate,
+  exportUltimate
+} from "@/api/data/ultimateOfficeBasePrice";
+
+export default {
+  name: "Ultimate",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 办公基价表格数据
+      ultimateList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        yearMonth: undefined,
+        communityId: undefined,
+        buildingId: undefined,
+        pageNum: 1,
+        pageSize: 10
+      },
+      statusOptions: [
+        { value: 1, text: "正常" },
+        { value: 1, text: "失效" }
+      ],
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url:
+          process.env.VUE_APP_BASE_API + "/data/compute/price/office/importData"
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {}
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    yesOrNotFormatter: function(row, column, cellValue, index) {
+      if (cellValue) return "是";
+      return "否";
+    },
+    statusFormatter: function(row, column, cellValue, index) {
+      if (cellValue) return "正常";
+      return "失效";
+    },
+    dateFormatter: function(row, column, cellValue, index) {
+      if (cellValue) {
+        return cellValue.substring(0, 10);
+      }
+      return "";
+    },
+    /** 查询办公基价列表 */
+    getList() {
+      this.loading = true;
+      listUltimate(this.queryParams).then(response => {
+        this.ultimateList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    // handleAdd() {
+    //   this.reset();
+    //   this.open = true;
+    //   this.title = "添加办公基价";
+    // },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids;
+      getUltimate(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改办公基价";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            updateUltimate(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            addUltimate(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("新增成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm("是否确认导出所有办公基价数据项?", "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(function() {
+          return exportUltimate(queryParams);
+        })
+        .then(response => {
+          this.download(response.msg);
+        })
+        .catch(function() {});
+    },
+    handleImport() {
+      this.upload.title = "办公基价导入";
+      this.upload.open = true;
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>
diff --git a/ruoyi-ui/src/views/data/price/ComputeResidenceRentPrice.vue b/ruoyi-ui/src/views/data/price/ComputeResidenceRentPrice.vue
new file mode 100644
index 000000000..9ff7ffebf
--- /dev/null
+++ b/ruoyi-ui/src/views/data/price/ComputeResidenceRentPrice.vue
@@ -0,0 +1,471 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="100px">
+      <el-form-item label="年月" prop="yearMonth" clearable>
+        <el-date-picker
+          v-model="queryParams.yearMonth"
+          format="yyyyMM"
+          value-format="yyyyMM"
+          type="month"
+          placeholder="选择年月"
+          @keyup.enter.native="handleQuery"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item label="联城小区ID" prop="communityId" clearable>
+        <el-input
+          v-model="queryParams.communityId"
+          placeholder="请输入案例小区名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联城小区名称" prop="communityName" clearable>
+        <el-input
+          v-model="queryParams.communityName"
+          placeholder="请输入小区名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:user:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:user:export']"
+        >导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImport"
+          v-hasPermi="['system:user:import']"
+        >导入</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="年月" align="center" prop="yearMonth" />
+      <el-table-column label="小区ID" align="center" prop="communityId" />
+      <el-table-column label="小区名称" align="center" prop="communityName" />
+      <el-table-column label="小区地址" align="center" prop="communityAddress" />
+
+      <el-table-column label="区域" align="center" prop="county" />
+      <el-table-column label="板块" align="center" prop="block" />
+      <el-table-column label="环线" align="center" prop="loop" />
+
+      <el-table-column
+        label="是否生成索引"
+        align="center"
+        prop="isIndxGen"
+        :formatter="yesOrNotFormatter"
+      />
+      <el-table-column
+        label="参与涨幅计算"
+        align="center"
+        prop="isPstCalc"
+        :formatter="yesOrNotFormatter"
+      />
+      <el-table-column label="运行状态" align="center" prop="statusRun" />
+      <el-table-column label="物业类型" align="center" prop="propertyType" />
+      <el-table-column label="小区类型" align="center" prop="projectType" />
+      <el-table-column label="小区类型细分" align="center" prop="projectTypeDtl" />
+      <el-table-column label="物业档次" align="center" prop="projectLevel" />
+      <el-table-column label="物业开发期数" align="center" prop="propertyDevPeriod" />
+      <el-table-column label="绑定聚类ID" align="center" prop="bindClassID" />
+      <el-table-column label="租金主力面积系数" align="center" prop="mainCoefficientRent" />
+      <el-table-column label="AI租金(草稿)" align="center" prop="rentPriceDft" />
+      <el-table-column label="主力面积租金(草稿)" align="center" prop="mainRentPriceDft" />
+      <el-table-column label="上月AI租金" align="center" prop="rentPrice_1" />
+      <el-table-column label="成交均价(上周期)" align="center" prop="priceDealMean_1" />
+      <el-table-column label="成交最大价(上周期)" align="center" prop="priceDealMax_1" />
+      <el-table-column label="成交数量(上周期)" align="center" prop="sumDeal_1" />
+      <el-table-column label="成交均价相对AI租金涨跌幅(上周期)" align="center" prop="priceDeal_1_ToAI_Pst" />
+      <el-table-column label="成交均价" align="center" prop="priceDealMean" />
+      <el-table-column label="成交最大价" align="center" prop="priceDealMax" />
+      <el-table-column label="成交数量" align="center" prop="sumDeal" />
+      <el-table-column label="成交均价相对AI租金涨跌幅" align="center" prop="priceDeal_ToAI_Pst" />
+      <el-table-column label="当月比上月成交案例价调整比例" align="center" prop="priceDeal_ToLst_Pst" />
+      <el-table-column label="挂牌下架案例均价" align="center" prop="priceCaseOff" />
+      <el-table-column label="当月比上月挂牌下架案例价调整比例" align="center" prop="priceCaseOff_ToLst_Pst" />
+      <el-table-column label="挂牌最低价" align="center" prop="priceListedMin" />
+      <el-table-column label="挂牌最低价相对AI租金涨跌幅" align="center" prop="priceLstMn_ToAI_Pst" />
+      <el-table-column label="与上月AI租金比链家1案例价格价调整比例" align="center" prop="priceCase1_ToAI_Pst" />
+      <el-table-column label="与上月AI租金比链家2案例价格价调整比例" align="center" prop="priceCase2_ToAI_Pst" />
+      <el-table-column label="当月比上月链家1案例价调整比例" align="center" prop="priceCase1_ToLst_Pst" />
+      <el-table-column label="当月比上月链家2案例价调整比例" align="center" prop="priceCase2_ToLst_Pst" />
+      <el-table-column label="链家1案例价" align="center" prop="priceCase1" />
+      <el-table-column label="链家1调价幅度" align="center" prop="priceCase1AdjPst" />
+      <el-table-column label="链家1案例总量" align="center" prop="sumCase1" />
+      <el-table-column label="链家2案例价" align="center" prop="priceCase2" />
+      <el-table-column label="链家2调价幅度" align="center" prop="priceCase2AdjPst" />
+      <el-table-column label="链家2案例总量" align="center" prop="sumCase2" />
+      <el-table-column label="价格涨跌幅类型-调整前" align="center" prop="voppbt" />
+      <el-table-column label="价格涨跌幅-调整前" align="center" prop="voppb" />
+      <el-table-column label="绑定小区编号" align="center" prop="bindProjID" />
+      <el-table-column label="绑定小区涨跌幅" align="center" prop="bind_Proj_Pst" />
+      <el-table-column label="绑定板块+聚类ID" align="center" prop="bind_Block_Class" />
+      <el-table-column label="绑定板块+聚类ID的涨跌幅" align="center" prop="bind_Block_Class_Pst" />
+      <el-table-column label="绑定板块+物业档次" align="center" prop="bind_Block_Plevel" />
+      <el-table-column label="绑定板块+物业档次的涨跌幅" align="center" prop="bind_Block_Plevel_Pst" />
+      <el-table-column label="绑定板块+小区类型" align="center" prop="bind_Block_PType" />
+      <el-table-column label="绑定板块+小区类型的涨跌幅" align="center" prop="bind_Block_Ptype_Pst" />
+      <el-table-column label="绑定区县+小区类型" align="center" prop="bind_County_PType" />
+      <el-table-column label="绑定区县+小区类型的涨跌幅" align="center" prop="bind_County_Ptype_Pst" />
+      <el-table-column label="绑定混合小区ID" align="center" prop="bind_MixProject_PType" />
+      <el-table-column label="绑定混合小区涨跌幅" align="center" prop="bind_MixProject_Pst" />
+      <el-table-column label="价格涨跌幅类型-调整后" align="center" prop="voppat" />
+      <el-table-column label="价格涨跌幅-调整后" align="center" prop="voppa" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['system:user:edit']"
+          >修改</el-button>
+          <!-- <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:user:remove']"
+          >删除</el-button>-->
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageIndex"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改办公基价对话框 -->
+    <!-- <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="160px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="小区ID">
+              <el-input v-model="form.communityId" disabled="true" readonly />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="楼栋ID">
+              <el-input v-model="form.buildingId" disabled="true" readonly />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="主力基价(元/㎡)">
+              <el-input v-model="form.mainPrice" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主力租金(元/月·㎡)">
+              <el-input v-model="form.mainPriceRent" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="主力基价涨跌幅">
+              <el-input v-model="form.mainPricePst" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主力租金涨跌幅">
+              <el-input v-model="form.mainPriceRentPst" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="主力基价类型">
+              <el-input v-model="form.mainPriceType" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主力租金类型">
+              <el-input v-model="form.mainPriceRentType" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>-->
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import {
+  list,
+  get,
+  update,
+  export2File
+} from "@/api/data/computeResidenceRentPrice";
+
+export default {
+  name: "computeResidenceRentBasePrice",
+  data() {
+    // 年月
+    var checkYearMonth = (rule, value, callback) => {
+      console.log(value);
+      if (value === "" || !isNaN(parseInt(value))) {
+        callback(new Error("请输入年月"));
+      } else {
+        callback();
+      }
+    };
+
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 总条数
+      total: 0,
+      // 办公基价表格数据
+      dataList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        yearMonth: undefined,
+        communityId: undefined,
+        communityName: undefined,
+        pageIndex: 1,
+        pageSize: 10
+      },
+      statusOptions: [
+        { value: 1, text: "正常" },
+        { value: 1, text: "失效" }
+      ],
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url:
+          process.env.VUE_APP_BASE_API +
+          "/data/compute/rentprice/residence/importData"
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        yearMonth: [{ validator: checkYearMonth, trigger: "blur" }]
+      }
+    };
+  },
+  created() {
+    this.loading = false;
+    // this.getList();
+  },
+  methods: {
+    yesOrNotFormatter: function(row, column, cellValue, index) {
+      if (cellValue) return "是";
+      return "否";
+    },
+    statusFormatter: function(row, column, cellValue, index) {
+      if (cellValue) return "正常";
+      return "失效";
+    },
+    dateFormatter: function(row, column, cellValue, index) {
+      if (cellValue) {
+        return cellValue.substring(0, 10);
+      }
+      return "";
+    },
+    /** 查询办公基价列表 */
+    getList() {
+      this.loading = true;
+      this.$refs["queryForm"].validate(valid => {
+        if (valid) {
+          list(this.queryParams).then(response => {
+            this.dataList = response.rows;
+            this.total = response.total;
+            this.loading = false;
+          });
+        }
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: undefined
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageIndex = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    /** 新增按钮操作 */
+    // handleAdd() {
+    //   this.reset();
+    //   this.open = true;
+    //   this.title = "添加办公基价";
+    // },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids;
+      get(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改办公基价";
+      });
+    },
+    /** 提交按钮 */
+    submitForm: function() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            update(this.form).then(response => {
+              if (response.code === 200) {
+                this.msgSuccess("修改成功");
+                this.open = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+            // addUltimate(this.form).then(response => {
+            //   if (response.code === 200) {
+            //     this.msgSuccess("新增成功");
+            //     this.open = false;
+            //     this.getList();
+            //   } else {
+            //     this.msgError(response.msg);
+            //   }
+            // });
+          }
+        }
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm("是否确认导出所有住宅租赁基价数据项?", "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(function() {
+          return export2File(queryParams);
+        })
+        .then(response => {
+          this.download(response.msg);
+        })
+        .catch(function() {});
+    },
+    handleImport() {
+      this.upload.title = "办公基价导入";
+      this.upload.open = true;
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
+  }
+};
+</script>
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/IOfficeBasePriceUltimateService.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/IOfficeBasePriceUltimateService.java
deleted file mode 100644
index 39735e046..000000000
--- a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/IOfficeBasePriceUltimateService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.ruoyi.project.data.price.compute.service;
-
-import com.ruoyi.project.data.price.compute.domain.OfficeBasePriceUltimate;
-import com.ruoyi.project.system.domain.SysUser;
-
-import java.util.List;
-
-/**
- * 【请填写功能名称】Service接口
- *
- * @author ruoyi
- * @date 2020-05-20
- */
-public interface IOfficeBasePriceUltimateService {
-
-    /**
-     * 查询【请填写功能名称】列表
-     *
-     * @param officeBasePriceUltimate 【请填写功能名称】
-     * @return 【请填写功能名称】集合
-     */
-    List<OfficeBasePriceUltimate> selectOfficeBasePriceUltimateList(OfficeBasePriceUltimate officeBasePriceUltimate);
-
-    int selectOfficeBasePriceUltimateListCount(OfficeBasePriceUltimate officeBasePriceUltimate);
-
-
-    OfficeBasePriceUltimate selectOfficeBasePriceUltimateById(String id);
-
-    int updateOfficeBasePriceUltimate(OfficeBasePriceUltimate officeBasePriceUltimate);
-
-    /**
-     *
-     * @param officeBasePriceUltimates
-     * @param operName
-     * @return
-     */
-    String batchImport(List<OfficeBasePriceUltimate> officeBasePriceUltimates,String operName);
-
-}
-
-
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialOfficeBasePriceController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialOfficeBasePriceController.java
new file mode 100644
index 000000000..6bf035b3c
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialOfficeBasePriceController.java
@@ -0,0 +1,107 @@
+//package com.ruoyi.project.data.price.controller;
+//
+//import com.ruoyi.common.utils.ServletUtils;
+//import com.ruoyi.common.utils.poi.ExcelUtil;
+//import com.ruoyi.framework.aspectj.lang.annotation.Log;
+//import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+//import com.ruoyi.framework.security.LoginUser;
+//import com.ruoyi.framework.security.service.TokenService;
+//import com.ruoyi.framework.web.controller.BaseController;
+//import com.ruoyi.framework.web.domain.AjaxResult;
+//import com.ruoyi.framework.web.page.TableDataInfo;
+//import com.ruoyi.framework.web.page.TableSupport;
+//import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
+//import com.ruoyi.project.data.price.service.IOfficeBasePriceUltimateService;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import java.util.List;
+//
+///**
+// * 【请填写功能名称】Controller
+// *
+// * @author ruoyi
+// * @date 2020-05-20
+// */
+//@RestController
+//@RequestMapping("/data/compute/price/office")
+//public class ArtificialOfficeBasePriceController extends BaseController {
+//    @Autowired
+//    private IOfficeBasePriceUltimateService officeBasePriceUltimateService;
+//    @Autowired
+//    private TokenService tokenService;
+//
+//    /**
+//     * 查询【请填写功能名称】列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:user:list')")
+//    @GetMapping("/list")
+//    public TableDataInfo list(OfficeBasePriceUltimate officeBasePriceUltimate) {
+//        int pageIndex = ServletUtils.getParameterToInt(TableSupport.PAGE_NUM);
+//        int pageSize = ServletUtils.getParameterToInt(TableSupport.PAGE_SIZE);
+//        officeBasePriceUltimate.setPageIndex(pageIndex <= 1 ? 0 : (pageIndex - 1) * pageSize);
+//        officeBasePriceUltimate.setPageSize(pageSize);
+//        List<OfficeBasePriceUltimate> list =
+//                officeBasePriceUltimateService.selectOfficeBasePriceUltimateList(officeBasePriceUltimate);
+//        int total = officeBasePriceUltimateService.selectOfficeBasePriceUltimateListCount(officeBasePriceUltimate);
+//        return getDataTable(list, total);
+//    }
+//
+//
+//    /**
+//     * 获取【请填写功能名称】详细信息
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:user:query')")
+//    @GetMapping(value = "/{id}")
+//    public AjaxResult getInfo(@PathVariable("id") String id) {
+//        return AjaxResult.success(officeBasePriceUltimateService.selectOfficeBasePriceUltimateById(id));
+//    }
+//
+//    /**
+//     * 修改【请填写功能名称】
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+//    @Log(title = "办公基价", businessType = BusinessType.UPDATE)
+//    @PutMapping
+//    public AjaxResult edit(@RequestBody OfficeBasePriceUltimate officeBasePriceUltimate) {
+//        return toAjax(officeBasePriceUltimateService.updateOfficeBasePriceUltimate(officeBasePriceUltimate));
+//    }
+//
+//    /**
+//     * 导出【请填写功能名称】列表
+//     */
+//    @PreAuthorize("@ss.hasPermi('system:user:export')")
+//    @Log(title = "办公基价", businessType = BusinessType.EXPORT)
+//    @GetMapping("/export")
+//    public AjaxResult export(OfficeBasePriceUltimate officeBasePriceUltimate) {
+//        int total = officeBasePriceUltimateService.selectOfficeBasePriceUltimateListCount(officeBasePriceUltimate);
+//        officeBasePriceUltimate.setPageIndex(0);
+//        officeBasePriceUltimate.setPageSize(total);
+//        List<OfficeBasePriceUltimate> list =
+//                officeBasePriceUltimateService.selectOfficeBasePriceUltimateList(officeBasePriceUltimate);
+//        ExcelUtil<OfficeBasePriceUltimate> util = new ExcelUtil<OfficeBasePriceUltimate>(OfficeBasePriceUltimate.class);
+//        return util.exportExcel(list, "办公基价");
+//    }
+//
+//    /**
+//     * 办公基价导入
+//     * @param file
+//     * @return
+//     * @throws Exception
+//     */
+//    @Log(title = "办公基价", businessType = BusinessType.IMPORT)
+//    @PreAuthorize("@ss.hasPermi('system:user:import')")
+//    @PostMapping("/importData")
+//    public AjaxResult importData(MultipartFile file) throws Exception {
+//        ExcelUtil<OfficeBasePriceUltimate> util = new ExcelUtil<>(OfficeBasePriceUltimate.class);
+//        List<OfficeBasePriceUltimate> officeBasePriceUltimates = util.importExcel(file.getInputStream());
+//        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+//        String operName = loginUser.getUsername();
+//        String message = officeBasePriceUltimateService.batchImport(officeBasePriceUltimates, operName);
+//        return AjaxResult.success(message);
+//    }
+//
+//}
+//
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialResidenceSaleBasePriceController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialResidenceSaleBasePriceController.java
new file mode 100644
index 000000000..ae99d56a1
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ArtificialResidenceSaleBasePriceController.java
@@ -0,0 +1,4 @@
+package com.ruoyi.project.data.price.controller;
+
+public class ArtificialResidenceSaleBasePriceController {
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/controller/OfficeBasePriceUltimateController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeOfficeBasePriceController.java
similarity index 79%
rename from ruoyi/src/main/java/com/ruoyi/project/data/price/compute/controller/OfficeBasePriceUltimateController.java
rename to ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeOfficeBasePriceController.java
index aa1a78248..ae9ab8a3d 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/controller/OfficeBasePriceUltimateController.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeOfficeBasePriceController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.data.price.compute.controller;
+package com.ruoyi.project.data.price.controller;
 
 import java.util.List;
 
@@ -6,15 +6,13 @@ import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.security.service.TokenService;
 import com.ruoyi.framework.web.page.TableSupport;
-import com.ruoyi.project.data.price.compute.domain.OfficeBasePriceUltimate;
-import com.ruoyi.project.data.price.compute.service.IOfficeBasePriceUltimateService;
-import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
+import com.ruoyi.project.data.price.service.IUltimateOfficeBasePriceService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -35,9 +33,9 @@ import org.springframework.web.multipart.MultipartFile;
  */
 @RestController
 @RequestMapping("/data/compute/price/office")
-public class OfficeBasePriceUltimateController extends BaseController {
+public class ComputeOfficeBasePriceController extends BaseController {
     @Autowired
-    private IOfficeBasePriceUltimateService officeBasePriceUltimateService;
+    private IUltimateOfficeBasePriceService officeBasePriceUltimateService;
     @Autowired
     private TokenService tokenService;
 
@@ -46,12 +44,12 @@ public class OfficeBasePriceUltimateController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/list")
-    public TableDataInfo list(OfficeBasePriceUltimate officeBasePriceUltimate) {
+    public TableDataInfo list(UltimateOfficeBasePrice officeBasePriceUltimate) {
         int pageIndex = ServletUtils.getParameterToInt(TableSupport.PAGE_NUM);
         int pageSize = ServletUtils.getParameterToInt(TableSupport.PAGE_SIZE);
         officeBasePriceUltimate.setPageIndex(pageIndex <= 1 ? 0 : (pageIndex - 1) * pageSize);
         officeBasePriceUltimate.setPageSize(pageSize);
-        List<OfficeBasePriceUltimate> list =
+        List<UltimateOfficeBasePrice> list =
                 officeBasePriceUltimateService.selectOfficeBasePriceUltimateList(officeBasePriceUltimate);
         int total = officeBasePriceUltimateService.selectOfficeBasePriceUltimateListCount(officeBasePriceUltimate);
         return getDataTable(list, total);
@@ -73,7 +71,7 @@ public class OfficeBasePriceUltimateController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "办公基价", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody OfficeBasePriceUltimate officeBasePriceUltimate) {
+    public AjaxResult edit(@RequestBody UltimateOfficeBasePrice officeBasePriceUltimate) {
         return toAjax(officeBasePriceUltimateService.updateOfficeBasePriceUltimate(officeBasePriceUltimate));
     }
 
@@ -83,18 +81,19 @@ public class OfficeBasePriceUltimateController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:user:export')")
     @Log(title = "办公基价", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
-    public AjaxResult export(OfficeBasePriceUltimate officeBasePriceUltimate) {
+    public AjaxResult export(UltimateOfficeBasePrice officeBasePriceUltimate) {
         int total = officeBasePriceUltimateService.selectOfficeBasePriceUltimateListCount(officeBasePriceUltimate);
         officeBasePriceUltimate.setPageIndex(0);
         officeBasePriceUltimate.setPageSize(total);
-        List<OfficeBasePriceUltimate> list =
+        List<UltimateOfficeBasePrice> list =
                 officeBasePriceUltimateService.selectOfficeBasePriceUltimateList(officeBasePriceUltimate);
-        ExcelUtil<OfficeBasePriceUltimate> util = new ExcelUtil<OfficeBasePriceUltimate>(OfficeBasePriceUltimate.class);
+        ExcelUtil<UltimateOfficeBasePrice> util = new ExcelUtil<>(UltimateOfficeBasePrice.class);
         return util.exportExcel(list, "办公基价");
     }
 
     /**
      * 办公基价导入
+     *
      * @param file
      * @return
      * @throws Exception
@@ -103,13 +102,12 @@ public class OfficeBasePriceUltimateController extends BaseController {
     @PreAuthorize("@ss.hasPermi('system:user:import')")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file) throws Exception {
-        ExcelUtil<OfficeBasePriceUltimate> util = new ExcelUtil<>(OfficeBasePriceUltimate.class);
-        List<OfficeBasePriceUltimate> officeBasePriceUltimates = util.importExcel(file.getInputStream());
+        ExcelUtil<UltimateOfficeBasePrice> util = new ExcelUtil<>(UltimateOfficeBasePrice.class);
+        List<UltimateOfficeBasePrice> officeBasePriceUltimates = util.importExcel(file.getInputStream());
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         String operName = loginUser.getUsername();
         String message = officeBasePriceUltimateService.batchImport(officeBasePriceUltimates, operName);
         return AjaxResult.success(message);
     }
-
 }
 
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeResidenceSaleBasePriceController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeResidenceSaleBasePriceController.java
new file mode 100644
index 000000000..58115efad
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ComputeResidenceSaleBasePriceController.java
@@ -0,0 +1,4 @@
+package com.ruoyi.project.data.price.controller;
+
+public class ComputeResidenceSaleBasePriceController {
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ResidenceRentBasePriceController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ResidenceRentBasePriceController.java
new file mode 100644
index 000000000..ed0e32062
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/ResidenceRentBasePriceController.java
@@ -0,0 +1,189 @@
+package com.ruoyi.project.data.price.controller;
+
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.framework.security.service.TokenService;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.page.TableDataInfo;
+import com.ruoyi.framework.web.page.TableSupport;
+import com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice;
+import com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice;
+import com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice;
+import com.ruoyi.project.data.price.service.IArtificialResidenceRentPriceService;
+import com.ruoyi.project.data.price.service.IComputeResidenceRentPriceService;
+import com.ruoyi.project.data.price.service.IUltimateResidenceRentBasePriceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/data/rentprice/residence")
+public class ResidenceRentBasePriceController extends BaseController {
+    @Autowired
+    private IComputeResidenceRentPriceService computeResidenceRentPriceService;
+    @Autowired
+    private IArtificialResidenceRentPriceService artificialResidenceRentPriceService;
+    @Autowired
+    private IUltimateResidenceRentBasePriceService ultimateResidenceRentBasePriceService;
+
+    @Autowired
+    private TokenService tokenService;
+
+    /**
+     * 查询 住宅租赁基价列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/compute/list")
+    public TableDataInfo list(ComputeResidenceRentBasePrice computeResidenceRentBasePrice) {
+        int pageIndex = ServletUtils.getParameterToInt("pageIndex");
+        int pageSize = ServletUtils.getParameterToInt(TableSupport.PAGE_SIZE);
+        computeResidenceRentBasePrice.setPageIndex(pageIndex <= 1 ? 0 : (pageIndex - 1) * pageSize);
+        computeResidenceRentBasePrice.setPageSize(pageSize);
+
+        int total = computeResidenceRentPriceService.selectCount(computeResidenceRentBasePrice);
+        List<ComputeResidenceRentBasePrice> list =
+                computeResidenceRentPriceService.selectList(computeResidenceRentBasePrice);
+        list.forEach(x -> x.setYearMonth(computeResidenceRentBasePrice.getYearMonth()));
+        return getDataTable(list, total);
+    }
+
+
+    /**
+     * 获取 住宅租赁基价详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = "/compute/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id) {
+        return AjaxResult.success(computeResidenceRentPriceService.selectById(id));
+    }
+
+    /**
+     * 修改 住宅租赁基价
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "住宅租赁基价", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/compute")
+    public AjaxResult edit(@RequestBody ComputeResidenceRentBasePrice computeResidenceRentBasePrice) {
+        return toAjax(computeResidenceRentPriceService.update(computeResidenceRentBasePrice));
+    }
+
+    /**
+     * 导出 住宅租赁基价列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
+    @Log(title = "办公基价", businessType = BusinessType.EXPORT)
+    @GetMapping("/compute/export")
+    public AjaxResult export(ComputeResidenceRentBasePrice computeResidenceRentBasePrice) {
+        int total = computeResidenceRentPriceService.selectCount(computeResidenceRentBasePrice);
+        computeResidenceRentBasePrice.setPageIndex(0);
+        computeResidenceRentBasePrice.setPageSize(total);
+        List<ComputeResidenceRentBasePrice> list =
+                computeResidenceRentPriceService.selectList(computeResidenceRentBasePrice);
+        ExcelUtil<ComputeResidenceRentBasePrice> util = new ExcelUtil<>(ComputeResidenceRentBasePrice.class);
+        return util.exportExcel(list, "住宅租赁基价");
+    }
+
+    /**
+     * 办公基价导入
+     *
+     * @param file
+     * @return
+     * @throws Exception
+     */
+    @Log(title = "办公基价", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:import')")
+    @PostMapping("/compute/importData")
+    public AjaxResult importData(MultipartFile file) throws Exception {
+        ExcelUtil<ComputeResidenceRentBasePrice> util = new ExcelUtil<>(ComputeResidenceRentBasePrice.class);
+        List<ComputeResidenceRentBasePrice> computeResidenceRentBasePrices = util.importExcel(file.getInputStream());
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String operName = loginUser.getUsername();
+        String message = computeResidenceRentPriceService.batchImport(computeResidenceRentBasePrices, operName);
+        return AjaxResult.success(message);
+    }
+
+
+    /**
+     * 人工修正住宅租赁
+     *
+     * @param artificialResidenceRentBasePrice
+     * @return
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/artificial/list")
+    public TableDataInfo artificialByList(ArtificialResidenceRentBasePrice artificialResidenceRentBasePrice) {
+        int pageIndex = ServletUtils.getParameterToInt("pageIndex");
+        int pageSize = ServletUtils.getParameterToInt(TableSupport.PAGE_SIZE);
+        artificialResidenceRentBasePrice.setPageIndex(pageIndex <= 1 ? 0 : (pageIndex - 1) * pageSize);
+        artificialResidenceRentBasePrice.setPageSize(pageSize);
+
+        int total = artificialResidenceRentPriceService.selectCount(artificialResidenceRentBasePrice);
+        List<ArtificialResidenceRentBasePrice> list =
+                artificialResidenceRentPriceService.selectList(artificialResidenceRentBasePrice);
+        list.forEach(x -> x.setYearMonth(artificialResidenceRentBasePrice.getYearMonth()));
+        return getDataTable(list, total);
+    }
+
+
+    /**
+     * 查询 住宅租赁基价列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/ultimate/list")
+    public TableDataInfo ultimateResidenceRentBasePriceList(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice) {
+        int pageIndex = ServletUtils.getParameterToInt("pageIndex");
+        int pageSize = ServletUtils.getParameterToInt(TableSupport.PAGE_SIZE);
+        ultimateResidenceRentBasePrice.setPageIndex(pageIndex <= 1 ? 0 : (pageIndex - 1) * pageSize);
+        ultimateResidenceRentBasePrice.setPageSize(pageSize);
+
+        int total = ultimateResidenceRentBasePriceService.selectCount(ultimateResidenceRentBasePrice);
+        List<UltimateResidenceRentBasePrice> list =
+                ultimateResidenceRentBasePriceService.selectList(ultimateResidenceRentBasePrice);
+        list.forEach(x -> x.setYearMonth(ultimateResidenceRentBasePrice.getYearMonth()));
+        return getDataTable(list, total);
+    }
+
+
+    /**
+     * 获取 住宅租赁基价详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = "/ultimate/{id}")
+    public AjaxResult ultimateResidenceRentBasePriceGet(@PathVariable("id") Integer id) {
+        return AjaxResult.success(ultimateResidenceRentBasePriceService.selectById(id));
+    }
+
+    /**
+     * 修改 住宅租赁基价
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "住宅租赁基价", businessType = BusinessType.UPDATE)
+    @PutMapping(value = "/ultimate")
+    public AjaxResult ultimateResidenceRentBasePriceEdit(@RequestBody UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice) {
+        return toAjax(ultimateResidenceRentBasePriceService.update(ultimateResidenceRentBasePrice));
+    }
+
+    /**
+     * 导出 住宅租赁基价列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
+    @Log(title = "审核住宅租赁基价", businessType = BusinessType.EXPORT)
+    @GetMapping("/ultimate/export")
+    public AjaxResult ultimateResidenceRentBasePriceExport(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice) {
+        int total = ultimateResidenceRentBasePriceService.selectCount(ultimateResidenceRentBasePrice);
+        ultimateResidenceRentBasePrice.setPageIndex(0);
+        ultimateResidenceRentBasePrice.setPageSize(total);
+        List<UltimateResidenceRentBasePrice> list =
+                ultimateResidenceRentBasePriceService.selectList(ultimateResidenceRentBasePrice);
+        ExcelUtil<UltimateResidenceRentBasePrice> util = new ExcelUtil<>(UltimateResidenceRentBasePrice.class);
+        return util.exportExcel(list, "核准住宅租赁基价");
+    }
+
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/UltimateResidenceSaleBasePriceController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/UltimateResidenceSaleBasePriceController.java
new file mode 100644
index 000000000..7ca3fb3af
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/controller/UltimateResidenceSaleBasePriceController.java
@@ -0,0 +1,4 @@
+package com.ruoyi.project.data.price.controller;
+
+public class UltimateResidenceSaleBasePriceController {
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceRentBasePrice.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceRentBasePrice.java
new file mode 100644
index 000000000..d8972171b
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceRentBasePrice.java
@@ -0,0 +1,127 @@
+package com.ruoyi.project.data.price.domain;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * 人工修正住宅租赁对象
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public class ArtificialResidenceRentBasePrice extends BaseEntity {
+
+    /**
+     * 年月
+     */
+    private Integer yearMonth;
+    private Integer pageIndex;
+    private Integer pageSize;
+
+    @Excel(name = "id")
+    private String id;
+    @Excel(name = "小区ID")
+    private String communityId;
+    @Excel(name = "平均租金")
+    private BigDecimal rentPrice;
+    @Excel(name = "租金主力面积系数")
+    private BigDecimal mainRentCoefficient;
+    @Excel(name = "主力面积租金")
+    private BigDecimal mainRentPrice;
+    @Excel(name = "上月AI租金")
+    private BigDecimal rentPrice_1;
+    @Excel(name = "价格涨跌幅类型-调整后")
+    private String voppat;
+    @Excel(name = "价格涨跌幅-调整后")
+    private BigDecimal voppa;
+
+    public Integer getYearMonth() {
+        return yearMonth;
+    }
+
+    public void setYearMonth(Integer yearMonth) {
+        this.yearMonth = yearMonth;
+    }
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public BigDecimal getMainRentCoefficient() {
+        return mainRentCoefficient;
+    }
+
+    public void setMainRentCoefficient(BigDecimal mainRentCoefficient) {
+        this.mainRentCoefficient = mainRentCoefficient;
+    }
+
+    public BigDecimal getRentPrice() {
+        return rentPrice;
+    }
+
+    public void setRentPrice(BigDecimal rentPrice) {
+        this.rentPrice = rentPrice;
+    }
+
+    public BigDecimal getMainRentPrice() {
+        return mainRentPrice;
+    }
+
+    public void setMainRentPrice(BigDecimal mainRentPrice) {
+        this.mainRentPrice = mainRentPrice;
+    }
+
+    public BigDecimal getRentPrice_1() {
+        return rentPrice_1;
+    }
+
+    public void setRentPrice_1(BigDecimal rentPrice_1) {
+        this.rentPrice_1 = rentPrice_1;
+    }
+
+    public String getVoppat() {
+        return voppat;
+    }
+
+    public void setVoppat(String voppat) {
+        this.voppat = voppat;
+    }
+
+    public BigDecimal getVoppa() {
+        return voppa;
+    }
+
+    public void setVoppa(BigDecimal voppa) {
+        this.voppa = voppa;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/domain/OfficeBasePriceUltimate.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceSaleBasePrice.java
similarity index 94%
rename from ruoyi/src/main/java/com/ruoyi/project/data/price/compute/domain/OfficeBasePriceUltimate.java
rename to ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceSaleBasePrice.java
index b61716073..b595488a2 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/domain/OfficeBasePriceUltimate.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ArtificialResidenceSaleBasePrice.java
@@ -1,8 +1,6 @@
-package com.ruoyi.project.data.price.compute.domain;
+package com.ruoyi.project.data.price.domain;
 
 import com.alibaba.fastjson.annotation.JSONField;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
 
@@ -14,7 +12,7 @@ import java.util.Date;
  * @author ruoyi
  * @date 2020-05-20
  */
-public class OfficeBasePriceUltimate extends BaseEntity {
+public class ArtificialResidenceSaleBasePrice extends BaseEntity {
 
     private Integer pageIndex;
     private Integer pageSize;
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceRentBasePrice.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceRentBasePrice.java
new file mode 100644
index 000000000..6206ec4db
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceRentBasePrice.java
@@ -0,0 +1,646 @@
+package com.ruoyi.project.data.price.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 【请填写功能名称】对象 office_base_price_ultimate
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public class ComputeResidenceRentBasePrice extends BaseEntity {
+
+    /**
+     * 年月
+     */
+    private Integer yearMonth;
+    private Integer pageIndex;
+    private Integer pageSize;
+
+    @Excel(name = "id")
+    private String id;
+    @Excel(name = "小区ID")
+    private String communityId;
+    @Excel(name = "小区名称")
+    private String communityName;
+    @Excel(name = "小区地址")
+    private String communityAddress;
+    @Excel(name = "区域")
+    private String county;
+    @Excel(name = "板块")
+    private String block;
+    @Excel(name = "环线")
+    private String loop;
+    @Excel(name = "是否生成索引")
+    private Integer isIndxGen;
+    @Excel(name = "参与涨幅计算")
+    private Integer isPstCalc;
+    @Excel(name = "运行状态")
+    private Integer statusRun;
+    @Excel(name = "物业类型")
+    private String propertyType;
+    @Excel(name = "小区类型")
+    private String projectType;
+    @Excel(name = "小区类型细分")
+    private String projectTypeDtl;
+    @Excel(name = "物业档次")
+    private String projectLevel;
+    @Excel(name = "物业开发期数")
+    private Integer propertyDevPeriod;
+    @Excel(name = "绑定聚类ID")
+    private String bindClassID;
+    @Excel(name = "租金主力面积系数")
+    private BigDecimal mainCoefficientRent;
+    @Excel(name = "AI租金(草稿)")
+    private BigDecimal rentPriceDft;
+    @Excel(name = "主力面积租金(草稿)")
+    private BigDecimal mainRentPriceDft;
+
+    @Excel(name = "上月AI租金")
+    private BigDecimal rentPrice_1;
+    @Excel(name = "成交均价(上周期)")
+    private BigDecimal priceDealMean_1;
+    @Excel(name = "成交最大价(上周期)")
+    private BigDecimal priceDealMax_1;
+    @Excel(name = "成交数量(上周期)")
+    private Integer sumDeal_1;
+    @Excel(name = "成交均价相对AI租金涨跌幅(上周期)")
+    private BigDecimal priceDeal_1_ToAI_Pst;
+
+    @Excel(name = "成交均价")
+    private BigDecimal priceDealMean;
+    @Excel(name = "成交最大价")
+    private BigDecimal priceDealMax;
+    @Excel(name = "成交数量")
+    private Integer sumDeal;
+    @Excel(name = "成交均价相对AI租金涨跌幅")
+    private BigDecimal priceDeal_ToAI_Pst;
+    @Excel(name = "当月比上月成交案例价调整比例")
+    private BigDecimal priceDeal_ToLst_Pst;
+
+    @Excel(name = "挂牌下架案例均价")
+    private BigDecimal priceCaseOff;
+    @Excel(name = "当月比上月挂牌下架案例价调整比例")
+    private BigDecimal priceCaseOff_ToLst_Pst;
+    @Excel(name = "挂牌最低价")
+    private BigDecimal priceListedMin;
+    @Excel(name = "挂牌最低价相对AI租金涨跌幅")
+    private BigDecimal priceLstMn_ToAI_Pst;
+
+    @Excel(name = "与上月AI租金比链家1案例价格价调整比例")
+    private BigDecimal priceCase1_ToAI_Pst;
+    @Excel(name = "与上月AI租金比链家2案例价格价调整比例")
+    private BigDecimal priceCase2_ToAI_Pst;
+    @Excel(name = "当月比上月链家1案例价调整比例")
+    private BigDecimal priceCase1_ToLst_Pst;
+    @Excel(name = "当月比上月链家2案例价调整比例")
+    private BigDecimal priceCase2_ToLst_Pst;
+
+    @Excel(name = "链家1案例价")
+    private BigDecimal priceCase1;
+    @Excel(name = "链家1调价幅度")
+    private BigDecimal priceCase1AdjPst;
+    @Excel(name = "链家1案例总量")
+    private Integer sumCase1;
+
+    @Excel(name = "链家2案例价")
+    private BigDecimal priceCase2;
+    @Excel(name = "链家2调价幅度")
+    private BigDecimal priceCase2AdjPst;
+    @Excel(name = "链家2案例总量")
+    private Integer sumCase2;
+
+    @Excel(name = "价格涨跌幅类型-调整前")
+    private BigDecimal voppbt;
+    @Excel(name = "价格涨跌幅-调整前")
+    private String voppb;
+    @Excel(name = "绑定小区编号")
+    private String bindProjID;
+    @Excel(name = "绑定小区涨跌幅")
+    private BigDecimal bind_Proj_Pst;
+    @Excel(name = "绑定板块+聚类ID")
+    private String bind_Block_Class;
+    @Excel(name = "绑定板块+聚类ID的涨跌幅")
+    private BigDecimal bind_Block_Class_Pst;
+    @Excel(name = "绑定板块+物业档次")
+    private String bind_Block_Plevel;
+    @Excel(name = "绑定板块+物业档次的涨跌幅")
+    private BigDecimal bind_Block_Plevel_Pst;
+    @Excel(name = "绑定板块+小区类型")
+    private String bind_Block_PType;
+    @Excel(name = "绑定板块+小区类型的涨跌幅")
+    private BigDecimal bind_Block_Ptype_Pst;
+    @Excel(name = "绑定区县+小区类型")
+    private String bind_County_PType;
+    @Excel(name = "绑定区县+小区类型的涨跌幅")
+    private BigDecimal bind_County_Ptype_Pst;
+    @Excel(name = "绑定混合小区ID")
+    private String bind_MixProject_PType;
+    @Excel(name = "绑定混合小区涨跌幅")
+    private BigDecimal bind_MixProject_Pst;
+    @Excel(name = "价格涨跌幅类型-调整后")
+    private String voppat;
+    @Excel(name = "价格涨跌幅-调整后")
+    private BigDecimal voppa;
+
+    public Integer getYearMonth() {
+        return yearMonth;
+    }
+
+    public void setYearMonth(Integer yearMonth) {
+        this.yearMonth = yearMonth;
+    }
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getCommunityName() {
+        return communityName;
+    }
+
+    public void setCommunityName(String communityName) {
+        this.communityName = communityName;
+    }
+
+    public String getCommunityAddress() {
+        return communityAddress;
+    }
+
+    public void setCommunityAddress(String communityAddress) {
+        this.communityAddress = communityAddress;
+    }
+
+    public String getCounty() {
+        return county;
+    }
+
+    public void setCounty(String county) {
+        this.county = county;
+    }
+
+    public String getBlock() {
+        return block;
+    }
+
+    public void setBlock(String block) {
+        this.block = block;
+    }
+
+    public String getLoop() {
+        return loop;
+    }
+
+    public void setLoop(String loop) {
+        this.loop = loop;
+    }
+
+    public Integer getIsIndxGen() {
+        return isIndxGen;
+    }
+
+    public void setIsIndxGen(Integer isIndxGen) {
+        this.isIndxGen = isIndxGen;
+    }
+
+    public Integer getIsPstCalc() {
+        return isPstCalc;
+    }
+
+    public void setIsPstCalc(Integer isPstCalc) {
+        this.isPstCalc = isPstCalc;
+    }
+
+    public Integer getStatusRun() {
+        return statusRun;
+    }
+
+    public void setStatusRun(Integer statusRun) {
+        this.statusRun = statusRun;
+    }
+
+    public String getPropertyType() {
+        return propertyType;
+    }
+
+    public void setPropertyType(String propertyType) {
+        this.propertyType = propertyType;
+    }
+
+    public String getProjectType() {
+        return projectType;
+    }
+
+    public void setProjectType(String projectType) {
+        this.projectType = projectType;
+    }
+
+    public String getProjectTypeDtl() {
+        return projectTypeDtl;
+    }
+
+    public void setProjectTypeDtl(String projectTypeDtl) {
+        this.projectTypeDtl = projectTypeDtl;
+    }
+
+    public String getProjectLevel() {
+        return projectLevel;
+    }
+
+    public void setProjectLevel(String projectLevel) {
+        this.projectLevel = projectLevel;
+    }
+
+    public Integer getPropertyDevPeriod() {
+        return propertyDevPeriod;
+    }
+
+    public void setPropertyDevPeriod(Integer propertyDevPeriod) {
+        this.propertyDevPeriod = propertyDevPeriod;
+    }
+
+    public String getBindClassID() {
+        return bindClassID;
+    }
+
+    public void setBindClassID(String bindClassID) {
+        this.bindClassID = bindClassID;
+    }
+
+    public BigDecimal getMainCoefficientRent() {
+        return mainCoefficientRent;
+    }
+
+    public void setMainCoefficientRent(BigDecimal mainCoefficientRent) {
+        this.mainCoefficientRent = mainCoefficientRent;
+    }
+
+    public BigDecimal getRentPriceDft() {
+        return rentPriceDft;
+    }
+
+    public void setRentPriceDft(BigDecimal rentPriceDft) {
+        this.rentPriceDft = rentPriceDft;
+    }
+
+    public BigDecimal getMainRentPriceDft() {
+        return mainRentPriceDft;
+    }
+
+    public void setMainRentPriceDft(BigDecimal mainRentPriceDft) {
+        this.mainRentPriceDft = mainRentPriceDft;
+    }
+
+    public BigDecimal getRentPrice_1() {
+        return rentPrice_1;
+    }
+
+    public void setRentPrice_1(BigDecimal rentPrice_1) {
+        this.rentPrice_1 = rentPrice_1;
+    }
+
+    public BigDecimal getPriceDealMean_1() {
+        return priceDealMean_1;
+    }
+
+    public void setPriceDealMean_1(BigDecimal priceDealMean_1) {
+        this.priceDealMean_1 = priceDealMean_1;
+    }
+
+    public BigDecimal getPriceDealMax_1() {
+        return priceDealMax_1;
+    }
+
+    public void setPriceDealMax_1(BigDecimal priceDealMax_1) {
+        this.priceDealMax_1 = priceDealMax_1;
+    }
+
+    public Integer getSumDeal_1() {
+        return sumDeal_1;
+    }
+
+    public void setSumDeal_1(Integer sumDeal_1) {
+        this.sumDeal_1 = sumDeal_1;
+    }
+
+    public BigDecimal getPriceDeal_1_ToAI_Pst() {
+        return priceDeal_1_ToAI_Pst;
+    }
+
+    public void setPriceDeal_1_ToAI_Pst(BigDecimal priceDeal_1_ToAI_Pst) {
+        this.priceDeal_1_ToAI_Pst = priceDeal_1_ToAI_Pst;
+    }
+
+    public BigDecimal getPriceDealMean() {
+        return priceDealMean;
+    }
+
+    public void setPriceDealMean(BigDecimal priceDealMean) {
+        this.priceDealMean = priceDealMean;
+    }
+
+    public BigDecimal getPriceDealMax() {
+        return priceDealMax;
+    }
+
+    public void setPriceDealMax(BigDecimal priceDealMax) {
+        this.priceDealMax = priceDealMax;
+    }
+
+    public Integer getSumDeal() {
+        return sumDeal;
+    }
+
+    public void setSumDeal(Integer sumDeal) {
+        this.sumDeal = sumDeal;
+    }
+
+    public BigDecimal getPriceDeal_ToAI_Pst() {
+        return priceDeal_ToAI_Pst;
+    }
+
+    public void setPriceDeal_ToAI_Pst(BigDecimal priceDeal_ToAI_Pst) {
+        this.priceDeal_ToAI_Pst = priceDeal_ToAI_Pst;
+    }
+
+    public BigDecimal getPriceDeal_ToLst_Pst() {
+        return priceDeal_ToLst_Pst;
+    }
+
+    public void setPriceDeal_ToLst_Pst(BigDecimal priceDeal_ToLst_Pst) {
+        this.priceDeal_ToLst_Pst = priceDeal_ToLst_Pst;
+    }
+
+    public BigDecimal getPriceCaseOff() {
+        return priceCaseOff;
+    }
+
+    public void setPriceCaseOff(BigDecimal priceCaseOff) {
+        this.priceCaseOff = priceCaseOff;
+    }
+
+    public BigDecimal getPriceCaseOff_ToLst_Pst() {
+        return priceCaseOff_ToLst_Pst;
+    }
+
+    public void setPriceCaseOff_ToLst_Pst(BigDecimal priceCaseOff_ToLst_Pst) {
+        this.priceCaseOff_ToLst_Pst = priceCaseOff_ToLst_Pst;
+    }
+
+    public BigDecimal getPriceListedMin() {
+        return priceListedMin;
+    }
+
+    public void setPriceListedMin(BigDecimal priceListedMin) {
+        this.priceListedMin = priceListedMin;
+    }
+
+    public BigDecimal getPriceLstMn_ToAI_Pst() {
+        return priceLstMn_ToAI_Pst;
+    }
+
+    public void setPriceLstMn_ToAI_Pst(BigDecimal priceLstMn_ToAI_Pst) {
+        this.priceLstMn_ToAI_Pst = priceLstMn_ToAI_Pst;
+    }
+
+    public BigDecimal getPriceCase1_ToAI_Pst() {
+        return priceCase1_ToAI_Pst;
+    }
+
+    public void setPriceCase1_ToAI_Pst(BigDecimal priceCase1_ToAI_Pst) {
+        this.priceCase1_ToAI_Pst = priceCase1_ToAI_Pst;
+    }
+
+    public BigDecimal getPriceCase2_ToAI_Pst() {
+        return priceCase2_ToAI_Pst;
+    }
+
+    public void setPriceCase2_ToAI_Pst(BigDecimal priceCase2_ToAI_Pst) {
+        this.priceCase2_ToAI_Pst = priceCase2_ToAI_Pst;
+    }
+
+    public BigDecimal getPriceCase1_ToLst_Pst() {
+        return priceCase1_ToLst_Pst;
+    }
+
+    public void setPriceCase1_ToLst_Pst(BigDecimal priceCase1_ToLst_Pst) {
+        this.priceCase1_ToLst_Pst = priceCase1_ToLst_Pst;
+    }
+
+    public BigDecimal getPriceCase2_ToLst_Pst() {
+        return priceCase2_ToLst_Pst;
+    }
+
+    public void setPriceCase2_ToLst_Pst(BigDecimal priceCase2_ToLst_Pst) {
+        this.priceCase2_ToLst_Pst = priceCase2_ToLst_Pst;
+    }
+
+    public BigDecimal getPriceCase1() {
+        return priceCase1;
+    }
+
+    public void setPriceCase1(BigDecimal priceCase1) {
+        this.priceCase1 = priceCase1;
+    }
+
+    public BigDecimal getPriceCase1AdjPst() {
+        return priceCase1AdjPst;
+    }
+
+    public void setPriceCase1AdjPst(BigDecimal priceCase1AdjPst) {
+        this.priceCase1AdjPst = priceCase1AdjPst;
+    }
+
+    public Integer getSumCase1() {
+        return sumCase1;
+    }
+
+    public void setSumCase1(Integer sumCase1) {
+        this.sumCase1 = sumCase1;
+    }
+
+    public BigDecimal getPriceCase2() {
+        return priceCase2;
+    }
+
+    public void setPriceCase2(BigDecimal priceCase2) {
+        this.priceCase2 = priceCase2;
+    }
+
+    public BigDecimal getPriceCase2AdjPst() {
+        return priceCase2AdjPst;
+    }
+
+    public void setPriceCase2AdjPst(BigDecimal priceCase2AdjPst) {
+        this.priceCase2AdjPst = priceCase2AdjPst;
+    }
+
+    public Integer getSumCase2() {
+        return sumCase2;
+    }
+
+    public void setSumCase2(Integer sumCase2) {
+        this.sumCase2 = sumCase2;
+    }
+
+    public BigDecimal getVoppbt() {
+        return voppbt;
+    }
+
+    public void setVoppbt(BigDecimal voppbt) {
+        this.voppbt = voppbt;
+    }
+
+    public String getVoppb() {
+        return voppb;
+    }
+
+    public void setVoppb(String voppb) {
+        this.voppb = voppb;
+    }
+
+    public String getBindProjID() {
+        return bindProjID;
+    }
+
+    public void setBindProjID(String bindProjID) {
+        this.bindProjID = bindProjID;
+    }
+
+    public BigDecimal getBind_Proj_Pst() {
+        return bind_Proj_Pst;
+    }
+
+    public void setBind_Proj_Pst(BigDecimal bind_Proj_Pst) {
+        this.bind_Proj_Pst = bind_Proj_Pst;
+    }
+
+    public String getBind_Block_Class() {
+        return bind_Block_Class;
+    }
+
+    public void setBind_Block_Class(String bind_Block_Class) {
+        this.bind_Block_Class = bind_Block_Class;
+    }
+
+    public BigDecimal getBind_Block_Class_Pst() {
+        return bind_Block_Class_Pst;
+    }
+
+    public void setBind_Block_Class_Pst(BigDecimal bind_Block_Class_Pst) {
+        this.bind_Block_Class_Pst = bind_Block_Class_Pst;
+    }
+
+    public String getBind_Block_Plevel() {
+        return bind_Block_Plevel;
+    }
+
+    public void setBind_Block_Plevel(String bind_Block_Plevel) {
+        this.bind_Block_Plevel = bind_Block_Plevel;
+    }
+
+    public BigDecimal getBind_Block_Plevel_Pst() {
+        return bind_Block_Plevel_Pst;
+    }
+
+    public void setBind_Block_Plevel_Pst(BigDecimal bind_Block_Plevel_Pst) {
+        this.bind_Block_Plevel_Pst = bind_Block_Plevel_Pst;
+    }
+
+    public String getBind_Block_PType() {
+        return bind_Block_PType;
+    }
+
+    public void setBind_Block_PType(String bind_Block_PType) {
+        this.bind_Block_PType = bind_Block_PType;
+    }
+
+    public BigDecimal getBind_Block_Ptype_Pst() {
+        return bind_Block_Ptype_Pst;
+    }
+
+    public void setBind_Block_Ptype_Pst(BigDecimal bind_Block_Ptype_Pst) {
+        this.bind_Block_Ptype_Pst = bind_Block_Ptype_Pst;
+    }
+
+    public String getBind_County_PType() {
+        return bind_County_PType;
+    }
+
+    public void setBind_County_PType(String bind_County_PType) {
+        this.bind_County_PType = bind_County_PType;
+    }
+
+    public BigDecimal getBind_County_Ptype_Pst() {
+        return bind_County_Ptype_Pst;
+    }
+
+    public void setBind_County_Ptype_Pst(BigDecimal bind_County_Ptype_Pst) {
+        this.bind_County_Ptype_Pst = bind_County_Ptype_Pst;
+    }
+
+    public String getBind_MixProject_PType() {
+        return bind_MixProject_PType;
+    }
+
+    public void setBind_MixProject_PType(String bind_MixProject_PType) {
+        this.bind_MixProject_PType = bind_MixProject_PType;
+    }
+
+    public BigDecimal getBind_MixProject_Pst() {
+        return bind_MixProject_Pst;
+    }
+
+    public void setBind_MixProject_Pst(BigDecimal bind_MixProject_Pst) {
+        this.bind_MixProject_Pst = bind_MixProject_Pst;
+    }
+
+    public String getVoppat() {
+        return voppat;
+    }
+
+    public void setVoppat(String voppat) {
+        this.voppat = voppat;
+    }
+
+    public BigDecimal getVoppa() {
+        return voppa;
+    }
+
+    public void setVoppa(BigDecimal voppa) {
+        this.voppa = voppa;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceSaleBasePrice.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceSaleBasePrice.java
new file mode 100644
index 000000000..a437d20c5
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/ComputeResidenceSaleBasePrice.java
@@ -0,0 +1,176 @@
+package com.ruoyi.project.data.price.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 【请填写功能名称】对象 office_base_price_ultimate
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public class ComputeResidenceSaleBasePrice extends BaseEntity {
+
+    private Integer pageIndex;
+    private Integer pageSize;
+    @JSONField(serialize = false)
+    private Integer yearMonth;
+
+    @Excel(name = "ID")
+    private String id;
+    @Excel(name = "楼栋ID")
+    private String buildingId;
+    @Excel(name = "小区ID")
+    private String communityId;
+    @Excel(name = "主力基价")
+    private String mainPrice;
+    @Excel(name = "主力租金")
+    private String mainPriceRent;
+    @Excel(name = "主力基价涨跌幅")
+    private String mainPricePst;
+    @Excel(name = "主力租金涨跌幅")
+    private String mainPriceRentPst;
+    @Excel(name = "主力基价类型")
+    private String mainPriceType;
+    @Excel(name = "主力租金类型")
+    private String mainPriceRentType;
+    @Excel(name = "更新日期")
+    private Date updateDate;
+    @Excel(name = "状态")
+    private Boolean status;
+    @Excel(name = "是否标准楼栋")
+    private Boolean isStandardBuilding;
+    @Excel(name = "更改价格说明")
+    private String adjustPriceComment;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Integer getYearMonth() {
+        return yearMonth;
+    }
+
+    public void setYearMonth(Integer yearMonth) {
+        this.yearMonth = yearMonth;
+    }
+
+    public String getBuildingId() {
+        return buildingId;
+    }
+
+    public void setBuildingId(String buildingId) {
+        this.buildingId = buildingId;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getMainPrice() {
+        return mainPrice;
+    }
+
+    public void setMainPrice(String mainPrice) {
+        this.mainPrice = mainPrice;
+    }
+
+    public String getMainPriceRent() {
+        return mainPriceRent;
+    }
+
+    public void setMainPriceRent(String mainPriceRent) {
+        this.mainPriceRent = mainPriceRent;
+    }
+
+    public String getMainPricePst() {
+        return mainPricePst;
+    }
+
+    public void setMainPricePst(String mainPricePst) {
+        this.mainPricePst = mainPricePst;
+    }
+
+    public String getMainPriceRentPst() {
+        return mainPriceRentPst;
+    }
+
+    public void setMainPriceRentPst(String mainPriceRentPst) {
+        this.mainPriceRentPst = mainPriceRentPst;
+    }
+
+    public String getMainPriceType() {
+        return mainPriceType;
+    }
+
+    public void setMainPriceType(String mainPriceType) {
+        this.mainPriceType = mainPriceType;
+    }
+
+    public String getMainPriceRentType() {
+        return mainPriceRentType;
+    }
+
+    public void setMainPriceRentType(String mainPriceRentType) {
+        this.mainPriceRentType = mainPriceRentType;
+    }
+
+    public Date getUpdateDate() {
+        return updateDate;
+    }
+
+    public void setUpdateDate(Date updateDate) {
+        this.updateDate = updateDate;
+    }
+
+    public Boolean getStatus() {
+        return status;
+    }
+
+    public void setStatus(Boolean status) {
+        this.status = status;
+    }
+
+    public Boolean getStandardBuilding() {
+        return isStandardBuilding;
+    }
+
+    public void setStandardBuilding(Boolean standardBuilding) {
+        isStandardBuilding = standardBuilding;
+    }
+
+    public String getAdjustPriceComment() {
+        return adjustPriceComment;
+    }
+
+    public void setAdjustPriceComment(String adjustPriceComment) {
+        this.adjustPriceComment = adjustPriceComment;
+    }
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateOfficeBasePrice.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateOfficeBasePrice.java
new file mode 100644
index 000000000..f57a9810d
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateOfficeBasePrice.java
@@ -0,0 +1,357 @@
+package com.ruoyi.project.data.price.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 【请填写功能名称】对象 office_base_price_ultimate
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public class UltimateOfficeBasePrice extends BaseEntity {
+
+    private Integer pageIndex;
+    private Integer pageSize;
+
+    @Excel(name = "ID")
+    private String id;
+    @JSONField(serialize = false)
+    private Integer yearMonth;
+    @Excel(name = "楼栋ID")
+    private String buildingId;
+    @Excel(name = "小区ID")
+    private String communityId;
+    @Excel(name = "项目名称")
+    private String communityName;
+    @Excel(name = "办公项目地址")
+    private String communityAddress;
+    @Excel(name = "楼栋地址")
+    private String buildingAddress;
+    @Excel(name = "楼栋地址")
+    private String countyName;
+    @Excel(name = "板块地址")
+    private String blockName;
+    @Excel(name = "街道地址")
+    private String streetName;
+    @Excel(name = "环线地址")
+    private String loopName;
+    @Excel(name = "建成年代")
+    private Integer year;
+    @Excel(name = "平均面积")
+    private BigDecimal avgArea;
+    @Excel(name = "总层数")
+    private String totalFloorSum;
+    @Excel(name = "地上层数")
+    private String upperFloorSum;
+    @Excel(name = "办公分类")
+    private String officeClass;
+    @Excel(name = "办公等级")
+    private String officeLevel;
+    @Excel(name = "主力基价(上期)")
+    private BigDecimal mainPrice_1;
+    @Excel(name = "主力租金(上期)")
+    private BigDecimal mainPriceRent_1;
+    @Excel(name = "主力基价")
+    private BigDecimal mainPrice;
+    @Excel(name = "主力租金")
+    private BigDecimal mainPriceRent;
+    @Excel(name = "主力基价涨跌幅")
+    private BigDecimal mainPricePst;
+    @Excel(name = "主力租金涨跌幅")
+    private BigDecimal mainPriceRentPst;
+    @Excel(name = "主力基价类型")
+    private String mainPriceType;
+    @Excel(name = "主力租金类型")
+    private String mainPriceRentType;
+    @Excel(name = "面积修正系数")
+    private BigDecimal areaCoefficient;
+    @Excel(name = "年份修正系数")
+    private BigDecimal yearCoefficient;
+    @Excel(name = "基价楼栋系数")
+    private BigDecimal buildingCoefficient;
+    @Excel(name = "更新日期")
+    private Date updateDate;
+    @Excel(name = "状态")
+    private Boolean status;
+    @Excel(name = "是否标准楼栋")
+    private Boolean isStandardBuilding;
+    @Excel(name = "更改价格说明")
+    private String adjustPriceComment;
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Integer getYearMonth() {
+        return yearMonth;
+    }
+
+    public void setYearMonth(Integer yearMonth) {
+        this.yearMonth = yearMonth;
+    }
+
+    public String getBuildingId() {
+        return buildingId;
+    }
+
+    public void setBuildingId(String buildingId) {
+        this.buildingId = buildingId;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getCommunityName() {
+        return communityName;
+    }
+
+    public void setCommunityName(String communityName) {
+        this.communityName = communityName;
+    }
+
+    public String getCommunityAddress() {
+        return communityAddress;
+    }
+
+    public void setCommunityAddress(String communityAddress) {
+        this.communityAddress = communityAddress;
+    }
+
+    public String getBuildingAddress() {
+        return buildingAddress;
+    }
+
+    public void setBuildingAddress(String buildingAddress) {
+        this.buildingAddress = buildingAddress;
+    }
+
+    public String getCountyName() {
+        return countyName;
+    }
+
+    public void setCountyName(String countyName) {
+        this.countyName = countyName;
+    }
+
+    public String getBlockName() {
+        return blockName;
+    }
+
+    public void setBlockName(String blockName) {
+        this.blockName = blockName;
+    }
+
+    public String getStreetName() {
+        return streetName;
+    }
+
+    public void setStreetName(String streetName) {
+        this.streetName = streetName;
+    }
+
+    public String getLoopName() {
+        return loopName;
+    }
+
+    public void setLoopName(String loopName) {
+        this.loopName = loopName;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public BigDecimal getAvgArea() {
+        return avgArea;
+    }
+
+    public void setAvgArea(BigDecimal avgArea) {
+        this.avgArea = avgArea;
+    }
+
+    public String getTotalFloorSum() {
+        return totalFloorSum;
+    }
+
+    public void setTotalFloorSum(String totalFloorSum) {
+        this.totalFloorSum = totalFloorSum;
+    }
+
+    public String getUpperFloorSum() {
+        return upperFloorSum;
+    }
+
+    public void setUpperFloorSum(String upperFloorSum) {
+        this.upperFloorSum = upperFloorSum;
+    }
+
+    public String getOfficeClass() {
+        return officeClass;
+    }
+
+    public void setOfficeClass(String officeClass) {
+        this.officeClass = officeClass;
+    }
+
+    public String getOfficeLevel() {
+        return officeLevel;
+    }
+
+    public void setOfficeLevel(String officeLevel) {
+        this.officeLevel = officeLevel;
+    }
+
+    public BigDecimal getMainPrice_1() {
+        return mainPrice_1;
+    }
+
+    public void setMainPrice_1(BigDecimal mainPrice_1) {
+        this.mainPrice_1 = mainPrice_1;
+    }
+
+    public BigDecimal getMainPriceRent_1() {
+        return mainPriceRent_1;
+    }
+
+    public void setMainPriceRent_1(BigDecimal mainPriceRent_1) {
+        this.mainPriceRent_1 = mainPriceRent_1;
+    }
+
+    public BigDecimal getMainPrice() {
+        return mainPrice;
+    }
+
+    public void setMainPrice(BigDecimal mainPrice) {
+        this.mainPrice = mainPrice;
+    }
+
+    public BigDecimal getMainPriceRent() {
+        return mainPriceRent;
+    }
+
+    public void setMainPriceRent(BigDecimal mainPriceRent) {
+        this.mainPriceRent = mainPriceRent;
+    }
+
+    public BigDecimal getMainPricePst() {
+        return mainPricePst;
+    }
+
+    public void setMainPricePst(BigDecimal mainPricePst) {
+        this.mainPricePst = mainPricePst;
+    }
+
+    public BigDecimal getMainPriceRentPst() {
+        return mainPriceRentPst;
+    }
+
+    public void setMainPriceRentPst(BigDecimal mainPriceRentPst) {
+        this.mainPriceRentPst = mainPriceRentPst;
+    }
+
+    public String getMainPriceType() {
+        return mainPriceType;
+    }
+
+    public void setMainPriceType(String mainPriceType) {
+        this.mainPriceType = mainPriceType;
+    }
+
+    public String getMainPriceRentType() {
+        return mainPriceRentType;
+    }
+
+    public void setMainPriceRentType(String mainPriceRentType) {
+        this.mainPriceRentType = mainPriceRentType;
+    }
+
+    public BigDecimal getAreaCoefficient() {
+        return areaCoefficient;
+    }
+
+    public void setAreaCoefficient(BigDecimal areaCoefficient) {
+        this.areaCoefficient = areaCoefficient;
+    }
+
+    public BigDecimal getYearCoefficient() {
+        return yearCoefficient;
+    }
+
+    public void setYearCoefficient(BigDecimal yearCoefficient) {
+        this.yearCoefficient = yearCoefficient;
+    }
+
+    public BigDecimal getBuildingCoefficient() {
+        return buildingCoefficient;
+    }
+
+    public void setBuildingCoefficient(BigDecimal buildingCoefficient) {
+        this.buildingCoefficient = buildingCoefficient;
+    }
+
+    public Date getUpdateDate() {
+        return updateDate;
+    }
+
+    public void setUpdateDate(Date updateDate) {
+        this.updateDate = updateDate;
+    }
+
+    public Boolean getStatus() {
+        return status;
+    }
+
+    public void setStatus(Boolean status) {
+        this.status = status;
+    }
+
+    public Boolean getStandardBuilding() {
+        return isStandardBuilding;
+    }
+
+    public void setStandardBuilding(Boolean standardBuilding) {
+        isStandardBuilding = standardBuilding;
+    }
+
+    public String getAdjustPriceComment() {
+        return adjustPriceComment;
+    }
+
+    public void setAdjustPriceComment(String adjustPriceComment) {
+        this.adjustPriceComment = adjustPriceComment;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceRentBasePrice.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceRentBasePrice.java
new file mode 100644
index 000000000..31a391810
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceRentBasePrice.java
@@ -0,0 +1,277 @@
+package com.ruoyi.project.data.price.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 核准的住宅租赁基价
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public class UltimateResidenceRentBasePrice extends BaseEntity {
+    @JSONField(serialize = false)
+    private Integer pageIndex;
+    @JSONField(serialize = false)
+    private Integer pageSize;
+
+    private Integer yearMonth;
+    @Excel(name = "ID")
+    private Integer id;
+    @Excel(name = "小区ID")
+    private String communityId;
+    @Excel(name = "价格类型")
+    private String priceType;
+    @Excel(name = "标准基价")
+    private BigDecimal basePrice_1;
+    @Excel(name = "平均租金")
+    private BigDecimal rentPrice;
+    @Excel(name = "散租挂牌案例")
+    private Integer sumCase1;
+    @Excel(name = "租金涨跌幅")
+    private BigDecimal voppa;
+    @Excel(name = "租金涨跌幅-类型")
+    private String voppat;
+    @Excel(name = "租金-工房1室")
+    private BigDecimal gf_1Room;
+    @Excel(name = "租金-工房2室")
+    private BigDecimal gf_2Room;
+    @Excel(name = "租金-公寓2室")
+    private BigDecimal gy_2Room;
+    @Excel(name = "租金-公寓3室")
+    private BigDecimal gy_3Room;
+    @Excel(name = "租金-1房")
+    private BigDecimal one_Room;
+    @Excel(name = "租金-2房")
+    private BigDecimal two_Room;
+    @Excel(name = "租金-3房")
+    private BigDecimal three_Room;
+    @Excel(name = "整租比")
+    private BigDecimal entireRentRatio;
+    @Excel(name = "整租案例数")
+    private Integer entireRentNum;
+    @Excel(name = "分租比")
+    private BigDecimal shareRentRatio;
+    @Excel(name = "分租案例数")
+    private Integer shareRentNum;
+    @Excel(name = "租售比")
+    private BigDecimal saleRentRatio;
+    @Excel(name = "状态")
+    private Boolean status;
+    @Excel(name = "价格变更说明")
+    private String adjEvd;
+    @Excel(name = "修改日期")
+    private Date modifyDate;
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Integer getYearMonth() {
+        return yearMonth;
+    }
+
+    public void setYearMonth(Integer yearMonth) {
+        this.yearMonth = yearMonth;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getPriceType() {
+        return priceType;
+    }
+
+    public void setPriceType(String priceType) {
+        this.priceType = priceType;
+    }
+
+    public BigDecimal getBasePrice_1() {
+        return basePrice_1;
+    }
+
+    public void setBasePrice_1(BigDecimal basePrice_1) {
+        this.basePrice_1 = basePrice_1;
+    }
+
+    public BigDecimal getRentPrice() {
+        return rentPrice;
+    }
+
+    public void setRentPrice(BigDecimal rentPrice) {
+        this.rentPrice = rentPrice;
+    }
+
+    public Integer getSumCase1() {
+        return sumCase1;
+    }
+
+    public void setSumCase1(Integer sumCase1) {
+        this.sumCase1 = sumCase1;
+    }
+
+    public String getVoppat() {
+        return voppat;
+    }
+
+    public void setVoppat(String voppat) {
+        this.voppat = voppat;
+    }
+
+    public BigDecimal getVoppa() {
+        return voppa;
+    }
+
+    public void setVoppa(BigDecimal voppa) {
+        this.voppa = voppa;
+    }
+
+    public BigDecimal getGf_1Room() {
+        return gf_1Room;
+    }
+
+    public void setGf_1Room(BigDecimal gf_1Room) {
+        this.gf_1Room = gf_1Room;
+    }
+
+    public BigDecimal getGf_2Room() {
+        return gf_2Room;
+    }
+
+    public void setGf_2Room(BigDecimal gf_2Room) {
+        this.gf_2Room = gf_2Room;
+    }
+
+    public BigDecimal getGy_2Room() {
+        return gy_2Room;
+    }
+
+    public void setGy_2Room(BigDecimal gy_2Room) {
+        this.gy_2Room = gy_2Room;
+    }
+
+    public BigDecimal getGy_3Room() {
+        return gy_3Room;
+    }
+
+    public void setGy_3Room(BigDecimal gy_3Room) {
+        this.gy_3Room = gy_3Room;
+    }
+
+    public BigDecimal getOne_Room() {
+        return one_Room;
+    }
+
+    public void setOne_Room(BigDecimal one_Room) {
+        this.one_Room = one_Room;
+    }
+
+    public BigDecimal getTwo_Room() {
+        return two_Room;
+    }
+
+    public void setTwo_Room(BigDecimal two_Room) {
+        this.two_Room = two_Room;
+    }
+
+    public BigDecimal getThree_Room() {
+        return three_Room;
+    }
+
+    public void setThree_Room(BigDecimal three_Room) {
+        this.three_Room = three_Room;
+    }
+
+    public BigDecimal getEntireRentRatio() {
+        return entireRentRatio;
+    }
+
+    public void setEntireRentRatio(BigDecimal entireRentRatio) {
+        this.entireRentRatio = entireRentRatio;
+    }
+
+    public Integer getEntireRentNum() {
+        return entireRentNum;
+    }
+
+    public void setEntireRentNum(Integer entireRentNum) {
+        this.entireRentNum = entireRentNum;
+    }
+
+    public BigDecimal getShareRentRatio() {
+        return shareRentRatio;
+    }
+
+    public void setShareRentRatio(BigDecimal shareRentRatio) {
+        this.shareRentRatio = shareRentRatio;
+    }
+
+    public Integer getShareRentNum() {
+        return shareRentNum;
+    }
+
+    public void setShareRentNum(Integer shareRentNum) {
+        this.shareRentNum = shareRentNum;
+    }
+
+    public BigDecimal getSaleRentRatio() {
+        return saleRentRatio;
+    }
+
+    public void setSaleRentRatio(BigDecimal saleRentRatio) {
+        this.saleRentRatio = saleRentRatio;
+    }
+
+    public Date getModifyDate() {
+        return modifyDate;
+    }
+
+    public void setModifyDate(Date modifyDate) {
+        this.modifyDate = modifyDate;
+    }
+
+    public Boolean getStatus() {
+        return status;
+    }
+
+    public void setStatus(Boolean status) {
+        this.status = status;
+    }
+
+    public String getAdjEvd() {
+        return adjEvd;
+    }
+
+    public void setAdjEvd(String adjEvd) {
+        this.adjEvd = adjEvd;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceSaleBasePrice.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceSaleBasePrice.java
new file mode 100644
index 000000000..af764c558
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/domain/UltimateResidenceSaleBasePrice.java
@@ -0,0 +1,176 @@
+package com.ruoyi.project.data.price.domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 【请填写功能名称】对象 office_base_price_ultimate
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public class UltimateResidenceSaleBasePrice extends BaseEntity {
+
+    private Integer pageIndex;
+    private Integer pageSize;
+
+    @Excel(name = "ID")
+    private String id;
+    @JSONField(serialize = false)
+    private Integer yearMonth;
+    @Excel(name = "楼栋ID")
+    private String buildingId;
+    @Excel(name = "小区ID")
+    private String communityId;
+    @Excel(name = "主力基价")
+    private String mainPrice;
+    @Excel(name = "主力租金")
+    private String mainPriceRent;
+    @Excel(name = "主力基价涨跌幅")
+    private String mainPricePst;
+    @Excel(name = "主力租金涨跌幅")
+    private String mainPriceRentPst;
+    @Excel(name = "主力基价类型")
+    private String mainPriceType;
+    @Excel(name = "主力租金类型")
+    private String mainPriceRentType;
+    @Excel(name = "更新日期")
+    private Date updateDate;
+    @Excel(name = "状态")
+    private Boolean status;
+    @Excel(name = "是否标准楼栋")
+    private Boolean isStandardBuilding;
+    @Excel(name = "更改价格说明")
+    private String adjustPriceComment;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Integer getYearMonth() {
+        return yearMonth;
+    }
+
+    public void setYearMonth(Integer yearMonth) {
+        this.yearMonth = yearMonth;
+    }
+
+    public String getBuildingId() {
+        return buildingId;
+    }
+
+    public void setBuildingId(String buildingId) {
+        this.buildingId = buildingId;
+    }
+
+    public String getCommunityId() {
+        return communityId;
+    }
+
+    public void setCommunityId(String communityId) {
+        this.communityId = communityId;
+    }
+
+    public String getMainPrice() {
+        return mainPrice;
+    }
+
+    public void setMainPrice(String mainPrice) {
+        this.mainPrice = mainPrice;
+    }
+
+    public String getMainPriceRent() {
+        return mainPriceRent;
+    }
+
+    public void setMainPriceRent(String mainPriceRent) {
+        this.mainPriceRent = mainPriceRent;
+    }
+
+    public String getMainPricePst() {
+        return mainPricePst;
+    }
+
+    public void setMainPricePst(String mainPricePst) {
+        this.mainPricePst = mainPricePst;
+    }
+
+    public String getMainPriceRentPst() {
+        return mainPriceRentPst;
+    }
+
+    public void setMainPriceRentPst(String mainPriceRentPst) {
+        this.mainPriceRentPst = mainPriceRentPst;
+    }
+
+    public String getMainPriceType() {
+        return mainPriceType;
+    }
+
+    public void setMainPriceType(String mainPriceType) {
+        this.mainPriceType = mainPriceType;
+    }
+
+    public String getMainPriceRentType() {
+        return mainPriceRentType;
+    }
+
+    public void setMainPriceRentType(String mainPriceRentType) {
+        this.mainPriceRentType = mainPriceRentType;
+    }
+
+    public Date getUpdateDate() {
+        return updateDate;
+    }
+
+    public void setUpdateDate(Date updateDate) {
+        this.updateDate = updateDate;
+    }
+
+    public Boolean getStatus() {
+        return status;
+    }
+
+    public void setStatus(Boolean status) {
+        this.status = status;
+    }
+
+    public Boolean getStandardBuilding() {
+        return isStandardBuilding;
+    }
+
+    public void setStandardBuilding(Boolean standardBuilding) {
+        isStandardBuilding = standardBuilding;
+    }
+
+    public String getAdjustPriceComment() {
+        return adjustPriceComment;
+    }
+
+    public void setAdjustPriceComment(String adjustPriceComment) {
+        this.adjustPriceComment = adjustPriceComment;
+    }
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ArtificialResidenceRentPriceMapper.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ArtificialResidenceRentPriceMapper.java
new file mode 100644
index 000000000..1c5b55cad
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ArtificialResidenceRentPriceMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.project.data.price.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+@DS("compute")
+public interface ArtificialResidenceRentPriceMapper {
+
+    List<ArtificialResidenceRentBasePrice> selectArtificialResidenceRentBasePriceList(ArtificialResidenceRentBasePrice artificialResidenceRentBasePrice);
+
+    Integer selectArtificialResidenceRentBasePriceListCount(ArtificialResidenceRentBasePrice artificialResidenceRentBasePrice);
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ComputeResidenceRentPriceMapper.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ComputeResidenceRentPriceMapper.java
new file mode 100644
index 000000000..b069187d8
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/ComputeResidenceRentPriceMapper.java
@@ -0,0 +1,43 @@
+package com.ruoyi.project.data.price.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+@DS("compute")
+public interface ComputeResidenceRentPriceMapper {
+
+    /**
+     * @param id
+     * @return
+     */
+    ComputeResidenceRentBasePrice selectComputeResidenceRentBasePriceById(String id);
+
+    /**
+     * 查询列表
+     */
+    List<ComputeResidenceRentBasePrice> selectComputeResidenceRentBasePriceList(ComputeResidenceRentBasePrice ComputeResidenceRentBasePrice);
+
+    /**
+     * 求和
+     *
+     * @param ComputeResidenceRentBasePrice
+     * @return
+     */
+    Integer selectComputeResidenceRentBasePriceListCount(ComputeResidenceRentBasePrice ComputeResidenceRentBasePrice);
+
+    /**
+     * 更新
+     *
+     * @param ComputeResidenceRentBasePrice
+     * @return
+     */
+    int updateComputeResidenceRentBasePrice(ComputeResidenceRentBasePrice ComputeResidenceRentBasePrice);
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/mapper/OfficeBasePriceUltimateMapper.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateOfficeBasePriceMapper.java
similarity index 54%
rename from ruoyi/src/main/java/com/ruoyi/project/data/price/compute/mapper/OfficeBasePriceUltimateMapper.java
rename to ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateOfficeBasePriceMapper.java
index 1d5eb5a68..beba4c1e7 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/mapper/OfficeBasePriceUltimateMapper.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateOfficeBasePriceMapper.java
@@ -1,9 +1,9 @@
-package com.ruoyi.project.data.price.compute.mapper;
+package com.ruoyi.project.data.price.mapper;
 
 import java.util.List;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.ruoyi.project.data.price.compute.domain.OfficeBasePriceUltimate;
+import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
 
 /**
  * 【请填写功能名称】Mapper接口
@@ -12,7 +12,7 @@ import com.ruoyi.project.data.price.compute.domain.OfficeBasePriceUltimate;
  * @date 2020-05-20
  */
 @DS("teemlink")
-public interface OfficeBasePriceUltimateMapper 
+public interface UltimateOfficeBasePriceMapper
 {
 
     /**
@@ -20,7 +20,7 @@ public interface OfficeBasePriceUltimateMapper
      * @param id
      * @return
      */
-    OfficeBasePriceUltimate selectOfficeBasePriceUltimateById(String id);
+    UltimateOfficeBasePrice selectOfficeBasePriceUltimateById(String id);
 
     /**
      * 查询【请填写功能名称】列表
@@ -28,19 +28,19 @@ public interface OfficeBasePriceUltimateMapper
      * @param officeBasePriceUltimate 【请填写功能名称】
      * @return 【请填写功能名称】集合
      */
-    List<OfficeBasePriceUltimate> selectOfficeBasePriceUltimateList(OfficeBasePriceUltimate officeBasePriceUltimate);
+    List<UltimateOfficeBasePrice> selectOfficeBasePriceUltimateList(UltimateOfficeBasePrice officeBasePriceUltimate);
 
     /**
      * 求和
      * @param officeBasePriceUltimate
      * @return
      */
-    Integer selectOfficeBasePriceUltimateListCount(OfficeBasePriceUltimate officeBasePriceUltimate);
+    Integer selectOfficeBasePriceUltimateListCount(UltimateOfficeBasePrice officeBasePriceUltimate);
 
     /**
      * 更新
      * @param officeBasePriceUltimate
      * @return
      */
-    int updateOfficeBasePriceUltimate(OfficeBasePriceUltimate officeBasePriceUltimate);
+    int updateOfficeBasePriceUltimate(UltimateOfficeBasePrice officeBasePriceUltimate);
 }
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateResidenceRentPriceMapper.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateResidenceRentPriceMapper.java
new file mode 100644
index 000000000..31b5ba778
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/mapper/UltimateResidenceRentPriceMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.project.data.price.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice;
+import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
+import com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+@DS("compute")
+public interface UltimateResidenceRentPriceMapper {
+
+
+    List<UltimateResidenceRentBasePrice> selectListByRoute(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice);
+
+    Integer selectCountByRoute(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice);
+
+    /**
+     * @param id
+     * @return
+     */
+    UltimateResidenceRentBasePrice selectByRoute(Integer id);
+
+    /**
+     * @param ultimateResidenceRentBasePrice
+     * @return
+     */
+    int updateByRoute(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice);
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/release/controller/HomeController.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/release/controller/HomeController.java
deleted file mode 100644
index 3511f8dc1..000000000
--- a/ruoyi/src/main/java/com/ruoyi/project/data/price/release/controller/HomeController.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.ruoyi.project.data.price.release.controller;
-
-public class HomeController {
-}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IArtificialResidenceRentPriceService.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IArtificialResidenceRentPriceService.java
new file mode 100644
index 000000000..04bc34c78
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IArtificialResidenceRentPriceService.java
@@ -0,0 +1,32 @@
+package com.ruoyi.project.data.price.service;
+
+import com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice;
+
+import java.util.List;
+
+/**
+ * 人工修正住宅租赁Service接口
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public interface IArtificialResidenceRentPriceService {
+
+    /**
+     * 查询人工修正住宅租赁列表
+     *
+     * @param officeBasePriceUltimate 人工修正住宅租赁
+     * @return 人工修正住宅租赁集合
+     */
+    List<ArtificialResidenceRentBasePrice> selectList(ArtificialResidenceRentBasePrice officeBasePriceUltimate);
+
+    /**
+     * @param officeBasePriceUltimate
+     * @return
+     */
+    int selectCount(ArtificialResidenceRentBasePrice officeBasePriceUltimate);
+
+
+}
+
+
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IComputeResidenceRentPriceService.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IComputeResidenceRentPriceService.java
new file mode 100644
index 000000000..0c56aaf3c
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IComputeResidenceRentPriceService.java
@@ -0,0 +1,52 @@
+package com.ruoyi.project.data.price.service;
+
+import com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice;
+import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public interface IComputeResidenceRentPriceService {
+
+    /**
+     * 查询【请填写功能名称】列表
+     *
+     * @param officeBasePriceUltimate 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    List<ComputeResidenceRentBasePrice> selectList(ComputeResidenceRentBasePrice officeBasePriceUltimate);
+
+    /**
+     * @param officeBasePriceUltimate
+     * @return
+     */
+    int selectCount(ComputeResidenceRentBasePrice officeBasePriceUltimate);
+
+    /**
+     * @param id
+     * @return
+     */
+    ComputeResidenceRentBasePrice selectById(String id);
+
+    /**
+     * @param officeBasePriceUltimate
+     * @return
+     */
+    int update(ComputeResidenceRentBasePrice officeBasePriceUltimate);
+
+    /**
+     * @param officeBasePriceUltimates
+     * @param operName
+     * @return
+     */
+    String batchImport(List<ComputeResidenceRentBasePrice> officeBasePriceUltimates, String operName);
+
+}
+
+
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateOfficeBasePriceService.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateOfficeBasePriceService.java
new file mode 100644
index 000000000..509f9db84
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateOfficeBasePriceService.java
@@ -0,0 +1,40 @@
+package com.ruoyi.project.data.price.service;
+
+import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public interface IUltimateOfficeBasePriceService {
+
+    /**
+     * 查询【请填写功能名称】列表
+     *
+     * @param officeBasePriceUltimate 【请填写功能名称】
+     * @return 【请填写功能名称】集合
+     */
+    List<UltimateOfficeBasePrice> selectOfficeBasePriceUltimateList(UltimateOfficeBasePrice officeBasePriceUltimate);
+
+    int selectOfficeBasePriceUltimateListCount(UltimateOfficeBasePrice officeBasePriceUltimate);
+
+
+    UltimateOfficeBasePrice selectOfficeBasePriceUltimateById(String id);
+
+    int updateOfficeBasePriceUltimate(UltimateOfficeBasePrice officeBasePriceUltimate);
+
+    /**
+     *
+     * @param officeBasePriceUltimates
+     * @param operName
+     * @return
+     */
+    String batchImport(List<UltimateOfficeBasePrice> officeBasePriceUltimates,String operName);
+
+}
+
+
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateResidenceRentBasePriceService.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateResidenceRentBasePriceService.java
new file mode 100644
index 000000000..e3ebfa7ac
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/IUltimateResidenceRentBasePriceService.java
@@ -0,0 +1,25 @@
+package com.ruoyi.project.data.price.service;
+
+import com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice;
+
+import java.util.List;
+
+/**
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+public interface IUltimateResidenceRentBasePriceService {
+
+    List<UltimateResidenceRentBasePrice> selectList(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice);
+
+    int selectCount(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice);
+
+    UltimateResidenceRentBasePrice selectById(Integer id);
+
+    int update(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice);
+
+    String batchImport(List<UltimateResidenceRentBasePrice> ultimateResidenceRentBasePrices, String operName);
+
+}
+
+
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ArtificialResidenceRentPriceServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ArtificialResidenceRentPriceServiceImpl.java
new file mode 100644
index 000000000..7d7bbac2b
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ArtificialResidenceRentPriceServiceImpl.java
@@ -0,0 +1,39 @@
+package com.ruoyi.project.data.price.service.impl;
+
+import com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice;
+import com.ruoyi.project.data.price.mapper.ArtificialResidenceRentPriceMapper;
+import com.ruoyi.project.data.price.service.IArtificialResidenceRentPriceService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+@Service
+public class ArtificialResidenceRentPriceServiceImpl implements IArtificialResidenceRentPriceService {
+
+    private static final Logger log = LoggerFactory.getLogger(ArtificialResidenceRentPriceServiceImpl.class);
+
+    @Autowired
+    private ArtificialResidenceRentPriceMapper artificialResidenceRentPriceMapper;
+
+    @Override
+    public List<ArtificialResidenceRentBasePrice> selectList(ArtificialResidenceRentBasePrice
+    ArtificialResidenceRentPrice) {
+        return artificialResidenceRentPriceMapper.selectArtificialResidenceRentBasePriceList
+        (ArtificialResidenceRentPrice);
+    }
+
+    @Override
+    public int selectCount(ArtificialResidenceRentBasePrice ArtificialResidenceRentPrice) {
+        return artificialResidenceRentPriceMapper.selectArtificialResidenceRentBasePriceListCount
+        (ArtificialResidenceRentPrice);
+    }
+}
\ No newline at end of file
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ComputeResidenceRentPriceServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ComputeResidenceRentPriceServiceImpl.java
new file mode 100644
index 000000000..857d0f1d4
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/ComputeResidenceRentPriceServiceImpl.java
@@ -0,0 +1,51 @@
+package com.ruoyi.project.data.price.service.impl;
+
+import com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice;
+import com.ruoyi.project.data.price.mapper.ComputeResidenceRentPriceMapper;
+import com.ruoyi.project.data.price.service.IComputeResidenceRentPriceService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+@Service
+public class ComputeResidenceRentPriceServiceImpl implements IComputeResidenceRentPriceService {
+
+    private static final Logger log = LoggerFactory.getLogger(ComputeResidenceRentPriceServiceImpl.class);
+
+    @Autowired
+    private ComputeResidenceRentPriceMapper computeResidenceRentPriceMapper;
+
+    @Override
+    public List<ComputeResidenceRentBasePrice> selectList(ComputeResidenceRentBasePrice computeResidenceRentBasePrice) {
+        return computeResidenceRentPriceMapper.selectComputeResidenceRentBasePriceList(computeResidenceRentBasePrice);
+    }
+
+    @Override
+    public int selectCount(ComputeResidenceRentBasePrice computeResidenceRentBasePrice) {
+        return computeResidenceRentPriceMapper.selectComputeResidenceRentBasePriceListCount(computeResidenceRentBasePrice);
+    }
+
+    @Override
+    public ComputeResidenceRentBasePrice selectById(String id) {
+        return computeResidenceRentPriceMapper.selectComputeResidenceRentBasePriceById(id);
+    }
+
+    @Override
+    public int update(ComputeResidenceRentBasePrice officeBasePriceUltimate) {
+        return 0;
+    }
+
+    @Override
+    public String batchImport(List<ComputeResidenceRentBasePrice> officeBasePriceUltimates, String operName) {
+        return null;
+    }
+}
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/impl/OfficeBasePriceUltimateServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateOfficeBasePriceServiceImpl.java
similarity index 65%
rename from ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/impl/OfficeBasePriceUltimateServiceImpl.java
rename to ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateOfficeBasePriceServiceImpl.java
index 97e25a946..11210cec8 100644
--- a/ruoyi/src/main/java/com/ruoyi/project/data/price/compute/service/impl/OfficeBasePriceUltimateServiceImpl.java
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateOfficeBasePriceServiceImpl.java
@@ -1,12 +1,12 @@
-package com.ruoyi.project.data.price.compute.service.impl;
+package com.ruoyi.project.data.price.service.impl;
 
 import java.util.List;
 
 import com.ruoyi.common.exception.CustomException;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.project.data.price.compute.domain.OfficeBasePriceUltimate;
-import com.ruoyi.project.data.price.compute.mapper.OfficeBasePriceUltimateMapper;
-import com.ruoyi.project.data.price.compute.service.IOfficeBasePriceUltimateService;
+import com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice;
+import com.ruoyi.project.data.price.mapper.UltimateOfficeBasePriceMapper;
+import com.ruoyi.project.data.price.service.IUltimateOfficeBasePriceService;
 import com.ruoyi.project.system.service.impl.SysUserServiceImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,13 +20,12 @@ import org.springframework.stereotype.Service;
  * @date 2020-05-20
  */
 @Service
-
-public class OfficeBasePriceUltimateServiceImpl implements IOfficeBasePriceUltimateService {
+public class UltimateOfficeBasePriceServiceImpl implements IUltimateOfficeBasePriceService {
 
     private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
 
     @Autowired
-    private OfficeBasePriceUltimateMapper officeBasePriceUltimateMapper;
+    private UltimateOfficeBasePriceMapper officeBasePriceUltimateMapper;
 
     /**
      * 查询【请填写功能名称】列表
@@ -35,68 +34,58 @@ public class OfficeBasePriceUltimateServiceImpl implements IOfficeBasePriceUltim
      * @return 【请填写功能名称】
      */
     @Override
-    public List<OfficeBasePriceUltimate> selectOfficeBasePriceUltimateList(OfficeBasePriceUltimate officeBasePriceUltimate) {
+    public List<UltimateOfficeBasePrice> selectOfficeBasePriceUltimateList(UltimateOfficeBasePrice officeBasePriceUltimate) {
         return officeBasePriceUltimateMapper.selectOfficeBasePriceUltimateList(officeBasePriceUltimate);
     }
 
     @Override
-    public int selectOfficeBasePriceUltimateListCount(OfficeBasePriceUltimate officeBasePriceUltimate) {
+    public int selectOfficeBasePriceUltimateListCount(UltimateOfficeBasePrice officeBasePriceUltimate) {
         return officeBasePriceUltimateMapper.selectOfficeBasePriceUltimateListCount(officeBasePriceUltimate);
     }
 
     @Override
-    public OfficeBasePriceUltimate selectOfficeBasePriceUltimateById(String id) {
+    public UltimateOfficeBasePrice selectOfficeBasePriceUltimateById(String id) {
         return officeBasePriceUltimateMapper.selectOfficeBasePriceUltimateById(id);
     }
 
     @Override
-    public int updateOfficeBasePriceUltimate(OfficeBasePriceUltimate officeBasePriceUltimate) {
+    public int updateOfficeBasePriceUltimate(UltimateOfficeBasePrice officeBasePriceUltimate) {
         return officeBasePriceUltimateMapper.updateOfficeBasePriceUltimate(officeBasePriceUltimate);
     }
 
     @Override
-    public String batchImport(List<OfficeBasePriceUltimate> officeBasePriceUltimates, String operName) {
-        if (StringUtils.isNull(officeBasePriceUltimates) || officeBasePriceUltimates.size() == 0)
-        {
+    public String batchImport(List<UltimateOfficeBasePrice> officeBasePriceUltimates, String operName) {
+        if (StringUtils.isNull(officeBasePriceUltimates) || officeBasePriceUltimates.size() == 0) {
             throw new CustomException("导入办公数据不能为空!");
         }
         int successNum = 0;
         int failureNum = 0;
         StringBuilder successMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
-        for (OfficeBasePriceUltimate officeBasePriceUltimate : officeBasePriceUltimates)
-        {
-            try
-            {
+        for (UltimateOfficeBasePrice officeBasePriceUltimate : officeBasePriceUltimates) {
+            try {
                 // 验证是否存在这个用户
-                OfficeBasePriceUltimate officeBasePriceUltimateInDb = officeBasePriceUltimateMapper.selectOfficeBasePriceUltimateById(officeBasePriceUltimate.getId());
-                if (StringUtils.isNotNull(officeBasePriceUltimateInDb))
-                {
+                UltimateOfficeBasePrice officeBasePriceUltimateInDb =
+                        officeBasePriceUltimateMapper.selectOfficeBasePriceUltimateById(officeBasePriceUltimate.getId());
+                if (StringUtils.isNotNull(officeBasePriceUltimateInDb)) {
                     this.updateOfficeBasePriceUltimate(officeBasePriceUltimate);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、ID= " + officeBasePriceUltimate.getId() + " 更新成功");
-                }
-                else
-                {
+                } else {
                     failureNum++;
                     failureMsg.append("<br/>" + failureNum + "、ID= " + officeBasePriceUltimate.getId() + " 已存在");
                 }
-            }
-            catch (Exception e)
-            {
+            } catch (Exception e) {
                 failureNum++;
                 String msg = "<br/>" + failureNum + "、ID= " + officeBasePriceUltimate.getId() + " 导入失败:";
                 failureMsg.append(msg + e.getMessage());
                 log.error(msg, e);
             }
         }
-        if (failureNum > 0)
-        {
+        if (failureNum > 0) {
             failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
             throw new CustomException(failureMsg.toString());
-        }
-        else
-        {
+        } else {
             successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
         }
         return successMsg.toString();
diff --git a/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateResidenceRentBasePriceServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateResidenceRentBasePriceServiceImpl.java
new file mode 100644
index 000000000..5036bf0ec
--- /dev/null
+++ b/ruoyi/src/main/java/com/ruoyi/project/data/price/service/impl/UltimateResidenceRentBasePriceServiceImpl.java
@@ -0,0 +1,52 @@
+package com.ruoyi.project.data.price.service.impl;
+
+import com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice;
+import com.ruoyi.project.data.price.mapper.UltimateResidenceRentPriceMapper;
+import com.ruoyi.project.data.price.service.IUltimateResidenceRentBasePriceService;
+import com.ruoyi.project.system.service.impl.SysUserServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 核准住宅租赁基价 Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2020-05-20
+ */
+@Service
+public class UltimateResidenceRentBasePriceServiceImpl implements IUltimateResidenceRentBasePriceService {
+
+    private static final Logger log = LoggerFactory.getLogger(UltimateResidenceRentBasePriceServiceImpl.class);
+
+    @Autowired
+    private UltimateResidenceRentPriceMapper ultimateResidenceRentPriceMapper;
+
+    @Override
+    public List<UltimateResidenceRentBasePrice> selectList(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice) {
+        return ultimateResidenceRentPriceMapper.selectListByRoute(ultimateResidenceRentBasePrice);
+    }
+
+    @Override
+    public int selectCount(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice) {
+        return ultimateResidenceRentPriceMapper.selectCountByRoute(ultimateResidenceRentBasePrice);
+    }
+
+    @Override
+    public UltimateResidenceRentBasePrice selectById(Integer id) {
+        return ultimateResidenceRentPriceMapper.selectByRoute(id);
+    }
+
+    @Override
+    public int update(UltimateResidenceRentBasePrice ultimateResidenceRentBasePrice) {
+        return ultimateResidenceRentPriceMapper.updateByRoute(ultimateResidenceRentBasePrice);
+    }
+
+    @Override
+    public String batchImport(List<UltimateResidenceRentBasePrice> ultimateResidenceRentBasePrices, String operName) {
+        return null;
+    }
+}
diff --git a/ruoyi/src/main/resources/application-druid.yml b/ruoyi/src/main/resources/application-druid.yml
index 9d44d990e..1e36704bb 100644
--- a/ruoyi/src/main/resources/application-druid.yml
+++ b/ruoyi/src/main/resources/application-druid.yml
@@ -48,7 +48,7 @@ spring:
                 # 主库数据源
                 master:
                     driver-class-name: com.mysql.jdbc.Driver
-                    url: jdbc:mysql://localhost:6060/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    url: jdbc:mysql://172.16.30.243:6060/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                     username: root
                     password: LOLm2dI2UQF#RxOf
                 # 从库数据源
@@ -62,4 +62,9 @@ spring:
                     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
                     url: jdbc:sqlserver://172.16.30.233:1433;DatabaseName=obpm_LianCheng_Data
                     username: sa
+                    password: Lcdatacenter_888
+                compute:
+                    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+                    url: jdbc:sqlserver://172.16.30.233:1433;DatabaseName=uv_compute
+                    username: sa
                     password: Lcdatacenter_888
\ No newline at end of file
diff --git a/ruoyi/src/main/resources/application.yml b/ruoyi/src/main/resources/application.yml
index 89ea4a60a..13346695f 100644
--- a/ruoyi/src/main/resources/application.yml
+++ b/ruoyi/src/main/resources/application.yml
@@ -1,128 +1,128 @@
-# 项目相关配置
-ruoyi:
-  # 名称
-  name: RuoYi
-  # 版本
-  version: 2.2.0
-  # 版权年份
-  copyrightYear: 2019
-  # 实例演示开关
-  demoEnabled: true
-  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: D:/ruoyi/uploadPath
-  # 获取ip地址开关
-  addressEnabled: false
-
-# 开发环境配置
-server:
-  # 服务器的HTTP端口,默认为8080
-  port: 8080
-  servlet:
-    # 应用的访问路径
-    context-path: /
-  tomcat:
-    # tomcat的URI编码
-    uri-encoding: UTF-8
-    # tomcat最大线程数,默认为200
-    max-threads: 800
-    # Tomcat启动初始化的线程数,默认值25
-    min-spare-threads: 30
-
-# 日志配置
-logging:
-  level:
-    com.ruoyi: debug
-    org.springframework: warn
-
-# Spring配置
-spring:
-  # 资源信息
-  messages:
-    # 国际化资源文件路径
-    basename: i18n/messages
-  profiles: 
-    active: druid
-  # 文件上传
-  servlet:
-     multipart:
-       # 单个文件大小
-       max-file-size:  10MB
-       # 设置总上传的文件大小
-       max-request-size:  20MB
-  # 服务模块
-  devtools:
-    restart:
-      # 热部署开关
-      enabled: true
-  # redis 配置
-  redis:
-    # 地址
-    host: localhost
-    # 端口,默认为6379
-    port: 6379
-    # 密码
-    password: 
-    # 连接超时时间
-    timeout: 10s
-    lettuce:
-      pool:
-        # 连接池中的最小空闲连接
-        min-idle: 0
-        # 连接池中的最大空闲连接
-        max-idle: 8
-        # 连接池的最大数据库连接数
-        max-active: 8
-        # #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: -1ms
-
-# token配置
-token:
-    # 令牌自定义标识
-    header: Authorization
-    # 令牌秘钥
-    secret: abcdefghijklmnopqrstuvwxyz
-    # 令牌有效期(默认30分钟)
-    expireTime: 30
-  
-# MyBatis配置
-mybatis:
-    # 搜索指定包别名
-    typeAliasesPackage: com.ruoyi.project.**.domain
-    # 配置mapper的扫描,找到所有的mapper.xml映射文件
-    mapperLocations: classpath*:mybatis/**/*Mapper.xml
-    # 加载全局的配置文件
-    configLocation: classpath:mybatis/mybatis-config.xml
-
-# PageHelper分页插件
-pagehelper: 
-  helperDialect: mysql
-  reasonable: true
-  supportMethodsArguments: true
-  params: count=countSql 
-
-# Swagger配置
-swagger:
-  # 是否开启swagger
-  enabled: true
-  # 请求前缀
-  pathMapping: /dev-api
-
-# 防止XSS攻击
-xss: 
-  # 过滤开关
-  enabled: true
-  # 排除链接(多个用逗号分隔)
-  excludes: /system/notice/*
-  # 匹配链接
-  urlPatterns: /system/*,/monitor/*,/tool/*
-  
-# 代码生成
-gen: 
-  # 作者
-  author: ruoyi
-  # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
-  packageName: com.ruoyi.project.system
-  # 自动去除表前缀,默认是true
-  autoRemovePre: false
-  # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
+# 项目相关配置
+ruoyi:
+  # 名称
+  name: RuoYi
+  # 版本
+  version: 2.2.0
+  # 版权年份
+  copyrightYear: 2019
+  # 实例演示开关
+  demoEnabled: true
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: D:/ruoyi/uploadPath
+  # 获取ip地址开关
+  addressEnabled: false
+
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8080
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # tomcat最大线程数,默认为200
+    max-threads: 800
+    # Tomcat启动初始化的线程数,默认值25
+    min-spare-threads: 30
+
+# 日志配置
+logging:
+  level:
+    com.ruoyi: debug
+    org.springframework: warn
+
+# Spring配置
+spring:
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  profiles: 
+    active: druid
+  # 文件上传
+  servlet:
+     multipart:
+       # 单个文件大小
+       max-file-size:  10MB
+       # 设置总上传的文件大小
+       max-request-size:  20MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: true
+  # redis 配置
+  redis:
+    # 地址
+    host: 172.16.30.243
+    # 端口,默认为6379
+    port: 6030
+    # 密码
+    password: 
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+
+# token配置
+token:
+    # 令牌自定义标识
+    header: Authorization
+    # 令牌秘钥
+    secret: abcdefghijklmnopqrstuvwxyz
+    # 令牌有效期(默认30分钟)
+    expireTime: 30
+  
+# MyBatis配置
+mybatis:
+    # 搜索指定包别名
+    typeAliasesPackage: com.ruoyi.project.**.domain
+    # 配置mapper的扫描,找到所有的mapper.xml映射文件
+    mapperLocations: classpath*:mybatis/**/*Mapper.xml
+    # 加载全局的配置文件
+    configLocation: classpath:mybatis/mybatis-config.xml
+
+# PageHelper分页插件
+pagehelper: 
+  helperDialect: mysql
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql 
+
+# Swagger配置
+swagger:
+  # 是否开启swagger
+  enabled: true
+  # 请求前缀
+  pathMapping: /dev-api
+
+# 防止XSS攻击
+xss: 
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice/*
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*
+  
+# 代码生成
+gen: 
+  # 作者
+  author: ruoyi
+  # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
+  packageName: com.ruoyi.project.system
+  # 自动去除表前缀,默认是true
+  autoRemovePre: false
+  # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
   tablePrefix: sys_
\ No newline at end of file
diff --git a/ruoyi/src/main/resources/mybatis/data/ArtificialResidenceRentPriceMapper.xml b/ruoyi/src/main/resources/mybatis/data/ArtificialResidenceRentPriceMapper.xml
new file mode 100644
index 000000000..b178b8a19
--- /dev/null
+++ b/ruoyi/src/main/resources/mybatis/data/ArtificialResidenceRentPriceMapper.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.data.price.mapper.ArtificialResidenceRentPriceMapper">
+
+    <resultMap type="com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice"
+               id="MainMappingResult">
+        <result property="id" column="id"/>
+        <result property="communityId" column="ProjectID"/>
+        <result property="mainRentCoefficient" column="MainCoff_Rent"/>
+        <result property="mainRentPrice" column="MainRentPrice"/>
+        <result property="rentPrice" column="RentPrice"/>
+        <result property="rentPrice_1" column="rentPrice_1"/>
+        <result property="voppat" column="voppat"/>
+        <result property="voppa" column="voppa"/>
+    </resultMap>
+
+    <select id="selectArtificialResidenceRentBasePriceListCount"
+            parameterType="com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice" resultType="int">
+        select count(1) from DWA_PROJECTBASEPRICE_RENT_IMDT_${yearMonth}
+        <where>
+            <if test="communityId != null">
+                AND ProjectID = #{communityId}
+            </if>
+        </where>
+    </select>
+    <!-- 分页   -->
+    <select id="selectArtificialResidenceRentBasePriceList"
+            parameterType="com.ruoyi.project.data.price.domain.ArtificialResidenceRentBasePrice"
+            resultMap="MainMappingResult">
+        <![CDATA[ SELECT ID,ProjectID,MainCoff_Rent,RentPrice,MainRentPrice,RentPrice_1,VOPPAT,VOPPA ]]>
+            FROM dbo.DWA_PROJECTBASEPRICE_RENT_MANU_${yearMonth}
+            order by ProjectID ASC OFFSET #{pageIndex} rows fetch next #{pageSize} rows only
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi/src/main/resources/mybatis/data/ComputeResidenceRentPriceMapper.xml b/ruoyi/src/main/resources/mybatis/data/ComputeResidenceRentPriceMapper.xml
new file mode 100644
index 000000000..86968c015
--- /dev/null
+++ b/ruoyi/src/main/resources/mybatis/data/ComputeResidenceRentPriceMapper.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.data.price.mapper.ComputeResidenceRentPriceMapper">
+
+    <resultMap type="com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice"
+               id="MainMappingResult">
+        <result property="id" column="id"/>
+        <result property="communityId" column="ProjectID"/>
+        <result property="communityName" column="ProjectName"/>
+        <result property="communityAddress" column="ProjectAddr"/>
+        <result property="county" column="county"/>
+        <result property="block" column="block"/>
+        <result property="loop" column="loopLine"/>
+        <result property="isIndxGen" column="isIndxGen"/>
+        <result property="isPstCalc" column="isPstCalc"/>
+        <result property="statusRun" column="statusRun"/>
+        <result property="propertyType" column="propertyType"/>
+        <result property="projectType" column="projectType"/>
+        <result property="projectTypeDtl" column="projectTypeDtl"/>
+        <result property="projectLevel" column="projectLevel"/>
+        <result property="propertyDevPeriod" column="propertyDevPeriod"/>
+        <result property="bindClassID" column="bindClassID"/>
+        <result property="mainCoefficientRent" column="mainCoffRent"/>
+        <result property="rentPriceDft" column="rentPriceDft"/>
+        <result property="mainRentPriceDft" column="mainRentPriceDft"/>
+        <result property="rentPrice_1" column="rentPrice_1"/>
+        <result property="priceDealMean_1" column="priceDealMean_1"/>
+        <result property="priceDealMax_1" column="priceDealMax_1"/>
+        <result property="sumDeal_1" column="sumDeal_1"/>
+        <result property="priceDeal_1_ToAI_Pst" column="priceDeal_1_ToAI_Pst"/>
+        <result property="priceDealMean" column="priceDealMean"/>
+        <result property="priceDealMax" column="priceDealMax"/>
+        <result property="sumDeal" column="sumDeal"/>
+        <result property="priceDeal_ToAI_Pst" column="priceDeal_ToAI_Pst"/>
+        <result property="priceDeal_ToLst_Pst" column="priceDeal_ToLst_Pst"/>
+        <result property="priceCaseOff" column="priceCaseOff"/>
+        <result property="priceCaseOff_ToLst_Pst" column="priceCaseOff_ToLst_Pst"/>
+        <result property="priceListedMin" column="priceListedMin"/>
+        <result property="priceLstMn_ToAI_Pst" column="priceLstMn_ToAI_Pst"/>
+        <result property="priceCase1_ToAI_Pst" column="priceCase1_ToAI_Pst"/>
+        <result property="priceCase2_ToAI_Pst" column="priceCase2_ToAI_Pst"/>
+        <result property="priceCase1_ToLst_Pst" column="priceCase1_ToLst_Pst"/>
+        <result property="priceCase2_ToLst_Pst" column="priceCase2_ToLst_Pst"/>
+        <result property="priceCase1" column="priceCase1"/>
+        <result property="priceCase1AdjPst" column="priceCase1AdjPst"/>
+        <result property="sumCase1" column="sumCase1"/>
+        <result property="priceCase2" column="priceCase2"/>
+        <result property="priceCase2AdjPst" column="priceCase2AdjPst"/>
+        <result property="sumCase2" column="sumCase2"/>
+        <result property="voppbt" column="voppbt"/>
+        <result property="voppb" column="voppb"/>
+        <result property="bindProjID" column="bindProjID"/>
+        <result property="bind_Proj_Pst" column="bind_Proj_Pst"/>
+        <result property="bind_Block_Class" column="bind_Block_Class"/>
+        <result property="bind_Block_Class_Pst" column="bind_Block_Class_Pst"/>
+        <result property="bind_Block_Plevel" column="bind_Block_Plevel"/>
+        <result property="bind_Block_Plevel_Pst" column="bind_Block_Plevel_Pst"/>
+        <result property="bind_Block_PType" column="bind_Block_PType"/>
+        <result property="bind_Block_Ptype_Pst" column="bind_Block_Ptype_Pst"/>
+        <result property="bind_County_PType" column="bind_County_PType"/>
+        <result property="bind_County_Ptype_Pst" column="bind_County_Ptype_Pst"/>
+        <result property="bind_MixProject_PType" column="bind_MixProject_PType"/>
+        <result property="bind_MixProject_Pst" column="bind_MixProject_Pst"/>
+        <result property="voppat" column="voppat"/>
+        <result property="voppa" column="voppa"/>
+    </resultMap>
+
+    <sql id="selectOfficeBasePriceUltimateVo">
+        SELECT ID
+          ,ProjectID
+          ,ProjectName
+          ,ProjectAddr
+          ,County
+          ,Block
+          ,Loop
+          ,IsIndxGen
+          ,IsPstCalc
+          ,StatusRun
+          ,PropertyType
+          ,ProjectType
+          ,ProjectTypeDtl
+          ,ProjectLevel
+          ,PropertyDevPeriod
+          ,BindClassID
+          ,MainCoff_Rent
+          ,RentPriceDft
+          ,MainRentPriceDft
+          ,RentPrice_1
+          ,PriceDealMean_1
+          ,PriceDealMax_1
+          ,SumDeal_1
+          ,PriceDeal_1_ToAI_Pst
+          ,PriceDealMean
+          ,PriceDealMax
+          ,SumDeal
+          ,PriceDeal_ToAI_Pst
+          ,PriceDeal_ToLst_Pst
+          ,PriceCaseOff
+          ,PriceCaseOff_ToLst_Pst
+          ,PriceListedMin
+          ,PriceLstMn_ToAI_Pst
+          ,PriceCase1_ToAI_Pst
+          ,PriceCase2_ToAI_Pst
+          ,PriceCase1_ToLst_Pst
+          ,PriceCase2_ToLst_Pst
+          ,PriceCase1
+          ,PriceCase1AdjPst
+          ,SumCase1
+          ,PriceCase2
+          ,PriceCase2AdjPst
+          ,SumCase2
+          ,VOPPBT
+          ,VOPPB
+          ,BindProjID
+          ,Bind_Proj_Pst
+          ,Bind_Block_Class
+          ,Bind_Block_Class_Pst
+          ,Bind_Block_Plevel
+          ,Bind_Block_Plevel_Pst
+          ,Bind_Block_PType
+          ,Bind_Block_Ptype_Pst
+          ,Bind_County_PType
+          ,Bind_County_Ptype_Pst
+          ,Bind_MixProject_PType
+          ,Bind_MixProject_Pst
+          ,VOPPAT
+          ,VOPPA
+        FROM dbo.DWA_PROJECTBASEPRICE_RENT_IMDT_${yearMonth}
+    </sql>
+
+    <select id="selectComputeResidenceRentBasePriceListCount"
+            parameterType="com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice" resultType="int">
+        select count(1) from DWA_PROJECTBASEPRICE_RENT_IMDT_${yearMonth}
+        <where>
+            <if test="communityId != null">
+                AND ProjectID = #{communityId}
+            </if>
+        </where>
+    </select>
+    <!-- 分页   -->
+    <select id="selectComputeResidenceRentBasePriceList"
+            parameterType="com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice"
+            resultMap="MainMappingResult">
+        <![CDATA[ SELECT ID,ProjectID,ProjectName,ProjectAddr,County,Block,[Loop] as loopLine,IsIndxGen,IsPstCalc,StatusRun,PropertyType,ProjectType,ProjectTypeDtl,ProjectLevel,PropertyDevPeriod,BindClassID,MainCoff_Rent,RentPriceDft,MainRentPriceDft,RentPrice_1,PriceDealMean_1,PriceDealMax_1,SumDeal_1,PriceDeal_1_ToAI_Pst,PriceDealMean,PriceDealMax,SumDeal,PriceDeal_ToAI_Pst,PriceDeal_ToLst_Pst,PriceCaseOff,PriceCaseOff_ToLst_Pst,PriceListedMin,PriceLstMn_ToAI_Pst,PriceCase1_ToAI_Pst,PriceCase2_ToAI_Pst,PriceCase1_ToLst_Pst,PriceCase2_ToLst_Pst,PriceCase1,PriceCase1AdjPst,SumCase1,PriceCase2,PriceCase2AdjPst,SumCase2,VOPPBT,VOPPB,BindProjID,Bind_Proj_Pst,Bind_Block_Class,Bind_Block_Class_Pst,Bind_Block_Plevel,Bind_Block_Plevel_Pst,Bind_Block_PType,Bind_Block_Ptype_Pst,Bind_County_PType,Bind_County_Ptype_Pst,Bind_MixProject_PType,Bind_MixProject_Pst,VOPPAT,VOPPA ]]>
+                FROM dbo.DWA_PROJECTBASEPRICE_RENT_IMDT_${yearMonth}
+                order by ProjectID ASC OFFSET #{pageIndex} rows fetch next #{pageSize} rows only
+    </select>
+
+    <!--    -->
+    <select id="selectComputeResidenceRentBasePriceById" parameterType="String" resultMap="MainMappingResult">
+        <include refid="selectOfficeBasePriceUltimateVo"/>
+        where id = #{id}
+    </select>
+
+
+    <!--    <update id="updateComputeResidenceRentBasePrice" parameterType="com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice">-->
+    <!--        update TLK_计价办公核准基价 set ITEM_YEARMONTH=ITEM_YEARMONTH-->
+    <!--        <trim prefix="SET" suffixOverrides=",">-->
+    <!--        </trim>-->
+    <!--        where id = #{id}-->
+    <!--    </update>-->
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi/src/main/resources/mybatis/data/OfficeBasePriceUltimateMapper.xml b/ruoyi/src/main/resources/mybatis/data/UltimateOfficeBasePriceMapper.xml
similarity index 80%
rename from ruoyi/src/main/resources/mybatis/data/OfficeBasePriceUltimateMapper.xml
rename to ruoyi/src/main/resources/mybatis/data/UltimateOfficeBasePriceMapper.xml
index fb34bf0de..674faf03d 100644
--- a/ruoyi/src/main/resources/mybatis/data/OfficeBasePriceUltimateMapper.xml
+++ b/ruoyi/src/main/resources/mybatis/data/UltimateOfficeBasePriceMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.data.price.compute.mapper.OfficeBasePriceUltimateMapper">
+<mapper namespace="com.ruoyi.project.data.price.mapper.UltimateOfficeBasePriceMapper">
 
-    <resultMap type="com.ruoyi.project.data.price.compute.domain.OfficeBasePriceUltimate"
+    <resultMap type="com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice"
                id="OfficeBasePriceUltimateResult">
         <result property="id" column="id"/>
         <result property="yearMonth" column="ITEM_YEARMONTH"/>
@@ -26,7 +26,7 @@
         select ITEM_YEARMONTH,ITEM_BUILDINGID,ITEM_UNIFIEDID,ITEM_PROJECTID,ITEM_BUILDINGID_P,ITEM_PROJECTID_P,ITEM_MAINPRICE,ITEM_MAINPRICERENT,ITEM_MAINPRICEPST,ITEM_MAINPRICERENTPST,ITEM_MAINPRICETYPE,ITEM_MAINPRICERENTTYPE,ITEM_MODIFYDATE,ITEM_STATUS,ITEM_BUILDINGSTD,ITEM_ADJEVD,ID from TLK_计价办公核准基价
     </sql>
 
-    <select id="selectOfficeBasePriceUltimateListCount" parameterType="OfficeBasePriceUltimate" resultType="int">
+    <select id="selectOfficeBasePriceUltimateListCount" parameterType="com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice" resultType="int">
         select count(1) from TLK_计价办公核准基价
         <where>
             <if test="yearMonth != null">
@@ -44,7 +44,7 @@
         </where>
     </select>
 
-    <select id="selectOfficeBasePriceUltimateList" parameterType="OfficeBasePriceUltimate"
+    <select id="selectOfficeBasePriceUltimateList" parameterType="com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice"
             resultMap="OfficeBasePriceUltimateResult">
         <include refid="selectOfficeBasePriceUltimateVo"/>
         <where>
@@ -75,22 +75,11 @@
     <!--        </trim>-->
     <!--    </insert>-->
 
-    <update id="updateOfficeBasePriceUltimate" parameterType="OfficeBasePriceUltimate">
+    <update id="updateOfficeBasePriceUltimate" parameterType="com.ruoyi.project.data.price.domain.UltimateOfficeBasePrice">
         update TLK_计价办公核准基价 set ITEM_YEARMONTH=ITEM_YEARMONTH
         <trim prefix="SET" suffixOverrides=",">
         </trim>
         where id = #{id}
     </update>
 
-    <!--    <delete id="deleteOfficeBasePriceUltimateById" parameterType="Integer">-->
-    <!--        delete from office_base_price_ultimate where id = #{id}-->
-    <!--    </delete>-->
-
-    <!--    <delete id="deleteOfficeBasePriceUltimateByIds" parameterType="String">-->
-    <!--        delete from office_base_price_ultimate where id in-->
-    <!--        <foreach item="id" collection="array" open="(" separator="," close=")">-->
-    <!--            #{id}-->
-    <!--        </foreach>-->
-    <!--    </delete>-->
-
 </mapper>
\ No newline at end of file
diff --git a/ruoyi/src/main/resources/mybatis/data/UltimateResidenceRentBasePriceMapper.xml b/ruoyi/src/main/resources/mybatis/data/UltimateResidenceRentBasePriceMapper.xml
new file mode 100644
index 000000000..bf5c5ae1e
--- /dev/null
+++ b/ruoyi/src/main/resources/mybatis/data/UltimateResidenceRentBasePriceMapper.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.data.price.mapper.UltimateResidenceRentPriceMapper">
+
+    <resultMap type="com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice"
+               id="MappingResult">
+        <result property="id" column="id"/>
+        <result property="communityId" column="projectID"/>
+        <result property="priceType" column="priceType"/>
+        <result property="basePrice_1" column="basePrice_1"/>
+        <result property="rentPrice" column="rentPrice"/>
+        <result property="sumCase1" column="sumCase1"/>
+        <result property="voppa" column="voppa"/>
+        <result property="voppat" column="voppat"/>
+        <result property="gf_1Room" column="gf_1Room"/>
+        <result property="gf_2Room" column="gf_2Room"/>
+        <result property="gy_2Room" column="gy_2Room"/>
+        <result property="gy_3Room" column="gy_3Room"/>
+        <result property="one_Room" column="one_Room"/>
+        <result property="two_Room" column="two_Room"/>
+        <result property="three_Room" column="three_Room"/>
+        <result property="entireRentRatio" column="entireRentRatio"/>
+        <result property="entireRentNum" column="entireRentNum"/>
+        <result property="shareRentRatio" column="shareRentRatio"/>
+        <result property="shareRentNum" column="shareRentNum"/>
+        <result property="saleRentRatio" column="saleRentRatio"/>
+        <result property="status" column="status"/>
+        <result property="adjEvd" column="adjEvd"/>
+        <result property="modifyDate" column="modifyDate"/>
+    </resultMap>
+
+    <sql id="selectAllColumn">
+        select
+        ID,ProjectID,PriceType,BasePrice_1,RentPrice,SumCase1,VOPPAT,VOPPA,GF_1Room,GF_2Room,GY_2Room,GY_3Room,One_Room,Two_Room,Three_Room,EntireRentRatio,EntireRentNum,ShareRentRatio,ShareRentNum,SaleRentRatio,ModifyDate,Status,AdjEvd
+        from ODS_PROJECT_RENT_PRICE_INFO_${yearMonth}
+    </sql>
+
+    <select id="selectCountByRoute" parameterType="com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice" resultType="int">
+        select count(1) from ODS_PROJECT_RENT_PRICE_INFO_${yearMonth}
+        <where>
+            <if test="communityId != null">
+                AND ProjectID = #{communityId}
+            </if>
+            <if test="status != null">
+                AND Status = #{status}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectListByRoute" parameterType="com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice"
+            resultMap="MappingResult">
+        <include refid="selectAllColumn"/>
+        <where>
+            <if test="communityId != null">
+                AND ProjectID = #{communityId}
+            </if>
+            <if test="status != null">
+                AND Status = #{status}
+            </if>
+        </where>
+        order by ProjectID ASC, status DESC OFFSET #{pageIndex} rows fetch next #{pageSize} rows only;
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi/src/test/java/com/uvaluation/compute/MapperXmlGeneratorTests.java b/ruoyi/src/test/java/com/uvaluation/compute/MapperXmlGeneratorTests.java
new file mode 100644
index 000000000..67f6cb663
--- /dev/null
+++ b/ruoyi/src/test/java/com/uvaluation/compute/MapperXmlGeneratorTests.java
@@ -0,0 +1,32 @@
+package com.uvaluation.compute;
+
+import com.ruoyi.project.data.price.domain.ComputeResidenceRentBasePrice;
+import com.ruoyi.project.data.price.domain.UltimateResidenceRentBasePrice;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class MapperXmlGeneratorTests {
+
+    @Test
+    public void generateBatchInsertSqL() {
+        Class targetClass = UltimateResidenceRentBasePrice .class;
+        List<Field> fieldList = new ArrayList<>();
+        fieldList.addAll(new ArrayList<>(Arrays.asList(targetClass.getDeclaredFields())));
+//        while (targetClass != null) {
+//            fieldList.addAll(new ArrayList<>(Arrays.asList(targetClass.getDeclaredFields())));
+//            targetClass = targetClass.getSuperclass();
+//        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < fields.length; i++) {
+            String name = fields[i].getName();
+            sb.append("<result property=\""+name+"\" column=\""+name+"\"/>\r\n");
+        }
+        System.out.println(sb.toString());
+    }
+}