Go пре 4 година
родитељ
комит
7d191245b8
18 измењених фајлова са 1011 додато и 7 уклоњено
  1. 15 0
      front/project/admin/routes/ready/feedback/index.js
  2. 3 0
      front/project/admin/routes/ready/feedback/index.less
  3. 187 0
      front/project/admin/routes/ready/feedback/page.js
  4. 2 1
      front/project/admin/routes/ready/index.js
  5. 12 0
      front/project/admin/stores/user.js
  6. 7 0
      server/data/src/main/java/com/qxgmat/data/dao/UserReadyRoomFeedbackMapper.java
  7. 282 0
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserReadyRoomFeedback.java
  8. 34 0
      server/data/src/main/java/com/qxgmat/data/dao/mapping/UserReadyRoomFeedbackMapper.xml
  9. 68 1
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/UserController.java
  10. 14 0
      server/gateway-api/src/main/java/com/qxgmat/controller/api/MyController.java
  11. 77 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/extend/ReadyRoomExtendDto.java
  12. 27 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/UserReadyRoomFeedbackDto.java
  13. 27 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/UserTextbookFeedbackDto.java
  14. 22 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/response/UserFeedbackErrorInfoDto.java
  15. 101 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/response/UserReadyRoomFeedbackInfoDto.java
  16. 5 5
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/response/UserTextbookFeedbackInfoDto.java
  17. 28 0
      server/gateway-api/src/main/java/com/qxgmat/dto/request/UserReadyRoomFeedbackDto.java
  18. 100 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserReadyRoomFeedbackService.java

+ 15 - 0
front/project/admin/routes/ready/feedback/index.js

@@ -0,0 +1,15 @@
+import module from '../../module';
+import group from '../group';
+
+export default {
+  path: '/ready/feedback',
+  key: 'ready-feedback',
+  title: '考场补充',
+  needLogin: true,
+  module,
+  group,
+  index: true,
+  component() {
+    return import('./page');
+  },
+};

+ 3 - 0
front/project/admin/routes/ready/feedback/index.less

@@ -0,0 +1,3 @@
+@charset "utf-8";
+
+#ready-feedback {}

+ 187 - 0
front/project/admin/routes/ready/feedback/page.js

@@ -0,0 +1,187 @@
+import React from 'react';
+import { Modal, Button } from 'antd';
+import './index.less';
+import Page from '@src/containers/Page';
+import Block from '@src/components/Block';
+import FilterLayout from '@src/layouts/FilterLayout';
+import ActionLayout from '@src/layouts/ActionLayout';
+import TableLayout from '@src/layouts/TableLayout';
+import { getMap, formatDate } from '@src/services/Tools';
+import { asyncSMessage, asyncDelConfirm } from '@src/services/AsyncTools';
+import { FeedbackStatus } from '../../../../Constant';
+import { User } from '../../../stores/user';
+
+const FeedbackStatusMap = getMap(FeedbackStatus, 'value', 'label');
+export default class extends Page {
+  init() {
+    this.actionList = [{
+      key: 'handle',
+      type: 'danger',
+      name: '批量采纳',
+      needSelect: 1,
+    }, {
+      key: 'nohandle',
+      type: 'danger',
+      name: '批量不修改',
+      needSelect: 1,
+    }, {
+      key: 'ignore',
+      type: 'danger',
+      name: '批量忽略',
+      needSelect: 1,
+    }];
+    this.filterForm = [{
+      key: 'status',
+      type: 'select',
+      name: '处理状态',
+      allowClear: true,
+      select: FeedbackStatus,
+      number: true,
+      placeholder: '请选择',
+    }];
+    this.columns = [{
+      title: '考场',
+      dataIndex: 'room.title',
+    }, {
+      title: '提交时间',
+      dataIndex: 'createTime',
+      render: (text) => {
+        return formatDate(text);
+      },
+    }, {
+      title: '提交人',
+      dataIndex: 'user.nickname',
+    }, {
+      title: '处理状态',
+      dataIndex: 'status',
+      render: (text) => {
+        return FeedbackStatusMap[text] || text;
+      },
+    }, {
+      title: '操作',
+      dataIndex: 'handler',
+      render: (text, record) => {
+        return <div className="table-button">
+          {(
+            <a onClick={() => {
+              this.detailAction(record);
+            }}>查看</a>
+          )}
+        </div>;
+      },
+    }];
+  }
+
+  initData() {
+    User.listReadyRoomFeedback(this.state.search).then(result => {
+      this.setTableData(result.list, result.total);
+    });
+  }
+
+  detailAction(row) {
+    this.setState({ detail: row });
+  }
+
+  handleDetail() {
+    const { detail } = this.state;
+    asyncDelConfirm('采纳确认', '是否采纳选中记录?', () => {
+      return User.editReadyRoomFeedback({ id: detail.id, status: 1 }).then(() => {
+        asyncSMessage('操作成功!');
+        this.setState({ detail: null });
+        this.refresh();
+      });
+    });
+  }
+
+  nohandleDetail() {
+    const { detail } = this.state;
+    asyncDelConfirm('不处理确认', '是否不处理选中记录?', () => {
+      return User.editReadyRoomFeedback({ id: detail.id, status: 3 }).then(() => {
+        asyncSMessage('操作成功!');
+        this.setState({ detail: null });
+        this.refresh();
+      });
+    });
+  }
+
+  ignoreDetail() {
+    const { detail } = this.state;
+    asyncDelConfirm('忽略确认', '是否忽略选中记录?', () => {
+      return User.editReadyRoomFeedback({ id: detail.id, status: 2 }).then(() => {
+        asyncSMessage('操作成功!');
+        this.setState({ detail: null });
+        this.refresh();
+      });
+    });
+  }
+
+  handleAction() {
+    const { selectedKeys } = this.state;
+    asyncDelConfirm('采纳确认', '是否采纳选中记录?', () => {
+      return Promise.all(selectedKeys.map(row => User.editReadyRoomFeedback({ id: row, status: 1 }))).then(() => {
+        asyncSMessage('操作成功!');
+        this.refresh();
+      });
+    });
+  }
+
+  nohandleAction() {
+    const { selectedKeys } = this.state;
+    asyncDelConfirm('不修改确认', '是否不修改选中记录?', () => {
+      return Promise.all(selectedKeys.map(row => User.editReadyRoomFeedback({ id: row, status: 3 }))).then(() => {
+        asyncSMessage('操作成功!');
+        this.refresh();
+      });
+    });
+  }
+
+  ignoreAction() {
+    const { selectedKeys } = this.state;
+    asyncDelConfirm('忽略确认', '是否忽略选中记录?', () => {
+      return Promise.all(selectedKeys.map(row => User.editReadyRoomFeedback({ id: row, status: 2 }))).then(() => {
+        asyncSMessage('操作成功!');
+        this.refresh();
+      });
+    });
+  }
+
+  renderView() {
+    return <Block flex>
+      <FilterLayout
+        show
+        itemList={this.filterForm}
+        data={this.state.search}
+        onChange={data => {
+          this.search(data);
+        }} />
+      <ActionLayout
+        itemList={this.actionList}
+        selectedKeys={this.state.selectedKeys}
+        onAction={key => this.onAction(key)}
+      />
+      <TableLayout
+        select
+        columns={this.tableSort(this.columns)}
+        list={this.state.list}
+        pagination={this.state.page}
+        loading={this.props.core.loading}
+        onChange={(pagination, filters, sorter) => this.tableChange(pagination, filters, sorter)}
+        onSelect={(keys, rows) => this.tableSelect(keys, rows)}
+        selectedKeys={this.state.selectedKeys}
+      />
+      {this.state.detail && <Modal visible title='补充详情' footer={null} closable onCancel={() => {
+        this.setState({ detail: null });
+      }}>
+        <p>考场:{this.state.detail.room.title}</p>
+        <p>补充内容{this.state.detail.content}</p>
+        {!this.state.detail.status && <p><Button type="primary" onClick={() => {
+          this.handleDetail();
+        }}>采纳</Button><Button type="primary" onClick={() => {
+          this.nohandleDetail();
+        }}>无需修改</Button><Button type="ghost" onClick={() => {
+          this.ignoreDetail();
+        }}>忽略</Button></p>}
+      </Modal>}
+    </Block>;
+  }
+}

+ 2 - 1
front/project/admin/routes/ready/index.js

@@ -1,8 +1,9 @@
 import article from './article';
 import articleDetail from './articleDetail';
 import room from './room';
+import feedback from './feedback';
 import data from './data';
 import read from './read';
 import readDetail from './readDetail';
 
-export default [article, articleDetail, room, data, read, readDetail];
+export default [article, articleDetail, room, feedback, data, read, readDetail];

+ 12 - 0
front/project/admin/stores/user.js

@@ -69,6 +69,18 @@ export default class UserStore extends BaseStore {
     return this.apiGet('/user/textbook_feedback/detail', params);
   }
 
+  listReadyRoomFeedback(params) {
+    return this.apiGet('/user/ready_room_feedback/list', params);
+  }
+
+  editReadyRoomFeedback(params) {
+    return this.apiPut('/user/ready_room_feedback/edit', params);
+  }
+
+  getReadyRoomFeedback(params) {
+    return this.apiGet('/user/ready_room_feedback/detail', params);
+  }
+
   listService(params) {
     return this.apiGet('/user/service/list', params);
   }

+ 7 - 0
server/data/src/main/java/com/qxgmat/data/dao/UserReadyRoomFeedbackMapper.java

@@ -0,0 +1,7 @@
+package com.qxgmat.data.dao;
+
+import com.nuliji.tools.mybatis.Mapper;
+import com.qxgmat.data.dao.entity.UserReadyRoomFeedback;
+
+public interface UserReadyRoomFeedbackMapper extends Mapper<UserReadyRoomFeedback> {
+}

+ 282 - 0
server/data/src/main/java/com/qxgmat/data/dao/entity/UserReadyRoomFeedback.java

@@ -0,0 +1,282 @@
+package com.qxgmat.data.dao.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+@Table(name = "user_ready_room_feedback")
+public class UserReadyRoomFeedback implements Serializable {
+    @Id
+    @Column(name = "`id`")
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @Column(name = "`user_id`")
+    private Integer userId;
+
+    /**
+     * 考场id
+     */
+    @Column(name = "`room_id`")
+    private Integer roomId;
+
+    @Column(name = "`manager_id`")
+    private Integer managerId;
+
+    /**
+     * 审核状态
+     */
+    @Column(name = "`status`")
+    private Integer status;
+
+    @Column(name = "`create_time`")
+    private Date createTime;
+
+    @Column(name = "`handle_time`")
+    private Date handleTime;
+
+    /**
+     * 补充内容
+     */
+    @Column(name = "`content`")
+    private String content;
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * @return id
+     */
+    public Integer getId() {
+        return id;
+    }
+
+    /**
+     * @param id
+     */
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**
+     * 获取用户id
+     *
+     * @return user_id - 用户id
+     */
+    public Integer getUserId() {
+        return userId;
+    }
+
+    /**
+     * 设置用户id
+     *
+     * @param userId 用户id
+     */
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    /**
+     * 获取考场id
+     *
+     * @return room_id - 考场id
+     */
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    /**
+     * 设置考场id
+     *
+     * @param roomId 考场id
+     */
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
+    /**
+     * @return manager_id
+     */
+    public Integer getManagerId() {
+        return managerId;
+    }
+
+    /**
+     * @param managerId
+     */
+    public void setManagerId(Integer managerId) {
+        this.managerId = managerId;
+    }
+
+    /**
+     * 获取审核状态
+     *
+     * @return status - 审核状态
+     */
+    public Integer getStatus() {
+        return status;
+    }
+
+    /**
+     * 设置审核状态
+     *
+     * @param status 审核状态
+     */
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    /**
+     * @return create_time
+     */
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    /**
+     * @param createTime
+     */
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    /**
+     * @return handle_time
+     */
+    public Date getHandleTime() {
+        return handleTime;
+    }
+
+    /**
+     * @param handleTime
+     */
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
+    }
+
+    /**
+     * 获取补充内容
+     *
+     * @return content - 补充内容
+     */
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * 设置补充内容
+     *
+     * @param content 补充内容
+     */
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", roomId=").append(roomId);
+        sb.append(", managerId=").append(managerId);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", handleTime=").append(handleTime);
+        sb.append(", content=").append(content);
+        sb.append("]");
+        return sb.toString();
+    }
+
+    public static UserReadyRoomFeedback.Builder builder() {
+        return new UserReadyRoomFeedback.Builder();
+    }
+
+    public static class Builder {
+        private UserReadyRoomFeedback obj;
+
+        public Builder() {
+            this.obj = new UserReadyRoomFeedback();
+        }
+
+        /**
+         * @param id
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * 设置用户id
+         *
+         * @param userId 用户id
+         */
+        public Builder userId(Integer userId) {
+            obj.setUserId(userId);
+            return this;
+        }
+
+        /**
+         * 设置考场id
+         *
+         * @param roomId 考场id
+         */
+        public Builder roomId(Integer roomId) {
+            obj.setRoomId(roomId);
+            return this;
+        }
+
+        /**
+         * @param managerId
+         */
+        public Builder managerId(Integer managerId) {
+            obj.setManagerId(managerId);
+            return this;
+        }
+
+        /**
+         * 设置审核状态
+         *
+         * @param status 审核状态
+         */
+        public Builder status(Integer status) {
+            obj.setStatus(status);
+            return this;
+        }
+
+        /**
+         * @param createTime
+         */
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
+            return this;
+        }
+
+        /**
+         * @param handleTime
+         */
+        public Builder handleTime(Date handleTime) {
+            obj.setHandleTime(handleTime);
+            return this;
+        }
+
+        /**
+         * 设置补充内容
+         *
+         * @param content 补充内容
+         */
+        public Builder content(String content) {
+            obj.setContent(content);
+            return this;
+        }
+
+        public UserReadyRoomFeedback build() {
+            return this.obj;
+        }
+    }
+}

+ 34 - 0
server/data/src/main/java/com/qxgmat/data/dao/mapping/UserReadyRoomFeedbackMapper.xml

@@ -0,0 +1,34 @@
+<?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.qxgmat.data.dao.UserReadyRoomFeedbackMapper">
+  <resultMap id="BaseResultMap" type="com.qxgmat.data.dao.entity.UserReadyRoomFeedback">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="user_id" jdbcType="INTEGER" property="userId" />
+    <result column="room_id" jdbcType="INTEGER" property="roomId" />
+    <result column="manager_id" jdbcType="INTEGER" property="managerId" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="handle_time" jdbcType="TIMESTAMP" property="handleTime" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.qxgmat.data.dao.entity.UserReadyRoomFeedback">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    <result column="content" jdbcType="LONGVARCHAR" property="content" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `id`, `user_id`, `room_id`, `manager_id`, `status`, `create_time`, `handle_time`
+  </sql>
+  <sql id="Blob_Column_List">
+    <!--
+      WARNING - @mbg.generated
+    -->
+    `content`
+  </sql>
+</mapper>

+ 68 - 1
server/gateway-api/src/main/java/com/qxgmat/controller/admin/UserController.java

@@ -80,6 +80,9 @@ public class UserController {
     private QuestionNoService questionNoService;
 
     @Autowired
+    private ReadyRoomService readyRoomService;
+
+    @Autowired
     private UsersService usersService;
 
     @Autowired
@@ -128,6 +131,9 @@ public class UserController {
     private UserTextbookFeedbackService userTextbookFeedbackService;
 
     @Autowired
+    private UserReadyRoomFeedbackService userReadyRoomFeedbackService;
+
+    @Autowired
     private UserOrderRecordService userOrderRecordService;
 
     @Autowired
@@ -555,7 +561,7 @@ public class UserController {
 
     @RequestMapping(value = "/textbook_feedback/edit", method = RequestMethod.PUT)
     @ApiOperation(value = "修改机经勘误信息", httpMethod = "PUT")
-    public Response<Boolean> editTextbookFeedback(@RequestBody @Validated UserFeedbackErrorDto dto, HttpServletRequest request) {
+    public Response<Boolean> editTextbookFeedback(@RequestBody @Validated UserTextbookFeedbackDto dto, HttpServletRequest request) {
         UserTextbookFeedback entity = Transform.dtoToEntity(dto);
         UserTextbookFeedback in = userTextbookFeedbackService.get(entity.getId());
 
@@ -634,6 +640,67 @@ public class UserController {
         return ResponseHelp.success(pr, page, size, p.getTotal());
     }
 
+    @RequestMapping(value = "/ready_room_feedback/edit", method = RequestMethod.PUT)
+    @ApiOperation(value = "修改考场补充信息", httpMethod = "PUT")
+    public Response<Boolean> editReadyRoomFeedback(@RequestBody @Validated UserReadyRoomFeedbackDto dto, HttpServletRequest request) {
+        UserReadyRoomFeedback entity = Transform.dtoToEntity(dto);
+        UserReadyRoomFeedback in = userReadyRoomFeedbackService.get(entity.getId());
+
+        // 处理设定
+        if(in.getHandleTime() == null){
+            entity.setHandleTime(new Date());
+            Manager manager = shiroHelp.getLoginManager();
+            entity.setManagerId(manager.getId());
+        }
+
+        entity = userReadyRoomFeedbackService.edit(entity);
+
+        managerLogService.log(request);
+        return ResponseHelp.success(true);
+    }
+
+    @RequestMapping(value = "/ready_room_feedback/detail", method = RequestMethod.GET)
+    @ApiOperation(value = "考场补充详情", httpMethod = "GET")
+    public Response<UserReadyRoomFeedbackInfoDto> detailReadyRoomFeedback(@RequestParam int id, HttpServletRequest request) {
+        UserReadyRoomFeedback entity = userReadyRoomFeedbackService.get(id);
+        UserReadyRoomFeedbackInfoDto dto = Transform.convert(entity, UserReadyRoomFeedbackInfoDto.class);
+
+        User user = usersService.get(entity.getUserId());
+        UserExtendDto userDto = Transform.convert(user, UserExtendDto.class);
+        dto.setUser(userDto);
+
+        ReadyRoom room = readyRoomService.get(entity.getRoomId());
+        ReadyRoomExtendDto roomDto = Transform.convert(room, ReadyRoomExtendDto.class);
+        dto.setRoom(roomDto);
+
+        return ResponseHelp.success(dto);
+    }
+
+    @RequestMapping(value = "/ready_room_feedback/list", method = RequestMethod.GET)
+    @ApiOperation(value = "考场补充列表", httpMethod = "GET")
+    public Response<PageMessage<UserReadyRoomFeedbackInfoDto>> listReadyRoomFeedback(
+            @RequestParam(required = false, defaultValue = "1") int page,
+            @RequestParam(required = false, defaultValue = "100") int size,
+            @RequestParam(required = false) Integer status,
+            @RequestParam(required = false, defaultValue = "id") String order,
+            @RequestParam(required = false, defaultValue = "desc") String direction,
+            HttpSession session) {
+        Page<UserReadyRoomFeedback> p = userReadyRoomFeedbackService.listAdmin(page, size, FeedbackStatus.ValueOf(status), order, DirectionStatus.ValueOf(direction));
+        List<UserReadyRoomFeedbackInfoDto> pr = Transform.convert(p, UserReadyRoomFeedbackInfoDto.class);
+
+        // 绑定用户
+        Collection userIds = Transform.getIds(p, UserReadyRoomFeedback.class, "userId");
+        List<User> userList = usersService.select(userIds);
+        Transform.combine(pr, userList, UserReadyRoomFeedbackInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
+
+        // 绑定考场
+        Collection roomIds = Transform.getIds(p, UserReadyRoomFeedback.class, "roomId");
+        List<ReadyRoom> roomList = readyRoomService.select(roomIds);
+        Transform.combine(pr, roomList, UserReadyRoomFeedbackInfoDto.class, "roomId", "room", ReadyRoom.class, "id", ReadyRoomExtendDto.class);
+
+        return ResponseHelp.success(pr, page, size, p.getTotal());
+    }
+
     @RequestMapping(value = "/course/appointment/add", method = RequestMethod.POST)
     @ApiOperation(value = "添加课程预约", httpMethod = "POST")
     public Response<UserCourseAppointment> addCourseAppointment(@RequestBody @Validated UserCourseAppointmentDto dto, HttpServletRequest request) {

+ 14 - 0
server/gateway-api/src/main/java/com/qxgmat/controller/api/MyController.java

@@ -186,6 +186,9 @@ public class MyController {
     private UserTextbookFeedbackService userTextbookFeedbackService;
 
     @Autowired
+    private UserReadyRoomFeedbackService userReadyRoomFeedbackService;
+
+    @Autowired
     private UserQuestionService userQuestionService;
 
     @Autowired
@@ -1535,6 +1538,17 @@ public class MyController {
         return ResponseHelp.success(true);
     }
 
+    @RequestMapping(value = "/feedback/ready/room", method = RequestMethod.POST)
+    @ApiOperation(value = "添加考场反馈", notes = "添加考场反馈", httpMethod = "POST")
+    public Response<Boolean> addFeedbackTextbook(@RequestBody @Validated UserReadyRoomFeedbackDto dto)  {
+        UserReadyRoomFeedback entity = Transform.dtoToEntity(dto);
+        User user = (User) shiroHelp.getLoginUser();
+        entity.setUserId(user.getId());
+        userReadyRoomFeedbackService.add(entity);
+
+        return ResponseHelp.success(true);
+    }
+
     @RequestMapping(value = "/faq", method = RequestMethod.POST)
     @ApiOperation(value = "添加faq", notes = "添加faq", httpMethod = "POST")
     public Response<Boolean> addFaq(@RequestBody @Validated FaqDto dto)  {

+ 77 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/extend/ReadyRoomExtendDto.java

@@ -0,0 +1,77 @@
+package com.qxgmat.dto.admin.extend;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.dao.entity.ReadyRoom;
+
+@Dto(entity = ReadyRoom.class)
+public class ReadyRoomExtendDto {
+    private Integer id;
+
+    private String position;
+
+    private Integer areaId;
+
+    private Integer isOverseas;
+
+    private String title;
+
+    private String address;
+
+    private String description;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getPosition() {
+        return position;
+    }
+
+    public void setPosition(String position) {
+        this.position = position;
+    }
+
+    public Integer getAreaId() {
+        return areaId;
+    }
+
+    public void setAreaId(Integer areaId) {
+        this.areaId = areaId;
+    }
+
+    public Integer getIsOverseas() {
+        return isOverseas;
+    }
+
+    public void setIsOverseas(Integer isOverseas) {
+        this.isOverseas = isOverseas;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+}

+ 27 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/UserReadyRoomFeedbackDto.java

@@ -0,0 +1,27 @@
+package com.qxgmat.dto.admin.request;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.dao.entity.UserReadyRoomFeedback;
+
+@Dto(entity = UserReadyRoomFeedback.class)
+public class UserReadyRoomFeedbackDto {
+    private Integer id;
+
+    private Integer status;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}

+ 27 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/UserTextbookFeedbackDto.java

@@ -0,0 +1,27 @@
+package com.qxgmat.dto.admin.request;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.dao.entity.UserTextbookFeedback;
+
+@Dto(entity = UserTextbookFeedback.class)
+public class UserTextbookFeedbackDto {
+    private Integer id;
+
+    private Integer status;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}

+ 22 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/response/UserFeedbackErrorInfoDto.java

@@ -4,6 +4,8 @@ import com.nuliji.tools.annotation.Dto;
 import com.qxgmat.data.dao.entity.UserFeedbackError;
 import com.qxgmat.dto.admin.extend.UserExtendDto;
 
+import java.util.Date;
+
 @Dto(entity = UserFeedbackError.class)
 public class UserFeedbackErrorInfoDto {
 
@@ -25,6 +27,10 @@ public class UserFeedbackErrorInfoDto {
 
     private String content;
 
+    private Date createTime;
+
+    private Date handleTime;
+
     public Integer getId() {
         return id;
     }
@@ -96,4 +102,20 @@ public class UserFeedbackErrorInfoDto {
     public void setTitle(String title) {
         this.title = title;
     }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getHandleTime() {
+        return handleTime;
+    }
+
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
+    }
 }

+ 101 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/response/UserReadyRoomFeedbackInfoDto.java

@@ -0,0 +1,101 @@
+package com.qxgmat.dto.admin.response;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.dao.entity.UserReadyRoomFeedback;
+import com.qxgmat.dto.admin.extend.ReadyRoomExtendDto;
+import com.qxgmat.dto.admin.extend.UserExtendDto;
+
+import java.util.Date;
+
+@Dto(entity = UserReadyRoomFeedback.class)
+public class UserReadyRoomFeedbackInfoDto {
+    private Integer id;
+
+    private Integer userId;
+
+    private UserExtendDto user;
+
+    private Integer roomId;
+
+    private ReadyRoomExtendDto room;
+
+    private String content;
+
+    private Integer status;
+
+    private Date createTime;
+
+    private Date handleTime;
+
+    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 UserExtendDto getUser() {
+        return user;
+    }
+
+    public void setUser(UserExtendDto user) {
+        this.user = user;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getHandleTime() {
+        return handleTime;
+    }
+
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
+    public ReadyRoomExtendDto getRoom() {
+        return room;
+    }
+
+    public void setRoom(ReadyRoomExtendDto room) {
+        this.room = room;
+    }
+}

+ 5 - 5
server/gateway-api/src/main/java/com/qxgmat/dto/admin/response/UserTextbookFeedbackInfoDto.java

@@ -30,7 +30,7 @@ public class UserTextbookFeedbackInfoDto {
 
     private Date createTime;
 
-    private Date updateTime;
+    private Date handleTime;
 
     public Integer getId() {
         return id;
@@ -112,11 +112,11 @@ public class UserTextbookFeedbackInfoDto {
         this.createTime = createTime;
     }
 
-    public Date getUpdateTime() {
-        return updateTime;
+    public Date getHandleTime() {
+        return handleTime;
     }
 
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
+    public void setHandleTime(Date handleTime) {
+        this.handleTime = handleTime;
     }
 }

+ 28 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/request/UserReadyRoomFeedbackDto.java

@@ -0,0 +1,28 @@
+package com.qxgmat.dto.request;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.dao.entity.UserReadyRoomFeedback;
+import com.qxgmat.data.dao.entity.UserTextbookFeedback;
+
+@Dto(entity = UserReadyRoomFeedback.class)
+public class UserReadyRoomFeedbackDto {
+    private Integer roomId;
+
+    private String content;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+}

+ 100 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserReadyRoomFeedbackService.java

@@ -0,0 +1,100 @@
+package com.qxgmat.service.inline;
+
+import com.github.pagehelper.Page;
+import com.nuliji.tools.AbstractService;
+import com.nuliji.tools.Tools;
+import com.nuliji.tools.Transform;
+import com.nuliji.tools.exception.ParameterException;
+import com.nuliji.tools.exception.SystemException;
+import com.nuliji.tools.mybatis.Example;
+import com.qxgmat.data.constants.enums.status.DirectionStatus;
+import com.qxgmat.data.constants.enums.status.FeedbackStatus;
+import com.qxgmat.data.dao.UserReadyRoomFeedbackMapper;
+import com.qxgmat.data.dao.entity.UserReadyRoomFeedback;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class UserReadyRoomFeedbackService extends AbstractService {
+    private static final Logger logger = LoggerFactory.getLogger(UserReadyRoomFeedbackService.class);
+
+    @Resource
+    private UserReadyRoomFeedbackMapper userReadyRoomFeedbackMapper;
+
+    private Map<String, String> adminMap = new HashMap<String, String>(){{
+    }};
+
+    public Page<UserReadyRoomFeedback> listAdmin(int page, int size, FeedbackStatus status, String order, DirectionStatus direction){
+        Example example = new Example(UserReadyRoomFeedback.class);
+        if (status != null)
+            example.and(
+                    example.createCriteria().andEqualTo("status", status.index)
+            );
+        if(order == null || order.isEmpty()) order = "id";
+        switch(direction){
+            case ASC:
+                example.orderBy(order).asc();
+                break;
+            case DESC:
+            default:
+                example.orderBy(order).desc();
+        }
+        return select(userReadyRoomFeedbackMapper, example, page, size);
+    }
+
+    public UserReadyRoomFeedback add(UserReadyRoomFeedback ad){
+        int result = insert(userReadyRoomFeedbackMapper, ad);
+        ad = one(userReadyRoomFeedbackMapper, ad.getId());
+        if(ad == null){
+            throw new SystemException("记录添加失败");
+        }
+        return ad;
+    }
+
+    public UserReadyRoomFeedback edit(UserReadyRoomFeedback ad){
+        UserReadyRoomFeedback in = one(userReadyRoomFeedbackMapper, ad.getId());
+        if(in == null){
+            throw new ParameterException("记录不存在");
+        }
+        int result = update(userReadyRoomFeedbackMapper, ad);
+        return ad;
+    }
+
+    public boolean delete(Number id){
+        UserReadyRoomFeedback in = one(userReadyRoomFeedbackMapper, id);
+        if(in == null){
+            throw new ParameterException("记录不存在");
+        }
+        int result = delete(userReadyRoomFeedbackMapper, id);
+        return result > 0;
+    }
+
+    public UserReadyRoomFeedback get(Number id){
+        UserReadyRoomFeedback in = one(userReadyRoomFeedbackMapper, id);
+
+        if(in == null){
+            throw new ParameterException("记录不存在");
+        }
+        return in;
+    }
+
+    public Page<UserReadyRoomFeedback> select(int page, int pageSize){
+        return select(userReadyRoomFeedbackMapper, page, pageSize);
+    }
+
+    public Page<UserReadyRoomFeedback> select(Integer[] ids){
+        return page(()->select(userReadyRoomFeedbackMapper, ids), 1, ids.length);
+    }
+
+    public List<UserReadyRoomFeedback> select(Collection ids){
+        return select(userReadyRoomFeedbackMapper, ids);
+    }
+
+}