Просмотр исходного кода

Merge branch 'master' of http://47.100.18.120:3000/LiuQin/HotelDemo

YPLee 6 лет назад
Родитель
Сommit
aea249d7b0
44 измененных файлов с 861 добавлено и 658 удалено
  1. 5 0
      front_end/package-lock.json
  2. 1 0
      front_end/package.json
  3. 1 1
      front_end/src/App.vue
  4. 14 4
      front_end/src/api/hotel.js
  5. 24 0
      front_end/src/api/hotelManager.js
  6. 7 7
      front_end/src/api/user.js
  7. 3 6
      front_end/src/components/header.vue
  8. 6 1
      front_end/src/main.js
  9. 39 0
      front_end/src/permission.js
  10. 1 1
      front_end/src/router/index.js
  11. 5 1
      front_end/src/store/getters.js
  12. 53 3
      front_end/src/store/modules/hotelManager.js
  13. 30 20
      front_end/src/store/modules/user.js
  14. 6 8
      front_end/src/utils/request.js
  15. 0 1
      front_end/src/views/hotel/components/orderModal.vue
  16. 0 4
      front_end/src/views/hotel/hotelDetail.vue
  17. 104 0
      front_end/src/views/hotelManager/components/addHotelModal.vue
  18. 86 0
      front_end/src/views/hotelManager/components/addRoomModal.vue
  19. 149 49
      front_end/src/views/hotelManager/manageHotel.vue
  20. 28 8
      front_end/src/views/login.vue
  21. 16 55
      front_end/src/views/user/info.vue
  22. 2 2
      pom.xml
  23. 15 0
      src/main/java/com/example/hotel/bl/admin/AdminService.java
  24. 2 2
      src/main/java/com/example/hotel/bl/user/AccountService.java
  25. 0 19
      src/main/java/com/example/hotel/bl/user/ClientService.java
  26. 35 0
      src/main/java/com/example/hotel/blImpl/admin/AdminServiceImpl.java
  27. 4 4
      src/main/java/com/example/hotel/blImpl/user/AccountServiceImpl.java
  28. 0 42
      src/main/java/com/example/hotel/blImpl/user/ClientServiceImpl.java
  29. 61 61
      src/main/java/com/example/hotel/config/WebConfiguration.java
  30. 30 0
      src/main/java/com/example/hotel/controller/admin/AdminController.java
  31. 9 8
      src/main/java/com/example/hotel/controller/hotel/HotelController.java
  32. 14 18
      src/main/java/com/example/hotel/controller/user/AccountController.java
  33. 0 35
      src/main/java/com/example/hotel/controller/user/ClientController.java
  34. 16 0
      src/main/java/com/example/hotel/data/admin/AdminMapper.java
  35. 6 2
      src/main/java/com/example/hotel/data/user/AccountMapper.java
  36. 0 21
      src/main/java/com/example/hotel/data/user/OrderMapper.java
  37. 9 6
      src/main/java/com/example/hotel/enums/UserType.java
  38. 48 48
      src/main/java/com/example/hotel/interceptor/TokenInterceptor.java
  39. 0 101
      src/main/java/com/example/hotel/po/Order.java
  40. 0 101
      src/main/java/com/example/hotel/vo/OrderVO.java
  41. 1 1
      src/main/resources/application.yml
  42. 19 0
      src/main/resources/dataImpl/admin/AdminMapper.xml
  43. 12 2
      src/main/resources/dataImpl/user/AccountMapper.xml
  44. 0 16
      src/main/resources/dataImpl/user/OrderMapper.xml

+ 5 - 0
front_end/package-lock.json

@@ -7905,6 +7905,11 @@
         "path-key": "^2.0.0"
       }
     },
+    "nprogress": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
+      "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E="
+    },
     "nth-check": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz",

+ 1 - 0
front_end/package.json

@@ -14,6 +14,7 @@
     "js-cookie": "^2.2.1",
     "less": "^3.11.1",
     "less-loader": "^5.0.0",
+    "nprogress": "^0.2.0",
     "vue": "^2.6.11",
     "vue-router": "^3.1.5",
     "vuex": "^3.1.2"

+ 1 - 1
front_end/src/App.vue

@@ -1,5 +1,5 @@
 <template>
-  <div id="app">
+  <div id="app" v-title data-title="NJUSE酒店管理系统">
     <transition name="fade-transform" mode="out-in">
       <router-view/>
     </transition>

+ 14 - 4
front_end/src/api/hotel.js

@@ -1,13 +1,23 @@
 import { axios } from '@/utils/request'
+const api = {
+    hotelPre: '/api/hotel'
+}
 export function getHotelsAPI() {
     return axios({
-        url: '/api/hotel/all',
-        method: 'get'
+        url: `${api.hotelPre}/all`,
+        method: 'get',
     })
 }
 export function getHotelByIdAPI(param) {
     return axios({
-        url: `/api/hotel/${param.hotelId}/detail`,
-        method: 'GET'
+        url: `${api.hotelPre}/${param.hotelId}/detail`,
+        method: 'GET',
+    })
+}
+export function reserveHotel(data) {
+    return axios({
+        url: `${api.hotelPre}/reserve`,
+        method: 'POST',
+        data,
     })
 }

+ 24 - 0
front_end/src/api/hotelManager.js

@@ -0,0 +1,24 @@
+import { axios } from '@/utils/request'
+const api = {
+    hotelPre: '/api/hotel'
+}
+export function addRoomAPI(data) {
+    return axios({
+        url: `${api.hotelPre}/roomInfo`,
+        method: 'POST',
+        data,
+    })
+}
+export function addHotelAPI(data) {
+    return axios({
+        url: `${api.hotelPre}`,
+        method: 'POST',
+        data,
+    })
+}
+export function getAllOrdersAPI() {
+    return axios({
+        url: '/api/order/all',
+        method: 'GET'
+    })
+}

+ 7 - 7
front_end/src/api/user.js

@@ -1,31 +1,31 @@
 import { axios } from '@/utils/request'
 
 const api = {
-    userPre: 'api/user'
+    userPre: '/api/user'
 }
 export function loginAPI(data){
     return axios({
-        url:`/api/login`,
+        url:`${api.userPre}/login`,
         method: 'POST',
         data
     })
 }
 export function registerAPI(data){
     return axios({
-        url: `/api/register`,
+        url: `${api.userPre}/register`,
         method: 'POST',
         data
     })
 }
-export function getUserInfoAPI(){
+export function getUserInfoAPI(id){
     return axios({
-        url: `${api.userPre}/getUserInfo`,
+        url: `${api.userPre}/${id}/getUserInfo`,
         method: 'GET'
     })
 }
-export function updateUserInfoByIdAPI(data) {
+export function updateUserInfoAPI(data) {
     return axios({
-        url: `${api.userPre}/updateUserInfoById`,
+        url: `${api.userPre}/userInfo/update`,
         method: 'POST',
         data
     })

+ 3 - 6
front_end/src/components/header.vue

@@ -11,10 +11,8 @@
                     <a-icon type="home" />首页
                 </router-link>
             </a-menu-item>
-            <a-menu-item key="2" @click="selectMenu">
-                <router-link :to="{ name: 'userInfo'}">
-                    <a-icon type="user" />个人中心
-                </router-link>
+            <a-menu-item key="2" @click="jumpToUserInfo">
+                <a-icon type="user" />个人中心
             </a-menu-item>
             <a-menu-item key="3" @click="selectMenu">
                 <router-link :to="{ name: 'manageHotel'}">
@@ -88,14 +86,13 @@ export default {
             'logout'
         ]),
         selectMenu(v){
-            console.log(v)
         },
         async quit() {
             await this.$store.dispatch('logout')
             this.$router.push(`/login?redirect=${this.$route.fullPath}`)
         },
         jumpToUserInfo() {
-            // this.$router.push({ name: 'info', params: { userId: this.userId } })
+            this.$router.push({ name: 'userInfo', params: { userId: this.userId } })
         },
         jumpToHome() {
 

+ 6 - 1
front_end/src/main.js

@@ -5,7 +5,7 @@ import Antd from 'ant-design-vue'
 import 'ant-design-vue/dist/antd.css'
 import store from './store'
 
-// import '@/permission'
+import '@/permission'
 Vue.config.productionTip = false
 const options = {
   namespace: 'pro__',
@@ -14,6 +14,11 @@ const options = {
 }
 Vue.use(Antd)
 
+Vue.directive('title', {
+  inserted: function (el, binding) {
+    document.title = el.dataset.title
+  }
+})
 new Vue({
   router,
   store,

+ 39 - 0
front_end/src/permission.js

@@ -0,0 +1,39 @@
+import router from './router'
+import store from './store'
+import { getToken } from '@/utils/auth'
+import NProgress from 'nprogress' // progress bar
+import 'nprogress/nprogress.css' // progress bar style
+const whiteList = ['/login'] // no redirect whitelist
+router.beforeEach(async(to, from, next) => {
+    // start progress bar
+    NProgress.start()
+    // determine whether the user has logged in
+    const hasToken = getToken()
+    if (hasToken) {
+        store.commit('set_userId', hasToken)
+      if (to.path === '/login') {
+        // if is logged in, redirect to the home page
+        next({path: '/'})
+        NProgress.done()
+      } else {
+        next()
+        NProgress.done()
+      }
+    } else {
+      /* has no token*/
+      if (whiteList.indexOf(to.path) !== -1) {
+        // in the free login whitelist, go directly
+        next()
+      } else {
+        // other pages that do not have permission to access are redirected to the login page.
+        next(`/login?redirect=${to.path}`)
+        NProgress.done()
+      }
+    }
+  })
+  
+  router.afterEach(() => {
+    // finish progress bar
+    NProgress.done()
+  })
+  

+ 1 - 1
front_end/src/router/index.js

@@ -25,7 +25,7 @@ const routes = [
         component: () => import('@/views/hotel/hotelList')
       },
       {
-        path: 'hotel/hotelDetail/:hotelId',
+        path: '/hotel/hotelDetail/:hotelId',
         name: 'hotelDetail',
         component: () => import('@/views/hotel/hotelDetail')
       },

+ 5 - 1
front_end/src/store/getters.js

@@ -12,7 +12,11 @@ const getters = {
   //admin
   userList: state => state.admin.userList,
   addUserModalVisible: state => state.admin.addUserModalVisible,
-  addUserParams: state => state.admin.addUserParams
+  addUserParams: state => state.admin.addUserParams,
+  //hotelManager
+  orderList: state => state.hotelManager.orderList,
+  addHotelModalVisible: state => state.hotelManager.addHotelModalVisible,
+  addRoomModalVisible: state => state.hotelManager.addRoomModalVisible,
   }
   
   export default getters

+ 53 - 3
front_end/src/store/modules/hotelManager.js

@@ -1,12 +1,62 @@
+import {
+    getAllOrdersAPI,
+    addRoomAPI,
+    addHotelAPI,
+} from '@/api/hotelManager'
 const hotelManager = {
-    stata: {
+    state: {
+        orderList: [],
+        addHotelParams: {
 
+        },
+        addHotelModalVisible: false,
+        addRoomParams: {
+
+        },
+        addRoomModalVisible: false
     },
     mutations: {
-
+        set_orderList: function(state, data) {
+            state.orderList = data
+        },
+        set_addHotelModalVisible: function(state, data) {
+            state.addHotelModalVisible = data
+        },
+        set_addHotelParams: function(state, data) {
+            state.addHotelParams = {
+                ...state.addHotelParams,
+                ...data,
+            }
+        },
+        set_addRoomModalVisible: function(state, data) {
+            state.addRoomModalVisible = data
+        },
+        set_addRoomParams: function(state, data) {
+            state.addRoomParams = {
+                ...state.addRoomParams,
+                ...data,
+            }
+        }
     },
     actions: {
-
+        getAllOrders: async({ state, commit }) => {
+            const res = await getAllOrdersAPI()
+            if(res){
+                commit('set_orderList', res.data)
+            }
+        },
+        addHotel: async({ state, dispatch }) => {
+            const res = await addHotelAPI(state.addHotelParams)
+            if(res){
+                dispatch('getAllOrders')
+            }
+        },
+        addRoom: async({ state, dispatch }) => {
+            const res = await addRoomAPI(state.addRoomParams)
+            if(res){
+                dispatch('getAllOrders')
+            }
+        }
     }
 }
 export default hotelManager

+ 30 - 20
front_end/src/store/modules/user.js

@@ -6,12 +6,13 @@ import { message } from 'ant-design-vue'
 import {
     loginAPI,
     registerAPI,
+    getUserInfoAPI,
+    updateUserInfoAPI
 } from '@/api/user'
 
 const getDefaultState = () => {
     return {
         token: getToken(),
-        name: '',
         userId: '',
         userInfo: {
 
@@ -33,6 +34,9 @@ const user = {
         set_token: function(state, token){
             state.token = token
         },
+        set_email: (state, data) => {
+            state.email = data
+        },
         set_userId: (state, data) => {
             state.userId = data
         },
@@ -45,12 +49,12 @@ const user = {
     },
 
     actions: {
-        login: async ({ commit }, userData) => {
+        login: async ({ dispatch, commit }, userData) => {
             const res = await loginAPI(userData)
             if(res){
-                setToken(res)
-                // Vue.ls.set('ACCESS_TOKEN', res, 7 * 24 * 60 * 60 * 1000)
-                commit('set_token', res)
+                setToken(res.id)
+                commit('set_userId', res.id)
+                router.push('/hotel/hotelList')
             }
         },
         register: async({ commit }, data) => {
@@ -59,21 +63,27 @@ const user = {
                 message.success('注册成功')
             }
         },
-        // getUserInfo({ commit }) {
-        //     return new Promise((resolve, reject) => {
-        //       getUserInfoAPI().then(response => {
-        //         const data = response
-        //         if (!data) {
-        //           reject('登录已过期,请重新登录')
-        //         }
-        //         commit('set_userInfo', data)
-        //         commit('set_userId', data.userId)
-        //         resolve(data)
-        //       }).catch(error => {
-        //         reject(error)
-        //       })
-        //     })
-        // },
+        getUserInfo({ state, commit }) {
+            return new Promise((resolve, reject) => {
+              getUserInfoAPI(state.userId).then(response => {
+                const data = response
+                if (!data) {
+                  reject('登录已过期,请重新登录')
+                }
+                commit('set_userInfo', data)
+                commit('set_userId', data.userId)
+                resolve(data)
+              }).catch(error => {
+                reject(error)
+              })
+            })
+        },
+        updateUserInfo: async({ state, commit }) => {
+            const res = await updateUserInfoAPI()
+            if(res){
+
+            }
+        },
         logout: async({ commit }) => {
             removeToken()
             resetRouter()

+ 6 - 8
front_end/src/utils/request.js

@@ -39,12 +39,8 @@ const service = axios.create({
   return Promise.reject(error)
  }
 
-
 //request incerceptor
 service.interceptors.request.use((config) => {
-  if (store.getters.token) {
-    config.headers['Authorization'] = getToken()
-  }
   const requestConfig = {
     ...config,
     url: `${config.url}`,
@@ -55,13 +51,15 @@ service.interceptors.request.use((config) => {
 service.interceptors.response.use((response) => {
   switch (response.status) {
     case 200:
-      return response.data
+      if(response.data.success && response.data.success){
+        return response.data.content
+      }
+      message.error(response.data.message)
+      break
     case 404:
       return false
     default:
-      if(response.data.message){
-        message.error(response.data.message)
-      }
+      message.error(response.data.message)
   }
 })
 

+ 0 - 1
front_end/src/views/hotel/components/orderModal.vue

@@ -90,7 +90,6 @@ export default {
                 },
             },
             totalPrice: '',
-            form: '',
         }
     },
     computed: {

+ 0 - 4
front_end/src/views/hotel/hotelDetail.vue

@@ -23,10 +23,6 @@
                             <span class="label">地址</span>
                             <span class="value">{{ currentHotelInfo.address }}</span>
                         </div>
-                        <div class="items" v-if="currentHotelInfo.casts">
-                            <span class="label">主演:</span>
-                            <span class="value" v-for="item in currentHotelInfo.casts" :key="item.index">{{ item }}</span>
-                        </div>
                         <div class="items" v-if="currentHotelInfo.rate">
                             <span class="label">评分:</span> 
                             <span class="value">{{ currentHotelInfo.rate }}</span>

+ 104 - 0
front_end/src/views/hotelManager/components/addHotelModal.vue

@@ -0,0 +1,104 @@
+<template>
+    <a-modal
+        :visible="addHotelModalVisible"
+        title="添加酒店"
+        cancelText="取消"
+        okText="确定"
+        @cancel="cancel"
+        @ok="handleSubmit"
+    >
+        <a-form :form="form" style="margin-top: 30px" v-bind="formItemLayout">
+            <a-form-item label="酒店名">
+                <a-input
+                    placeholder="请填写酒店名称"
+                    v-decorator="['hotelName', { rules: [{ required: true, message: '请填写酒店名称' }] }]"
+                />
+            </a-form-item>
+            <a-form-item label="酒店地址" v-bind="formItemLayout">
+                <a-input
+                    placeholder="请填写酒店地址"
+                    v-decorator="['address', { rules: [{ required: true, message: '请填写酒店地址' }] }]"
+                />
+            </a-form-item>
+            <a-form-item label="酒店星级" v-bind="formItemLayout">
+                <a-select
+                    v-decorator="[
+                    'hotelStar', 
+                    { rules: [{ required: true, message: '请选择酒店星级' }] }]"
+                    @change="changeStar"
+                >
+                  <a-select-option value="Three">三星级</a-select-option>
+                  <a-select-option value="Four">四星级</a-select-option>
+                  <a-select-option value="Five">五星级</a-select-option>
+                </a-select>
+            </a-form-item>
+            <a-form-item label="手机号" v-bind="formItemLayout">
+                <a-input
+                    placeholder="请填写手机号"
+                    v-decorator="['phoneNumber', { rules: [{ required: true, message: '请输入手机号' }] }]"
+                />
+            </a-form-item>
+            <a-form-item label="酒店简介" v-bind="formItemLayout">
+                <a-input
+                    type="textarea"
+                    :rows="4"
+                    placeholder="请填写酒店简介"
+                    v-decorator="['email', { rules: [{ required: true, message: '请填写酒店简介' }] }]"
+                />
+            </a-form-item>
+        </a-form>
+    </a-modal>
+</template>
+<script>
+import { mapGetters, mapMutations, mapActions } from 'vuex'
+export default {
+    name: 'addUserModal',
+    data() {
+        return {
+            formItemLayout: {
+                labelCol: {
+                    xs: { span: 12 },
+                    sm: { span: 6 },
+                },
+                wrapperCol: {
+                    xs: { span: 24 },
+                    sm: { span: 16 },
+                },
+            },
+        }
+    },
+    computed: {
+        ...mapGetters([
+            'addHotelModalVisible'
+        ])
+    },
+    beforeCreate() {
+        this.form = this.$form.createForm(this, { name: 'addHotelModal' });
+    },
+    mounted() {
+
+    },
+    methods: {
+        ...mapMutations([
+            'set_addHotelModalVisible'
+        ]),
+        ...mapActions([
+
+        ]),
+        cancel() {
+            this.set_addHotelModalVisible(false)
+        },
+        changeStar(v){
+
+        },
+        handleSubmit(e) {
+            e.preventDefault();
+            this.form.validateFieldsAndScroll((err, values) => {
+                if (!err) {
+                    console.log('Received values of form: ', values);
+                }
+            });
+        },
+    }
+}
+</script>

+ 86 - 0
front_end/src/views/hotelManager/components/addRoomModal.vue

@@ -0,0 +1,86 @@
+<template>
+    <a-modal
+        :visible="addRoomModalVisible"
+        title="录入客房"
+        cancelText="取消"
+        okText="确定"
+        @cancel="cancel"
+        @ok="handleSubmit"
+    >
+        <a-form :form="form" style="margin-top: 30px" v-bind="formItemLayout">
+            <a-form-item label="房型" v-bind="formItemLayout">
+                <a-select
+                    v-decorator="[
+                    'roomType', 
+                    { rules: [{ required: true, message: '请选择房型' }] }]"
+                >
+                  <a-select-option value="大床房">大床房</a-select-option>
+                  <a-select-option value="双床房">双床房</a-select-option>
+                  <a-select-option value="家庭房">家庭房</a-select-option>
+                </a-select>
+            </a-form-item>
+            <a-form-item label="房间数量" v-bind="formItemLayout">
+                <a-input
+                    placeholder="请填写房间数量"
+                    v-decorator="['address', { rules: [{ required: true, message: '请输入房间数量' }] }]"
+                />
+            </a-form-item>
+            <a-form-item label="原始价格" v-bind="formItemLayout">
+                <a-input
+                    placeholder="请填写原始价格"
+                    v-decorator="['price', { rules: [{ required: true, message: '请输入原始价格' }] }]"
+                />
+            </a-form-item>
+        </a-form>
+    </a-modal>
+</template>
+<script>
+import { mapGetters, mapMutations, mapActions } from 'vuex'
+export default {
+    name: 'addRoomModal',
+    data() {
+        return {
+            formItemLayout: {
+                labelCol: {
+                    xs: { span: 12 },
+                    sm: { span: 6 },
+                },
+                wrapperCol: {
+                    xs: { span: 24 },
+                    sm: { span: 16 },
+                },
+            },
+        }
+    },
+    computed: {
+        ...mapGetters([
+            'addRoomModalVisible'
+        ])
+    },
+    beforeCreate() {
+        this.form = this.$form.createForm(this, { name: 'addRoomModal' });
+    },
+    mounted() {
+
+    },
+    methods: {
+        ...mapMutations([
+            'set_addRoomModalVisible'
+        ]),
+        ...mapActions([
+
+        ]),
+        cancel() {
+            this.set_addRoomModalVisible(false)
+        },
+        handleSubmit(e) {
+            e.preventDefault();
+            this.form.validateFieldsAndScroll((err, values) => {
+                if (!err) {
+                    console.log('Received values of form: ', values);
+                }
+            });
+        },
+    }
+}
+</script>

+ 149 - 49
front_end/src/views/hotelManager/manageHotel.vue

@@ -1,44 +1,120 @@
 <template>
     <div class="manageHotel-wrapper">
         <a-tabs>
-            <a-tab-pane tab="录入客房" key="1">
-                <a-form :form="form" style="margin-top: 30px">
-                    
-                </a-form>
+            <a-tab-pane tab="酒店管理" key="1">
+                <div style="width: 100%; text-align: right; margin:20px 0">
+                    <a-button type="primary" @click="addHotel"><a-icon type="plus" />添加酒店</a-button>
+                </div>
+                 <a-table
+                    :columns="columns1"
+                    :dataSource="data1"
+                    bordered
+                >
+                    <span slot="action" slot-scope="record">
+                        <a-button type="primary" size="small" @click="addRoom(record)">录入房间</a-button>
+                        <a-divider type="vertical"></a-divider>
+                        <a-popconfirm
+                            title="确定想删除该酒店吗?"
+                            @confirm="deleteHotel(record)"
+                            okText="确定"
+                            cancelText="取消"
+                        >
+                            <a-button type="danger" size="small">删除酒店</a-button>
+                        </a-popconfirm>
+                    </span>
+                </a-table>
             </a-tab-pane>
             <a-tab-pane tab="订单管理" key="2">
                 <a-table
-                    :columns="columns"
-                    :dataSource="data"
+                    :columns="columns2"
+                    :dataSource="data2"
                     bordered
                 >
+                    <span slot="status" slot-scope="status">
+                        <a-tag
+                            :color="status==='入住中' ? 'green' :  'red' "
+                            :key="status"
+                        >
+                            {{ status }}
+                        </a-tag>
+                    </span>
                     <span slot="price" slot-scope="text">
                         <span>¥{{ text }}</span>
                     </span>
-                    <span slot="action" slot-scope="text, record">
-                        <a-button type="primary" @click="order(record)">订单详情</a-button>
+                    <span slot="action" slot-scope="record">
+                        <a-button type="primary" size="small">订单详情</a-button>
                         <a-divider type="vertical"></a-divider>
-                        <a-button type="danger" @click="order(record)">删除订单</a-button>
+                        <a-popconfirm
+                            title="确定想删除该订单吗?"
+                            @confirm="deleteOrder(record)"
+                            okText="确定"
+                            cancelText="取消"
+                        >
+                            <a-button type="danger" size="small">删除订单</a-button>
+                        </a-popconfirm>
                     </span>
                 </a-table>
             </a-tab-pane>
         </a-tabs>
+        <AddHotelModal></AddHotelModal>
+        <AddRoomModal></AddRoomModal>
     </div>
 </template>
 <script>
 import { mapGetters, mapMutations, mapActions } from 'vuex'
-const columns = [
+import AddHotelModal from './components/addHotelModal'
+import AddRoomModal from './components/addRoomModal'
+const columns1 = [
+    {  
+        title: '酒店名',
+        dataIndex: 'name',
+    },
+    {
+        title: '商圈',
+        dataIndex: 'BizRegion',
+    },
+    {
+        title: '地址',
+        dataIndex: 'address',
+    },
+    {
+        title: '酒店星级',
+        dataIndex: 'hotelStar'
+    },
+    {
+        title: '评分',
+        dataIndex: 'hotelRate',
+    },
+    {
+        title: '简介',
+        dataIndex: 'description',
+    },
+    {
+      title: '操作',
+      key: 'action',
+      scopedSlots: { customRender: 'action' },
+    },
+  ];
+const columns2 = [
+    {  
+        title: '订单号',
+        dataIndex: 'orderId',
+    },
     {  
         title: '酒店名',
         dataIndex: 'hotelName',
     },
+    {
+        title: '房型',
+        dataIndex: 'roomType',
+    },
     {
         title: '入住时间',
-        dataIndex: 'InDate',
+        dataIndex: 'checkInDate',
     },
     {
         title: '离店时间',
-        dataIndex: 'outDate',
+        dataIndex: 'checkOutDate',
     },
     {
         title: '入住人数',
@@ -50,7 +126,8 @@ const columns = [
     },
     {
         title: '状态',
-        dataIndex: 'status'
+        dataIndex: 'status',
+        scopedSlots: { customRender: 'status' },
     },
     {
       title: '操作',
@@ -58,65 +135,88 @@ const columns = [
       scopedSlots: { customRender: 'action' },
     },
   ];
+  const data1 = [
+      {
+          key: '1',
+          name: '如家酒店(珠江路地铁站店)',
+          BizRegion:'鼓楼',
+          address: '鼓楼区珠江路888号',
+          hotelRate: '4.8',
+          hotelStar: 'Four',
+          description: '酒店描述信息',
+      }
+  ];
+  const data2 = [
+    {
+      key: '1',
+      orderId: '2019123000001',
+      hotelName: '如家酒店(珠江路地铁站店)',
+      roomType: '大床房',
+      checkInDate: '2019-12-30',
+      checkOutDate: '2019-12-31',
+      peopleNum: '2',
+      price: '298',
+      status: '已离店'
+    },
+    {
+      key: '2',
+      orderId: '2019123000001',
+      hotelName: '如家酒店(珠江路地铁站店)',
+      roomType: '标准间',
+      checkInDate: '2019-12-30',
+      checkOutDate: '2019-12-31',
+      peopleNum: '1',
+      price: '298',
+      status: '入住中'
+    },
+  ];
 export default {
     name: 'manageHotel',
     data(){
         return {
             formLayout: 'horizontal',
             pagination: {},
-            columns,
-            data: [],
+            columns1,
+            columns2,
+            data1,
+            data2,
             form: this.$form.createForm(this, { name: 'manageHotel' }),
         }
     },
     components: {
+        AddHotelModal,
+        AddRoomModal,
     },
     computed: {
         ...mapGetters([
-            
+            'orderList',
+            'addHotelModalVisible',
+            'addRoomModalVisible'
         ])
     },
     mounted() {
 
     },
     methods: {
+        ...mapMutations([
+            'set_addHotelModalVisible',
+            'set_addRoomModalVisible'
+        ]),
         ...mapActions([
             'updateUserInfoById',
         ]),
-        saveModify() {
-            this.form.validateFields((err, values) => {
-                if (!err) {
-                    const data = {
-                        username: this.form.getFieldValue('username'),
-                        nickname: this.form.getFieldValue('nickname'),
-                        email: this.form.getFieldValue('email'),
-                        phoneNumber: this.form.getFieldValue('phoneNumber'),
-                        gender: this.form.getFieldValue('gender'),
-                        address: this.form.getFieldValue('address')
-                    }
-                    this.updateUserInfoById(data).then(()=>{
-                        this.modify = false
-                    })
-                }
-            });
+        addHotel() {
+            this.set_addHotelModalVisible(true)
         },
-        modifyInfo() {
-            setTimeout(() => {
-                this.form.setFieldsValue({
-                    'username': this.userInfo.username,
-                    'nickname': this.userInfo.nickname,
-                    'email': this.userInfo.email,
-                    'phoneNumber': this.userInfo.phoneNumber,
-                    'gender': this.userInfo.gender,
-                    'address': this.userInfo.address
-                })
-            }, 0)
-            this.modify = true
+        addRoom(record) {
+            this.set_addRoomModalVisible(true)
+        },
+        deleteHotel(){
+
+        },
+        deleteOrder(){
+
         },
-        cancelModify() {
-            this.modify = false
-        }
-        
     }
 }
 </script>
@@ -132,7 +232,7 @@ export default {
     }
 </style>
 <style lang="less">
-    .info-wrapper {
+    .manageHotel-wrapper {
         .ant-tabs-bar {
             padding-left: 30px
         }

+ 28 - 8
front_end/src/views/login.vue

@@ -23,15 +23,14 @@
         @change="handleTabClick"
       >
         <a-tab-pane key="tab1" tab="账号密码登录">
-          <!-- <a-alert v-if="isLoginError" type="error" showIcon style="margin-bottom: 24px;" message="账户或密码错误" /> -->
           <a-form-item>
             <a-input
               size="large"
               type="text"
-              placeholder="邮箱/用户名"
+              placeholder="邮箱"
               v-decorator="[
                 'username',
-                {rules: [{ required: true, message: '请输入帐户名或邮箱地址' }], validateTrigger: 'blur'}
+                {rules: [{ required: true, message: '请输入邮箱地址' }], validateTrigger: 'blur'}
               ]"
             >
               <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
@@ -75,7 +74,26 @@
               <a-icon slot="prefix" type="mail" :style="{ color: 'rgba(0,0,0,.25)' }"/>
             </a-input>
           </a-form-item>
-          
+          <a-form-item>
+            <a-input
+              size="large"
+              placeholder="用户名"
+              v-decorator="[
+              'registerUsername', 
+              {rules: [{ required: true, message: '请输入用户名' }], validateTrigger: 'blur'}]">
+              <a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
+            </a-input>
+          </a-form-item>
+           <a-form-item>
+            <a-input
+              size="large"
+              placeholder="手机号"
+              v-decorator="[
+              'registerPhoneNumber', 
+              {rules: [{ required: true, message: '请输入手机号' }], validateTrigger: 'blur'}]">
+              <a-icon slot="prefix" type="book" :style="{ color: 'rgba(0,0,0,.25)' }"/>
+            </a-input>
+          </a-form-item>
           <a-form-item>
             <a-input
               size="large"
@@ -201,9 +219,7 @@ export default {
             email: this.form.getFieldValue("username"),
             password: this.form.getFieldValue("password")
           }
-          await this.login(data).then(()=>{
-            this.$router.push({ path: this.redirect || '/' })
-          })
+          await this.login(data)
           this.loginLoading = false
         }
       })
@@ -211,13 +227,17 @@ export default {
 
     handleRegister() {
       const { form: { validateFields } } = this
-      const validateFieldsKey = this.customActiveKey === 'tab1' ? ['username', 'password'] : ['registerUserMail','registerPassword','registerPasswordconfirm']
+      const validateFieldsKey = this.customActiveKey === 'tab1' ? ['username', 'password'] : ['registerUsername','registerPhoneNumber','registerUserMail','registerPassword','registerPasswordconfirm']
       validateFields(validateFieldsKey, { force: true }, async (err, values) => {
         if (!err) {
           this.registerLoading = true
           const data = {
             email: this.form.getFieldValue('registerUserMail'),
             password: this.form.getFieldValue('registerPassword'),
+            phoneNumber: this.form.getFieldValue('registerPhoneNumber'),
+            username: this.form.getFieldValue('registerUsername'),
+            credit: 100,
+            userType: 1
           }
           await this.register(data).then(() => {
             this.customActiveKey = 'tab1'

+ 16 - 55
front_end/src/views/user/info.vue

@@ -3,51 +3,19 @@
         <a-tabs>
             <a-tab-pane tab="我的信息" key="1">
                 <a-form :form="form" style="margin-top: 30px">
-                    <a-form-item label="头像" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }">
-                        <a-avatar src="./defaultAvatar.png" :size="64"></a-avatar>
-                    </a-form-item>
+                    
                     <a-form-item label="用户名" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1  }">
                         <a-input
                             placeholder="请填写用户名"
-                            v-decorator="['username', { rules: [{ required: true, message: '请输入用户名' }] }]"
-                            v-if="modify"
-                        />
-                        <span v-else>{{ userInfo.username }}</span>
-                    </a-form-item>
-                    <a-form-item label="昵称" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1  }">
-                        <a-input
-                            placeholder="请填写昵称"
-                            v-decorator="['nickname', { rules: [{ required: true, message: '请输入昵称' }] }]"
+                            v-decorator="['userName', { rules: [{ required: true, message: '请输入用户名' }] }]"
                             v-if="modify"
                         />
-                        <span v-else>{{ userInfo.nickname }}</span>
+                        <span v-else>{{ userInfo.userName }}</span>
                     </a-form-item>
                     <a-form-item label="邮箱" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }">
-                        <a-input
-                            placeholder="请填写邮箱"
-                            v-decorator="['email', { rules: [{ required: true, message: '请输入邮箱' }] }]"
-                            v-if="modify"
-                        />
-                        <span v-else>{{ userInfo.email }}</span>
-                    </a-form-item>
-                    <a-form-item label="性别" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }">
-                        <a-select
-                            v-decorator="[
-                            'gender',
-                            { rules: [{ required: true, message: '请选择性别!' }] },
-                            ]"
-                            v-if="modify"
-                            placeholder="请选择性别"
-                        >
-                            <a-select-option value="male">
-                            男生
-                            </a-select-option>
-                            <a-select-option value="female">
-                            女生
-                            </a-select-option>
-                        </a-select>
-                        <span v-else>{{ userInfo.gender }}</span>
+                        <span>{{ userInfo.email }}</span>
                     </a-form-item>
+                    
                     <a-form-item label="手机号" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }">
                         <a-input
                             placeholder="请填写手机号"
@@ -56,16 +24,15 @@
                         />
                         <span v-else>{{ userInfo.phoneNumber}}</span>
                     </a-form-item>
-                    <a-form-item label="地址" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }">
+                    <a-form-item label="信用值" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }">
+                        <span>{{ userInfo.credit }}</span>
+                    </a-form-item>
+                    <a-form-item label="密码" :label-col="{ span: 3 }" :wrapper-col="{ span: 8, offset: 1 }" v-if="modify">
                         <a-input
-                            type="textarea"
-                            placeholder="请填写地址"
-                            v-decorator="['address']"
-                            v-if="modify"
+                            placeholder="请输入新密码"
+                            v-decorator="['password', { rules: [{ required: true, message: '请输入新密码' }] }]"
                         />
-                        <span v-else>{{ userInfo.address }}</span>
                     </a-form-item>
-                   
                     <a-form-item :wrapper-col="{ span: 12, offset: 5 }" v-if="modify">
                         <a-button type="primary" @click="saveModify">
                             保存
@@ -153,22 +120,20 @@ export default {
         ])
     },
     mounted() {
-
+        this.getUserInfo()
     },
     methods: {
         ...mapActions([
+            'getUserInfo',
             'updateUserInfoById',
         ]),
         saveModify() {
             this.form.validateFields((err, values) => {
                 if (!err) {
                     const data = {
-                        username: this.form.getFieldValue('username'),
-                        nickname: this.form.getFieldValue('nickname'),
-                        email: this.form.getFieldValue('email'),
+                        userName: this.form.getFieldValue('userName'),
                         phoneNumber: this.form.getFieldValue('phoneNumber'),
-                        gender: this.form.getFieldValue('gender'),
-                        address: this.form.getFieldValue('address')
+                        password: this.form.getFieldValue('password')
                     }
                     this.updateUserInfoById(data).then(()=>{
                         this.modify = false
@@ -179,12 +144,8 @@ export default {
         modifyInfo() {
             setTimeout(() => {
                 this.form.setFieldsValue({
-                    'username': this.userInfo.username,
-                    'nickname': this.userInfo.nickname,
-                    'email': this.userInfo.email,
+                    'userName': this.userInfo.userName,
                     'phoneNumber': this.userInfo.phoneNumber,
-                    'gender': this.userInfo.gender,
-                    'address': this.userInfo.address
                 })
             }, 0)
             this.modify = true

+ 2 - 2
pom.xml

@@ -92,13 +92,13 @@
         <dependency>
             <groupId>com.auth0</groupId>
             <artifactId>java-jwt</artifactId>
-            <version>3.10.0</version>
+            <version>3.9.0</version>
         </dependency>
 
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <version>1.2.51</version>
+            <version>1.2.62</version>
         </dependency>
     </dependencies>
 

+ 15 - 0
src/main/java/com/example/hotel/bl/admin/AdminService.java

@@ -0,0 +1,15 @@
+package com.example.hotel.bl.admin;
+
+import com.example.hotel.vo.ResponseVO;
+import com.example.hotel.vo.UserForm;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-04
+ */
+public interface AdminService {
+
+    ResponseVO addManager(UserForm userForm);
+
+
+}

+ 2 - 2
src/main/java/com/example/hotel/bl/user/AccountService.java

@@ -23,9 +23,9 @@ public interface AccountService {
      */
     User login(UserForm userForm);
 
-    User getUserInfo(String email);
+    User getUserInfo(int id);
 
-    ResponseVO updateUserInfo(String email, String password,String username,String phonenumber);
+    ResponseVO updateUserInfo(int id, String password,String username,String phonenumber);
 
 
 }

+ 0 - 19
src/main/java/com/example/hotel/bl/user/ClientService.java

@@ -1,19 +0,0 @@
-package com.example.hotel.bl.user;
-
-import com.example.hotel.vo.OrderVO;
-
-import java.util.List;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-02-29
- */
-public interface ClientService {
-    /**
-     * 预订酒店添加订单
-     * @param orderVO
-     */
-    void addOrder(OrderVO orderVO);
-
-    List<OrderVO> retrieveOrders();
-}

+ 35 - 0
src/main/java/com/example/hotel/blImpl/admin/AdminServiceImpl.java

@@ -0,0 +1,35 @@
+package com.example.hotel.blImpl.admin;
+
+import com.example.hotel.bl.admin.AdminService;
+import com.example.hotel.data.admin.AdminMapper;
+import com.example.hotel.enums.UserType;
+import com.example.hotel.po.User;
+import com.example.hotel.vo.ResponseVO;
+import com.example.hotel.vo.UserForm;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-04
+ */
+@Service
+public class AdminServiceImpl implements AdminService {
+    private final static String ACCOUNT_EXIST = "账号已存在";
+    @Autowired
+    AdminMapper adminMapper;
+    @Override
+    public ResponseVO addManager(UserForm userForm) {
+        User user = new User();
+        user.setEmail(userForm.getEmail());
+        user.setPassword(userForm.getPassword());
+        user.setUserType(UserType.HotelManager);
+        try {
+            adminMapper.addManager(user);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            return ResponseVO.buildFailure(ACCOUNT_EXIST);
+        }
+        return ResponseVO.buildSuccess();
+    }
+}

+ 4 - 4
src/main/java/com/example/hotel/blImpl/user/AccountServiceImpl.java

@@ -41,8 +41,8 @@ public class AccountServiceImpl implements AccountService {
     }
 
     @Override
-    public User getUserInfo(String email) {
-        User user = accountMapper.getAccountByName(email);
+    public User getUserInfo(int id) {
+        User user = accountMapper.getAccountById(id);
         if (user == null) {
             return null;
         }
@@ -50,9 +50,9 @@ public class AccountServiceImpl implements AccountService {
     }
 
     @Override
-    public ResponseVO updateUserInfo(String email, String password, String username, String phonenumber) {
+    public ResponseVO updateUserInfo(int id, String password, String username, String phonenumber) {
         try {
-            accountMapper.updateAccount(email, password, username, phonenumber);
+            accountMapper.updateAccount(id, password, username, phonenumber);
         } catch (Exception e) {
             System.out.println(e.getMessage());
             return ResponseVO.buildFailure(UPDATE_ERROR);

+ 0 - 42
src/main/java/com/example/hotel/blImpl/user/ClientServiceImpl.java

@@ -1,42 +0,0 @@
-package com.example.hotel.blImpl.user;
-
-import com.example.hotel.bl.user.ClientService;
-import com.example.hotel.data.user.OrderMapper;
-import com.example.hotel.po.Order;
-import com.example.hotel.vo.OrderVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-02-29
- */
-@Service
-public class ClientServiceImpl implements ClientService {
-    @Autowired
-    OrderMapper orderMapper;
-
-    @Override
-    public void addOrder(OrderVO orderVO) {
-        Order order = new Order();
-        order.setUserId(orderVO.getUserId());
-        order.setHotelId(orderVO.getHotelId());
-        order.setCheckInnDate(orderVO.getCheckInnDate());
-        order.setCheckOutDate(orderVO.getCheckOutDate());
-        order.setRoomType(orderVO.getRoomType());
-        order.setRoomNum(orderVO.getRoomNum());
-        order.setHaveChild(orderVO.isHaveChild());
-        order.setCreateDate(orderVO.getCreateDate());
-
-        orderMapper.insertOrder(order);
-
-
-    }
-
-    @Override
-    public List<OrderVO> retrieveOrders() {
-        return orderMapper.selectAllOrder();
-    }
-}

+ 61 - 61
src/main/java/com/example/hotel/config/WebConfiguration.java

@@ -1,61 +1,61 @@
-package com.example.hotel.config;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-03-03
- */
-import com.example.hotel.interceptor.TokenInterceptor;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor;
-import org.springframework.web.servlet.config.annotation.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Executors;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-
-/**
- * 跨域请求支持/token拦截
- * tip:只能写在一个配置类里
- */
-@Configuration
-public class WebConfiguration implements WebMvcConfigurer {
-
-    private TokenInterceptor tokenInterceptor;
-
-    //构造方法
-    public WebConfiguration(TokenInterceptor tokenInterceptor){
-        this.tokenInterceptor = tokenInterceptor;
-    }
-
-    @Override
-    public void addCorsMappings(CorsRegistry registry) {
-        registry.addMapping("/**")
-                .allowCredentials(true)
-                .allowedHeaders("*")
-                .allowedMethods("*");
-               // .allowedOrigins("*");
-    }
-
-    @Override
-    public void configureAsyncSupport(AsyncSupportConfigurer configurer){
-        configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(3)));
-        configurer.setDefaultTimeout(30000);
-    }
-
-    @Override
-    public void addInterceptors(InterceptorRegistry registry){
-        List<String> excludePath = new ArrayList<>();
-        //排除拦截,除了注册登录(此时还没token),其他都拦截
-        excludePath.add("/api/register");  //登录
-        excludePath.add("/api/login");     //注册
-      //  excludePath.add("/static/**");  //静态资源
-        excludePath.add("/assets/**");  //静态资源
-
-        registry.addInterceptor(tokenInterceptor)
-                .addPathPatterns("/**")
-                .excludePathPatterns(excludePath);
-        WebMvcConfigurer.super.addInterceptors(registry);
-    }
-}
+//package com.example.hotel.config;
+//
+///**
+// * @Author: chenyizong
+// * @Date: 2020-03-03
+// */
+//import com.example.hotel.interceptor.TokenInterceptor;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor;
+//import org.springframework.web.servlet.config.annotation.*;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.concurrent.Executors;
+//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+//
+//
+///**
+// * 跨域请求支持/token拦截
+// * tip:只能写在一个配置类里
+// */
+//@Configuration
+//public class WebConfiguration implements WebMvcConfigurer {
+//
+//    private TokenInterceptor tokenInterceptor;
+//
+//    //构造方法
+//    public WebConfiguration(TokenInterceptor tokenInterceptor){
+//        this.tokenInterceptor = tokenInterceptor;
+//    }
+//
+//    @Override
+//    public void addCorsMappings(CorsRegistry registry) {
+//        registry.addMapping("/**")
+//                .allowCredentials(true)
+//                .allowedHeaders("*")
+//                .allowedMethods("*");
+//                //.allowedOrigins("*");
+//    }
+//
+//    @Override
+//    public void configureAsyncSupport(AsyncSupportConfigurer configurer){
+//        configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(3)));
+//        configurer.setDefaultTimeout(30000);
+//    }
+//
+//    @Override
+//    public void addInterceptors(InterceptorRegistry registry){
+//        List<String> excludePath = new ArrayList<>();
+//        //排除拦截,除了注册登录(此时还没token),其他都拦截
+//        excludePath.add("/api/user/register");
+//        excludePath.add("/api/user/login");
+//        excludePath.add("/static/**");
+//        excludePath.add("/assets/**");
+//
+//        registry.addInterceptor(tokenInterceptor)
+//                .addPathPatterns("/**")
+//                .excludePathPatterns(excludePath);
+//        WebMvcConfigurer.super.addInterceptors(registry);
+//    }
+//}

+ 30 - 0
src/main/java/com/example/hotel/controller/admin/AdminController.java

@@ -0,0 +1,30 @@
+package com.example.hotel.controller.admin;
+
+import com.example.hotel.bl.admin.AdminService;
+import com.example.hotel.blImpl.admin.AdminServiceImpl;
+import com.example.hotel.vo.ResponseVO;
+import com.example.hotel.vo.UserForm;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-04
+ */
+@RestController()
+@RequestMapping("/api/admin")
+public class AdminController {
+    @Autowired
+    AdminServiceImpl adminService;
+
+    @PostMapping("/addManager")
+    public ResponseVO addManager(@RequestBody UserForm userForm){
+        return adminService.addManager(userForm);
+
+
+    }
+
+}

+ 9 - 8
src/main/java/com/example/hotel/controller/hotel/HotelController.java

@@ -4,6 +4,7 @@ import com.example.hotel.bl.hotel.HotelService;
 import com.example.hotel.po.HotelRoom;
 import com.example.hotel.util.Result;
 import com.example.hotel.vo.HotelVO;
+import com.example.hotel.vo.ResponseVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -16,27 +17,27 @@ public class HotelController {
     private HotelService hotelService;
 
     @PostMapping()
-    public ResponseEntity<?> createHotel(@RequestBody HotelVO hotelVO) {
+    public ResponseVO createHotel(@RequestBody HotelVO hotelVO) {
 
         hotelService.addHotel(hotelVO);
-        return Result.ok();
+        return ResponseVO.buildSuccess();
     }
 
     @GetMapping("/all")
-    public ResponseEntity<?> retrieveAllHotels(){
-        return Result.ok(hotelService.retrieveHotels());
+    public ResponseVO retrieveAllHotels(){
+        return ResponseVO.buildSuccess(hotelService.retrieveHotels());
     }
 
     @PostMapping("/roomInfo")
-    public ResponseEntity<?> addRoomInfo(@RequestBody HotelRoom hotelRoom) {
+    public ResponseVO addRoomInfo(@RequestBody HotelRoom hotelRoom) {
         hotelService.addHotelRoomInfo(hotelRoom);
-        return Result.ok();
+        return ResponseVO.buildSuccess();
     }
 
     @GetMapping("/{hotelId}/detail")
-    public ResponseEntity<?> retrieveHotelDetail(@PathVariable Integer hotelId) {
+    public ResponseVO retrieveHotelDetail(@PathVariable Integer hotelId) {
 
-        return Result.ok(hotelService.retrieveHotelDetails(hotelId));
+        return ResponseVO.buildSuccess(hotelService.retrieveHotelDetails(hotelId));
     }
 
 

+ 14 - 18
src/main/java/com/example/hotel/controller/user/AccountController.java

@@ -11,10 +11,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.constraints.Email;
 
 
 @RestController()
-@RequestMapping("/api")
+@RequestMapping("/api/user")
 public class AccountController {
     private final static String ACCOUNT_INFO_ERROR = "用户名或密码错误";
     @Autowired
@@ -26,8 +27,8 @@ public class AccountController {
         if (user == null) {
             return ResponseVO.buildFailure(ACCOUNT_INFO_ERROR);
         }
-        String token = TokenUtil.sign(user);
-        return ResponseVO.buildSuccess(token);
+       // String token = TokenUtil.sign(user);
+        return ResponseVO.buildSuccess(user);
 
     }
 
@@ -36,28 +37,23 @@ public class AccountController {
         return accountService.registerAccount(userVO);
     }
 
-//    @PostMapping("/logout")
-//    public String logOut(HttpSession session) {
-//        session.removeAttribute(InterceptorConfiguration.SESSION_KEY);
-//        return "index";
-//    }
 
-    @GetMapping("/userinfo")
-    public ResponseVO getUserInfo(HttpServletRequest httpServletRequest) {
-        String token = httpServletRequest.getHeader("token");
-        String email = TokenUtil.getEmail(token);
-        User user = accountService.getUserInfo(email);
+    @GetMapping("/{id}/getUserInfo")
+    public ResponseVO getUserInfo(@PathVariable int id) {
+//        String token = httpServletRequest.getHeader("Authorization");
+//        String email = TokenUtil.getEmail(token);
+        User user = accountService.getUserInfo(id);
         if(user==null){
             return ResponseVO.buildFailure(ACCOUNT_INFO_ERROR);
         }
         return ResponseVO.buildSuccess(user);
     }
 
-    @PostMapping("/userinfo/update")
-    public ResponseVO updateInfo(@RequestBody UserInfoVO userInfoVO, HttpServletRequest httpServletRequest){
-        String token = httpServletRequest.getHeader("token");
-        String email = TokenUtil.getEmail(token);
-        return accountService.updateUserInfo(email,userInfoVO.getPassword(),userInfoVO.getUserName(),userInfoVO.getPhoneNumber());
+    @PostMapping("/{id}/userinfo/update")
+    public ResponseVO updateInfo(@RequestBody UserInfoVO userInfoVO,@PathVariable int id){
+        //String token = httpServletRequest.getHeader("token");
+       // String email = TokenUtil.getEmail(token);
+        return accountService.updateUserInfo(id,userInfoVO.getPassword(),userInfoVO.getUserName(),userInfoVO.getPhoneNumber());
 
     }
 

+ 0 - 35
src/main/java/com/example/hotel/controller/user/ClientController.java

@@ -1,35 +0,0 @@
-package com.example.hotel.controller.user;
-
-import com.example.hotel.bl.user.ClientService;
-import com.example.hotel.util.Result;
-import com.example.hotel.vo.OrderVO;
-import com.example.hotel.vo.ResponseVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-02-29
- */
-
-
-@RestController()
-@RequestMapping("/api")
-public class ClientController {
-    @Autowired
-    private ClientService clientService;
-
-    @PostMapping("/hotel/reserve")
-    public ResponseVO reserveHotel(@RequestBody OrderVO orderVO){
-        clientService.addOrder(orderVO);
-        return ResponseVO.buildSuccess(orderVO);
-    }
-
-    @GetMapping("/order/all")
-    public ResponseEntity<?> retrieveAllOrders(){
-        return Result.ok(clientService.retrieveOrders());
-    }
-
-
-}

+ 16 - 0
src/main/java/com/example/hotel/data/admin/AdminMapper.java

@@ -0,0 +1,16 @@
+package com.example.hotel.data.admin;
+
+import com.example.hotel.po.User;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author: chenyizong
+ * @Date: 2020-03-04
+ */
+@Mapper
+@Repository
+public interface AdminMapper {
+
+    int addManager(User user);
+}

+ 6 - 2
src/main/java/com/example/hotel/data/user/AccountMapper.java

@@ -5,6 +5,8 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 
 @Mapper
 @Repository
@@ -24,15 +26,17 @@ public interface AccountMapper {
      */
      User getAccountByName(@Param("email") String email);
 
+     User getAccountById(@Param("id") int id);
+
     /**
      * 更新用户信息
-     * @param email
+     * @param id
      * @param password
      * @param username
      * @param phonenumber
      * @return
      */
-     int updateAccount(@Param("email") String email, @Param("password") String password,@Param("username") String username, @Param("phonenumber") String phonenumber);
+     int updateAccount(@Param("id") int id, @Param("password") String password,@Param("userName") String username, @Param("phoneNumber") String phonenumber);
 
 
 }

+ 0 - 21
src/main/java/com/example/hotel/data/user/OrderMapper.java

@@ -1,21 +0,0 @@
-package com.example.hotel.data.user;
-
-import com.example.hotel.po.Order;
-import com.example.hotel.vo.OrderVO;
-import org.apache.ibatis.annotations.Mapper;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-02-29
- */
-@Mapper
-@Repository
-public interface OrderMapper {
-
-    int insertOrder(Order order);
-
-    List<OrderVO> selectAllOrder();
-}

+ 9 - 6
src/main/java/com/example/hotel/enums/UserType.java

@@ -5,14 +5,17 @@ package com.example.hotel.enums;
  * @Date: 2020-02-29
  */
 public enum UserType {
-    Client(1),
-    HotelManager(2),
-    Manager(3);
-    private int value;
+    Client("1"),
+    HotelManager("2"),
+    Manager("3");
+    private String value;
 
-    UserType(int value) {
+    UserType(String value) {
         this.value = value;
     }
-
+    @Override
+    public String toString() {
+        return value;
+    }
 
 }

+ 48 - 48
src/main/java/com/example/hotel/interceptor/TokenInterceptor.java

@@ -1,48 +1,48 @@
-package com.example.hotel.interceptor;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-03-03
- */
-import com.alibaba.fastjson.JSONObject;
-import com.example.hotel.util.TokenUtil;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Component
-public class TokenInterceptor implements HandlerInterceptor {
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception{
-        if(request.getMethod().equals("OPTIONS")){
-            response.setStatus(HttpServletResponse.SC_OK);
-            return true;
-        }
-        response.setCharacterEncoding("utf-8");
-        String token = request.getHeader("token");
-        if(token != null){
-            boolean result = TokenUtil.verify(token);
-            if(result){
-                System.out.println("通过拦截器");
-                return true;
-            }
-        }
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("application/json; charset=utf-8");
-        try{
-            JSONObject json = new JSONObject();
-            json.put("msg","token verify fail");
-            json.put("code","50000");
-            response.getWriter().append(json.toJSONString());
-            System.out.println("认证失败,未通过拦截器");
-        }catch (Exception e){
-            e.printStackTrace();
-            response.sendError(500);
-            return false;
-        }
-        return false;
-    }
-}
+//package com.example.hotel.interceptor;
+//
+///**
+// * @Author: chenyizong
+// * @Date: 2020-03-03
+// */
+//import com.alibaba.fastjson.JSONObject;
+//import com.example.hotel.util.TokenUtil;
+//import org.springframework.stereotype.Component;
+//import org.springframework.web.servlet.HandlerInterceptor;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import javax.servlet.http.HttpServletResponse;
+//
+//@Component
+//public class TokenInterceptor implements HandlerInterceptor {
+//
+//    @Override
+//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception{
+//        if(request.getMethod().equals("OPTIONS")){
+//            response.setStatus(HttpServletResponse.SC_OK);
+//            return true;
+//        }
+//        response.setCharacterEncoding("utf-8");
+//        String token = request.getHeader("Authorization");
+//        if(token != null){
+//            boolean result = TokenUtil.verify(token);
+//            if(result){
+//                System.out.println("通过拦截器");
+//                return true;
+//            }
+//        }
+//        response.setCharacterEncoding("UTF-8");
+//        response.setContentType("application/json; charset=utf-8");
+//        try{
+//            JSONObject json = new JSONObject();
+//            json.put("msg","token verify fail");
+//            json.put("code","50000");
+//            response.getWriter().append(json.toJSONString());
+//            System.out.println("认证失败,未通过拦截器");
+//        }catch (Exception e){
+//            e.printStackTrace();
+//            response.sendError(500);
+//            return false;
+//        }
+//        return false;
+//    }
+//}

+ 0 - 101
src/main/java/com/example/hotel/po/Order.java

@@ -1,101 +0,0 @@
-package com.example.hotel.po;
-
-import java.util.Date;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-02-29
- */
-public class Order {
-    private Integer id;
-    private Integer userId;
-    private Integer hotelId;
-    private Date checkInDate;
-    private Date checkOutDate;
-    private String roomType;
-    private Integer roomNum;
-    private Integer peopleNum;
-    private boolean haveChild;
-    private Date createDate;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getHotelId() {
-        return hotelId;
-    }
-
-    public void setHotelId(Integer hotelId) {
-        this.hotelId = hotelId;
-    }
-
-    public Date getCheckInnDate() {
-        return checkInDate;
-    }
-
-    public void setCheckInnDate(Date checkInnDate) {
-        this.checkInDate = checkInnDate;
-    }
-
-    public Date getCheckOutDate() {
-        return checkOutDate;
-    }
-
-    public void setCheckOutDate(Date checkOutDate) {
-        this.checkOutDate = checkOutDate;
-    }
-
-    public String getRoomType() {
-        return roomType;
-    }
-
-    public void setRoomType(String roomType) {
-        this.roomType = roomType;
-    }
-
-    public Integer getRoomNum() {
-        return roomNum;
-    }
-
-    public void setRoomNum(Integer roomNum) {
-        this.roomNum = roomNum;
-    }
-
-    public Integer getPeopleNum() {
-        return peopleNum;
-    }
-
-    public void setPeopleNum(Integer peopleNum) {
-        this.peopleNum = peopleNum;
-    }
-
-    public boolean isHaveChild() {
-        return haveChild;
-    }
-
-    public void setHaveChild(boolean haveChild) {
-        this.haveChild = haveChild;
-    }
-
-    public Date getCreateDate() {
-        return createDate;
-    }
-
-    public void setCreateDate(Date createDate) {
-        this.createDate = createDate;
-    }
-
-}

+ 0 - 101
src/main/java/com/example/hotel/vo/OrderVO.java

@@ -1,101 +0,0 @@
-package com.example.hotel.vo;
-
-import java.util.Date;
-
-/**
- * @Author: chenyizong
- * @Date: 2020-02-29
- */
-public class OrderVO {
-    private Integer id;
-    private Integer userId;
-    private Integer hotelId;
-    private Date checkInDate;
-    private Date checkOutDate;
-    private String roomType;
-    private Integer roomNum;
-    private Integer peopleNum;
-    private boolean haveChild;
-    private Date createDate;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getHotelId() {
-        return hotelId;
-    }
-
-    public void setHotelId(Integer hotelId) {
-        this.hotelId = hotelId;
-    }
-    public Date getCheckInnDate() {
-        return checkInDate;
-    }
-
-    public void setCheckInnDate(Date checkInnDate) {
-        this.checkInDate = checkInnDate;
-    }
-
-    public Date getCheckOutDate() {
-        return checkOutDate;
-    }
-
-    public void setCheckOutDate(Date checkOutDate) {
-        this.checkOutDate = checkOutDate;
-    }
-
-    public String getRoomType() {
-        return roomType;
-    }
-
-    public void setRoomType(String roomType) {
-        this.roomType = roomType;
-    }
-
-    public Integer getRoomNum() {
-        return roomNum;
-    }
-
-    public void setRoomNum(Integer roomNum) {
-        this.roomNum = roomNum;
-    }
-
-    public Integer getPeopleNum() {
-        return peopleNum;
-    }
-
-    public void setPeopleNum(Integer peopleNum) {
-        this.peopleNum = peopleNum;
-    }
-
-    public boolean isHaveChild() {
-        return haveChild;
-    }
-
-    public void setHaveChild(boolean haveChild) {
-        this.haveChild = haveChild;
-    }
-
-    public Date getCreateDate() {
-        return createDate;
-    }
-
-    public void setCreateDate(Date createDate) {
-        this.createDate = createDate;
-    }
-
-
-}

+ 1 - 1
src/main/resources/application.yml

@@ -2,7 +2,7 @@ spring:
   datasource:
      url: jdbc:mysql://localhost:3306/Hotel?serverTimezone=CTT&characterEncoding=UTF-8
      username: root
-     password: 1598753
+     password: 123456
      driver-class-name: com.mysql.cj.jdbc.Driver
      max-active: 200
      max-idle: 20

+ 19 - 0
src/main/resources/dataImpl/admin/AdminMapper.xml

@@ -0,0 +1,19 @@
+<?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.example.hotel.data.admin.AdminMapper">
+    <insert id="addManager" parameterType="com.example.hotel.po.User" useGeneratedKeys="true" keyProperty="id">
+        insert into User(email,password,usertype)
+        values(#{email},#{password},#{userType})
+    </insert>
+
+
+    <resultMap id="User" type="com.example.hotel.po.User">
+        <id column="id" property="id"></id>
+        <result column="email" property="email"></result>
+        <result column="password" property="password"></result>
+        <result column="username" property="userName"></result>
+        <result column="phonenumber" property="phoneNumber"></result>
+        <result column="credit" property="credit"></result>
+        <result column="usertype" property="userType"></result>
+    </resultMap>
+</mapper>

+ 12 - 2
src/main/resources/dataImpl/user/AccountMapper.xml

@@ -3,17 +3,27 @@
 <mapper namespace="com.example.hotel.data.user.AccountMapper">
     <insert id="createNewAccount" parameterType="com.example.hotel.po.User" useGeneratedKeys="true" keyProperty="id">
         insert into User(email,password,username,phonenumber,credit,usertype)
-        values(#{email},#{password},#{username},#{phonenumber},#{credit},#{usertype})
+        values(#{email},#{password},#{userName},#{phoneNumber},#{credit},#{userType})
     </insert>
     <select id="getAccountByName" resultMap="User">
         select * from User where email=#{email}
     </select>
+    <select id="getAccountById" resultMap="User">
+        select * from User where id=#{id}
+    </select>
     <update id="updateAccount">
-        update User set password=#{password},username=#username,phonenumber=#phonenumber,credit=#credit
+        update User set password=#{password},username=#{userName},phonenumber=#{phoneNumber}
         where email=#{email}
     </update>
 
 
     <resultMap id="User" type="com.example.hotel.po.User">
+        <id column="id" property="id"></id>
+        <result column="email" property="email"></result>
+        <result column="password" property="password"></result>
+        <result column="username" property="userName"></result>
+        <result column="phonenumber" property="phoneNumber"></result>
+        <result column="credit" property="credit"></result>
+        <result column="usertype" property="userType"></result>
     </resultMap>
 </mapper>

+ 0 - 16
src/main/resources/dataImpl/user/OrderMapper.xml

@@ -1,16 +0,0 @@
-<?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.example.hotel.data.user.OrderMapper">
-
-    <insert id="insertOrder" parameterType="com.example.hotel.po.Order"
-            useGeneratedKeys="true" keyProperty="id">
-        insert into Order(id,userId,hotelId,checkInDate,checkOutDate,roomType,roomNum,peopleNum,haveChild,createDate)
-        values (#{id},#{userId},#{checkInDate},#{checkOutDate},#{roomType},#{roomNum},#{peopleNum},#{haveChild},#{createDate})
-    </insert>
-    <select id="selectAllOrder" resultMap="Order">
-        select * from Order
-    </select>
-
-    <resultMap id="Order" type="com.example.hotel.po.Order">
-    </resultMap>
-</mapper>