Browse Source

feat(front): 课程笔记-回答

Go 5 years ago
parent
commit
cfce6e6efd
30 changed files with 565 additions and 192 deletions
  1. 1 1
      front/project/Constant.js
  2. 4 4
      front/project/admin/routes/interaction/askQuestion/page.js
  3. 4 4
      front/project/admin/routes/interaction/faq/page.js
  4. 4 4
      front/project/admin/routes/student/askCourse/page.js
  5. 4 4
      front/project/admin/routes/student/askQuestion/page.js
  6. 1 1
      front/project/admin/routes/user/abnormal/page.js
  7. 16 4
      front/project/www/components/Open/index.js
  8. 11 1
      front/project/www/components/Select/index.js
  9. 1 1
      front/project/www/routes/course/answer/index.js
  10. 143 49
      front/project/www/routes/course/answer/page.js
  11. 5 2
      front/project/www/routes/course/dataDetail/page.js
  12. 8 4
      front/project/www/routes/course/experience/page.js
  13. 1 1
      front/project/www/routes/course/note/index.js
  14. 222 30
      front/project/www/routes/course/note/page.js
  15. 2 2
      front/project/www/routes/my/answer/page.js
  16. 7 4
      front/project/www/routes/my/collect/page.js
  17. 2 1
      front/project/www/routes/my/message/page.js
  18. 4 0
      front/project/www/stores/course.js
  19. 12 4
      front/project/www/stores/my.js
  20. 3 3
      server/data/src/main/java/com/qxgmat/data/constants/enums/status/AskStatus.java
  21. 4 4
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/CourseController.java
  22. 4 4
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/QuestionController.java
  23. 3 10
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/SettingController.java
  24. 19 13
      server/gateway-api/src/main/java/com/qxgmat/controller/api/CourseController.java
  25. 34 14
      server/gateway-api/src/main/java/com/qxgmat/controller/api/MyController.java
  26. 20 0
      server/gateway-api/src/main/java/com/qxgmat/dto/response/MyDto.java
  27. 0 1
      server/gateway-api/src/main/java/com/qxgmat/service/UserNoteCourseService.java
  28. 11 12
      server/gateway-api/src/main/java/com/qxgmat/service/extend/MessageExtendService.java
  29. 11 6
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskCourseService.java
  30. 4 4
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskQuestionService.java

+ 1 - 1
front/project/Constant.js

@@ -44,7 +44,7 @@ export const InputSelect = [{ value: 0, label: '未填' }, { value: 1, label: '
 
 export const SystemSelect = [{ value: 0, label: '用户' }, { value: 1, label: '系统' }];
 
-export const AskStatus = [{ value: 0, label: '新增' }, { value: 1, label: '已回答' }, { value: 2, label: '忽略' }];
+export const AnswerStatus = [{ value: 0, label: '新增' }, { value: 1, label: '已回答' }, { value: 2, label: '忽略' }];
 
 export const FeedbackStatus = [{ value: 0, label: '新增' }, { value: 1, label: '已处理' }, { value: 2, label: '忽略' }, { value: 3, label: '无需修改' }];
 

+ 4 - 4
front/project/admin/routes/interaction/askQuestion/page.js

@@ -8,12 +8,12 @@ import ActionLayout from '@src/layouts/ActionLayout';
 import TableLayout from '@src/layouts/TableLayout';
 import { getMap, bindSearch, formatDate } from '@src/services/Tools';
 import { asyncSMessage, asyncDelConfirm } from '@src/services/AsyncTools';
-import { QuestionType, AskStatus, MoneyRange, SwitchSelect, AskTarget, AskModule } from '../../../../Constant';
+import { QuestionType, AnswerStatus, MoneyRange, SwitchSelect, AskTarget, AskModule } from '../../../../Constant';
 import { User } from '../../../stores/user';
 import { Question } from '../../../stores/question';
 
 const QuestionTypeMap = getMap(QuestionType, 'value', 'label');
-const AskStatusMap = getMap(AskStatus, 'value', 'label');
+const AnswerStatusMap = getMap(AnswerStatus, 'value', 'label');
 const SwitchSelectMap = getMap(SwitchSelect, 'value', 'label');
 const AskModuleMap = getMap(AskModule, 'value', 'label');
 export default class extends Page {
@@ -43,7 +43,7 @@ export default class extends Page {
       type: 'select',
       allowClear: true,
       name: '状态',
-      select: AskStatus,
+      select: AnswerStatus,
       number: true,
     }, {
       key: 'moneyRang',
@@ -127,7 +127,7 @@ export default class extends Page {
       title: '回答状态',
       dataIndex: 'answerStatus',
       render: (text) => {
-        return AskStatusMap[text] || text;
+        return AnswerStatusMap[text] || text;
       },
     }, {
       title: '展示状态',

+ 4 - 4
front/project/admin/routes/interaction/faq/page.js

@@ -7,13 +7,13 @@ import FilterLayout from '@src/layouts/FilterLayout';
 import TableLayout from '@src/layouts/TableLayout';
 import { getMap, formatDate, formatTreeData, bindSearch, flattenTree } from '@src/services/Tools';
 import { asyncSMessage, asyncForm } from '@src/services/AsyncTools';
-import { FaqChannel, SwitchSelect, AskStatus, MoneyRange } from '../../../../Constant';
+import { FaqChannel, SwitchSelect, AnswerStatus, MoneyRange } from '../../../../Constant';
 import { System } from '../../../stores/system';
 import { User } from '../../../stores/user';
 import { Course } from '../../../stores/course';
 
 const SwitchSelectMap = getMap(SwitchSelect, 'value', 'label');
-const AskStatusMap = getMap(AskStatus, 'value', 'label');
+const AnswerStatusMap = getMap(AnswerStatus, 'value', 'label');
 
 const FaqChannelTree = formatTreeData(FaqChannel, 'value', 'label', 'parent');
 const FaqChannelFlatten = flattenTree(FaqChannelTree, (row, item) => {
@@ -76,7 +76,7 @@ export default class extends Page {
       allowClear: true,
       number: true,
       name: '状态',
-      select: AskStatus,
+      select: AnswerStatus,
     }, {
       key: 'userId',
       type: 'select',
@@ -126,7 +126,7 @@ export default class extends Page {
       title: '回答状态',
       dataIndex: 'answerStatus',
       render: (text) => {
-        return AskStatusMap[text] || '';
+        return AnswerStatusMap[text] || '';
       },
     }, {
       title: '回答时间',

+ 4 - 4
front/project/admin/routes/student/askCourse/page.js

@@ -8,12 +8,12 @@ import FilterLayout from '@src/layouts/FilterLayout';
 import TableLayout from '@src/layouts/TableLayout';
 import { getMap, formatDate, formatTreeData, formatSeconds, bindSearch } from '@src/services/Tools';
 import { asyncSMessage, asyncDelConfirm } from '@src/services/AsyncTools';
-import { AskStatus, SwitchSelect, MoneyRange } from '../../../../Constant';
+import { AnswerStatus, SwitchSelect, MoneyRange } from '../../../../Constant';
 import { User } from '../../../stores/user';
 import { Exercise } from '../../../stores/exercise';
 import { Course } from '../../../stores/course';
 
-const AskStatusMap = getMap(AskStatus, 'value', 'label');
+const AnswerStatusMap = getMap(AnswerStatus, 'value', 'label');
 const SwitchSelectMap = getMap(SwitchSelect, 'value', 'label');
 export default class extends Page {
   init() {
@@ -45,7 +45,7 @@ export default class extends Page {
       type: 'select',
       allowClear: true,
       name: '回答状态',
-      select: AskStatus,
+      select: AnswerStatus,
       number: true,
     }, {
       key: 'showStatus',
@@ -130,7 +130,7 @@ export default class extends Page {
       title: '回答状态',
       dataIndex: 'answerStatus',
       render: (text) => {
-        return AskStatusMap[text] || text;
+        return AnswerStatusMap[text] || text;
       },
     }, {
       title: '展示状态',

+ 4 - 4
front/project/admin/routes/student/askQuestion/page.js

@@ -8,12 +8,12 @@ import ActionLayout from '@src/layouts/ActionLayout';
 import TableLayout from '@src/layouts/TableLayout';
 import { getMap, bindSearch, formatDate, formatSeconds } from '@src/services/Tools';
 import { asyncSMessage, asyncDelConfirm } from '@src/services/AsyncTools';
-import { QuestionType, AskStatus, MoneyRange, SwitchSelect, AskTarget, AskModule } from '../../../../Constant';
+import { QuestionType, AnswerStatus, MoneyRange, SwitchSelect, AskTarget, AskModule } from '../../../../Constant';
 import { User } from '../../../stores/user';
 import { Question } from '../../../stores/question';
 
 const QuestionTypeMap = getMap(QuestionType, 'value', 'label');
-const AskStatusMap = getMap(AskStatus, 'value', 'label');
+const AnswerStatusMap = getMap(AnswerStatus, 'value', 'label');
 const SwitchSelectMap = getMap(SwitchSelect, 'value', 'label');
 const AskModuleMap = getMap(AskModule, 'value', 'label');
 export default class extends Page {
@@ -43,7 +43,7 @@ export default class extends Page {
       type: 'select',
       allowClear: true,
       name: '状态',
-      select: AskStatus,
+      select: AnswerStatus,
       number: true,
     }, {
       key: 'moneyRang',
@@ -140,7 +140,7 @@ export default class extends Page {
       title: '回答状态',
       dataIndex: 'answerStatus',
       render: (text) => {
-        return AskStatusMap[text] || text;
+        return AnswerStatusMap[text] || text;
       },
     }, {
       title: '展示状态',

+ 1 - 1
front/project/admin/routes/user/abnormal/page.js

@@ -7,7 +7,7 @@ import FilterLayout from '@src/layouts/FilterLayout';
 import TableLayout from '@src/layouts/TableLayout';
 import { bindSearch, formatDate } from '@src/services/Tools';
 import { asyncSMessage, asyncDelConfirm } from '@src/services/AsyncTools';
-// import { QuestionType, AskStatus, MoneyRange, SwitchSelect, AskTarget } from '../../../../Constant';
+// import { QuestionType, AnswerStatus, MoneyRange, SwitchSelect, AskTarget } from '../../../../Constant';
 import { User } from '../../../stores/user';
 
 export default class extends Page {

+ 16 - 4
front/project/www/components/Open/index.js

@@ -23,6 +23,18 @@ export default class Open extends Component {
     }
   }
 
+  open() {
+    const { onOpen } = this.props;
+    this.setState({ show: true });
+    if (onOpen) onOpen();
+  }
+
+  close() {
+    const { onClose } = this.props;
+    this.setState({ show: false });
+    if (onClose) onClose();
+  }
+
   render() {
     const { show, more } = this.state;
     const { up, down, height, className = '', children } = this.props;
@@ -37,17 +49,17 @@ export default class Open extends Component {
         >
           {children}
         </div>
-        {more && show && <span onClick={() => this.setState({ show: false })}>{up}</span>}
-        {more && !show && <span onClick={() => this.setState({ show: true })}>{down}</span>}
+        {more && show && <span onClick={() => this.close()}>{up}</span>}
+        {more && !show && <span onClick={() => this.open()}>{down}</span>}
       </div>
     );
   }
 }
 export class OpenText extends Component {
   render() {
-    const { children } = this.props;
+    const { children, onOpen, onClose } = this.props;
     return (
-      <Open className="super-open-text" height={60} up={<Icon name="small-up" />} down={<Icon name="small-down" />}>
+      <Open className="super-open-text" height={60} up={<Icon name="small-up" />} down={<Icon name="small-down" />} onOpen={onOpen} onClose={onClose}>
         {children}
       </Open>
     );

+ 11 - 1
front/project/www/components/Select/index.js

@@ -23,13 +23,23 @@ export default class Select extends Component {
   render() {
     const { selecting } = this.state;
     const { placeholder, value, list = [], size = 'basic', theme = 'theme', excludeSelf, onChange } = this.props;
-    let index = 0;
+    let index = -1;
     for (let i = 0; i < list.length; i += 1) {
       if (list[i].key === value) {
         index = i;
         break;
       }
     }
+    if (!value) {
+      index = -1;
+    }
+    // 未选中,显示占位符
+    // 无占位符,显示第一个
+    // 没有内容,显示占位符
+    if (index < 0 && !placeholder) {
+      index = 0;
+    }
+
     const title = list.length > 0 && index >= 0 ? list[index].title : placeholder;
     return (
       <div className={`select ${theme || ''} ${size}`}>

+ 1 - 1
front/project/www/routes/course/answer/index.js

@@ -1,5 +1,5 @@
 export default {
-  path: '/course/answer',
+  path: '/course/answer/:id',
   key: 'course-answer',
   title: '课堂-问答',
   needLogin: false,

+ 143 - 49
front/project/www/routes/course/answer/page.js

@@ -1,12 +1,14 @@
 import React from 'react';
 import './index.less';
 import Page from '@src/containers/Page';
-import { formatDate } from '@src/services/Tools';
+import { formatDate, getMap } from '@src/services/Tools';
 import UserAction from '../../../components/UserAction';
 import UserPagination from '../../../components/UserPagination';
 import Tabs from '../../../components/Tabs';
 import { OpenText } from '../../../components/Open';
 import { Button } from '../../../components/Button';
+import { Course } from '../../../stores/course';
+import { My } from '../../../stores/my';
 
 export default class extends Page {
   constructor(props) {
@@ -18,10 +20,99 @@ export default class extends Page {
     return {
       filterMap: {},
       list: [],
-      tab: '1',
+      tab: 'special',
+      answerSelect: [
+        { title: '全部', key: '' },
+        { title: '已回答', key: '1' },
+        { title: '未回答', key: '0' },
+      ],
     };
   }
 
+  init() {
+    const { id } = this.params;
+    Course.get(id)
+      .then(result => {
+        const courseNoSelect = result.courseNos.map(row => {
+          return {
+            title: row.title,
+            key: `${row.id}`,
+          };
+        });
+        courseNoSelect.unshift({
+          title: '全部课时',
+          key: '',
+        });
+        const courseNoMap = getMap(result.courseNos, 'id');
+        const timelineSelect = [{ title: '全部区间', value: '' }];
+        const max = Math.max(result.courseNos.map(row => row.time));
+        let start = 0;
+        let end = start + 5;
+        while (start < max) {
+          timelineSelect.push({
+            title: `${start}:00~${end}:00`,
+            key: `${start}`,
+          });
+          start += 5;
+          end = Math.min(start + 5, max);
+        }
+        this.setState({ course: result, courseNoMap, courseNoSelect, timelineSelect });
+      });
+  }
+
+  initData() {
+    const data = Object.assign(this.state, this.state.search);
+    if (data.order) {
+      data.sortMap = { [data.order]: data.direction };
+    }
+    data.filterMap = this.state.search;
+    this.setState(data);
+
+    const { tab } = this.state;
+    switch (tab) {
+      case 'special':
+        this.refreshSpecial();
+        break;
+      case 'my':
+        this.refreshMy();
+        break;
+      default:
+        break;
+    }
+  }
+
+  refreshSpecial() {
+    const { id } = this.params;
+    this.setState({
+      orderSelect: [
+        { title: '无', key: '' },
+        { title: '时间轴', key: 'position' },
+        { title: '更新时间', key: 'updateTime' },
+        { title: '查看次数', key: 'viewNumber' },
+      ],
+    });
+    // paixu
+    Course.listAsk(Object.assign({ courseId: id }, this.state.search))
+      .then(result => {
+        this.setState({ list: result.list, total: result.total });
+      });
+  }
+
+  refreshMy() {
+    const { id } = this.params;
+    this.setState({
+      orderSelect: [
+        { title: '无', key: '' },
+        { title: '时间轴', key: 'position' },
+        { title: '更新时间', key: 'updateTime' },
+      ],
+    });
+    My.listCourseAsk(Object.assign({ courseId: id }, this.state.search))
+      .then(result => {
+        this.setState({ list: result.list, total: result.total });
+      });
+  }
+
   onTabChange(tab) {
     const data = { tab };
     this.refreshQuery(data);
@@ -37,31 +128,65 @@ export default class extends Page {
     this.initData();
   }
 
-  onAction() {}
+  onAction() { }
 
   delAsk(id) {
-    console.log(id);
+    My.delCourseAsk(id)
+      .then(() => {
+        this.refresh();
+      });
+  }
+
+  viewAsk(id) {
+    Course.askView(id);
   }
 
   renderView() {
+    const { course = {}, courseNoMap = {} } = this.state;
     const {
       tab,
-      questionSubjectSelect,
-      questionSubjectMap = {},
-      oneSelect,
-      twoSelectMap = {},
+      courseNoSelect,
+      answerSelect,
+      timelineSelect,
+      orderSelect,
       filterMap = {},
       list = [],
     } = this.state;
     const { total, page } = this.state;
+    const selectActionList = [{
+      key: 'courseNoId',
+      placeholder: '全部课时',
+      select: courseNoSelect,
+    }];
+    selectActionList.push({
+      key: 'order',
+      placeholder: '排序',
+      select: orderSelect,
+    });
+
+    if (filterMap.order === 'position') {
+      selectActionList.push({
+        key: 'position',
+        placeholder: '时间区间',
+        select: timelineSelect,
+      });
+    }
+    if (tab === 'my') {
+      selectActionList.push({
+        key: 'answerStatus',
+        placeholder: '状态',
+        select: answerSelect,
+      });
+    }
+
     return (
       <div>
         <div className="top content t-8">
-          千行课堂 > 全部课程 > OG20综合刷题 > 课时3 > <span className="t-1">全部问答</span>
-          <div className="f-r">返回课程</div>
+          千行课堂 > 全部课程 > {course.title} > <span className="t-1">全部问答</span>
+          <div className="f-r" onClick={() => linkTo(`/course/detail/${course.id}`)}>返回课程</div>
         </div>
         <div className="center content">
-          <div className="t-1 t-s-20 m-b-2">OG20综合刷题——第3课时:XXXXXXX</div>
+          <div className="t-1 t-s-20 m-b-2">{course.title}</div>
           <Tabs
             border
             type="division"
@@ -70,45 +195,13 @@ export default class extends Page {
             space={2.5}
             width={100}
             active={tab}
-            tabs={[{ key: '1', title: '精选问答' }, { key: '2', title: '我的提问' }]}
+            tabs={[{ key: 'special', title: '精选问答' }, { key: 'my', title: '我的提问' }]}
             onChange={key => this.onTabChange(key)}
           />
           <UserAction
             search
             defaultSearch={filterMap.keyword}
-            selectList={[
-              {
-                children: [
-                  {
-                    key: 'subject',
-                    placeholder: '学科',
-                    select: questionSubjectSelect,
-                  },
-                  {
-                    placeholder: '题型',
-                    key: 'questionType',
-                    be: 'subject',
-                    selectMap: questionSubjectMap,
-                  },
-                ],
-              },
-              {
-                label: '范围',
-                children: [
-                  {
-                    key: 'one',
-                    placeholder: '全部',
-                    select: oneSelect,
-                  },
-                  {
-                    key: 'two',
-                    be: 'one',
-                    placeholder: '全部',
-                    selectMap: twoSelectMap,
-                  },
-                ],
-              },
-            ]}
+            selectList={selectActionList}
             filterMap={filterMap}
             onFilter={value => this.onFilter(value)}
             onSearch={value => this.onSearch(value)}
@@ -116,9 +209,10 @@ export default class extends Page {
           {list.map(item => {
             return (
               <div className="answer-layout">
-                <div className="t-2">课时1 01:00~05:00</div>
-                <div className="t-2">课程内容: 单词 avoid 的使用场景应该出现在这些地方</div>
-                {item.answerStatus === 0 && (
+                <div className="t-2">课时{(courseNoMap[item.key] || {}).no} {item.position}:00~{item.position + 5}:00</div>
+                <div className="t-2">课程内容: {(courseNoMap[item.key] || {}).title}</div>
+
+                {tab === 'my' && item.answerStatus === 0 && (
                   <div className="f-r">
                     <Button radius size="small" onClick={() => this.delAsk(item.id)}>
                       删除
@@ -140,7 +234,7 @@ export default class extends Page {
                 )}
                 {item.answerStatus > 0 && (
                   <div className="desc">
-                    <OpenText>{item.answer}</OpenText>
+                    <OpenText onOpen={() => tab !== 'my' && this.viewAsk(item.id)}>{item.answerStatus === 2 ? '与课程内容无关,老师无法作出回答,敬请谅解。' : item.answer}</OpenText>
                   </div>
                 )}
               </div>

+ 5 - 2
front/project/www/routes/course/dataDetail/page.js

@@ -42,8 +42,7 @@ export default class extends Page {
       .then(result => {
         this.setState({ data: result });
       });
-    Course.dataView(id);
-
+    this.view(id);
     Main.listFaq({ page: 1, size: 100, channel: 'course_data' }).then(result => {
       this.faqs = result.list;
       this.setState({ faqs: result.list });
@@ -58,6 +57,10 @@ export default class extends Page {
     this.setState({ tab });
   }
 
+  view(id) {
+    Course.dataView(id);
+  }
+
   buy() {
     const { data } = this.props;
     User.needLogin().then(() => {

+ 8 - 4
front/project/www/routes/course/experience/page.js

@@ -22,7 +22,7 @@ export default class extends Page {
       };
     });
     prepareStatusSelect.unshift({
-      title: '身份',
+      title: '全部',
       key: '',
     });
     const experienceDaySelect = ExperienceDay.map(row => {
@@ -32,7 +32,7 @@ export default class extends Page {
       };
     });
     experienceDaySelect.unshift({
-      title: '备考周期',
+      title: '全部',
       key: '',
     });
     const experienceScoreSelect = ExperienceScore.map(row => {
@@ -42,7 +42,7 @@ export default class extends Page {
       };
     });
     experienceScoreSelect.unshift({
-      title: '分手成绩',
+      title: '全部',
       key: '',
     });
     const experiencePercentSelect = ExperiencePercent.map(row => {
@@ -52,7 +52,7 @@ export default class extends Page {
       };
     });
     experiencePercentSelect.unshift({
-      title: '提分幅度',
+      title: '全部',
       key: '',
     });
     return {
@@ -157,18 +157,22 @@ export default class extends Page {
             selectList={[
               {
                 key: 'prepareStatus',
+                placeholder: '身份',
                 select: prepareStatusSelect,
               },
               {
                 key: 'experienceDay',
+                placeholder: '备考周期',
                 select: experienceDaySelect,
               },
               {
                 key: 'experienceScore',
+                placeholder: '分手成绩',
                 select: experienceScoreSelect,
               },
               {
                 key: 'experiencePercent',
+                placeholder: '提分幅度',
                 select: experiencePercentSelect,
               },
             ]}

+ 1 - 1
front/project/www/routes/course/note/index.js

@@ -1,5 +1,5 @@
 export default {
-  path: '/course/note',
+  path: '/course/note/:id',
   key: 'course-note',
   title: '课堂-笔记',
   needLogin: false,

File diff suppressed because it is too large
+ 222 - 30
front/project/www/routes/course/note/page.js


+ 2 - 2
front/project/www/routes/my/answer/page.js

@@ -255,9 +255,9 @@ export default class extends Page {
             <div className="email">
               只看已回答{' '}
               <Switch
-                checked={Number(filterMap.askStatus)}
+                checked={Number(filterMap.answerStatus)}
                 onChange={() => {
-                  filterMap.askStatus = Number(filterMap.askStatus) ? null : 1;
+                  filterMap.answerStatus = Number(filterMap.answerStatus) ? null : 1;
                   this.onFilter(filterMap);
                 }}
               />

+ 7 - 4
front/project/www/routes/my/collect/page.js

@@ -20,7 +20,7 @@ import { My } from '../../../stores/my';
 import { Question } from '../../../stores/question';
 
 const QuestionTypeMap = getMap(QuestionType, 'value', 'label');
-const PrepareStatusMap = getMap(PrepareStatus, 'value', 'label');
+const PrepareStatusMap = getMap(PrepareStatus, 'value', 'short');
 const ExperiencePercentMap = getMap(ExperiencePercent, 'value', 'label');
 
 const columns = [
@@ -633,9 +633,9 @@ class ArticleDetail extends Component {
         <div className="t-1 t-s-12 m-b-2">
           <span className="m-r-2">{data.user ? data.user.nickname : data.nickname}</span>
           <span className="m-r-2">{PrepareStatusMap[data.prepareStatus]}</span>
-          <span className="m-r-2">备考:{formatMonth(data.experienceDay, false)}</span>
+          <span className="m-r-2">备考:{!!data.experienceDay && formatMonth(data.experienceDay, false)}</span>
           <span className="m-r-2">{data.experienceScore}分 /提分 {ExperiencePercentMap[data.experiencePercent]}</span>
-          <span className="t-4">更多信息</span>
+          {data.link && <a className="t-4" href={data.link} target="_blank">更多信息</a>}
         </div>
         <div className="t-2 t-s-18 detail" dangerouslySetInnerHTML={{ __html: data.content }} />
       </Modal>
@@ -653,7 +653,10 @@ class Article extends Component {
           <div className="f-r t-3 t-s-12 f-w-d">
             <span>{formatDate(data.updateTime, 'YYYY-MM-DD HH:mm:ss')}</span>
             <span className="m-l-2">阅读 {data.viewNumber}</span>
-            <span className="m-l-2" onClick={() => onUnCollect()}>取消收藏</span>
+            <span className="m-l-2" onClick={(e) => {
+              e.stopPropagation();
+              onUnCollect();
+            }}>取消收藏</span>
           </div>
         </div>
         <div className="t-1 t-s-12 m-b-2">

+ 2 - 1
front/project/www/routes/my/message/page.js

@@ -63,7 +63,7 @@ export default class extends Page {
       return row;
     });
     data.messageTypeSelect.unshift({
-      title: '消息类型',
+      title: '全部消息',
       key: '',
     });
     this.setState(data);
@@ -127,6 +127,7 @@ export default class extends Page {
           selectList={[
             {
               select: messageTypeSelect,
+              placeholder: '消息类型',
               key: 'messageType',
             },
           ]}

+ 4 - 0
front/project/www/stores/course.js

@@ -16,6 +16,10 @@ export default class CourseStore extends BaseStore {
     return this.apiGet('/course/simple', { courseId });
   }
 
+  detail(courseId) {
+    return this.apiGet('/course/detail', { courseId });
+  }
+
   listAsk({ keyword, courseId, courseNoId, position, order, direction }) {
     return this.apiGet('/course/ask/list', { keyword, courseId, courseNoId, position, order, direction });
   }

+ 12 - 4
front/project/www/stores/my.js

@@ -327,8 +327,8 @@ export default class MyStore extends BaseStore {
     return this.apiDel('/my/ask/question/delete', { id });
   }
 
-  listQuestionAsk({ keyword, module, questionTypes, structIds, latest, year, askStatus, page, size, startTime, endTime, order }) {
-    return this.apiGet('/my/ask/question/list', { keyword, module, questionTypes, structIds, latest, year, askStatus, page, size, startTime, endTime, order });
+  listQuestionAsk({ keyword, module, questionTypes, structIds, latest, year, answerStatus, page, size, startTime, endTime, order }) {
+    return this.apiGet('/my/ask/question/list', { keyword, module, questionTypes, structIds, latest, year, answerStatus, page, size, startTime, endTime, order });
   }
 
   /**
@@ -343,8 +343,16 @@ export default class MyStore extends BaseStore {
     return this.apiPost('/my/ask/course', { courseId, courseNoId, position, originContent, content });
   }
 
-  listCourseAsk({ keyword, courseId, courseNoId, order, direction }) {
-    return this.apiGet('/my/ask/course/list', { keyword, courseId, courseNoId, order, direction });
+  /**
+   * 删除课程提问
+   * @param {*} id
+   */
+  delCourseAsk(id) {
+    return this.apiDel('/my/ask/course/delete', { id });
+  }
+
+  listCourseAsk({ keyword, courseId, courseNoId, answerStatus, order, direction }) {
+    return this.apiGet('/my/ask/course/list', { keyword, courseId, courseNoId, answerStatus, order, direction });
   }
 
   /**

+ 3 - 3
server/data/src/main/java/com/qxgmat/data/constants/enums/status/AskStatus.java

@@ -1,7 +1,7 @@
 package com.qxgmat.data.constants.enums.status;
 
 
-public enum AskStatus {
+public enum AnswerStatus {
     NEW(0),
     ANSWER(1),
     IGNORE(2),
@@ -10,10 +10,10 @@ public enum AskStatus {
     final static public String message = "状态:0新增,1回答,2忽略, 3不处理";
 
     public int index;
-    private AskStatus(int index){
+    private AnswerStatus(int index){
         this.index = index;
     }
-    public static AskStatus ValueOf(Integer index){
+    public static AnswerStatus ValueOf(Integer index){
         if (index == null) return null;
         switch (index){
             case 0:

+ 4 - 4
server/gateway-api/src/main/java/com/qxgmat/controller/admin/CourseController.java

@@ -8,7 +8,7 @@ import com.qxgmat.data.constants.enums.ExperienceDayRange;
 import com.qxgmat.data.constants.enums.ExperienceScoreRange;
 import com.qxgmat.data.constants.enums.module.CourseModule;
 import com.qxgmat.data.constants.enums.module.ProductType;
-import com.qxgmat.data.constants.enums.status.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.trade.RecordSource;
 import com.qxgmat.data.constants.enums.user.DataType;
@@ -761,14 +761,14 @@ public class CourseController {
         // 调整回答
         if(entity.getAnswer() != null && (!entity.getAnswer().isEmpty() || !in.getAnswer().equals(entity.getAnswer()))){
             entity.setAnswerTime(new Date());
-            entity.setAnswerStatus(AskStatus.ANSWER.index);
+            entity.setAnswerStatus(AnswerStatus.ANSWER.index);
             Manager manager = shiroHelp.getLoginManager();
             entity.setManagerId(manager.getId());
             User user = usersService.get(in.getUserId());
             messageExtendService.sendAskCourse(user, entity);
         }
         if (dto.getIgnoreStatus() != null && dto.getIgnoreStatus() > 0){
-            entity.setAnswerStatus(AskStatus.IGNORE.index);
+            entity.setAnswerStatus(AnswerStatus.IGNORE.index);
         }
 
         entity = userAskCourseService.edit(entity);
@@ -825,7 +825,7 @@ public class CourseController {
             @RequestParam(required = false, defaultValue = "id") String order,
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
-        Page<UserAskCourse> p = userAskCourseService.listAdmin(page, size, structId, courseId, AskStatus.ValueOf(answerStatus), showStatus, userId, MoneyRange.ValueOf(moneyRang), startTime, endTime, order, DirectionStatus.ValueOf(direction));
+        Page<UserAskCourse> p = userAskCourseService.listAdmin(page, size, structId, courseId, AnswerStatus.ValueOf(answerStatus), showStatus, userId, MoneyRange.ValueOf(moneyRang), startTime, endTime, order, DirectionStatus.ValueOf(direction));
         List<UserAskCourseListDto> pr = Transform.convert(p, UserAskCourseListDto.class);
 
         // 绑定用户

+ 4 - 4
server/gateway-api/src/main/java/com/qxgmat/controller/admin/QuestionController.java

@@ -5,7 +5,7 @@ import com.github.pagehelper.Page;
 import com.nuliji.tools.*;
 import com.nuliji.tools.exception.ParameterException;
 import com.qxgmat.data.constants.enums.module.QuestionModule;
-import com.qxgmat.data.constants.enums.status.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.user.AskTarget;
 import com.qxgmat.data.constants.enums.user.MoneyRange;
@@ -184,7 +184,7 @@ public class QuestionController {
         // 调整回答
         if(entity.getAnswer() != null && (!entity.getAnswer().isEmpty() || !in.getAnswer().equals(entity.getAnswer()))){
             entity.setAnswerTime(new Date());
-            entity.setAnswerStatus(AskStatus.ANSWER.index);
+            entity.setAnswerStatus(AnswerStatus.ANSWER.index);
             Manager manager = shiroHelp.getLoginManager();
             entity.setManagerId(manager.getId());
             User user = usersService.get(in.getUserId());
@@ -192,7 +192,7 @@ public class QuestionController {
         }
 
         if (dto.getIgnoreStatus() != null && dto.getIgnoreStatus() > 0){
-            entity.setAnswerStatus(AskStatus.IGNORE.index);
+            entity.setAnswerStatus(AnswerStatus.IGNORE.index);
             User user = usersService.get(in.getUserId());
             messageExtendService.sendAskQuestion(user, entity);
         }
@@ -255,7 +255,7 @@ public class QuestionController {
             @RequestParam(required = false, defaultValue = "id") String order,
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
-        Page<UserAskQuestion> p = userAskQuestionService.listAdmin(page, size, askModule, questionType, questionModule, userId, questionNoId, AskTarget.ValueOf(target), AskStatus.ValueOf(answerStatus), showStatus, MoneyRange.ValueOf(moneyRang), hasRecord, startTime, endTime, order, DirectionStatus.ValueOf(direction));
+        Page<UserAskQuestion> p = userAskQuestionService.listAdmin(page, size, askModule, questionType, questionModule, userId, questionNoId, AskTarget.ValueOf(target), AnswerStatus.ValueOf(answerStatus), showStatus, MoneyRange.ValueOf(moneyRang), hasRecord, startTime, endTime, order, DirectionStatus.ValueOf(direction));
         List<UserAskQuestionListDto> pr = Transform.convert(p, UserAskQuestionListDto.class);
 
         // 绑定题目

+ 3 - 10
server/gateway-api/src/main/java/com/qxgmat/controller/admin/SettingController.java

@@ -6,9 +6,8 @@ import com.nuliji.tools.*;
 import com.nuliji.tools.exception.ParameterException;
 import com.qxgmat.data.constants.enums.MessageCategory;
 import com.qxgmat.data.constants.enums.MessageMethod;
-import com.qxgmat.data.constants.enums.MessageType;
 import com.qxgmat.data.constants.enums.SettingKey;
-import com.qxgmat.data.constants.enums.status.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.user.MoneyRange;
 import com.qxgmat.data.dao.entity.*;
@@ -23,11 +22,7 @@ import com.qxgmat.service.extend.MessageExtendService;
 import com.qxgmat.service.inline.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
@@ -43,9 +38,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
@@ -547,7 +540,7 @@ public class SettingController {
         entity.setIsSystem(1);
         if(!entity.getAnswer().isEmpty()){
             entity.setAnswerTime(new Date());
-            entity.setAnswerStatus(AskStatus.ANSWER.index);
+            entity.setAnswerStatus(AnswerStatus.ANSWER.index);
             Manager manager = shiroHelp.getLoginManager();
             entity.setManagerId(manager.getId());
         }
@@ -563,7 +556,7 @@ public class SettingController {
         // 调整回答
         if(entity.getAnswer() != null && (!entity.getAnswer().isEmpty() || !in.getAnswer().equals(entity.getAnswer()))){
             entity.setAnswerTime(new Date());
-            entity.setAnswerStatus(AskStatus.ANSWER.index);
+            entity.setAnswerStatus(AnswerStatus.ANSWER.index);
             Manager manager = shiroHelp.getLoginManager();
             entity.setManagerId(manager.getId());
             User user = usersService.get(in.getUserId());

+ 19 - 13
server/gateway-api/src/main/java/com/qxgmat/controller/api/CourseController.java

@@ -213,6 +213,24 @@ public class CourseController {
         return ResponseHelp.success(dto);
     }
 
+    @RequestMapping(value = "/simple", method = RequestMethod.GET)
+    @ApiOperation(value = "课程基本信息", httpMethod = "GET")
+    public Response<CourseDetailDto> simple(
+            @RequestParam(required = true) Integer courseId
+    ) {
+        User user = (User) shiroHelp.getLoginUser();
+
+        Course course = courseService.get(courseId);
+        CourseDetailDto dto = Transform.convert(course, CourseDetailDto.class);
+
+        // 课时
+        List<CourseNo> courseNoList = courseNoService.allCourse(course.getId());
+        courseExtendService.refreshNoResource(user, course.getId(), courseNoList);
+        dto.setCourseNos(Transform.convert(courseNoList, CourseNoExtendDto.class));
+
+        return ResponseHelp.success(dto);
+    }
+
     @RequestMapping(value = "/ask/list", method = RequestMethod.GET)
     @ApiOperation(value = "精选问答", httpMethod = "GET")
     public Response<PageMessage<UserAskCourse>> listAsk(
@@ -223,7 +241,7 @@ public class CourseController {
             @RequestParam(required = false) Integer courseNoId,
             @RequestParam(required = false) Integer position,
             @RequestParam(required = false) String order, // create_time, answer_time
-            @RequestParam(required = false) String direction
+            @RequestParam(required = false, defaultValue = "desc") String direction
     ) {
         User user = (User) shiroHelp.getLoginUser();
         Page<UserAskCourse> pr = userAskCourseService.listByCourse(page, size, keyword, courseId, courseNoId, position, true, order, DirectionStatus.ValueOf(direction));
@@ -238,18 +256,6 @@ public class CourseController {
         return ResponseHelp.success(true);
     }
 
-    @RequestMapping(value = "/simple", method = RequestMethod.GET)
-    @ApiOperation(value = "课程基本信息", httpMethod = "GET")
-    public Response<Course> simple(
-            @RequestParam(required = true) Integer courseId
-    ) {
-        User user = (User) shiroHelp.getLoginUser();
-
-        Course course = courseService.get(courseId);
-
-        return ResponseHelp.success(course);
-    }
-
     @RequestMapping(value = "/no/progress", method = RequestMethod.PUT)
     @ApiOperation(value = "更新课时进度", httpMethod = "PUT")
     public Response<Boolean> noProgress(@RequestBody @Validated UserCourseNoProgressDto dto) {

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

@@ -9,7 +9,7 @@ import com.nuliji.tools.exception.ParameterException;
 import com.nuliji.tools.exception.SystemException;
 import com.qxgmat.data.constants.enums.*;
 import com.qxgmat.data.constants.enums.module.*;
-import com.qxgmat.data.constants.enums.status.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.user.DataType;
 import com.qxgmat.data.dao.entity.*;
@@ -1223,8 +1223,8 @@ public class MyController {
             @RequestParam(required = false, defaultValue = "100") int size,
             @RequestParam(required = false) String keyword,
             @RequestParam(required = false) Integer courseId,
-            @RequestParam(required = false) String order, // update_time, no
-            @RequestParam(required = false) String direction,
+            @RequestParam(required = false, defaultValue = "") String order, // update_time, no
+            @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session)  {
         User user = (User) shiroHelp.getLoginUser();
         Page<UserNoteCourse> p = userNoteCourseService.listByCourse(page, size, keyword, user.getId(), courseId, order, DirectionStatus.ValueOf(direction));
@@ -1360,7 +1360,7 @@ public class MyController {
         if (!in.getUserId().equals(user.getId())){
             throw new ParameterException("提问不存在");
         }
-        if (in.getAnswerStatus()== AskStatus.ANSWER.index){
+        if (in.getAnswerStatus()== AnswerStatus.ANSWER.index){
             throw new ParameterException("提问已回答");
         }
         userAskQuestionService.delete(id);
@@ -1379,7 +1379,7 @@ public class MyController {
             @RequestParam(required = false) Integer[] structIds,
             @RequestParam(required = false) String startTime,
             @RequestParam(required = false) String endTime,
-            @RequestParam(required = false) Integer askStatus,
+            @RequestParam(required = false) Integer answerStatus,
             @RequestParam(required = false) Boolean latest,
             @RequestParam(required = false) String year,
             @RequestParam(required = false) String order, // create_time, answer_time
@@ -1388,7 +1388,7 @@ public class MyController {
         QuestionNoModule questionNoModule = QuestionNoModule.ValueOf(module);
         Page<UserAskQuestion> p = null;
         if(questionNoModule == QuestionNoModule.EXERCISE){
-            p = userAskQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, AskStatus.ValueOf(askStatus),startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userAskQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, AnswerStatus.ValueOf(answerStatus),startTime, endTime, order != null ? order.replace("|", " ") : null);
         }else if (questionNoModule == QuestionNoModule.EXAMINATION){
             Integer libraryId = null;
             if (latest != null){
@@ -1400,7 +1400,7 @@ public class MyController {
                     libraryId = 0;
                 }
             }
-            p = userAskQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, AskStatus.ValueOf(askStatus), startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userAskQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, AnswerStatus.ValueOf(answerStatus), startTime, endTime, order != null ? order.replace("|", " ") : null);
         }else{
             throw new ParameterException("参数逻辑错误");
         }
@@ -1441,6 +1441,25 @@ public class MyController {
         return ResponseHelp.success(true);
     }
 
+    @RequestMapping(value = "/ask/course/delete", method = RequestMethod.DELETE)
+    @ApiOperation(value = "提问课程提问", httpMethod = "DELETE")
+    public Response<Boolean> deleteAskCourse(@RequestParam int id, HttpServletRequest request) {
+        UserAskCourse in = userAskCourseService.get(id);
+        User user = (User) shiroHelp.getLoginUser();
+        if(in == null){
+            throw new ParameterException("提问不存在");
+        }
+        if (!in.getUserId().equals(user.getId())){
+            throw new ParameterException("提问不存在");
+        }
+        if (in.getAnswerStatus()== AnswerStatus.ANSWER.index){
+            throw new ParameterException("提问已回答");
+        }
+        userAskCourseService.delete(id);
+        // 如果
+        return ResponseHelp.success(true);
+    }
+
     @RequestMapping(value = "/ask/course/list", method = RequestMethod.GET)
     @ApiOperation(value = "获取课程提问列表", notes = "获取课程提问列表", httpMethod = "GET")
     public Response<PageMessage<UserAskCourse>> listAskCourse(
@@ -1449,12 +1468,13 @@ public class MyController {
             @RequestParam(required = false) String keyword,
             @RequestParam(required = false) Integer courseId,
             @RequestParam(required = false) Integer courseNoId,
-            @RequestParam(required = false) Integer askStatus,
+            @RequestParam(required = false) Integer answerStatus,
+            @RequestParam(required = false) Integer position,
             @RequestParam(required = false) String order, // create_time, answer_time
-            @RequestParam(required = false) String direction,
+            @RequestParam(required = false,defaultValue = "desc") String direction,
             HttpSession session)  {
         User user = (User) shiroHelp.getLoginUser();
-        Page<UserAskCourse> p = userAskCourseService.listByUser(page, size, keyword, user.getId(), courseId, courseNoId, AskStatus.ValueOf(askStatus), order, DirectionStatus.ValueOf(direction));
+        Page<UserAskCourse> p = userAskCourseService.listByUser(page, size, keyword, user.getId(), courseId, courseNoId, position, AnswerStatus.ValueOf(answerStatus), order, DirectionStatus.ValueOf(direction));
 
         return ResponseHelp.success(p, page, size, p.getTotal());
     }
@@ -1722,7 +1742,7 @@ public class MyController {
             Map notes = Transform.getMap(noteList, UserNoteCourse.class, "courseNoId");
             int noteNumber = 0;
             int askNumber = askList == null ? 0: askList.size();
-            int answerNumber = askList == null ? 0 : (int)askList.stream().filter(r->r.getAnswerStatus()==AskStatus.ANSWER.index).count();
+            int answerNumber = askList == null ? 0 : (int)askList.stream().filter(r->r.getAnswerStatus()== AnswerStatus.ANSWER.index).count();
             for(CourseNoExtendDto courseNo : courseNos){
                 if (notes.get(courseNo.getId()) != null){
                     courseNo.setNote(true);
@@ -1731,7 +1751,7 @@ public class MyController {
                 List<UserAskCourse> askListNo = askListMap.get(courseNo.getId());
                 if (askListNo != null){
                     courseNo.setAskNumber(askListNo.size());
-                    courseNo.setAnswerNumber((int)askListNo.stream().filter(r->r.getAnswerStatus()==AskStatus.ANSWER.index).count());
+                    courseNo.setAnswerNumber((int)askListNo.stream().filter(r->r.getAnswerStatus()== AnswerStatus.ANSWER.index).count());
                 }
             }
             dto.setNoteNumber(noteNumber);
@@ -1799,7 +1819,7 @@ public class MyController {
             Map notes = Transform.getMap(noteList, UserNoteCourse.class, "courseNoId");
             int noteNumber = 0;
             int askNumber = askList.size();
-            int answerNumber = (int)askList.stream().filter(r->r.getAnswerStatus()==AskStatus.ANSWER.index).count();
+            int answerNumber = (int)askList.stream().filter(r->r.getAnswerStatus()== AnswerStatus.ANSWER.index).count();
             for(CourseNoExtendDto courseNo : courseNos){
                 if (notes.get(courseNo.getId()) != null){
                     courseNo.setNote(true);
@@ -1808,7 +1828,7 @@ public class MyController {
                 List<UserAskCourse> askListNo = askListMap.get(courseNo.getId());
                 if (askListNo != null){
                     courseNo.setAskNumber(askListNo.size());
-                    courseNo.setAnswerNumber((int)askListNo.stream().filter(r->r.getAnswerStatus()==AskStatus.ANSWER.index).count());
+                    courseNo.setAnswerNumber((int)askListNo.stream().filter(r->r.getAnswerStatus()== AnswerStatus.ANSWER.index).count());
                 }
             }
             dto.setNoteNumber(noteNumber);

+ 20 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/response/MyDto.java

@@ -37,6 +37,10 @@ public class MyDto extends UserDto {
 
     private Integer dataEmailSubscribe;
 
+    private Integer textbookTips;
+
+    private Integer exportTips;
+
     private Date vip;
 
     private Date textbook;
@@ -190,4 +194,20 @@ public class MyDto extends UserDto {
     public void setPreviewNumber(int previewNumber) {
         this.previewNumber = previewNumber;
     }
+
+    public Integer getTextbookTips() {
+        return textbookTips;
+    }
+
+    public void setTextbookTips(Integer textbookTips) {
+        this.textbookTips = textbookTips;
+    }
+
+    public Integer getExportTips() {
+        return exportTips;
+    }
+
+    public void setExportTips(Integer exportTips) {
+        this.exportTips = exportTips;
+    }
 }

+ 0 - 1
server/gateway-api/src/main/java/com/qxgmat/service/UserNoteCourseService.java

@@ -5,7 +5,6 @@ import com.nuliji.tools.AbstractService;
 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.AskStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.dao.UserNoteCourseMapper;
 import com.qxgmat.data.dao.entity.UserNoteCourse;

+ 11 - 12
server/gateway-api/src/main/java/com/qxgmat/service/extend/MessageExtendService.java

@@ -1,11 +1,10 @@
 package com.qxgmat.service.extend;
 
 import com.nuliji.tools.exception.ParameterException;
-import com.nuliji.tools.exception.SystemException;
 import com.qxgmat.data.constants.enums.MessageCategory;
 import com.qxgmat.data.constants.enums.MessageMethod;
 import com.qxgmat.data.constants.enums.MessageType;
-import com.qxgmat.data.constants.enums.status.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.dao.entity.*;
 import com.qxgmat.help.MailHelp;
 import com.qxgmat.help.WechatHelp;
@@ -193,10 +192,10 @@ public class MessageExtendService {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         String time = sdf.format(new Date());
         map.put("time", time);
-        AskStatus status = AskStatus.ValueOf(userAskQuestion.getAnswerStatus());
-        if (status == AskStatus.ANSWER){
+        AnswerStatus status = AnswerStatus.ValueOf(userAskQuestion.getAnswerStatus());
+        if (status == AnswerStatus.ANSWER){
             map.put("status", "已回答");
-        }else if (status == AskStatus.IGNORE){
+        }else if (status == AnswerStatus.IGNORE){
             map.put("status", "已隐藏");
         }
         if(userAskQuestion.getShowStatus() > 0){
@@ -217,10 +216,10 @@ public class MessageExtendService {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         String time = sdf.format(new Date());
         map.put("time", time);
-        AskStatus status = AskStatus.ValueOf(userAskCourse.getAnswerStatus());
-        if (status == AskStatus.ANSWER){
+        AnswerStatus status = AnswerStatus.ValueOf(userAskCourse.getAnswerStatus());
+        if (status == AnswerStatus.ANSWER){
             map.put("status", "已回答");
-        }else if (status == AskStatus.IGNORE){
+        }else if (status == AnswerStatus.IGNORE){
             map.put("status", "已隐藏");
         }
         if(userAskCourse.getShowStatus() > 0){
@@ -293,12 +292,12 @@ public class MessageExtendService {
     public void sendFeedbackAnswer(User user, UserFeedbackError feedbackError){
         Map<String, String> map = new HashMap<>();
         map.put("content", feedbackError.getOriginContent());
-        AskStatus status = AskStatus.ValueOf(feedbackError.getStatus());
-        if (status == AskStatus.ANSWER){
+        AnswerStatus status = AnswerStatus.ValueOf(feedbackError.getStatus());
+        if (status == AnswerStatus.ANSWER){
             map.put("status", "已采纳");
-        }else if (status == AskStatus.IGNORE){
+        }else if (status == AnswerStatus.IGNORE){
             map.put("status", "已忽略");
-        }else if (status == AskStatus.NOHANDLE){
+        }else if (status == AnswerStatus.NOHANDLE){
             map.put("status", "无需处理");
         }
         map.put("correct", feedbackError.getContent());

+ 11 - 6
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskCourseService.java

@@ -7,7 +7,7 @@ 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.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.user.MoneyRange;
 import com.qxgmat.data.dao.UserAskCourseMapper;
@@ -36,7 +36,7 @@ public class UserAskCourseService extends AbstractService {
         put("", "uac");
     }};
 
-    public Page<UserAskCourse> listAdmin(int page, int size, Integer structId, Number courseId, AskStatus status, Integer showStatus, Integer userId, MoneyRange moneyRange, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<UserAskCourse> listAdmin(int page, int size, Integer structId, Number courseId, AnswerStatus status, Integer showStatus, Integer userId, MoneyRange moneyRange, String startTime, String endTime, String order, DirectionStatus direction){
         Integer statusIndex = status != null ? status.index : null;
         Integer max = moneyRange != null ? moneyRange.max == Integer.MAX_VALUE ? null : moneyRange.max : null;
         Integer min = moneyRange != null ? moneyRange.min : null;
@@ -123,7 +123,7 @@ public class UserAskCourseService extends AbstractService {
         return select(userAskCourseMapper, example, page, size);
     }
 
-    public Page<UserAskCourse> listByUser(int page, int size, String keyword, Integer userId, Integer courseId, Integer courseNoId, AskStatus askStatus, String order, DirectionStatus direction){
+    public Page<UserAskCourse> listByUser(int page, int size, String keyword, Integer userId, Integer courseId, Integer courseNoId, Integer position, AnswerStatus answerStatus, String order, DirectionStatus direction){
         Example example = new Example(UserAskCourse.class);
         example.and(
                 example.createCriteria()
@@ -135,10 +135,15 @@ public class UserAskCourseService extends AbstractService {
                     example.createCriteria()
                             .andEqualTo("courseNoId", courseNoId)
             );
-        if (askStatus != null)
+        if (position != null)
             example.and(
                     example.createCriteria()
-                            .andEqualTo("answerStatus", askStatus.index)
+                            .andEqualTo("position", position)
+            );
+        if (answerStatus != null)
+            example.and(
+                    example.createCriteria()
+                            .andEqualTo("answerStatus", answerStatus.index)
             );
         if (keyword != null)
             example.and(
@@ -163,7 +168,7 @@ public class UserAskCourseService extends AbstractService {
         example.and(
                 example.createCriteria()
                         .andEqualTo("recordId", recordId)
-                        .andNotEqualTo("answerStatus", AskStatus.IGNORE.index)
+                        .andNotEqualTo("answerStatus", AnswerStatus.IGNORE.index)
 
         );
         example.orderBy("id").asc();

+ 4 - 4
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskQuestionService.java

@@ -7,7 +7,7 @@ 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.AskStatus;
+import com.qxgmat.data.constants.enums.status.AnswerStatus;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.constants.enums.user.AskTarget;
 import com.qxgmat.data.constants.enums.user.MoneyRange;
@@ -35,7 +35,7 @@ public class UserAskQuestionService extends AbstractService {
     @Resource
     private UserAskQuestionRelationMapper userAskQuestionRelationMapper;
 
-    public Page<UserAskQuestion> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, AskStatus status, String startTime, String endTime, String order){
+    public Page<UserAskQuestion> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, AnswerStatus status, String startTime, String endTime, String order){
         Page<UserAskQuestion> p = page(
             ()-> userAskQuestionRelationMapper.listExercise(userId, keyword, questionTypes, structIds, status != null ? status.index:null, startTime, endTime, order)
         , page, size);
@@ -45,7 +45,7 @@ public class UserAskQuestionService extends AbstractService {
         return p;
     }
 
-    public Page<UserAskQuestion> listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, AskStatus status, String startTime, String endTime, String order){
+    public Page<UserAskQuestion> listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, AnswerStatus status, String startTime, String endTime, String order){
         Page<UserAskQuestion> p = page(
                 ()-> userAskQuestionRelationMapper.listExamination(userId, keyword, questionTypes, structIds, libraryId, year, status != null ? status.index:null, startTime, endTime, order)
                 , page, size);
@@ -59,7 +59,7 @@ public class UserAskQuestionService extends AbstractService {
         put("", "uaq");
     }};
 
-    public Page<UserAskQuestion> listAdmin(int page, int size, String askModule, String questionType, String questionModule, Number userId, Number questionNoId, AskTarget target, AskStatus status, Integer showStatus, MoneyRange moneyRange, Boolean hasRecord, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<UserAskQuestion> listAdmin(int page, int size, String askModule, String questionType, String questionModule, Number userId, Number questionNoId, AskTarget target, AnswerStatus status, Integer showStatus, MoneyRange moneyRange, Boolean hasRecord, String startTime, String endTime, String order, DirectionStatus direction){
         String tk = target != null ? target.key : "";
         Integer statusIndex = status != null ? status.index : null;
         Integer max = moneyRange != null ? moneyRange.max == Integer.MAX_VALUE ? null : moneyRange.max : null;