Browse Source

feat(server): 导出

Go 5 years ago
parent
commit
58c79654e0
99 changed files with 1377 additions and 742 deletions
  1. 12 6
      front/project/h5/routes/page/pay/page.js
  2. 18 3
      front/project/h5/stores/user.js
  3. 3 3
      front/project/www/components/Footer/index.js
  4. 16 13
      front/project/www/components/PayModal/index.js
  5. 10 11
      front/project/www/components/Video/index.js
  6. 3 2
      front/project/www/components/Video/index.less
  7. 6 5
      front/project/www/components/VipRenew/index.js
  8. 14 14
      front/project/www/routes/my/collect/page.js
  9. 10 10
      front/project/www/routes/my/error/page.js
  10. 19 11
      front/project/www/routes/my/note/page.js
  11. 1 1
      front/project/www/routes/page/export/index.js
  12. 174 146
      front/project/www/routes/page/export/page.js
  13. 7 5
      front/project/www/routes/page/ready/page.js
  14. 0 1
      front/project/www/routes/question/search/page.js
  15. 1 1
      front/project/www/stores/user.js
  16. 1 1
      front/src/services/Api.js
  17. 22 22
      server/data/src/main/java/com/qxgmat/data/dao/entity/UserExport.java
  18. 2 13
      server/data/src/main/java/com/qxgmat/data/dao/mapping/UserExportMapper.xml
  19. 38 0
      server/data/src/main/java/com/qxgmat/data/inline/ExportCourseNote.java
  20. 98 0
      server/data/src/main/java/com/qxgmat/data/inline/ExportQuestion.java
  21. 0 43
      server/data/src/main/java/com/qxgmat/data/inline/Product.java
  22. 23 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/CourseNoExtend.java
  23. 65 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/QuestionExtend.java
  24. 43 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/QuestionNoExtend.java
  25. 23 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/UserAskQuestionExtend.java
  26. 53 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/UserNoteQuestionExtend.java
  27. 14 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/UserPaperExtend.java
  28. 25 0
      server/data/src/main/java/com/qxgmat/data/inline/extend/UserQuestionExtend.java
  29. 3 2
      server/data/src/main/java/com/qxgmat/data/relation/CourseExperienceRelationMapper.java
  30. 3 2
      server/data/src/main/java/com/qxgmat/data/relation/QuestionNoRelationMapper.java
  31. 3 2
      server/data/src/main/java/com/qxgmat/data/relation/UserAbnormalRelationMapper.java
  32. 3 2
      server/data/src/main/java/com/qxgmat/data/relation/UserAskCourseRelationMapper.java
  33. 7 6
      server/data/src/main/java/com/qxgmat/data/relation/UserAskQuestionRelationMapper.java
  34. 5 4
      server/data/src/main/java/com/qxgmat/data/relation/UserCollectQuestionRelationMapper.java
  35. 9 8
      server/data/src/main/java/com/qxgmat/data/relation/UserCourseRecordRelationMapper.java
  36. 5 4
      server/data/src/main/java/com/qxgmat/data/relation/UserNoteQuestionRelationMapper.java
  37. 5 4
      server/data/src/main/java/com/qxgmat/data/relation/UserOrderRecordRelationMapper.java
  38. 6 6
      server/data/src/main/java/com/qxgmat/data/relation/UserPaperRelationMapper.java
  39. 9 8
      server/data/src/main/java/com/qxgmat/data/relation/UserQuestionRelationMapper.java
  40. 11 10
      server/data/src/main/java/com/qxgmat/data/relation/UserReportRelationMapper.java
  41. 5 4
      server/data/src/main/java/com/qxgmat/data/relation/UserSentenceRecordRelationMapper.java
  42. 3 2
      server/data/src/main/java/com/qxgmat/data/relation/UserTextbookEnrollRelationMapper.java
  43. 0 59
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserCollectQuestionRelation.java
  44. 0 28
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserExaminationPaperRelation.java
  45. 0 28
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserExercisePaperRelation.java
  46. 38 0
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserNoteCourseRelation.java
  47. 90 0
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserQuestionRelation.java
  48. 0 30
      server/data/src/main/java/com/qxgmat/data/relation/entity/UserSentencePaperRelation.java
  49. 1 1
      server/data/src/main/java/com/qxgmat/data/relation/mapping/CourseDataRelationMapper.xml
  50. 2 2
      server/data/src/main/java/com/qxgmat/data/relation/mapping/CourseExperienceRelationMapper.xml
  51. 2 2
      server/data/src/main/java/com/qxgmat/data/relation/mapping/QuestionNoRelationMapper.xml
  52. 2 2
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAbnormalRelationMapper.xml
  53. 2 2
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAskCourseRelationMapper.xml
  54. 6 6
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAskQuestionRelationMapper.xml
  55. 4 4
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserCollectQuestionRelationMapper.xml
  56. 8 8
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserCourseRecordRelationMapper.xml
  57. 4 4
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserNoteQuestionRelationMapper.xml
  58. 2 2
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserOrderRecordRelationMapper.xml
  59. 6 6
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserPaperRelationMapper.xml
  60. 8 8
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserQuestionRelationMapper.xml
  61. 14 14
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserReportRelationMapper.xml
  62. 4 4
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserSentenceRecordRelationMapper.xml
  63. 2 2
      server/data/src/main/java/com/qxgmat/data/relation/mapping/UserTextbookEnrollRelationMapper.xml
  64. 1 0
      server/data/src/main/resources/mybatis-generator.xml
  65. 1 1
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/CourseController.java
  66. 2 5
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/ExerciseController.java
  67. 1 1
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/QuestionController.java
  68. 3 3
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/UserController.java
  69. 24 24
      server/gateway-api/src/main/java/com/qxgmat/controller/api/MyController.java
  70. 2 2
      server/gateway-api/src/main/java/com/qxgmat/controller/api/TextbookController.java
  71. 0 10
      server/gateway-api/src/main/java/com/qxgmat/service/UserCollectExperienceService.java
  72. 3 9
      server/gateway-api/src/main/java/com/qxgmat/service/UserCollectQuestionService.java
  73. 10 0
      server/gateway-api/src/main/java/com/qxgmat/service/UserNoteCourseService.java
  74. 2 12
      server/gateway-api/src/main/java/com/qxgmat/service/UserNoteQuestionService.java
  75. 3 3
      server/gateway-api/src/main/java/com/qxgmat/service/UserPaperService.java
  76. 5 5
      server/gateway-api/src/main/java/com/qxgmat/service/UserQuestionService.java
  77. 1 1
      server/gateway-api/src/main/java/com/qxgmat/service/UserServiceService.java
  78. 1 1
      server/gateway-api/src/main/java/com/qxgmat/service/UsersService.java
  79. 2 2
      server/gateway-api/src/main/java/com/qxgmat/service/extend/CourseExtendService.java
  80. 1 1
      server/gateway-api/src/main/java/com/qxgmat/service/extend/ExerciseService.java
  81. 194 1
      server/gateway-api/src/main/java/com/qxgmat/service/extend/ExportService.java
  82. 19 12
      server/gateway-api/src/main/java/com/qxgmat/service/extend/OrderFlowService.java
  83. 2 2
      server/gateway-api/src/main/java/com/qxgmat/service/extend/QuestionFlowService.java
  84. 2 2
      server/gateway-api/src/main/java/com/qxgmat/service/extend/SentenceService.java
  85. 2 5
      server/gateway-api/src/main/java/com/qxgmat/service/inline/CourseExperienceService.java
  86. 1 1
      server/gateway-api/src/main/java/com/qxgmat/service/inline/PreviewAssignService.java
  87. 19 0
      server/gateway-api/src/main/java/com/qxgmat/service/inline/QuestionService.java
  88. 2 5
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAbnormalService.java
  89. 1 1
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskCourseService.java
  90. 27 7
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAskQuestionService.java
  91. 1 1
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserCourseAppointmentService.java
  92. 5 5
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserCourseRecordService.java
  93. 12 12
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserOrderRecordService.java
  94. 5 5
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserReportService.java
  95. 4 3
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserSentenceRecordService.java
  96. 3 2
      server/gateway-api/src/main/java/com/qxgmat/service/inline/UserTextbookEnrollService.java
  97. 10 10
      server/gateway-api/src/main/java/com/qxgmat/task/ScheduledTask.java
  98. 26 1
      server/tools/src/main/java/com/nuliji/tools/Tools.java
  99. 7 0
      server/tools/src/main/java/com/nuliji/tools/exception/AllExceptionHandler.java

+ 12 - 6
front/project/h5/routes/page/pay/page.js

@@ -49,7 +49,14 @@ function formatCheckout(checkouts) {
 }
 export default class extends Page {
   initState() {
-    return { show: true, showEnd: false };
+    return { show: true, showEnd: false, checked: true };
+  }
+
+  init() {
+    // this.wx = null;
+    // Common.readyWechat(window.location.href, ['chooseWXPay']).then(wx => {
+    //   this.wx = wx;
+    // });
   }
 
   initData() {
@@ -78,12 +85,11 @@ export default class extends Page {
               // 使用以上方式判断前端返回,微信团队郑重提示:
               // res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
               this.queryPay(true);
-            } else if (res.err_msg === 'get_brand_wcpay_request:cancel' || res.err_msg === 'get_brand_wcpay_request:fail') {
+            } else if (res.err_msg === 'get_brand_wcpay_request:cancel' || res.err_msg === 'get_brand_wcpay_request:fail' || res.err_msg === 'chooseWXPay:fail') {
               // 支付失败
               this.paying = false;
               this.setState({ paying: false });
             }
-            console.log(res);
           },
         );
       });
@@ -147,7 +153,7 @@ export default class extends Page {
   }
 
   renderPay() {
-    const { order = {}, contract = {}, checkout = {} } = this.state;
+    const { order = {}, contract = {}, checkout = {}, checked } = this.state;
     const { info = {}, productType } = checkout;
     let content = '';
     switch (productType) {
@@ -174,7 +180,7 @@ export default class extends Page {
         {info.copyright_notes && [<div className="title">版权说明</div>,
           <div className="desc">{info.copyright_notes}</div>]}
         {order.productTypes && order.productTypes.indexOf('course') > 0 && <div className="agree">
-          <Checkbox checked />
+          <Checkbox checked={checked} onChange={() => this.setState({ checked: !checked })} />
           我已阅读并同意 <a onClick={() => this.setState({ showContract: true })}>{contract.title}</a>
         </div>}
         <div className="fixed">
@@ -186,7 +192,7 @@ export default class extends Page {
             width={110}
             className="f-r"
             radius
-            disabled={this.state.paying}
+            disabled={this.state.paying || !checked}
             onClick={() => {
               this.pay();
             }}

+ 18 - 3
front/project/h5/stores/user.js

@@ -16,7 +16,10 @@ export default class UserStore extends BaseStore {
         if (this.adminLogin) {
           window.location.href = window.location.href.replace(`token=${this.adminLogin}`, '').replace('&&', '&');
         }
-      });
+      })
+        .catch(() => {
+          this.setState({ login: false });
+        });
     }
   }
 
@@ -72,8 +75,20 @@ export default class UserStore extends BaseStore {
   /**
    * 登出
    */
-  logout() {
-    return this.apiPost('/auth/logout');
+  logout(login = true) {
+    return Promise.resolve()
+      .then(() => {
+        if (login) {
+          return this.apiPost('/auth/logout', {});
+        }
+        return true;
+      })
+      .then(() => {
+        this.setState({ login: false, info: {}, username: '' });
+      })
+      .then(() => {
+        linkTo(this.project.loginPath);
+      });
   }
 
   /**

+ 3 - 3
front/project/www/components/Footer/index.js

@@ -5,11 +5,11 @@ import './index.less';
 function Footer() {
   return (
     <div id="footer">
-      <Link to="/">用户协议</Link>
+      <Link to="/contract/register">用户协议</Link>
       <span className="division">|</span>
-      <Link to="/">法律声明</Link>
+      <Link to="/contract/legal">法律声明</Link>
       <span className="division">|</span>
-      <Link to="/">隐私条款</Link>
+      <Link to="/contract/privacy">隐私条款</Link>
       <span className="division">|</span>
       <span>Copyright@</span>
       <span className="division">|</span>

+ 16 - 13
front/project/www/components/PayModal/index.js

@@ -18,7 +18,7 @@ export class PayModal extends Component {
   }
 
   componentWillReceiveProps(nextProps) {
-    if (nextProps.show && !this.init) {
+    if (nextProps.user.needPay && !this.init) {
       this.init = true;
       Main.getContract('course')
         .then((result) => {
@@ -30,19 +30,20 @@ export class PayModal extends Component {
   changePay(key) {
     const { order } = this.props.user;
     if (!order) return;
-    this.setState({ info: {}, pay: key });
+    this.setState({ payInfo: {}, pay: key });
     let handler = null;
     switch (key) {
       case 'wechatpay':
         handler = Order.wechatQr(order.id)
           .then((result) => {
-            this.setState({ info: result });
+            result.qr = Main.qrCode(result.request);
+            this.setState({ payInfo: result });
           });
         break;
       case 'alipay':
         handler = Order.alipayQr(order.id)
           .then((result) => {
-            this.setState({ info: result });
+            this.setState({ payInfo: result });
           });
         break;
       default:
@@ -133,7 +134,7 @@ export class PayModal extends Component {
 
   render() {
     const { needPay, order } = this.props.user;
-    const { show, showBank, showEnd, showDataEnd, showVipEnd, contract } = this.state;
+    const { show, showBank, showEnd, showDataEnd, showVipEnd, contract, payInfo } = this.state;
     if (!needPay) return [];
     return [
       showBank && <PayKBankModal
@@ -164,19 +165,21 @@ export class PayModal extends Component {
         checkout={order.checkouts[0]}
         onConfirm={() => this.close()}
       />,
-      show && (order.checkouts.length > 1 || order.productTypes.indexOf('course_package') < 0) && <PayMutilModal
+      show && (order.checkouts.length > 1 || order.checkouts[0].productType === 'course_package') && <PayMutilModal
         show
         contract={contract}
         order={order}
+        payInfo={payInfo}
         onChangePay={(key) => this.changePay(key)}
         onCancel={() => this.close()}
         onClose={() => this.close()}
         onConfirm={() => this.confirm()}
       />,
-      show && order.checkouts.length === 1 && order.productTypes.indexOf('course_package') < 0 && <PayMModal
+      show && (order.checkouts.length === 1 && order.checkouts[0].productType !== 'course_package') && <PayMModal
         show
         contract={contract}
         order={order}
+        payInfo={payInfo}
         checkout={order.checkouts[0]}
         productType={order.productTypes[0]}
         onChangePay={(key) => this.changePay(key)}
@@ -202,7 +205,7 @@ export class PayMModal extends Component {
   }
 
   render() {
-    const { show, checkout, onClose, onConfirm, onChangePay, order, contract = {}, productType } = this.props;
+    const { show, checkout, onClose, onConfirm, onChangePay, order, payInfo = {}, contract = {}, productType } = this.props;
     const { info } = checkout;
     const { pay, payList, checked, showChecked } = this.state;
     return (
@@ -221,7 +224,7 @@ export class PayMModal extends Component {
           <div className="info-layout">
             <div className="desc">
               商品: {productType === 'data' ? info.title : checkout.title}<br />
-              服务: {productType === 'data' ? checkout.title : info.description}<br />
+              {productType !== 'course' && `服务: ${productType === 'data' ? checkout.title : info.description}`}{productType === 'course' && <span>服务: 见<a href={`/contract/${contract.key}`} target="_blank">{contract.title}</a></span>}<br />
               开通有效期: {checkout.expireDays ? `${checkout.expireDays}天` : '付款后立即生效'}
               <br />
               使用有效期: {checkout.useExpireDays ? `${checkout.useExpireDays}天` : '永久'}
@@ -250,7 +253,7 @@ export class PayMModal extends Component {
             />
             <div hidden={pay === 'bank'} className="pay">
               <div className="qrcode">
-                <Assets name="qrcode" src={checked ? '' : '模糊'} />
+                <Assets name="qrcode" src={checked ? payInfo.qr : '模糊'} />
               </div>
               <div className="t">请使用手机微信或支付宝扫码付款</div>
               <div className="t">支付金额: ¥ {order.money}</div>
@@ -290,7 +293,7 @@ export class PayMutilModal extends Component {
   }
 
   render() {
-    const { show, onConfirm, onClose, onChangePay, order, contract = {} } = this.props;
+    const { show, onConfirm, onClose, onChangePay, order, payInfo = {}, contract = {} } = this.props;
     const { pay, checked, showChecked } = this.state;
     return (
       <Modal
@@ -306,7 +309,7 @@ export class PayMutilModal extends Component {
         <div className="pay-modal-wrapper">
           <div className="info-layout">
             <div className="desc">
-              商品: {order.checkouts.map(row => row.title).join(' ')}<br />
+              商品: {order.checkouts.map(row => (row.productType === 'course_package' ? row.children.map(r => r.title).join(' ') : row.title)).join(' ')}<br />
               服务: 见<a href={`/contract/${contract.key}`} target="_blank">{contract.title}</a><br />
               开通有效期: 见订单详情
               <br />
@@ -339,7 +342,7 @@ export class PayMutilModal extends Component {
             />
             <div hidden={pay === 'bank'} className="pay">
               <div className="qrcode">
-                <Assets name="qrcode" src={checked ? '' : '模糊'} />
+                <Assets name="qrcode" src={checked ? payInfo.qr : '模糊'} />
               </div>
               <div className="t">请使用手机微信或支付宝扫码付款</div>
               <div className="t">支付金额: ¥ {order.money}</div>

+ 10 - 11
front/project/www/components/Video/index.js

@@ -140,8 +140,8 @@ export default class Video extends Component {
     this.setState({ selectSpeed: false, speed });
   }
 
-  selectSpeed() {
-    this.setState({ selectSpeed: true });
+  selectSpeed(value) {
+    this.setState({ selectSpeed: value });
   }
 
   onFullChange() {
@@ -168,7 +168,7 @@ export default class Video extends Component {
             ref={node => {
               this.videoNode = node;
             }}
-            // vjs-fluid
+          // vjs-fluid
           />
           {!playing && <Assets className="play" name="play" onClick={() => this.onPlay()} />}
           {playing && <Assets className="stop" name="stop" onClick={() => this.onPause()} />}
@@ -206,19 +206,18 @@ export default class Video extends Component {
                       >
                         {btn.render(btn.active)}
                       </div>
-                    ) : (
-                      <div
-                        className={`btn-action ${btn.active ? 'active' : ''}`}
-                        onClick={() => onAction && onAction(btn.key)}
-                      >
-                        {btn.title}
-                      </div>
+                    ) : (<div
+                      className={`btn-action ${btn.active ? 'active' : ''}`}
+                      onClick={() => onAction && onAction(btn.key)}
+                    >
+                      {btn.title}
+                    </div>
                     )}
                   </div>
                 );
               })}
               <div className="d-i-b m-r-1">
-                <div className={`btn-action ${selectSpeed ? 'active' : ''}`} onClick={() => this.selectSpeed()}>
+                <div className={`btn-action ${selectSpeed ? 'active' : ''}`} onClick={() => this.selectSpeed(!selectSpeed)}>
                   倍速
                 </div>
               </div>

+ 3 - 2
front/project/www/components/Video/index.less

@@ -26,11 +26,12 @@
   // }
   .select-speed {
     position: absolute;
-    bottom: 65px;
-    right: 10px;
+    bottom: 55px;
+    right: 35px;
     width: 80px;
     background: #3A3A3AFF;
     border-radius: 4px;
+    z-index: 99;
 
     .item {
       height: 40px;

+ 6 - 5
front/project/www/components/VipRenew/index.js

@@ -57,20 +57,21 @@ export default class extends Component {
   changePay(key) {
     const { order } = this.state;
     if (!order) return;
-    this.setState({ info: {}, pay: key });
+    this.setState({ payInfo: {}, pay: key });
     let handler = null;
     switch (key) {
       case 'wechatpay':
         handler = Order.wechatQr(order.id)
           .then((result) => {
-            this.setState({ info: result });
+            result.qr = Main.qrCode(result.request);
+            this.setState({ payInfo: result });
           });
         break;
       case 'alipay':
       default:
         handler = Order.alipayQr(order.id)
           .then((result) => {
-            this.setState({ info: result });
+            this.setState({ payInfo: result });
           });
     }
     handler.then(() => {
@@ -149,7 +150,7 @@ export default class extends Component {
   }
 
   renderTab1() {
-    const { pay, select, service = {}, order = {}, checkout = {} } = this.state;
+    const { pay, select, service = {}, order = {}, checkout = {}, payInfo = {} } = this.state;
     const { info = {} } = checkout;
     return (
       <div className="tab-1-layout">
@@ -191,7 +192,7 @@ export default class extends Component {
               onChange={key => this.changePay(key)}
             />
             <div className="qrcode">
-              <Assets name="qrcode" />
+              <Assets name="qrcode" src={payInfo.qr} />
             </div>
             <div className="t">请使用手机微信或支付宝扫码付款</div>
             {order && <div className="t">支付金额: ¥ {order.money}</div>}

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

@@ -237,7 +237,7 @@ export default class extends Page {
           this.setState({ showWarn: true, warn: { title: '移除', content: '不可少于1题,请重新选择' } });
           return;
         }
-        this.setState({ showClearCollectConfirm: true, clearInfo: { questionNoIds: selectList } });
+        this.setState({ showClearConfirm: true, clearInfo: { questionNoIds: selectList } });
         break;
       case 'group':
         if (!info.vip) {
@@ -272,9 +272,9 @@ export default class extends Page {
           return;
         }
         if (info.bindReal) {
-          this.setState({ showExportConfirm: true, exportInfo: { info: exportType.map(row => row.key), questionNoIds: selectList } });
+          this.setState({ showExportConfirm: true, exportInfo: { include: exportType.map(row => row.key), questionNoIds: selectList } });
         } else {
-          this.setState({ showExportAuthConfirm: true, exportInfo: { info: exportType.filter(row => !row.auth).map(row => row.key), questionNoIds: selectList } });
+          this.setState({ showExportAuthConfirm: true, exportInfo: { include: exportType.filter(row => !row.auth).map(row => row.key), questionNoIds: selectList } });
         }
         break;
       default:
@@ -288,7 +288,7 @@ export default class extends Page {
         this.refresh();
       })
       .then(e => {
-        this.setState({ warn: { title: '移除', content: e.message }, showClearCollectConfirm: false });
+        this.setState({ warn: { title: '移除', content: e.message }, showClearConfirm: false });
       });
   }
 
@@ -483,7 +483,7 @@ export default class extends Page {
   }
 
   renderModal() {
-    const { article = {}, showTips, showWarn, warn = {}, showClearCollectConfirm, clearInfo = {}, showGroupConfirm, groupInfo = {}, showExportConfirm, showExportAuthConfirm, exportInfo = {}, showExportWait, showExamination, showVip, showReal } = this.state;
+    const { article = {}, showTips, showWarn, warn = {}, showClearConfirm, clearInfo = {}, showGroupConfirm, groupInfo = {}, showExportConfirm, showExportAuthConfirm, exportInfo = {}, showExportWait, showExamination, showVip, showReal } = this.state;
     const { info } = this.props.user;
     return [
       <ArticleDetail show={this.state.showDetail} data={article} onClose={() => this.setState({ showDetail: false })} onPrev={() => this.prevArticle()} onNext={() => this.nextArticle()} />,
@@ -528,7 +528,7 @@ export default class extends Page {
           次以上的错题
         </div>
       </Modal>,
-      <Modal show={showClearCollectConfirm} title="移出" onConfirm={() => this.clearCollectQuestion()} onCancel={() => this.setState({ showClearCollectConfirm: false })}>
+      <Modal show={showClearConfirm} title="移出" onConfirm={() => this.clearCollectQuestion()} onCancel={() => this.setState({ showClearConfirm: false })}>
         <div className="t-2 t-s-18">
           当前选中的 <span className="t-4">{clearInfo.questionNoIds ? clearInfo.questionNoIds.length : 0}</span> 道题即将被移出收藏,移出后无法恢复,是否继续?
         </div>
@@ -544,12 +544,12 @@ export default class extends Page {
           {exportType.map(item => {
             return (
               <div className="d-i-b m-b-5" style={{ width: 135 }}>
-                <Checkbox checked={exportInfo.info ? exportInfo.info.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
-                  const index = exportInfo.info.indexOf(item.key);
+                <Checkbox checked={exportInfo.include ? exportInfo.include.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
+                  const index = exportInfo.include.indexOf(item.key);
                   if (index >= 0) {
-                    exportInfo.info.splice(index, 1);
+                    exportInfo.include.splice(index, 1);
                   } else {
-                    exportInfo.info.push(item.key);
+                    exportInfo.include.push(item.key);
                   }
                   this.setState({ exportInfo });
                 }} />
@@ -569,12 +569,12 @@ export default class extends Page {
             .map(item => {
               return (
                 <div className="d-i-b m-b-2" style={{ width: 135 }}>
-                  <Checkbox checked={exportInfo.info ? exportInfo.info.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
-                    const index = exportInfo.info.indexOf(item.key);
+                  <Checkbox checked={exportInfo.include ? exportInfo.include.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
+                    const index = exportInfo.include.indexOf(item.key);
                     if (index >= 0) {
-                      exportInfo.info.splice(index, 1);
+                      exportInfo.include.splice(index, 1);
                     } else {
-                      exportInfo.info.push(item.key);
+                      exportInfo.include.push(item.key);
                     }
                     this.setState({ exportInfo });
                   }} />

+ 10 - 10
front/project/www/routes/my/error/page.js

@@ -223,7 +223,7 @@ export default class extends Page {
           this.setState({ showWarn: true, warn: { title: '移除', content: '不可少于1题,请重新选择' } });
           return;
         }
-        this.setState({ showClearCollectConfirm: true, clearInfo: { questionNoIds: selectList } });
+        this.setState({ showClearConfirm: true, clearInfo: { questionNoIds: selectList } });
         break;
       case 'group':
         if (!info.vip) {
@@ -258,9 +258,9 @@ export default class extends Page {
           return;
         }
         if (info.bindReal) {
-          this.setState({ showExportConfirm: true, exportInfo: { info: exportType.map(row => row.key), questionNoIds: selectList, answer: true } });
+          this.setState({ showExportConfirm: true, exportInfo: { include: exportType.map(row => row.key), questionNoIds: selectList, answer: true } });
         } else {
-          this.setState({ showExportAuthConfirm: true, exportInfo: { info: exportType.filter(row => !row.auth).map(row => row.key), questionNoIds: selectList, answer: true } });
+          this.setState({ showExportAuthConfirm: true, exportInfo: { include: exportType.filter(row => !row.auth).map(row => row.key), questionNoIds: selectList, answer: true } });
         }
         break;
       default:
@@ -274,7 +274,7 @@ export default class extends Page {
         this.refresh();
       })
       .catch(e => {
-        this.setState({ warn: { title: '移除', content: e.message }, showClearCollectConfirm: false });
+        this.setState({ warn: { title: '移除', content: e.message }, showClearConfirm: false });
       });
   }
 
@@ -435,7 +435,7 @@ export default class extends Page {
   }
 
   renderModal() {
-    const { showTips, showWarn, warn = {}, showClearCollectConfirm, clearInfo = {}, showGroupConfirm, groupInfo = {}, showExportConfirm, showExportAuthConfirm, exportInfo = {}, showExportWait, showExamination, showVip, showReal } = this.state;
+    const { showTips, showWarn, warn = {}, showClearConfirm, clearInfo = {}, showGroupConfirm, groupInfo = {}, showExportConfirm, showExportAuthConfirm, exportInfo = {}, showExportWait, showExamination, showVip, showReal } = this.state;
     const { info } = this.props.user;
     return [
       <Modal show={showTips} title="操作提示" confirmText="好的,知道了" btnAlign="center" onConfirm={() => this.setState({ showTips: false })}>
@@ -478,7 +478,7 @@ export default class extends Page {
           次以上的错题
         </div>
       </Modal>,
-      <Modal show={showClearCollectConfirm} title="移出" onConfirm={() => this.clearErrorQuestion()} onCancel={() => this.setState({ showClearCollectConfirm: false })}>
+      <Modal show={showClearConfirm} title="移出" onConfirm={() => this.clearErrorQuestion()} onCancel={() => this.setState({ showClearConfirm: false })}>
         <div className="t-2 t-s-18">
           当前选中的 <span className="t-4">{clearInfo.questionNoIds ? clearInfo.questionNoIds.length : 0}</span> 道题即将被移出错题本,移出后无法恢复,是否继续?
         </div>
@@ -494,8 +494,8 @@ export default class extends Page {
           {exportType.map(item => {
             return (
               <div className="d-i-b m-b-5" style={{ width: 135 }}>
-                <Checkbox checked={exportInfo.info ? exportInfo.info.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
-                  exportInfo.info.push(item.key);
+                <Checkbox checked={exportInfo.include ? exportInfo.include.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
+                  exportInfo.include.push(item.key);
                   this.setState({ exportInfo });
                 }} />
                 {item.title}
@@ -514,8 +514,8 @@ export default class extends Page {
             .map(item => {
               return (
                 <div className="d-i-b m-b-2" style={{ width: 135 }}>
-                  <Checkbox checked={exportInfo.info ? exportInfo.info.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
-                    exportInfo.info.push(item.key);
+                  <Checkbox checked={exportInfo.include ? exportInfo.include.indexOf(item.key) >= 0 : false} className="m-r-5" onChange={() => {
+                    exportInfo.include.push(item.key);
                     this.setState({ exportInfo });
                   }} />
                   {item.title}

+ 19 - 11
front/project/www/routes/my/note/page.js

@@ -278,26 +278,25 @@ export default class extends Page {
         contentSelectList.forEach(row => {
           const [questionNoIdStr, target] = row.split('|');
           const questionNoId = Number(questionNoIdStr);
-          if (selectList.indexOf(questionNoId) >= 0) return;
           if (!questionNoMap[questionNoId]) {
-            questionNoMap[questionNoId] = {};
+            questionNoMap[questionNoId] = { fields: 0 };
           }
           questionNoMap[questionNoId][target] = '';
+          questionNoMap[questionNoId].fields += 1;
         });
-        questionNoIds = Object.keys(questionNoMap);
+        questionNoIds = Object.keys(questionNoMap).filter(row => questionNoMap[row].fields < AskTarget.length);
         if (questionNoIds.length > 0) {
           Promise.all(questionNoIds.map(row => {
             return My.updateQuestionNote(row, questionNoMap);
           }))
             .then(() => {
-              if (selectList.length > 0) {
-                this.clearNote();
+              const clearList = Object.keys(questionNoMap).filter(row => questionNoMap[row].fields === AskTarget.length);
+              if (clearList.length > 0) {
+                this.clearNote(clearList);
               } else {
                 this.refresh();
               }
             });
-        } else {
-          this.clearNote();
         }
         // this.setState({ showClearConfirm: true, clearInfo: { questionNoIds: selectList } });
         break;
@@ -314,15 +313,24 @@ export default class extends Page {
           this.setState({ showWarn: true, warn: { title: '导出', content: '不可多余100题,请重新选择' } });
           return;
         }
-        this.setState({ showExportConfirm: true, exportInfo: { questionNoIds: selectList } });
+        contentSelectList.forEach(row => {
+          const [questionNoIdStr, target] = row.split('|');
+          const questionNoId = Number(questionNoIdStr);
+          if (!questionNoMap[questionNoId]) {
+            questionNoMap[questionNoId] = { fields: 0 };
+          }
+          questionNoMap[questionNoId][target] = '';
+          questionNoMap[questionNoId].fields += 1;
+        });
+        questionNoIds = Object.keys(questionNoMap);
+        this.setState({ showExportConfirm: true, exportInfo: { questionNoIds, questionNoMap } });
         break;
       default:
     }
   }
 
-  clearNote() {
-    const { clearInfo } = this.state;
-    My.clearQuestionNote(clearInfo.questionNoIds)
+  clearNote(list) {
+    My.clearQuestionNote(list)
       .then(() => {
         this.refresh();
       })

+ 1 - 1
front/project/www/routes/page/export/index.js

@@ -1,5 +1,5 @@
 export default {
-  path: '/export',
+  path: '/export/:id',
   key: 'export',
   title: '导出',
   needLogin: false,

File diff suppressed because it is too large
+ 174 - 146
front/project/www/routes/page/export/page.js


+ 7 - 5
front/project/www/routes/page/ready/page.js

@@ -240,15 +240,17 @@ export default class extends Page {
     }
   }
 
+  scrollListener(e) {
+    if (!this.load) return;
+    this.onScroll(e);
+  }
+
   inPage() {
-    document.getElementById('root').addEventListener('scroll', e => {
-      if (!this.load) return;
-      this.onScroll(e);
-    });
+    document.getElementById('root').addEventListener('scroll', this.scrollListener.bind(this));
   }
 
   outPage() {
-    document.getElementById('root').removeEventListener('scroll');
+    document.getElementById('root').removeEventListener('scroll', this.scrollListener.bind(this));
   }
 
   onScroll(e) {

+ 0 - 1
front/project/www/routes/question/search/page.js

@@ -203,7 +203,6 @@ export default class extends Page {
       page,
     } = this.state;
     const { login } = this.props.user;
-    console.log(this.props.user);
     return (
       <div className="filter-layout">
         <div className="content">

+ 1 - 1
front/project/www/stores/user.js

@@ -81,7 +81,7 @@ export default class UserStore extends BaseStore {
 
   initState() {
     if (this.adminLogin) this.setToken(this.adminLogin);
-    return { login: !!this.adminLogin };
+    return { login: !!this.adminLogin, needPay: false, needLogin: false };
   }
 
   initAfter() {

+ 1 - 1
front/src/services/Api.js

@@ -65,7 +65,7 @@ export default class {
       }
       request.timeout(30 * 1000).end((error, response) => {
         if (error) {
-          if (response.body) {
+          if (response && response.body) {
             reject(response.body);
           } else {
             reject(new OfflineError(error));

+ 22 - 22
server/data/src/main/java/com/qxgmat/data/dao/entity/UserExport.java

@@ -30,12 +30,12 @@ public class UserExport implements Serializable {
     @Column(name = "`setting`")
     private JSONObject setting;
 
+    @Column(name = "`content`")
+    private JSONObject content;
+
     @Column(name = "`create_time`")
     private Date createTime;
 
-    @Column(name = "`content`")
-    private String content;
-
     private static final long serialVersionUID = 1L;
 
     /**
@@ -117,31 +117,31 @@ public class UserExport implements Serializable {
     }
 
     /**
-     * @return create_time
+     * @return content
      */
-    public Date getCreateTime() {
-        return createTime;
+    public JSONObject getContent() {
+        return content;
     }
 
     /**
-     * @param createTime
+     * @param content
      */
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
+    public void setContent(JSONObject content) {
+        this.content = content;
     }
 
     /**
-     * @return content
+     * @return create_time
      */
-    public String getContent() {
-        return content;
+    public Date getCreateTime() {
+        return createTime;
     }
 
     /**
-     * @param content
+     * @param createTime
      */
-    public void setContent(String content) {
-        this.content = content;
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
     }
 
     @Override
@@ -155,8 +155,8 @@ public class UserExport implements Serializable {
         sb.append(", no=").append(no);
         sb.append(", type=").append(type);
         sb.append(", setting=").append(setting);
-        sb.append(", createTime=").append(createTime);
         sb.append(", content=").append(content);
+        sb.append(", createTime=").append(createTime);
         sb.append("]");
         return sb.toString();
     }
@@ -217,18 +217,18 @@ public class UserExport implements Serializable {
         }
 
         /**
-         * @param createTime
+         * @param content
          */
-        public Builder createTime(Date createTime) {
-            obj.setCreateTime(createTime);
+        public Builder content(JSONObject content) {
+            obj.setContent(content);
             return this;
         }
 
         /**
-         * @param content
+         * @param createTime
          */
-        public Builder content(String content) {
-            obj.setContent(content);
+        public Builder createTime(Date createTime) {
+            obj.setCreateTime(createTime);
             return this;
         }
 

+ 2 - 13
server/data/src/main/java/com/qxgmat/data/dao/mapping/UserExportMapper.xml

@@ -10,24 +10,13 @@
     <result column="no" jdbcType="INTEGER" property="no" />
     <result column="type" jdbcType="VARCHAR" property="type" />
     <result column="setting" jdbcType="VARCHAR" property="setting" typeHandler="com.nuliji.tools.mybatis.handler.JsonObjectHandler" />
+    <result column="content" jdbcType="VARCHAR" property="content" typeHandler="com.nuliji.tools.mybatis.handler.JsonObjectHandler" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
   </resultMap>
-  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.qxgmat.data.dao.entity.UserExport">
-    <!--
-      WARNING - @mbg.generated
-    -->
-    <result column="content" jdbcType="LONGVARCHAR" property="content" />
-  </resultMap>
   <sql id="Base_Column_List">
     <!--
       WARNING - @mbg.generated
     -->
-    `id`, `user_id`, `no`, `type`, `setting`, `create_time`
-  </sql>
-  <sql id="Blob_Column_List">
-    <!--
-      WARNING - @mbg.generated
-    -->
-    `content`
+    `id`, `user_id`, `no`, `type`, `setting`, `content`, `create_time`
   </sql>
 </mapper>

+ 38 - 0
server/data/src/main/java/com/qxgmat/data/inline/ExportCourseNote.java

@@ -0,0 +1,38 @@
+package com.qxgmat.data.inline;
+
+import com.qxgmat.data.inline.extend.CourseNoExtend;
+
+import java.util.Date;
+
+public class ExportCourseNote {
+
+    private CourseNoExtend courseNo;
+
+    private String content;
+
+    private Date updateTime;
+
+    public CourseNoExtend getCourseNo() {
+        return courseNo;
+    }
+
+    public void setCourseNo(CourseNoExtend courseNo) {
+        this.courseNo = courseNo;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}

+ 98 - 0
server/data/src/main/java/com/qxgmat/data/inline/ExportQuestion.java

@@ -0,0 +1,98 @@
+package com.qxgmat.data.inline;
+
+import com.alibaba.fastjson.JSONObject;
+import com.qxgmat.data.inline.extend.*;
+
+import java.util.List;
+
+public class ExportQuestion {
+    private JSONObject userAnswer;
+
+    private Integer userTime;
+
+    private UserNoteQuestionExtend note;
+
+    private QuestionExtend question;
+
+    private QuestionNoExtend questionNo;
+
+    private UserQuestionExtend userQuestion;
+
+    private UserPaperExtend userPaper;
+
+    private List<QuestionExtend> associations;
+
+    private List<UserAskQuestionExtend> asks;
+
+    public UserNoteQuestionExtend getNote() {
+        return note;
+    }
+
+    public void setNote(UserNoteQuestionExtend note) {
+        this.note = note;
+    }
+
+    public QuestionExtend getQuestion() {
+        return question;
+    }
+
+    public void setQuestion(QuestionExtend question) {
+        this.question = question;
+    }
+
+    public QuestionNoExtend getQuestionNo() {
+        return questionNo;
+    }
+
+    public void setQuestionNo(QuestionNoExtend questionNo) {
+        this.questionNo = questionNo;
+    }
+
+    public UserQuestionExtend getUserQuestion() {
+        return userQuestion;
+    }
+
+    public void setUserQuestion(UserQuestionExtend userQuestion) {
+        this.userQuestion = userQuestion;
+    }
+
+    public UserPaperExtend getUserPaper() {
+        return userPaper;
+    }
+
+    public void setUserPaper(UserPaperExtend userPaper) {
+        this.userPaper = userPaper;
+    }
+
+    public List<QuestionExtend> getAssociations() {
+        return associations;
+    }
+
+    public void setAssociations(List<QuestionExtend> associations) {
+        this.associations = associations;
+    }
+
+    public List<UserAskQuestionExtend> getAsks() {
+        return asks;
+    }
+
+    public void setAsks(List<UserAskQuestionExtend> asks) {
+        this.asks = asks;
+    }
+
+    public JSONObject getUserAnswer() {
+        return userAnswer;
+    }
+
+    public void setUserAnswer(JSONObject userAnswer) {
+        this.userAnswer = userAnswer;
+    }
+
+    public Integer getUserTime() {
+        return userTime;
+    }
+
+    public void setUserTime(Integer userTime) {
+        this.userTime = userTime;
+    }
+}

+ 0 - 43
server/data/src/main/java/com/qxgmat/data/inline/Product.java

@@ -1,43 +0,0 @@
-package com.qxgmat.data.inline;
-
-public class Product {
-    private Integer price;
-
-    private String module;
-
-    private String title;
-
-    private String key;
-
-    public Integer getPrice() {
-        return price;
-    }
-
-    public void setPrice(Integer price) {
-        this.price = price;
-    }
-
-    public String getModule() {
-        return module;
-    }
-
-    public void setModule(String module) {
-        this.module = module;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-}

+ 23 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/CourseNoExtend.java

@@ -0,0 +1,23 @@
+package com.qxgmat.data.inline.extend;
+
+public class CourseNoExtend {
+    private Integer no;
+
+    private String title;
+
+    public Integer getNo() {
+        return no;
+    }
+
+    public void setNo(Integer no) {
+        this.no = no;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+}

+ 65 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/QuestionExtend.java

@@ -0,0 +1,65 @@
+package com.qxgmat.data.inline.extend;
+
+import com.alibaba.fastjson.JSONObject;
+
+public class QuestionExtend {
+    private String stem;
+
+    private String questionType;
+
+    private JSONObject content;
+
+    private JSONObject answer;
+
+    private String officialContent;
+
+    private String qxContent;
+
+    public String getStem() {
+        return stem;
+    }
+
+    public void setStem(String stem) {
+        this.stem = stem;
+    }
+
+    public String getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(String questionType) {
+        this.questionType = questionType;
+    }
+
+    public JSONObject getContent() {
+        return content;
+    }
+
+    public void setContent(JSONObject content) {
+        this.content = content;
+    }
+
+    public JSONObject getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(JSONObject answer) {
+        this.answer = answer;
+    }
+
+    public String getOfficialContent() {
+        return officialContent;
+    }
+
+    public void setOfficialContent(String officialContent) {
+        this.officialContent = officialContent;
+    }
+
+    public String getQxContent() {
+        return qxContent;
+    }
+
+    public void setQxContent(String qxContent) {
+        this.qxContent = qxContent;
+    }
+}

+ 43 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/QuestionNoExtend.java

@@ -0,0 +1,43 @@
+package com.qxgmat.data.inline.extend;
+
+public class QuestionNoExtend {
+    private String title;
+
+    private Integer totalTime;
+
+    private Integer totalNumber;
+
+    private Integer totalCorrect;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Integer getTotalTime() {
+        return totalTime;
+    }
+
+    public void setTotalTime(Integer totalTime) {
+        this.totalTime = totalTime;
+    }
+
+    public Integer getTotalNumber() {
+        return totalNumber;
+    }
+
+    public void setTotalNumber(Integer totalNumber) {
+        this.totalNumber = totalNumber;
+    }
+
+    public Integer getTotalCorrect() {
+        return totalCorrect;
+    }
+
+    public void setTotalCorrect(Integer totalCorrect) {
+        this.totalCorrect = totalCorrect;
+    }
+}

+ 23 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/UserAskQuestionExtend.java

@@ -0,0 +1,23 @@
+package com.qxgmat.data.inline.extend;
+
+public class UserAskQuestionExtend {
+    private String content;
+
+    private String answer;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+}

+ 53 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/UserNoteQuestionExtend.java

@@ -0,0 +1,53 @@
+package com.qxgmat.data.inline.extend;
+
+public class UserNoteQuestionExtend {
+    private String questionContent;
+
+    private String qxContent;
+
+    private String officialContent;
+
+    private String associationContent;
+
+    private String qaContent;
+
+    public String getQuestionContent() {
+        return questionContent;
+    }
+
+    public void setQuestionContent(String questionContent) {
+        this.questionContent = questionContent;
+    }
+
+    public String getQxContent() {
+        return qxContent;
+    }
+
+    public void setQxContent(String qxContent) {
+        this.qxContent = qxContent;
+    }
+
+    public String getOfficialContent() {
+        return officialContent;
+    }
+
+    public void setOfficialContent(String officialContent) {
+        this.officialContent = officialContent;
+    }
+
+    public String getAssociationContent() {
+        return associationContent;
+    }
+
+    public void setAssociationContent(String associationContent) {
+        this.associationContent = associationContent;
+    }
+
+    public String getQaContent() {
+        return qaContent;
+    }
+
+    public void setQaContent(String qaContent) {
+        this.qaContent = qaContent;
+    }
+}

+ 14 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/UserPaperExtend.java

@@ -0,0 +1,14 @@
+package com.qxgmat.data.inline.extend;
+
+public class UserPaperExtend {
+
+    private String title;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+}

+ 25 - 0
server/data/src/main/java/com/qxgmat/data/inline/extend/UserQuestionExtend.java

@@ -0,0 +1,25 @@
+package com.qxgmat.data.inline.extend;
+
+import com.alibaba.fastjson.JSONObject;
+
+public class UserQuestionExtend {
+    private JSONObject userAnswer;
+
+    private Integer userTime;
+
+    public JSONObject getUserAnswer() {
+        return userAnswer;
+    }
+
+    public void setUserAnswer(JSONObject userAnswer) {
+        this.userAnswer = userAnswer;
+    }
+
+    public Integer getUserTime() {
+        return userTime;
+    }
+
+    public void setUserTime(Integer userTime) {
+        this.userTime = userTime;
+    }
+}

+ 3 - 2
server/data/src/main/java/com/qxgmat/data/relation/CourseExperienceRelationMapper.java

@@ -3,6 +3,7 @@ package com.qxgmat.data.relation;
 import com.qxgmat.data.dao.entity.CourseExperience;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -18,8 +19,8 @@ public interface CourseExperienceRelationMapper {
 
     List<CourseExperience> listWithUser(
             @Param("userId") Number userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order,
             String direction
     );

+ 3 - 2
server/data/src/main/java/com/qxgmat/data/relation/QuestionNoRelationMapper.java

@@ -7,6 +7,7 @@ import com.qxgmat.data.relation.entity.QuestionNoRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -67,8 +68,8 @@ public interface QuestionNoRelationMapper {
             @Param("paperId") Number paperId,
             @Param("place") String place,
             @Param("difficult") String difficult,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             @Param("order") String order,
             @Param("direction") String direction
     );

+ 3 - 2
server/data/src/main/java/com/qxgmat/data/relation/UserAbnormalRelationMapper.java

@@ -6,6 +6,7 @@ import com.qxgmat.data.relation.entity.UserPrepareRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -15,8 +16,8 @@ public interface UserAbnormalRelationMapper {
     List<UserAbnormal> listAdmin(
             @Param("userId") Integer userId,
             @Param("totalAlert") Integer totalAlert,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order,
             String direction
     );

+ 3 - 2
server/data/src/main/java/com/qxgmat/data/relation/UserAskCourseRelationMapper.java

@@ -6,6 +6,7 @@ import com.qxgmat.data.relation.entity.UserAskCourseStatRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -20,8 +21,8 @@ public interface UserAskCourseRelationMapper {
             @Param("userId") Integer userId,
             @Param("min") Integer min,
             @Param("max") Integer max,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order,
             String direction
     );

+ 7 - 6
server/data/src/main/java/com/qxgmat/data/relation/UserAskQuestionRelationMapper.java

@@ -3,6 +3,7 @@ package com.qxgmat.data.relation;
 import com.qxgmat.data.dao.entity.UserAskQuestion;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -15,8 +16,8 @@ public interface UserAskQuestionRelationMapper {
             @Param("questionTypes") String[] questionTypes,
             @Param("structIds") Integer[] structIds,
             @Param("answerStatus") Integer answerStatus,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
     List<UserAskQuestion> listExamination(
@@ -27,8 +28,8 @@ public interface UserAskQuestionRelationMapper {
             @Param("libraryId") Integer libraryId,
             @Param("year") String year,
             @Param("answerStatus") Integer answerStatus,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -44,8 +45,8 @@ public interface UserAskQuestionRelationMapper {
             @Param("min") Integer min,
             @Param("max") Integer max,
             @Param("hasRecord") Boolean hasRecord,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order,
             String direction
     );

+ 5 - 4
server/data/src/main/java/com/qxgmat/data/relation/UserCollectQuestionRelationMapper.java

@@ -4,6 +4,7 @@ import com.qxgmat.data.dao.entity.UserCollectQuestion;
 import com.qxgmat.data.dao.entity.UserPaper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -16,8 +17,8 @@ public interface UserCollectQuestionRelationMapper {
             @Param("keyword") String keyword,
             @Param("questionTypes") String[] questionTypes,
             @Param("structIds") Integer[] structIds,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -28,8 +29,8 @@ public interface UserCollectQuestionRelationMapper {
             @Param("structIds") Integer[] structIds,
             @Param("libraryId") Integer libraryId,
             @Param("year") String year,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 }

+ 9 - 8
server/data/src/main/java/com/qxgmat/data/relation/UserCourseRecordRelationMapper.java

@@ -7,6 +7,7 @@ import com.qxgmat.data.relation.entity.UserRecordStatRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -19,24 +20,24 @@ public interface UserCourseRecordRelationMapper {
 
     List<UserRecordStatRelation> stat(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserRecordStatRelation> statAvg(
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserModuleRecordStatRelation> statGroupType(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserRankStatRelation> rankByTime(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 }

+ 5 - 4
server/data/src/main/java/com/qxgmat/data/relation/UserNoteQuestionRelationMapper.java

@@ -3,6 +3,7 @@ package com.qxgmat.data.relation;
 import com.qxgmat.data.dao.entity.UserNoteQuestion;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -14,8 +15,8 @@ public interface UserNoteQuestionRelationMapper {
             @Param("keyword") String keyword,
             @Param("questionTypes") String[] questionTypes,
             @Param("structIds") Integer[] structIds,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -26,8 +27,8 @@ public interface UserNoteQuestionRelationMapper {
             @Param("structIds") Integer[] structIds,
             @Param("libraryId") Integer libraryId,
             @Param("year") String year,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 }

+ 5 - 4
server/data/src/main/java/com/qxgmat/data/relation/UserOrderRecordRelationMapper.java

@@ -7,6 +7,7 @@ import com.qxgmat.data.relation.entity.MonthNumberRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -35,8 +36,8 @@ public interface UserOrderRecordRelationMapper {
             @Param("userId") Integer userId,
             @Param("courseModules") String[] modules,
             @Param("isUsed") Boolean isUsed,
-            @Param("ltUseEndTime") String ltUseEndTime,
-            @Param("gtUseEndTime") String gtUseEndTime,
+            @Param("ltUseEndTime") Date ltUseEndTime,
+            @Param("gtUseEndTime") Date gtUseEndTime,
             @Param("order") String order,
             @Param("direction") String direction
     );
@@ -46,8 +47,8 @@ public interface UserOrderRecordRelationMapper {
     );
 
     List<MonthNumberRelation> groupByMonth(
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             @Param("productType") String productType,
             @Param("productId") Integer productId,
             @Param("service") String service

+ 6 - 6
server/data/src/main/java/com/qxgmat/data/relation/UserPaperRelationMapper.java

@@ -27,8 +27,8 @@ public interface UserPaperRelationMapper {
             @Param("userId") Number userId,
             @Param("keyword") String keyword,
             @Param("paperOrigin") String paperOrigin,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -38,8 +38,8 @@ public interface UserPaperRelationMapper {
             @Param("questionTypes") String[] questionTypes,
             @Param("structIds") Integer[] structIds,
             @Param("courseModules") String[] courseModules,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -49,8 +49,8 @@ public interface UserPaperRelationMapper {
             @Param("structIds") Integer[] structIds,
             @Param("libraryId") Integer libraryId,
             @Param("year") String year,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 }

+ 9 - 8
server/data/src/main/java/com/qxgmat/data/relation/UserQuestionRelationMapper.java

@@ -5,6 +5,7 @@ import com.qxgmat.data.relation.entity.UserRecordStatRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -17,8 +18,8 @@ public interface UserQuestionRelationMapper {
             @Param("keyword") String keyword,
             @Param("questionTypes") String[] questionTypes,
             @Param("structIds") Integer[] structIds,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -29,8 +30,8 @@ public interface UserQuestionRelationMapper {
             @Param("structIds") Integer[] structIds,
             @Param("libraryId") Integer libraryId,
             @Param("year") String year,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime,
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime,
             String order
     );
 
@@ -40,12 +41,12 @@ public interface UserQuestionRelationMapper {
 
     List<UserRecordStatRelation> stat(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserRecordStatRelation> statAvg(
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 }

+ 11 - 10
server/data/src/main/java/com/qxgmat/data/relation/UserReportRelationMapper.java

@@ -7,6 +7,7 @@ import com.qxgmat.data.relation.entity.UserStudyStatRelation;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -23,8 +24,8 @@ public interface UserReportRelationMapper {
 
     List<UserReport> listFinishLast(
             @Param("paperIds") Collection paperIds,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserReport> listLast(
@@ -46,25 +47,25 @@ public interface UserReportRelationMapper {
 
     List<UserStudyStatRelation> statGroupExerciseType(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserStudyStatRelation> statGroupPreviewType(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserRankStatRelation> rankExerciseByTime(
         @Param("userId") Integer userId,
-        @Param("startTime") String startTime,
-        @Param("endTime") String endTime
+        @Param("startTime") Date startTime,
+        @Param("endTime") Date endTime
     );
 
     List<UserRankStatRelation> rankExaminationByTime(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 }

+ 5 - 4
server/data/src/main/java/com/qxgmat/data/relation/UserSentenceRecordRelationMapper.java

@@ -3,6 +3,7 @@ package com.qxgmat.data.relation;
 import com.qxgmat.data.relation.entity.UserRecordStatRelation;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -11,12 +12,12 @@ import java.util.List;
 public interface UserSentenceRecordRelationMapper {
     List<UserRecordStatRelation> stat(
             @Param("userId") Integer userId,
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 
     List<UserRecordStatRelation> statAvg(
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 }

+ 3 - 2
server/data/src/main/java/com/qxgmat/data/relation/UserTextbookEnrollRelationMapper.java

@@ -3,6 +3,7 @@ package com.qxgmat.data.relation;
 import com.qxgmat.data.relation.entity.MonthNumberRelation;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -11,7 +12,7 @@ import java.util.List;
 public interface UserTextbookEnrollRelationMapper {
 
     List<MonthNumberRelation> groupByMonth(
-            @Param("startTime") String startTime,
-            @Param("endTime") String endTime
+            @Param("startTime") Date startTime,
+            @Param("endTime") Date endTime
     );
 }

+ 0 - 59
server/data/src/main/java/com/qxgmat/data/relation/entity/UserCollectQuestionRelation.java

@@ -1,59 +0,0 @@
-package com.qxgmat.data.relation.entity;
-
-import com.qxgmat.data.dao.entity.*;
-
-/**
- * Created by gaojie on 2017/11/9.
- */
-public class UserCollectQuestionRelation extends UserCollectQuestion {
-
-    private Question question;
-
-    private User user;
-
-    private QuestionNo questionNo;
-
-    private SentenceQuestion sentence;
-
-    private TextbookQuestion textbook;
-
-    public User getUser() {
-        return user;
-    }
-
-    public void setUser(User user) {
-        this.user = user;
-    }
-
-    public Question getQuestion() {
-        return question;
-    }
-
-    public void setQuestion(Question question) {
-        this.question = question;
-    }
-
-    public QuestionNo getQuestionNo() {
-        return questionNo;
-    }
-
-    public void setQuestionNo(QuestionNo questionNo) {
-        this.questionNo = questionNo;
-    }
-
-    public SentenceQuestion getSentence() {
-        return sentence;
-    }
-
-    public void setSentence(SentenceQuestion sentence) {
-        this.sentence = sentence;
-    }
-
-    public TextbookQuestion getTextbook() {
-        return textbook;
-    }
-
-    public void setTextbook(TextbookQuestion textbook) {
-        this.textbook = textbook;
-    }
-}

+ 0 - 28
server/data/src/main/java/com/qxgmat/data/relation/entity/UserExaminationPaperRelation.java

@@ -1,28 +0,0 @@
-package com.qxgmat.data.relation.entity;
-
-import com.qxgmat.data.dao.entity.*;
-
-/**
- * Created by gaojie on 2017/11/9.
- */
-public class UserExaminationPaperRelation extends UserPaper {
-    private ExaminationPaper paper;
-
-    private UserReport report;
-
-    public UserReport getReport() {
-        return report;
-    }
-
-    public void setReport(UserReport report) {
-        this.report = report;
-    }
-
-    public ExaminationPaper getPaper() {
-        return paper;
-    }
-
-    public void setPaper(ExaminationPaper paper) {
-        this.paper = paper;
-    }
-}

+ 0 - 28
server/data/src/main/java/com/qxgmat/data/relation/entity/UserExercisePaperRelation.java

@@ -1,28 +0,0 @@
-package com.qxgmat.data.relation.entity;
-
-import com.qxgmat.data.dao.entity.*;
-
-/**
- * Created by gaojie on 2017/11/9.
- */
-public class UserExercisePaperRelation extends UserPaper {
-    private ExercisePaper paper;
-
-    private UserReport report;
-
-    public UserReport getReport() {
-        return report;
-    }
-
-    public void setReport(UserReport report) {
-        this.report = report;
-    }
-
-    public ExercisePaper getPaper() {
-        return paper;
-    }
-
-    public void setPaper(ExercisePaper paper) {
-        this.paper = paper;
-    }
-}

+ 38 - 0
server/data/src/main/java/com/qxgmat/data/relation/entity/UserNoteCourseRelation.java

@@ -0,0 +1,38 @@
+package com.qxgmat.data.relation.entity;
+
+import com.qxgmat.data.dao.entity.*;
+
+/**
+ * Created by gaojie on 2017/11/9.
+ */
+public class UserNoteCourseRelation extends UserNoteCourse {
+    private Course course;
+
+    private CourseNo courseNo;
+
+    private User user;
+
+    public Course getCourse() {
+        return course;
+    }
+
+    public void setCourse(Course course) {
+        this.course = course;
+    }
+
+    public CourseNo getCourseNo() {
+        return courseNo;
+    }
+
+    public void setCourseNo(CourseNo courseNo) {
+        this.courseNo = courseNo;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+}

+ 90 - 0
server/data/src/main/java/com/qxgmat/data/relation/entity/UserQuestionRelation.java

@@ -0,0 +1,90 @@
+package com.qxgmat.data.relation.entity;
+
+import com.qxgmat.data.dao.entity.*;
+
+import java.util.List;
+
+/**
+ * Created by gaojie on 2017/11/9.
+ */
+public class UserQuestionRelation extends UserQuestion {
+    private Question question;
+
+    private QuestionNo questionNo;
+
+    private User user;
+
+    private UserPaper userPaper;
+
+    private UserReport userReport;
+
+    private List<Question> associations;
+
+    private List<UserAskQuestion> asks;
+
+    private UserNoteQuestion note;
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public Question getQuestion() {
+        return question;
+    }
+
+    public void setQuestion(Question question) {
+        this.question = question;
+    }
+
+    public QuestionNo getQuestionNo() {
+        return questionNo;
+    }
+
+    public void setQuestionNo(QuestionNo questionNo) {
+        this.questionNo = questionNo;
+    }
+
+    public UserPaper getUserPaper() {
+        return userPaper;
+    }
+
+    public void setUserPaper(UserPaper userPaper) {
+        this.userPaper = userPaper;
+    }
+
+    public List<Question> getAssociations() {
+        return associations;
+    }
+
+    public void setAssociations(List<Question> associations) {
+        this.associations = associations;
+    }
+
+    public List<UserAskQuestion> getAsks() {
+        return asks;
+    }
+
+    public void setAsks(List<UserAskQuestion> asks) {
+        this.asks = asks;
+    }
+
+    public UserNoteQuestion getNote() {
+        return note;
+    }
+
+    public void setNote(UserNoteQuestion note) {
+        this.note = note;
+    }
+
+    public UserReport getUserReport() {
+        return userReport;
+    }
+
+    public void setUserReport(UserReport userReport) {
+        this.userReport = userReport;
+    }
+}

+ 0 - 30
server/data/src/main/java/com/qxgmat/data/relation/entity/UserSentencePaperRelation.java

@@ -1,30 +0,0 @@
-package com.qxgmat.data.relation.entity;
-
-import com.qxgmat.data.dao.entity.SentencePaper;
-import com.qxgmat.data.dao.entity.UserPaper;
-import com.qxgmat.data.dao.entity.UserReport;
-
-/**
- * Created by gaojie on 2017/11/9.
- */
-public class UserSentencePaperRelation extends UserPaper {
-    private SentencePaper paper;
-
-    private UserReport report;
-
-    public UserReport getReport() {
-        return report;
-    }
-
-    public void setReport(UserReport report) {
-        this.report = report;
-    }
-
-    public SentencePaper getPaper() {
-        return paper;
-    }
-
-    public void setPaper(SentencePaper paper) {
-        this.paper = paper;
-    }
-}

+ 1 - 1
server/data/src/main/java/com/qxgmat/data/relation/mapping/CourseDataRelationMapper.xml

@@ -34,7 +34,7 @@
     from `course_data` cd
     left join `user_course_data_subscribe` ucds on `ucds`.`data_id`= cd.`id`
     <if test="userId != null">
-      and `uor`.user_id = #{userId,jdbcType=VARCHAR}
+      and `ucds`.user_id = #{userId,jdbcType=VARCHAR}
     </if>
     where
     `ucds`.`id` > 0

+ 2 - 2
server/data/src/main/java/com/qxgmat/data/relation/mapping/CourseExperienceRelationMapper.xml

@@ -33,10 +33,10 @@
     where
     uce.`id` > 0
     <if test="startTime != null">
-      and ce.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ce.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ce.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ce.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     order by ${order} ${direction}
   </select>

+ 2 - 2
server/data/src/main/java/com/qxgmat/data/relation/mapping/QuestionNoRelationMapper.xml

@@ -206,10 +206,10 @@
       and q.`difficult` =#{difficult,jdbcType=VARCHAR}
     </if>
     <if test="startTime != null">
-      and hp.`update_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and hp.`update_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and hp.`update_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and hp.`update_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     order by ${order} ${direction}
   </select>

+ 2 - 2
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAbnormalRelationMapper.xml

@@ -29,10 +29,10 @@
       and u.`total_alert` = #{totalAlert,jdbcType=VARCHAR}
     </if>
     <if test="startTime != null">
-      and u.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and u.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and u.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and u.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     where
     u.`id` &gt; 0

+ 2 - 2
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAskCourseRelationMapper.xml

@@ -72,10 +72,10 @@
       and uac.`show_status` = #{showStatus,jdbcType=INTEGER}
     </if>
     <if test="startTime != null">
-      and uac.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uac.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uac.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uac.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     order by ${order} ${direction}
   </select>

+ 6 - 6
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserAskQuestionRelationMapper.xml

@@ -67,10 +67,10 @@
       and uaq.`answer_status` = #{answerStatus,jdbcType=INTEGER}
     </if>
     <if test="startTime != null">
-      and uaq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uaq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uaq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uaq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}
@@ -133,10 +133,10 @@
       and uaq.`answer_status` = #{answerStatus,jdbcType=INTEGER}
     </if>
     <if test="startTime != null">
-      and uaq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uaq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uaq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uaq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}
@@ -183,10 +183,10 @@
       and q.`question_type` =#{questionType,jdbcType=VARCHAR}
     </if>
     <if test="startTime != null">
-      and uaq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uaq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uaq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uaq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="hasRecord != null">
       <if test="hasRecord">

+ 4 - 4
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserCollectQuestionRelationMapper.xml

@@ -60,10 +60,10 @@
       and (qn.`id` > 0 or sq.`id` > 0)
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by ucq.`question_module`, ucq.`question_no_id`, q.`question_type`
     <if test="order != null">
@@ -129,10 +129,10 @@
       and (tq.`id` > 0)
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by ucq.`question_module`, ucq.`question_no_id`, q.`question_type`
     <if test="order != null">

+ 8 - 8
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserCourseRecordRelationMapper.xml

@@ -61,10 +61,10 @@
     where
     ucr.`user_id` = #{userId,jdbcType=VARCHAR}
     <if test="startTime != null">
-      and ucr.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ucr.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ucr.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ucr.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
   </select>
 
@@ -78,10 +78,10 @@
     where
     1
     <if test="startTime != null">
-      and ucr.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ucr.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ucr.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ucr.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
   </select>
 
@@ -96,10 +96,10 @@
     where
     ucr.`user_id` = #{userId,jdbcType=VARCHAR}
     <if test="startTime != null">
-      and ucr.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ucr.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ucr.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ucr.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by cc.`extend`
   </select>
@@ -117,10 +117,10 @@
         where
         1
         <if test="startTime != null">
-          and ucr.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+          and ucr.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
         </if>
         <if test="endTime != null">
-          and ucr.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+          and ucr.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
         </if>
         group by ucr.`user_id`
       ) as aaa, (select @rank:=0) as bbb  order by `user_time` desc

+ 4 - 4
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserNoteQuestionRelationMapper.xml

@@ -54,10 +54,10 @@
       and (qn.`id` > 0 or sq.`id` > 0)
     </if>
     <if test="startTime != null">
-      and unq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and unq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and unq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and unq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}
@@ -116,10 +116,10 @@
       and (tq.`id` > 0)
     </if>
     <if test="startTime != null">
-      and unq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and unq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and unq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and unq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}

+ 2 - 2
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserOrderRecordRelationMapper.xml

@@ -54,10 +54,10 @@
     from `user_order_record` uor
     where 1
     <if test="startTime != null">
-      and uor.`use_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uor.`use_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uor.`use_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uor.`use_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="productType != null">
       and uor.`product_type` = #{productType,jdbcType=VARCHAR}

+ 6 - 6
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserPaperRelationMapper.xml

@@ -46,10 +46,10 @@
     and up.`paper_origin` = #{paperOrigin,jdbcType=VARCHAR}
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}
@@ -124,10 +124,10 @@
       and (pa.`id` > 0)
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}
@@ -187,10 +187,10 @@
       and (tp.`id` > 0)
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     <if test="order != null">
       order by ${order}

+ 8 - 8
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserQuestionRelationMapper.xml

@@ -69,10 +69,10 @@
       and (qn.`id` > 0 or sq.`id` > 0)
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by uq.`question_module`, uq.`question_no_id`, q.`question_type`
     <if test="order != null">
@@ -141,10 +141,10 @@
       and (tq.`id` > 0)
     </if>
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by uq.`question_module`, uq.`question_no_id`, q.`question_type`
     <if test="order != null">
@@ -178,10 +178,10 @@
     where
     uq.`user_id` = #{userId,jdbcType=VARCHAR}
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
   </select>
 
@@ -195,10 +195,10 @@
     where
     1
     <if test="startTime != null">
-      and uq.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and uq.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and uq.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and uq.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
   </select>
 </mapper>

+ 14 - 14
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserReportRelationMapper.xml

@@ -63,10 +63,10 @@
     </foreach>
 
     <!--<if test="startTime != null">-->
-      <!--and up.`createTime` &gt; #{startTime,jdbcType=VARCHAR}-->
+      <!--and up.`createTime` &gt; #{startTime,jdbcType=TIMESTAMP}-->
     <!--</if>-->
     <!--<if test="endTime != null">-->
-      <!--and up.`createTime` &lt; #{endTime,jdbcType=VARCHAR}-->
+      <!--and up.`createTime` &lt; #{endTime,jdbcType=TIMESTAMP}-->
     <!--</if>-->
     group by ur.`paper_id`
   </select>
@@ -89,10 +89,10 @@
     </foreach>
 
     <!--<if test="startTime != null">-->
-    <!--and up.`createTime` &gt; #{startTime,jdbcType=VARCHAR}-->
+    <!--and up.`createTime` &gt; #{startTime,jdbcType=TIMESTAMP}-->
     <!--</if>-->
     <!--<if test="endTime != null">-->
-    <!--and up.`createTime` &lt; #{endTime,jdbcType=VARCHAR}-->
+    <!--and up.`createTime` &lt; #{endTime,jdbcType=TIMESTAMP}-->
     <!--</if>-->
     group by ur.`paper_id`
   </select>
@@ -115,10 +115,10 @@
     </foreach>
 
     <!--<if test="startTime != null">-->
-    <!--and up.`createTime` &gt; #{startTime,jdbcType=VARCHAR}-->
+    <!--and up.`createTime` &gt; #{startTime,jdbcType=TIMESTAMP}-->
     <!--</if>-->
     <!--<if test="endTime != null">-->
-    <!--and up.`createTime` &lt; #{endTime,jdbcType=VARCHAR}-->
+    <!--and up.`createTime` &lt; #{endTime,jdbcType=TIMESTAMP}-->
     <!--</if>-->
     group by ur.`paper_id`
   </select>
@@ -162,10 +162,10 @@
     and ur.`paper_origin` = 'exercise'
     and ep.`id` &gt; 0
     <if test="startTime != null">
-      and ur.`update_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ur.`update_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ur.`update_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ur.`update_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by ep.`question_type`
   </select>
@@ -184,10 +184,10 @@
     and ur.`paper_origin` = 'preview'
     and pp.`id` &gt; 0
     <if test="startTime != null">
-      and ur.`update_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ur.`update_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ur.`update_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ur.`update_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by pp.`question_type`
   </select>
@@ -205,10 +205,10 @@
     where
       ur.`paper_module` = 'exercise'
     <if test="startTime != null">
-      and ur.`update_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ur.`update_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ur.`update_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ur.`update_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by ur.`user_id`
     ) as aaa, (select @rank:=0) as bbb  order by `user_time` desc
@@ -228,10 +228,10 @@
     where
       ur.`paper_module` = 'examination'
     <if test="startTime != null">
-      and ur.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and ur.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and ur.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and ur.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
     group by ur.`user_id`
     ) as aaa, (select @rank:=0) as bbb  order by `user_time` desc

+ 4 - 4
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserSentenceRecordRelationMapper.xml

@@ -30,10 +30,10 @@
     where
     usr.`user_id` = #{userId,jdbcType=VARCHAR}
     <if test="startTime != null">
-      and usr.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and usr.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and usr.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and usr.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
   </select>
 
@@ -47,10 +47,10 @@
     where
     1
     <if test="startTime != null">
-      and usr.`create_time` &gt; #{startTime,jdbcType=VARCHAR}
+      and usr.`create_time` &gt; #{startTime,jdbcType=TIMESTAMP}
     </if>
     <if test="endTime != null">
-      and usr.`create_time` &lt; #{endTime,jdbcType=VARCHAR}
+      and usr.`create_time` &lt; #{endTime,jdbcType=TIMESTAMP}
     </if>
   </select>
 </mapper>

+ 2 - 2
server/data/src/main/java/com/qxgmat/data/relation/mapping/UserTextbookEnrollRelationMapper.xml

@@ -32,10 +32,10 @@
       from `user_textbook_enroll` ute
       where 1
       <if test="startTime != null">
-        and ute.`date` &gt; #{startTime,jdbcType=VARCHAR}
+        and ute.`date` &gt; #{startTime,jdbcType=TIMESTAMP}
       </if>
       <if test="endTime != null">
-        and ute.`date` &lt; #{endTime,jdbcType=VARCHAR}
+        and ute.`date` &lt; #{endTime,jdbcType=TIMESTAMP}
       </if>
     ) as s
     group by `month`

+ 1 - 0
server/data/src/main/resources/mybatis-generator.xml

@@ -180,6 +180,7 @@
         <table schema="qianxing" tableName="user_export" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" delimitAllColumns="true">
             <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
             <columnOverride column="setting" javaType="com.alibaba.fastjson.JSONObject" jdbcType="VARCHAR" typeHandler="com.nuliji.tools.mybatis.handler.JsonObjectHandler"/>
+            <columnOverride column="content" javaType="com.alibaba.fastjson.JSONObject" jdbcType="VARCHAR" typeHandler="com.nuliji.tools.mybatis.handler.JsonObjectHandler"/>
         </table>
     </context>
 </generatorConfiguration>

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

@@ -828,7 +828,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, AnswerStatus.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), Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
         List<UserAskCourseListDto> pr = Transform.convert(p, UserAskCourseListDto.class);
 
         // 绑定用户

+ 2 - 5
server/gateway-api/src/main/java/com/qxgmat/controller/admin/ExerciseController.java

@@ -3,10 +3,7 @@ package com.qxgmat.controller.admin;
 
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.Page;
-import com.nuliji.tools.PageMessage;
-import com.nuliji.tools.Response;
-import com.nuliji.tools.ResponseHelp;
-import com.nuliji.tools.Transform;
+import com.nuliji.tools.*;
 import com.nuliji.tools.exception.ParameterException;
 import com.qxgmat.data.constants.enums.SettingKey;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
@@ -131,7 +128,7 @@ public class ExerciseController {
             @RequestParam(required = false, defaultValue = "id") String order,
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
-        Page<QuestionNoRelation> p = exerciseService.listAdmin(page, size, questionType, structId, questionNoId, paperId, place, difficult, startTime, endTime, order, DirectionStatus.ValueOf(direction));
+        Page<QuestionNoRelation> p = exerciseService.listAdmin(page, size, questionType, structId, questionNoId, paperId, place, difficult, Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
         List<ExerciseQuestionListDto> pr = Transform.convert(p, ExerciseQuestionListDto.class);
 
         // 绑定练习册

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

@@ -256,7 +256,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), AnswerStatus.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, Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
         List<UserAskQuestionListDto> pr = Transform.convert(p, UserAskQuestionListDto.class);
 
         // 绑定题目

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

@@ -281,7 +281,7 @@ public class UserController {
         if (ids != null && ids.length > 0){
             p = usersService.select(ids);
         }else{
-            p = usersService.listAdmin(page, size, keyword, real, wechat, prepare, startTime, endTime, order, DirectionStatus.ValueOf(direction));
+            p = usersService.listAdmin(page, size, keyword, real, wechat, prepare, Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
         }
         List<UserListDto> pr = Transform.convert(p, UserListDto.class);
 
@@ -771,7 +771,7 @@ public class UserController {
         if (ids != null && ids.length > 0){
             p = userCourseAppointmentService.select(ids);
         }else{
-            p = userCourseAppointmentService.listAdmin(page, size, recordId, userId, courseId, startTime, endTime, order, DirectionStatus.ValueOf(direction));
+            p = userCourseAppointmentService.listAdmin(page, size, recordId, userId, courseId, Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
         }
         List<UserCourseAppointmentInfoDto> pr = Transform.convert(p, UserCourseAppointmentInfoDto.class);
 
@@ -1077,7 +1077,7 @@ public class UserController {
             @RequestParam(required = false, defaultValue = "id") String order,
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session) {
-        Page<UserAbnormal> p = userAbnormalService.listAdmin(page, size, userId, totalAlert, startTime, endTime, order, DirectionStatus.ValueOf(direction));
+        Page<UserAbnormal> p = userAbnormalService.listAdmin(page, size, userId, totalAlert, Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
         List<UserAbnormalInfoDto> pr = Transform.convert(p, UserAbnormalInfoDto.class);
 
         // 绑定用户

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

@@ -493,15 +493,15 @@ public class MyController {
             @RequestParam(required = false) String date
     )  {
         User user = (User) shiroHelp.getLoginUser();
-        Date day;
+        Date start;
         try {
-            day = DateFormat.getDateInstance().parse(date);
+            start = DateFormat.getDateInstance().parse(date);
         } catch (ParseException e) {
             throw new ParameterException("日期格式错误");
         }
-        Date endDay = Tools.addDate(day, 1);
-        String startTime = day.toString();
-        String endTime = endDay.toString();
+        Date end = Tools.addDate(start, 1);
+        String startTime = start.toString();
+        String endTime = end.toString();
         UserStudyDayDto dto = new UserStudyDayDto();
 
         List<ExerciseStruct> p = exerciseStructService.main();
@@ -518,14 +518,14 @@ public class MyController {
         Integer exerciseTime = 0;
         Integer exerciseQuestion = 0;
         List<UserExerciseExtendDto> exerciseList = new ArrayList<>();
-        List<UserStudyStatRelation> typeList = userReportService.statGroupExerciseType(user.getId(), startTime, endTime);
+        List<UserStudyStatRelation> typeList = userReportService.statGroupExerciseType(user.getId(), start, end);
         for(UserStudyStatRelation type:typeList){
             exerciseTime += type.getUserTime();
             exerciseQuestion += type.getUserNumber();
             exerciseList.add(new UserExerciseExtendDto(m.get(type.getModule()), type.getUserNumber(), type.getUserTime(), type.getUserCorrect()));
         }
         // todo 练习统计排行
-        UserRankStatRelation exerciseRank = userReportService.rankExerciseByTime(user.getId(), startTime, endTime);
+        UserRankStatRelation exerciseRank = userReportService.rankExerciseByTime(user.getId(), start, end);
         if (exerciseRank != null)
             exerciseRank.setTotal(total);
 
@@ -537,7 +537,7 @@ public class MyController {
         // 获取模考统计 - 按卷子
         Integer examinationTime = 0;
         Integer examinationPaper = 0;
-        List<UserReport> userReportList = userReportService.getByModule(user.getId(), PaperModule.EXAMINATION, startTime, endTime);
+        List<UserReport> userReportList = userReportService.getByModule(user.getId(), PaperModule.EXAMINATION, start, end);
         Collection paperIds = Transform.getIds(userReportList, UserReport.class, "paperId");
         List<UserPaper> userPaperList = userPaperService.select(paperIds);
         Map userPaper = Transform.getMap(userPaperList, UserPaper.class, "id");
@@ -550,7 +550,7 @@ public class MyController {
             examinationPaperList.add(d);
         }
         // todo 模考统计排行
-        UserRankStatRelation examinationRank = userReportService.rankExaminationByTime(user.getId(), startTime, endTime);
+        UserRankStatRelation examinationRank = userReportService.rankExaminationByTime(user.getId(), start, end);
         if (examinationRank != null)
             examinationRank.setTotal(total);
 
@@ -562,7 +562,7 @@ public class MyController {
         // 获取课程访问记录 - 按课时
         Integer courseTime = 0;
         Integer courseNumber = 0;
-        List<UserCourseRecord> userCourseRecordList = userCourseRecordService.getByTime(user.getId(), startTime, endTime);
+        List<UserCourseRecord> userCourseRecordList = userCourseRecordService.getByTime(user.getId(), start, end);
         Collection courseIds = Transform.getIds(userCourseRecordList, UserCourseRecord.class, "courseId");
         Collection courseNoIds = Transform.getIds(userCourseRecordList, UserCourseRecord.class, "noId");
         List<Course> courseList = courseService.select(courseIds);
@@ -580,7 +580,7 @@ public class MyController {
             courseResultList.add(d);
         }
         // todo 听课统计排行
-        UserRankStatRelation courseRank = userCourseRecordService.rankByTime(user.getId(), startTime, endTime);
+        UserRankStatRelation courseRank = userCourseRecordService.rankByTime(user.getId(), start, end);
         if (courseRank != null)
             courseRank.setTotal(total);
 
@@ -753,7 +753,7 @@ public class MyController {
             dto.setTotalTime(stat.getTotalTime());
 
             Collection questionNoIds = Transform.getIds(list, QuestionNo.class, "id");
-            List<UserQuestion> userQuestionList = userQuestionService.listByQuestionWithTime(user.getId(), QuestionModule.BASE, questionNoIds, startTime, endTime);
+            List<UserQuestion> userQuestionList = userQuestionService.listByQuestionWithTime(user.getId(), QuestionModule.BASE, questionNoIds, Tools.baseTime(startTime), Tools.baseTime(endTime));
             Map userQuestionMap = Transform.getMap(userQuestionList, UserQuestion.class, "questionNoId");
             dto.setUserQuestion(userQuestionMap.size());
 
@@ -851,7 +851,7 @@ public class MyController {
             @RequestParam(required = false, defaultValue = "desc") String direction,
             HttpSession session)  {
         User user = (User) shiroHelp.getLoginUser();
-        Page<CourseExperience> p = courseExperienceService.listWithUser(page, size, user.getId(), startTime, endTime, order, DirectionStatus.ValueOf(direction));
+        Page<CourseExperience> p = courseExperienceService.listWithUser(page, size, user.getId(), Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction));
 
         return ResponseHelp.success(p, page, size, p.getTotal());
     }
@@ -951,7 +951,7 @@ public class MyController {
         QuestionNoModule questionNoModule = QuestionNoModule.ValueOf(module);
         Page<UserCollectQuestion> p = null;
         if(questionNoModule == QuestionNoModule.EXERCISE){
-            p = userCollectQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userCollectQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else if (questionNoModule == QuestionNoModule.EXAMINATION){
             Integer libraryId = null;
             if (latest != null){
@@ -963,7 +963,7 @@ public class MyController {
                     libraryId = 0;
                 }
             }
-            p = userCollectQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userCollectQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else{
             throw new ParameterException("参数逻辑错误");
         }
@@ -1021,7 +1021,7 @@ public class MyController {
         QuestionNoModule questionNoModule = QuestionNoModule.ValueOf(module);
         Page<UserQuestion> p = null;
         if(questionNoModule == QuestionNoModule.EXERCISE){
-            p = userQuestionService.listExerciseError(page, size, user.getId(), keyword, questionTypes, structIds, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userQuestionService.listExerciseError(page, size, user.getId(), keyword, questionTypes, structIds, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else if (questionNoModule == QuestionNoModule.EXAMINATION){
             Integer libraryId = null;
             if (latest != null){
@@ -1033,7 +1033,7 @@ public class MyController {
                     libraryId = 0;
                 }
             }
-            p = userQuestionService.listExaminationError(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userQuestionService.listExaminationError(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else{
             throw new ParameterException("参数逻辑错误");
         }
@@ -1168,7 +1168,7 @@ public class MyController {
         QuestionNoModule questionNoModule = QuestionNoModule.ValueOf(module);
         Page<UserNoteQuestion> p = null;
         if(questionNoModule == QuestionNoModule.EXERCISE){
-            p = userNoteQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userNoteQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else if (questionNoModule == QuestionNoModule.EXAMINATION){
             Integer libraryId = null;
             if (latest != null){
@@ -1180,7 +1180,7 @@ public class MyController {
                     libraryId = 0;
                 }
             }
-            p = userNoteQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userNoteQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else{
             throw new ParameterException("参数逻辑错误");
         }
@@ -1258,9 +1258,9 @@ public class MyController {
         QuestionNoModule questionNoModule = QuestionNoModule.ValueOf(module);
         Page<UserPaper> p = null;
         if (paperOrigin == PaperOrigin.COLLECT || paperOrigin == PaperOrigin.ERROR){
-            p = userPaperService.list(page, size, user.getId(), keyword, paperOrigin, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userPaperService.list(page, size, user.getId(), keyword, paperOrigin, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else if(questionNoModule == QuestionNoModule.EXERCISE){
-            p = userPaperService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, courseModules, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userPaperService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, courseModules, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else if (questionNoModule == QuestionNoModule.EXAMINATION){
             Integer libraryId = null;
             if (latest != null){
@@ -1273,7 +1273,7 @@ public class MyController {
                     libraryId = 0;
                 }
             }
-            p = userPaperService.listExamination(page, size, user.getId(), keyword, structIds, libraryId, year, startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userPaperService.listExamination(page, size, user.getId(), keyword, structIds, libraryId, year, Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else{
             throw new ParameterException("参数逻辑错误");
         }
@@ -1392,7 +1392,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, AnswerStatus.ValueOf(answerStatus),startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userAskQuestionService.listExercise(page, size, user.getId(), keyword, questionTypes, structIds, AnswerStatus.ValueOf(answerStatus), Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else if (questionNoModule == QuestionNoModule.EXAMINATION){
             Integer libraryId = null;
             if (latest != null){
@@ -1404,7 +1404,7 @@ public class MyController {
                     libraryId = 0;
                 }
             }
-            p = userAskQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, AnswerStatus.ValueOf(answerStatus), startTime, endTime, order != null ? order.replace("|", " ") : null);
+            p = userAskQuestionService.listExamination(page, size, user.getId(), keyword, questionTypes, structIds, libraryId, year, AnswerStatus.ValueOf(answerStatus), Tools.baseTime(startTime), Tools.baseTime(endTime), order != null ? order.replace("|", " ") : null);
         }else{
             throw new ParameterException("参数逻辑错误");
         }

+ 2 - 2
server/gateway-api/src/main/java/com/qxgmat/controller/api/TextbookController.java

@@ -439,14 +439,14 @@ public class TextbookController
 
         TextbookEnrollTimeDto dto = new TextbookEnrollTimeDto();
 
-        List<MonthNumberRelation> enrollRelation = userTextbookEnrollService.groupByMonth(startDate, endDate);
+        List<MonthNumberRelation> enrollRelation = userTextbookEnrollService.groupByMonth(start, end);
         Map<Integer, Integer> enrollMonthMap = new HashMap<>();
         for(MonthNumberRelation relation : enrollRelation){
             int month = relation.getMonth();
             enrollMonthMap.put(month, relation.getNumber());
         }
 
-        List<MonthNumberRelation> recordRelation = userOrderRecordService.groupByMonth(startDate, endDate, ProductType.SERVICE, null, ServiceKey.TEXTBOOK);
+        List<MonthNumberRelation> recordRelation = userOrderRecordService.groupByMonth(start, end, ProductType.SERVICE, null, ServiceKey.TEXTBOOK);
         Map<Integer, Integer> recordMonthMap = new HashMap<>();
         for(MonthNumberRelation relation : recordRelation){
             int month = relation.getMonth();

+ 0 - 10
server/gateway-api/src/main/java/com/qxgmat/service/UserCollectExperienceService.java

@@ -2,22 +2,12 @@ package com.qxgmat.service;
 
 import com.github.pagehelper.Page;
 import com.nuliji.tools.AbstractService;
-import com.nuliji.tools.PageResult;
-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.QuestionType;
-import com.qxgmat.data.constants.enums.module.QuestionModule;
-import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.dao.UserCollectExperienceMapper;
-import com.qxgmat.data.dao.UserCollectQuestionMapper;
 import com.qxgmat.data.dao.entity.UserCollectExperience;
-import com.qxgmat.data.dao.entity.UserCollectQuestion;
-import com.qxgmat.data.relation.UserCollectQuestionRelationMapper;
-import com.qxgmat.data.relation.entity.UserCollectQuestionRelation;
 import com.qxgmat.service.inline.CourseExperienceService;
-import com.qxgmat.service.inline.QuestionService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;

+ 3 - 9
server/gateway-api/src/main/java/com/qxgmat/service/UserCollectQuestionService.java

@@ -2,20 +2,13 @@ package com.qxgmat.service;
 
 import com.github.pagehelper.Page;
 import com.nuliji.tools.AbstractService;
-import com.nuliji.tools.PageResult;
 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.QuestionType;
-import com.qxgmat.data.constants.enums.module.QuestionModule;
-import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.dao.UserCollectQuestionMapper;
-import com.qxgmat.data.dao.entity.Question;
-import com.qxgmat.data.dao.entity.QuestionNo;
 import com.qxgmat.data.dao.entity.UserCollectQuestion;
 import com.qxgmat.data.relation.UserCollectQuestionRelationMapper;
-import com.qxgmat.data.relation.entity.UserCollectQuestionRelation;
 import com.qxgmat.service.inline.QuestionNoService;
 import com.qxgmat.service.inline.QuestionService;
 import com.qxgmat.service.inline.SentenceQuestionService;
@@ -28,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -59,7 +53,7 @@ public class UserCollectQuestionService extends AbstractService {
      * @param userId
      * @return
      */
-    public Page<UserCollectQuestion> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, String startTime, String endTime, String order){
+    public Page<UserCollectQuestion> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Date startTime, Date endTime, String order){
         Page<UserCollectQuestion> p = page(()->{
             userCollectQuestionRelationMapper.listExercise(userId, keyword, questionTypes, structIds, startTime, endTime, order);
         }, page, size);
@@ -79,7 +73,7 @@ public class UserCollectQuestionService extends AbstractService {
      * @param userId
      * @return
      */
-    public Page<UserCollectQuestion> listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, String startTime, String endTime, String order){
+    public Page<UserCollectQuestion> listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, Date startTime, Date endTime, String order){
         Page<UserCollectQuestion> p = page(()->{
             userCollectQuestionRelationMapper.listExamination(userId, keyword, questionTypes, structIds, libraryId, year, startTime, endTime, order);
         }, page, size);

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

@@ -83,6 +83,16 @@ public class UserNoteCourseService extends AbstractService {
         }
     }
 
+    public List<UserNoteCourse> listByCourseNo(Integer userId, Collection courseNoIds){
+        Example example = new Example(UserNoteCourse.class);
+        example.and(
+                example.createCriteria()
+                        .andEqualTo("userId", userId)
+                        .andIn("courseNoId", courseNoIds)
+        );
+        return select(userNoteCourseMapper, example);
+    }
+
     public List<UserNoteCourse> getByCourse(Integer userId, Integer courseId){
         Example example = new Example(UserNoteCourse.class);
         example.and(

+ 2 - 12
server/gateway-api/src/main/java/com/qxgmat/service/UserNoteQuestionService.java

@@ -2,23 +2,13 @@ package com.qxgmat.service;
 
 import com.github.pagehelper.Page;
 import com.nuliji.tools.AbstractService;
-import com.nuliji.tools.PageResult;
 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.QuestionType;
-import com.qxgmat.data.constants.enums.module.QuestionModule;
-import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.dao.UserNoteQuestionMapper;
-import com.qxgmat.data.dao.entity.Question;
-import com.qxgmat.data.dao.entity.QuestionNo;
-import com.qxgmat.data.dao.entity.UserCollectQuestion;
 import com.qxgmat.data.dao.entity.UserNoteQuestion;
 import com.qxgmat.data.relation.UserNoteQuestionRelationMapper;
-import com.qxgmat.data.relation.entity.UserNoteQuestionRelation;
-import com.qxgmat.service.inline.QuestionNoService;
-import com.qxgmat.service.inline.QuestionService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -52,7 +42,7 @@ public class UserNoteQuestionService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserNoteQuestion> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, String startTime, String endTime, String order){
+    public Page<UserNoteQuestion> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Date startTime, Date endTime, String order){
         Page<UserNoteQuestion> p = page(()->{
             userNoteQuestionRelationMapper.listExercise(userId, keyword, questionTypes, structIds, startTime, endTime, order);
         }, page, size);
@@ -76,7 +66,7 @@ public class UserNoteQuestionService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserNoteQuestion> listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, String startTime, String endTime, String order){
+    public Page<UserNoteQuestion> listExamination(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, Date startTime, Date endTime, String order){
         Page<UserNoteQuestion> p = page(()->{
             userNoteQuestionRelationMapper.listExamination(userId, keyword, questionTypes, structIds, libraryId, year, startTime, endTime, order);
         }, page, size);

+ 3 - 3
server/gateway-api/src/main/java/com/qxgmat/service/UserPaperService.java

@@ -61,7 +61,7 @@ public class UserPaperService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserPaper> list(int page, int size, Integer userId, String keyword, PaperOrigin origin, String startTime, String endTime, String order){
+    public Page<UserPaper> list(int page, int size, Integer userId, String keyword, PaperOrigin origin, Date startTime, Date endTime, String order){
         Page<UserPaper> p = page(()->{
             userPaperRelationMapper.list(userId, keyword, origin != null ? origin.key : null, startTime, endTime, order);
         }, page, size);
@@ -84,7 +84,7 @@ public class UserPaperService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserPaper> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, String[] courseModules, String startTime, String endTime, String order){
+    public Page<UserPaper> listExercise(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, String[] courseModules, Date startTime, Date endTime, String order){
         Page<UserPaper> p = page(()->{
             userPaperRelationMapper.listExercise(userId, keyword, questionTypes, structIds, courseModules, startTime, endTime, order);
         }, page, size);
@@ -107,7 +107,7 @@ public class UserPaperService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserPaper> listExamination(int page, int size, Integer userId, String keyword, Integer[] structIds, Integer libraryId, String year, String startTime, String endTime, String order){
+    public Page<UserPaper> listExamination(int page, int size, Integer userId, String keyword, Integer[] structIds, Integer libraryId, String year, Date startTime, Date endTime, String order){
         Page<UserPaper> p = page(()->{
             userPaperRelationMapper.listExamination(userId, keyword, structIds, libraryId, year, startTime, endTime, order);
         }, page, size);

+ 5 - 5
server/gateway-api/src/main/java/com/qxgmat/service/UserQuestionService.java

@@ -50,7 +50,7 @@ public class UserQuestionService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserQuestion> listExerciseError(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, String startTime, String endTime, String order){
+    public Page<UserQuestion> listExerciseError(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Date startTime, Date endTime, String order){
         Page<UserQuestion> p = page(()->{
             userQuestionRelationMapper.listExerciseError(userId, keyword, questionTypes, structIds, startTime, endTime, order);
         }, page, size);
@@ -73,7 +73,7 @@ public class UserQuestionService extends AbstractService {
      * @param order
      * @return
      */
-    public Page<UserQuestion> listExaminationError(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, String startTime, String endTime, String order){
+    public Page<UserQuestion> listExaminationError(int page, int size, Integer userId, String keyword, String[] questionTypes, Integer[] structIds, Integer libraryId, String year, Date startTime, Date endTime, String order){
         Page<UserQuestion> p = page(()->{
             userQuestionRelationMapper.listExaminationError(userId, keyword, questionTypes, structIds, libraryId, year, startTime, endTime, order);
         }, page, size);
@@ -143,7 +143,7 @@ public class UserQuestionService extends AbstractService {
         return select(userQuestionMapper, example);
     }
 
-    public List<UserQuestion> listByQuestionWithTime(Integer userId, QuestionModule questionModule, Collection questionNoIds, String startTime, String endTime){
+    public List<UserQuestion> listByQuestionWithTime(Integer userId, QuestionModule questionModule, Collection questionNoIds, Date startTime, Date endTime){
         if (questionNoIds == null || questionNoIds.size() == 0) return new ArrayList<>();
         Example example = new Example(UserQuestion.class);
         example.and(
@@ -310,7 +310,7 @@ public class UserQuestionService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRecordStatRelation stat(Integer userId, String startTime, String endTime){
+    public UserRecordStatRelation stat(Integer userId, Date startTime, Date endTime){
         List<UserRecordStatRelation> list = userQuestionRelationMapper.stat(userId, startTime, endTime);
         if (list!=null && list.size() > 0){
             return list.get(0);
@@ -324,7 +324,7 @@ public class UserQuestionService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRecordStatRelation statAvg(String startTime, String endTime){
+    public UserRecordStatRelation statAvg(Date startTime, Date endTime){
         List<UserRecordStatRelation> list = userQuestionRelationMapper.statAvg(startTime, endTime);
         if (list!=null && list.size() > 0){
             return list.get(0);

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

@@ -32,7 +32,7 @@ public class UserServiceService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserService> allExpire(ServiceKey serviceKey, String startTime, String endTime){
+    public List<UserService> allExpire(ServiceKey serviceKey, Date startTime, Date endTime){
         Example example = new Example(UserService.class);
         example.and(
                 example.createCriteria()

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

@@ -511,7 +511,7 @@ public class UsersService extends AbstractService {
         userRelationMapper.accumulation(userId, money);
     }
 
-    public Page<User> listAdmin(int page, int pageSize, String keyword, Boolean real, Boolean wechat, Boolean prepare, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<User> listAdmin(int page, int pageSize, String keyword, Boolean real, Boolean wechat, Boolean prepare, Date startTime, Date endTime, String order, DirectionStatus direction){
         Example example = new Example(User.class);
         if(keyword != null)
             example.and(

+ 2 - 2
server/gateway-api/src/main/java/com/qxgmat/service/extend/CourseExtendService.java

@@ -128,7 +128,7 @@ public class CourseExtendService {
      * @return
      */
     public Integer studyTime(Integer userId, Date startTime, Date endTime){
-        UserRecordStatRelation record = userCourseRecordService.stat(userId, startTime != null? startTime.toString():null, endTime != null ? endTime.toString(): null);
+        UserRecordStatRelation record = userCourseRecordService.stat(userId, startTime, endTime);
         return record != null ? record.getUserTime() : 0;
     }
 
@@ -137,7 +137,7 @@ public class CourseExtendService {
      * @return
      */
     public Integer studyAvgTime(Date startTime, Date endTime){
-        UserRecordStatRelation record = userCourseRecordService.statAvg(startTime != null? startTime.toString():null, endTime != null ? endTime.toString(): null);
+        UserRecordStatRelation record = userCourseRecordService.statAvg(startTime, endTime);
         return record != null ? record.getUserTime() : 0;
     }
 

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/service/extend/ExerciseService.java

@@ -85,7 +85,7 @@ public class ExerciseService extends AbstractService {
      * @param direction
      * @return
      */
-    public Page<QuestionNoRelation> listAdmin(int page, int pageSize, String questionType, Number structId, Number questionNo, Number paperId, String place, String difficult, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<QuestionNoRelation> listAdmin(int page, int pageSize, String questionType, Number structId, Number questionNo, Number paperId, String place, String difficult, Date startTime, Date endTime, String order, DirectionStatus direction){
         if(order == null || order.isEmpty()){
             order = "id";
         }

+ 194 - 1
server/gateway-api/src/main/java/com/qxgmat/service/extend/ExportService.java

@@ -1,8 +1,17 @@
 package com.qxgmat.service.extend;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.nuliji.tools.Transform;
+import com.nuliji.tools.exception.ParameterException;
+import com.qxgmat.data.constants.enums.user.AskTarget;
 import com.qxgmat.data.constants.enums.user.ExportType;
-import com.qxgmat.data.dao.entity.UserExport;
+import com.qxgmat.data.dao.entity.*;
+import com.qxgmat.data.inline.ExportCourseNote;
+import com.qxgmat.data.inline.ExportQuestion;
+import com.qxgmat.data.relation.entity.QuestionNoRelation;
+import com.qxgmat.data.relation.entity.UserNoteCourseRelation;
+import com.qxgmat.data.relation.entity.UserQuestionRelation;
 import com.qxgmat.service.UserNoteCourseService;
 import com.qxgmat.service.UserNoteQuestionService;
 import com.qxgmat.service.inline.*;
@@ -10,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.*;
 
 @Service
 public class ExportService {
@@ -21,15 +31,61 @@ public class ExportService {
     private UserNoteCourseService userNoteCourseService;
 
     @Autowired
+    private CourseNoService courseNoService;
+
+    @Autowired
     private QuestionService questionService;
 
     @Autowired
     private QuestionNoService questionNoService;
 
+    @Autowired
+    private UserAskQuestionService userAskQuestionService;
+
     @Resource
     private UserExportService userExportService;
 
     public UserExport addQuestionCollect(Integer userId, JSONObject setting){
+        JSONArray questionNoIds = setting.getJSONArray("questionNoIds");
+        if (questionNoIds.size() ==0){
+            throw new ParameterException("不可小于1题,请重新选择");
+        }
+        if (questionNoIds.size() >100){
+            throw new ParameterException("不可多余100题,请重新选择");
+        }
+        JSONArray include = setting.getJSONArray("include");
+        List<UserQuestionRelation> relationList = this.listByQuestionNoIds(userId, questionNoIds.toJavaList(Integer.class), false);
+        JSONObject content = new JSONObject();
+        JSONArray list = new JSONArray();
+
+        for(UserQuestionRelation relation : relationList){
+            if (!include.contains(AskTarget.QUESTION.key)){
+                relation.getQuestion().setStem(null);
+                if (relation.getNote() != null) relation.getNote().setQuestionContent(null);
+            }
+            if (!include.contains(AskTarget.QX.key)){
+                relation.getQuestion().setQxContent(null);
+                if (relation.getNote() != null) relation.getNote().setQxContent(null);
+            }
+            if (!include.contains(AskTarget.OFFICIAL.key)){
+                relation.getQuestion().setOfficialContent(null);
+                if (relation.getNote() != null) relation.getNote().setOfficialContent(null);
+            }
+            if (!include.contains(AskTarget.ASSOCIATION.key)){
+                relation.setAssociations(new ArrayList<>());
+                if (relation.getNote() != null) relation.getNote().setAssociationContent(null);
+            }
+            if (!include.contains(AskTarget.QA.key)){
+                relation.setAsks(new ArrayList<>());
+                if (relation.getNote() != null) relation.getNote().setQaContent(null);
+            }
+            if (!include.contains("note")){
+                relation.setNote(null);
+            }
+
+            list.add(Transform.convert(relation, ExportQuestion.class));
+        }
+        content.put("list", list);
         int count = userExportService.countByUser(userId, ExportType.QUESTION_COLLECT);
         UserExport export = UserExport.builder()
                 .userId(userId)
@@ -41,6 +97,45 @@ public class ExportService {
     }
 
     public UserExport addQuestionError(Integer userId, JSONObject setting){
+        JSONArray questionNoIds = setting.getJSONArray("questionNoIds");
+        if (questionNoIds.size() ==0){
+            throw new ParameterException("不可小于1题,请重新选择");
+        }
+        if (questionNoIds.size() >100){
+            throw new ParameterException("不可多余100题,请重新选择");
+        }
+        JSONArray include = setting.getJSONArray("include");
+        List<UserQuestionRelation> relationList = this.listByQuestionNoIds(userId, questionNoIds.toJavaList(Integer.class), true);
+        JSONObject content = new JSONObject();
+        JSONArray list = new JSONArray();
+        for(UserQuestionRelation relation : relationList){
+            if (!include.contains(AskTarget.QUESTION.key)){
+                relation.getQuestion().setStem(null);
+                if (relation.getNote() != null) relation.getNote().setQuestionContent(null);
+            }
+            if (!include.contains(AskTarget.QX.key)){
+                relation.getQuestion().setQxContent(null);
+                if (relation.getNote() != null) relation.getNote().setQxContent(null);
+            }
+            if (!include.contains(AskTarget.OFFICIAL.key)){
+                relation.getQuestion().setOfficialContent(null);
+                if (relation.getNote() != null) relation.getNote().setOfficialContent(null);
+            }
+            if (!include.contains(AskTarget.ASSOCIATION.key)){
+                relation.setAssociations(new ArrayList<>());
+                if (relation.getNote() != null) relation.getNote().setAssociationContent(null);
+            }
+            if (!include.contains(AskTarget.QA.key)){
+                relation.setAsks(new ArrayList<>());
+                if (relation.getNote() != null) relation.getNote().setQaContent(null);
+            }
+            if (!include.contains("note")){
+                relation.setNote(null);
+            }
+
+            list.add(Transform.convert(relation, ExportQuestion.class));
+        }
+        content.put("list", list);
         int count = userExportService.countByUser(userId, ExportType.QUESTION_ERROR);
         UserExport export = UserExport.builder()
                 .userId(userId)
@@ -52,6 +147,43 @@ public class ExportService {
     }
 
     public UserExport addQuestionNote(Integer userId, JSONObject setting){
+        JSONArray questionNoIds = setting.getJSONArray("questionNoIds");
+        if (questionNoIds.size() ==0){
+            throw new ParameterException("不可小于1题,请重新选择");
+        }
+        if (questionNoIds.size() >100){
+            throw new ParameterException("不可多余100题,请重新选择");
+        }
+        JSONObject questionNoMap = setting.getJSONObject("questionNoMap");
+        List<UserQuestionRelation> relationList = this.listByQuestionNoIds(userId, questionNoIds.toJavaList(Integer.class), false);
+        JSONObject content = new JSONObject();
+        JSONArray list = new JSONArray();
+        for(UserQuestionRelation relation : relationList){
+            JSONObject questionNo = questionNoMap.getJSONObject(relation.getQuestionNoId().toString());
+            if (!questionNo.containsKey(AskTarget.QUESTION.key)){
+                relation.getQuestion().setStem(null);
+                if (relation.getNote() != null) relation.getNote().setQuestionContent(null);
+            }
+            if (!questionNo.containsKey(AskTarget.QX.key)){
+                relation.getQuestion().setQxContent(null);
+                if (relation.getNote() != null) relation.getNote().setQxContent(null);
+            }
+            if (!questionNo.containsKey(AskTarget.OFFICIAL.key)){
+                relation.getQuestion().setOfficialContent(null);
+                if (relation.getNote() != null) relation.getNote().setOfficialContent(null);
+            }
+            if (!questionNo.containsKey(AskTarget.ASSOCIATION.key)){
+                relation.setAssociations(new ArrayList<>());
+                if (relation.getNote() != null) relation.getNote().setAssociationContent(null);
+            }
+            if (!questionNo.containsKey(AskTarget.QA.key)){
+                relation.setAsks(new ArrayList<>());
+                if (relation.getNote() != null) relation.getNote().setQaContent(null);
+            }
+
+            list.add(Transform.convert(relation, ExportQuestion.class));
+        }
+        content.put("list", list);
         int count = userExportService.countByUser(userId, ExportType.NOTE_QUESTION);
         UserExport export = UserExport.builder()
                 .userId(userId)
@@ -63,14 +195,75 @@ public class ExportService {
     }
 
     public UserExport addCourseNote(Integer userId, JSONObject setting){
+        JSONArray courseNoIds = setting.getJSONArray("courseNoIds");
+        if (courseNoIds.size() ==0){
+            throw new ParameterException("不可小于1题,请重新选择");
+        }
+        if (courseNoIds.size() >100){
+            throw new ParameterException("不可多余100题,请重新选择");
+        }
+        List<UserNoteCourse> noteList = userNoteCourseService.listByCourseNo(userId, courseNoIds.toJavaList(Integer.class));
+        List<CourseNo> courseNoList = courseNoService.select(courseNoIds.toJavaList(Integer.class));
+        Map courseNoMap = Transform.getMap(courseNoList, CourseNo.class, "id");
+        JSONObject content = new JSONObject();
+        JSONArray list = new JSONArray();
+        for(UserNoteCourse note : noteList){
+            UserNoteCourseRelation relation = Transform.convert(note, UserNoteCourseRelation.class);
+            relation.setCourseNo((CourseNo)courseNoMap.get(note.getCourseNoId()));
+
+            list.add(Transform.convert(relation, ExportCourseNote.class));
+        }
+        content.put("list", list);
         int count = userExportService.countByUser(userId, ExportType.NOTE_COURSE);
         UserExport export = UserExport.builder()
                 .userId(userId)
                 .type(ExportType.NOTE_COURSE.key)
                 .setting(setting)
                 .no(count)
+                .content(content)
                 .build();
 
         return userExportService.add(export);
     }
+
+    private List<UserQuestionRelation> listByQuestionNoIds(Integer userId, Collection questionNoIds, boolean needAnswer){
+        List<UserQuestion> userQuestionList = null;
+        if (needAnswer){
+            // 查询所有id的最后一次做题记录
+
+        }else{
+            for(Object questionNoId : questionNoIds){
+                userQuestionList.add(UserQuestion.builder()
+                        .questionNoId((Integer)questionNoId)
+                        .build());
+            }
+        }
+        List<UserQuestionRelation> relationList = Transform.convert(userQuestionList, UserQuestionRelation.class);
+
+        List<QuestionNo> questionNoList = questionNoService.select(questionNoIds);
+        Transform.combine(relationList, questionNoList, UserQuestionRelation.class, "questionNoId", "questionNo", QuestionNo.class, "id");
+        Map questionNoMap = Transform.getMap(questionNoList, QuestionNo.class, "id", "questionId");
+        Transform.combine(relationList, questionNoMap, UserQuestionRelation.class, "questionNoId", "questionId");
+        Collection questionIds = Transform.getIds(questionNoList, QuestionNo.class, "questionId");
+        List<Question> questionList = questionService.select(questionIds);
+        Transform.combine(relationList, questionList, UserQuestionRelation.class, "questionId", "question", Question.class, "id");
+
+        // 题源联想
+        Map<Integer, Integer[]> questionIdsMap = new HashMap<>();
+        for(Question q : questionList){
+            questionIdsMap.put(q.getId(), q.getAssociationContent());
+        }
+        Map questionMap = questionService.groupByMap(questionIdsMap);
+        Transform.combine(relationList, questionMap, UserQuestionRelation.class, "id", "associations");
+
+        // 相关问答
+        Map<Object, Collection<UserAskQuestion>> userAskMap = userAskQuestionService.groupByQuestionNo(questionIds);
+        Transform.combine(relationList, userAskMap, UserQuestionRelation.class, "id", "asks");
+
+        // 笔记
+        List<UserNoteQuestion> userNoteQuestionList = userNoteQuestionService.listByUserAndQuestions(userId, questionIds);
+        Transform.combine(relationList, userNoteQuestionList, UserQuestionRelation.class, "questionId", "note", UserNoteQuestion.class, "questionId");
+
+        return relationList;
+    }
 }

+ 19 - 12
server/gateway-api/src/main/java/com/qxgmat/service/extend/OrderFlowService.java

@@ -163,6 +163,8 @@ public class OrderFlowService {
                 }
                 // 加入套餐: 无需进入course_package的初始化流程
                 UserOrderCheckout packageCheckout = UserOrderCheckout.builder()
+                        .orderId(checkout.getOrderId())
+                        .userId(checkout.getUserId())
                         .productType(ProductType.COURSE_PACKAGE.key)
                         .productId(coursePackage.getId())
                         .money(coursePackage.getPrice())
@@ -226,6 +228,8 @@ public class OrderFlowService {
             // 添加还未添加的课程记录
             for(Integer id : ids){
                 UserOrderCheckout tmp = UserOrderCheckout.builder()
+                        .orderId(checkout.getOrderId())
+                        .userId(checkout.getUserId())
                         .parentId(checkout.getId())
                         .productType(ProductType.COURSE.key)
                         .productId(id)
@@ -357,7 +361,7 @@ public class OrderFlowService {
             Integer vsNumber = 0;
 
             // 独立课程信息: 排除套餐内的
-            List<UserOrderCheckout> courseCheckout = userOrderCheckoutList.stream().filter((checkout)-> checkout.getProductType().equals(ProductType.COURSE.key) && checkout.getParentId() == 0).collect(Collectors.toList());
+            List<UserOrderCheckout> courseCheckout = userOrderCheckoutList.stream().filter((checkout)-> checkout.getProductType().equals(ProductType.COURSE.key) && (checkout.getParentId() == null || checkout.getParentId() == 0)).collect(Collectors.toList());
             Collection courseIds = Transform.getIds(courseCheckout, UserOrderCheckout.class, "productId");
             List<Course> courseList = courseService.select(courseIds);
             Map<Integer, Course> courseMap = new HashMap<>();
@@ -1009,24 +1013,27 @@ public class OrderFlowService {
      */
     @Transactional
     public UserOrder makeOrderWithSpeed(Integer userId, UserOrderCheckout checkout){
-        List<UserOrderCheckout> list = new ArrayList<>();
+        UserOrder order = UserOrder.builder().userId(userId).build();
+        order = userOrderService.add(order);
         checkout.setUserId(userId);
+        checkout.setOrderId(order.getId());
+
+        List<UserOrderCheckout> list = new ArrayList<>();
         InitCheckout callback = initCheckoutCallback.get(ProductType.ValueOf(checkout.getProductType()));
         checkout = callback.callback(checkout, list);
-        if (checkout == null){
-            throw new ParameterException("创建失败");
-        }
-        list.add(checkout);
-
-        UserOrder order = preOrderWithCheckout(userId, list);
-        order.setIsSpeed(1);
-        order = userOrderService.add(order);
-        checkout.setOrderId(order.getId());
-        if(checkout.getId() != null && checkout.getId() > 0){
+        if (checkout == null) {
+            // 无需操作
+        }else if(checkout.getId() != null && checkout.getId() > 0){
             userOrderCheckoutService.edit(checkout);
         }else{
             userOrderCheckoutService.add(checkout);
         }
+
+        list = userOrderCheckoutService.allByUser(userId, order.getId());
+        UserOrder tmp = preOrderWithCheckout(userId, list);
+        tmp.setIsSpeed(1);
+        tmp.setId(order.getId());
+        order = userOrderService.edit(tmp);
         return order;
     }
 

+ 2 - 2
server/gateway-api/src/main/java/com/qxgmat/service/extend/QuestionFlowService.java

@@ -814,7 +814,7 @@ public class QuestionFlowService {
      * @return
      */
     public Integer studyTime(Integer userId, Date startTime, Date endTime){
-        UserRecordStatRelation record = userQuestionService.stat(userId, startTime != null? startTime.toString():null, endTime != null ? endTime.toString(): null);
+        UserRecordStatRelation record = userQuestionService.stat(userId, startTime, endTime);
         return record != null ? record.getUserTime() : 0;
     }
 
@@ -823,7 +823,7 @@ public class QuestionFlowService {
      * @return
      */
     public Integer studyAvgTime(Date startTime, Date endTime){
-        UserRecordStatRelation record = userQuestionService.statAvg(startTime != null? startTime.toString():null, endTime != null ? endTime.toString(): null);
+        UserRecordStatRelation record = userQuestionService.statAvg(startTime, endTime);
         return record != null ? record.getUserTime() : 0;
     }
 

+ 2 - 2
server/gateway-api/src/main/java/com/qxgmat/service/extend/SentenceService.java

@@ -206,7 +206,7 @@ public class SentenceService {
      * @return
      */
     public Integer studyTime(Integer userId, Date startTime, Date endTime){
-        UserRecordStatRelation record = userSentenceRecordService.stat(userId, startTime != null? startTime.toString():null, endTime != null ? endTime.toString(): null);
+        UserRecordStatRelation record = userSentenceRecordService.stat(userId, startTime, endTime);
         return record != null ? record.getUserTime() : 0;
     }
 
@@ -215,7 +215,7 @@ public class SentenceService {
      * @return
      */
     public Integer studyAvgTime(Date startTime, Date endTime){
-        UserRecordStatRelation record = userSentenceRecordService.statAvg(startTime != null? startTime.toString():null, endTime != null ? endTime.toString(): null);
+        UserRecordStatRelation record = userSentenceRecordService.statAvg(startTime, endTime);
         return record != null ? record.getUserTime() : 0;
     }
 

+ 2 - 5
server/gateway-api/src/main/java/com/qxgmat/service/inline/CourseExperienceService.java

@@ -22,10 +22,7 @@ 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;
+import java.util.*;
 
 @Service
 public class CourseExperienceService extends AbstractService {
@@ -41,7 +38,7 @@ public class CourseExperienceService extends AbstractService {
         put("", "ce");
     }};
 
-    public Page<CourseExperience> listWithUser(int page, int size, Integer userId, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<CourseExperience> listWithUser(int page, int size, Integer userId, Date startTime, Date endTime, String order, DirectionStatus direction){
         if(order == null || order.isEmpty()){
             order = "id";
         }

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/service/inline/PreviewAssignService.java

@@ -186,7 +186,7 @@ public class PreviewAssignService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<PreviewAssign> listAppointmentExpire(String startTime, String endTime){
+    public List<PreviewAssign> listAppointmentExpire(Date startTime, Date endTime){
         Example example = new Example(PreviewAssign.class);
         example.and(
                 example.createCriteria()

+ 19 - 0
server/gateway-api/src/main/java/com/qxgmat/service/inline/QuestionService.java

@@ -75,6 +75,25 @@ public class QuestionService extends AbstractService {
         return relationMap;
     }
 
+    public Map<Integer, List<Question>> groupByMap(Map<Integer, Integer[]> questionIdsMap){
+        Map<Integer, List<Question>> relationMap = new HashMap<>();
+        List<Integer> ids = new ArrayList<>();
+        for(Integer[] questionIds : questionIdsMap.values()){
+            ids.addAll(Arrays.stream(questionIds).collect(Collectors.toList()));
+        }
+        List<Question> questionList = select(ids);
+        Map questionMap = Transform.getMap(questionList, Question.class, "id");
+        for(Integer k: questionIdsMap.keySet()){
+            List<Question> l = new ArrayList<>();
+            for (Integer questionId : questionIdsMap.get(k)){
+                l.add((Question)questionMap.get(questionId));
+            }
+            relationMap.put(k, l);
+        }
+
+        return relationMap;
+    }
+
     /**
      * 累加做题记录到questionNo
      * @param question

+ 2 - 5
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserAbnormalService.java

@@ -20,10 +20,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class UserAbnormalService extends AbstractService {
@@ -39,7 +36,7 @@ public class UserAbnormalService extends AbstractService {
         put("", "ua");
     }};
 
-    public Page<UserAbnormal> listAdmin(int page, int size, Integer userId, Integer totalAlert, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<UserAbnormal> listAdmin(int page, int size, Integer userId, Integer totalAlert, Date startTime, Date endTime, String order, DirectionStatus direction){
         if(order == null || order.isEmpty()){
             order = "id";
         }

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

@@ -36,7 +36,7 @@ public class UserAskCourseService extends AbstractService {
         put("", "uac");
     }};
 
-    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){
+    public Page<UserAskCourse> listAdmin(int page, int size, Integer structId, Number courseId, AnswerStatus status, Integer showStatus, Integer userId, MoneyRange moneyRange, Date startTime, Date 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;

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

@@ -20,10 +20,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class UserAskQuestionService extends AbstractService {
@@ -35,7 +32,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, AnswerStatus 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, Date startTime, Date 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 +42,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, AnswerStatus 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, Date startTime, Date 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);
@@ -55,11 +52,34 @@ public class UserAskQuestionService extends AbstractService {
         return p;
     }
 
+    public Map<Object, Collection<UserAskQuestion>> groupByQuestionNo(Collection questionIds){
+        Map<Object, Collection<UserAskQuestion>> relationMap = new HashMap<>();
+        if(questionIds == null || questionIds.size() == 0) return relationMap;
+        Example example = new Example(UserAskQuestion.class);
+        example.and(
+                example.createCriteria()
+                        .andIn("questionId", questionIds)
+        );
+        example.orderBy("sort").desc();
+        List<UserAskQuestion> nos =  select(userAskQuestionMapper, example);
+        Collection<UserAskQuestion> list;
+        for(UserAskQuestion no : nos){
+            if (!relationMap.containsKey(no.getQuestionId())){
+                list = new ArrayList<>();
+                relationMap.put(no.getQuestionId(), list);
+            }else{
+                list = relationMap.get(no.getQuestionId());
+            }
+            list.add(no);
+        }
+        return relationMap;
+    }
+
     private Map<String, String> adminMap = new HashMap<String, String>(){{
         put("", "uaq");
     }};
 
-    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){
+    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, Date startTime, Date 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;

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserCourseAppointmentService.java

@@ -23,7 +23,7 @@ public class UserCourseAppointmentService extends AbstractService {
     @Resource
     private UserCourseAppointmentMapper userCourseAppointmentMapper;
 
-    public Page<UserCourseAppointment> listAdmin(int page, int size, Integer recordId, Integer userId, Integer courseId, String startTime, String endTime, String order, DirectionStatus direction){
+    public Page<UserCourseAppointment> listAdmin(int page, int size, Integer recordId, Integer userId, Integer courseId, Date startTime, Date endTime, String order, DirectionStatus direction){
         Example example = new Example(UserCourseAppointment.class);
         if(recordId != null){
             example.and(

+ 5 - 5
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserCourseRecordService.java

@@ -111,7 +111,7 @@ public class UserCourseRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserCourseRecord> getByTime(Integer userId, String startTime, String endTime){
+    public List<UserCourseRecord> getByTime(Integer userId, Date startTime, Date endTime){
         Example example = new Example(UserCourseRecord.class);
         example.and(
                 example.createCriteria()
@@ -129,7 +129,7 @@ public class UserCourseRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRecordStatRelation stat(Integer userId, String startTime, String endTime){
+    public UserRecordStatRelation stat(Integer userId, Date startTime, Date endTime){
         List<UserRecordStatRelation> list = userCourseRecordRelationMapper.stat(userId, startTime, endTime);
         if (list!=null && list.size() > 0){
             return list.get(0);
@@ -143,7 +143,7 @@ public class UserCourseRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRecordStatRelation statAvg(String startTime, String endTime){
+    public UserRecordStatRelation statAvg(Date startTime, Date endTime){
         List<UserRecordStatRelation> list = userCourseRecordRelationMapper.statAvg(startTime, endTime);
         if (list!=null && list.size() > 0){
             return list.get(0);
@@ -158,7 +158,7 @@ public class UserCourseRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserModuleRecordStatRelation> statGroupType(Integer userId, String startTime, String endTime){
+    public List<UserModuleRecordStatRelation> statGroupType(Integer userId, Date startTime, Date endTime){
         return userCourseRecordRelationMapper.statGroupType(userId, startTime, endTime);
     }
 
@@ -169,7 +169,7 @@ public class UserCourseRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRankStatRelation rankByTime(Integer userId, String startTime, String endTime){
+    public UserRankStatRelation rankByTime(Integer userId, Date startTime, Date endTime){
         List<UserRankStatRelation> relation = userCourseRecordRelationMapper.rankByTime(userId, startTime, endTime);
         if (relation != null && relation.size() > 0){
             return relation.get(0);

+ 12 - 12
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserOrderRecordService.java

@@ -73,7 +73,7 @@ public class UserOrderRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserOrderRecord> allSuspendExpire(String startTime, String endTime){
+    public List<UserOrderRecord> allSuspendExpire(Date startTime, Date endTime){
         Example example = new Example(UserOrderRecord.class);
         example.and(
                 example.createCriteria()
@@ -91,7 +91,7 @@ public class UserOrderRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserOrderRecord> allCourseUseExpire(String startTime, String endTime){
+    public List<UserOrderRecord> allCourseUseExpire(Date startTime, Date endTime){
         Example example = new Example(UserOrderRecord.class);
         example.and(
                 example.createCriteria()
@@ -109,7 +109,7 @@ public class UserOrderRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserOrderRecord> allCourseOpenExpire(String startTime, String endTime){
+    public List<UserOrderRecord> allCourseOpenExpire(Date startTime, Date endTime){
         Example example = new Example(UserOrderRecord.class);
         example.and(
                 example.createCriteria()
@@ -127,7 +127,7 @@ public class UserOrderRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserOrderRecord> allServiceUseExpire(ServiceKey serviceKey, String startTime, String endTime){
+    public List<UserOrderRecord> allServiceUseExpire(ServiceKey serviceKey, Date startTime, Date endTime){
         Example example = new Example(UserOrderRecord.class);
         example.and(
                 example.createCriteria()
@@ -145,7 +145,7 @@ public class UserOrderRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserOrderRecord> allServiceOpenExpire(ServiceKey serviceKey, String startTime, String endTime){
+    public List<UserOrderRecord> allServiceOpenExpire(ServiceKey serviceKey, Date startTime, Date endTime){
         Example example = new Example(UserOrderRecord.class);
         example.and(
                 example.createCriteria()
@@ -158,7 +158,7 @@ public class UserOrderRecordService extends AbstractService {
         return select(userOrderRecordMapper, example);
     }
 
-    public List<MonthNumberRelation> groupByMonth(String startTime, String endTime, ProductType productType, Integer productId, ServiceKey serviceKey){
+    public List<MonthNumberRelation> groupByMonth(Date startTime, Date endTime, ProductType productType, Integer productId, ServiceKey serviceKey){
         return userOrderRecordRelationMapper.groupByMonth(startTime, endTime, productType != null ? productType.key : null, productId, serviceKey != null ? serviceKey.key : null);
     }
 
@@ -648,18 +648,18 @@ public class UserOrderRecordService extends AbstractService {
         }
         String finalOrder = order;
         DirectionStatus finalDirection = direction;
-        String ltUseEndTime = null;
-        String gtUseEndTime = null;
+        Date ltUseEndTime = null;
+        Date gtUseEndTime = null;
         if (isEnd != null){
             // 是否结束,根据当前时间进行sql处理
             if (isEnd){
-                ltUseEndTime = new Date().toString();
+                ltUseEndTime = new Date();
             }else{
-                gtUseEndTime = new Date().toString();
+                gtUseEndTime = new Date();
             }
         }
-        String finalLtUseEndTime = ltUseEndTime;
-        String finalGtUseEndTime = gtUseEndTime;
+        Date finalLtUseEndTime = ltUseEndTime;
+        Date finalGtUseEndTime = gtUseEndTime;
         Page<UserOrderRecord> p = page(
                 ()-> userOrderRecordRelationMapper.listWithCourse(userId, modules, isUsed, finalLtUseEndTime, finalGtUseEndTime, finalOrder, finalDirection.key)
                 , page, size);

+ 5 - 5
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserReportService.java

@@ -125,7 +125,7 @@ public class UserReportService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserReport> getByModule(Integer userId, PaperModule paperModule, String startTime, String endTime){
+    public List<UserReport> getByModule(Integer userId, PaperModule paperModule, Date startTime, Date endTime){
         Example example = new Example(UserReport.class);
         example.and(
                 example.createCriteria()
@@ -152,7 +152,7 @@ public class UserReportService extends AbstractService {
      * @param userId
      * @return
      */
-    public List<UserStudyStatRelation> statGroupExerciseType(Integer userId, String startTime, String endTime){
+    public List<UserStudyStatRelation> statGroupExerciseType(Integer userId, Date startTime, Date endTime){
         return userReportRelationMapper.statGroupExerciseType(userId, startTime, endTime);
     }
 
@@ -161,7 +161,7 @@ public class UserReportService extends AbstractService {
      * @param userId
      * @return
      */
-    public List<UserStudyStatRelation> statGroupPreviewType(Integer userId, String startTime, String endTime){
+    public List<UserStudyStatRelation> statGroupPreviewType(Integer userId, Date startTime, Date endTime){
         return userReportRelationMapper.statGroupPreviewType(userId, startTime, endTime);
     }
 
@@ -172,7 +172,7 @@ public class UserReportService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRankStatRelation rankExerciseByTime(Integer userId, String startTime, String endTime){
+    public UserRankStatRelation rankExerciseByTime(Integer userId, Date startTime, Date endTime){
         List<UserRankStatRelation> relation = userReportRelationMapper.rankExerciseByTime(userId, startTime, endTime);
         if (relation != null && relation.size() > 0){
             return relation.get(0);
@@ -188,7 +188,7 @@ public class UserReportService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRankStatRelation rankExaminationByTime(Integer userId, String startTime, String endTime){
+    public UserRankStatRelation rankExaminationByTime(Integer userId, Date startTime, Date endTime){
         List<UserRankStatRelation> relation = userReportRelationMapper.rankExaminationByTime(userId, startTime, endTime);
         if (relation != null && relation.size() > 0){
             return relation.get(0);

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

@@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -35,7 +36,7 @@ public class UserSentenceRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRecordStatRelation stat(Integer userId, String startTime, String endTime){
+    public UserRecordStatRelation stat(Integer userId, Date startTime, Date endTime){
         List<UserRecordStatRelation> list = userSentenceRecordRelationMapper.stat(userId, startTime, endTime);
         if (list!=null && list.size() > 0){
             return list.get(0);
@@ -49,7 +50,7 @@ public class UserSentenceRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public UserRecordStatRelation statAvg(String startTime, String endTime){
+    public UserRecordStatRelation statAvg(Date startTime, Date endTime){
         List<UserRecordStatRelation> list = userSentenceRecordRelationMapper.statAvg(startTime, endTime);
         if (list!=null && list.size() > 0){
             return list.get(0);
@@ -63,7 +64,7 @@ public class UserSentenceRecordService extends AbstractService {
      * @param endTime
      * @return
      */
-    public List<UserSentenceRecord> getByTime(Integer userId, String startTime, String endTime){
+    public List<UserSentenceRecord> getByTime(Integer userId, Date startTime, Date endTime){
         Example example = new Example(UserCourseRecord.class);
         example.and(
                 example.createCriteria()

+ 3 - 2
server/gateway-api/src/main/java/com/qxgmat/service/inline/UserTextbookEnrollService.java

@@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.Collection;
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -27,7 +28,7 @@ public class UserTextbookEnrollService extends AbstractService {
     @Resource
     private UserTextbookEnrollRelationMapper userTextbookEnrollRelationMapper;
 
-    public List<UserTextbookEnroll> allByUser(Integer userId, String startTime, String endTime){
+    public List<UserTextbookEnroll> allByUser(Integer userId, Date startTime, Date endTime){
         Example example = new Example(UserTextbookEnroll.class);
         example.and(
                 example.createCriteria()
@@ -39,7 +40,7 @@ public class UserTextbookEnrollService extends AbstractService {
         return select(userTextbookEnrollMapper, example);
     }
 
-    public List<MonthNumberRelation> groupByMonth(String startTime, String endTime){
+    public List<MonthNumberRelation> groupByMonth(Date startTime, Date endTime){
         return userTextbookEnrollRelationMapper.groupByMonth(startTime, endTime);
     }
 

+ 10 - 10
server/gateway-api/src/main/java/com/qxgmat/task/ScheduledTask.java

@@ -246,7 +246,7 @@ public class ScheduledTask {
             return;
         }
         logger.info("Start auto Send Preview message");
-        List<PreviewAssign> previewAssignList = previewAssignService.listAppointmentExpire(startTime.toString(), endTime.toString());
+        List<PreviewAssign> previewAssignList = previewAssignService.listAppointmentExpire(startTime, endTime);
         for(PreviewAssign previewAssign : previewAssignList){
             Course course = courseService.get(previewAssign.getCourseId());
             if (previewAssign.getCourseAppointment() > 0){
@@ -276,7 +276,7 @@ public class ScheduledTask {
         // 下一小时内到期的课程
         Date startTime = new Date();
         Date endTime = Tools.addHour(startTime, 1);
-        List<UserOrderRecord> recordList = userOrderRecordService.allCourseUseExpire(startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allCourseUseExpire(startTime, endTime);
         for(UserOrderRecord record : recordList){
             Course course = courseService.get(record.getId());
             if (CourseModule.ValueOf(course.getCourseModule()) != CourseModule.VIDEO){
@@ -323,7 +323,7 @@ public class ScheduledTask {
     public void restoreSuspendCourse() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 30);
-        List<UserOrderRecord> recordList = userOrderRecordService.allSuspendExpire(startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allSuspendExpire(startTime, endTime);
         for(UserOrderRecord record : recordList){
             courseExtendService.restoreCourse(record.getUserId(), record.getId());
         }
@@ -334,7 +334,7 @@ public class ScheduledTask {
     public void vipUseExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 10);
-        List<UserService> serviceList = userServiceService.allExpire(ServiceKey.VIP, startTime.toString(), endTime.toString());
+        List<UserService> serviceList = userServiceService.allExpire(ServiceKey.VIP, startTime, endTime);
         Collection userIds = Transform.getIds(serviceList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");
@@ -354,7 +354,7 @@ public class ScheduledTask {
     public void catOpenExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 30);
-        List<UserOrderRecord> recordList = userOrderRecordService.allServiceOpenExpire(ServiceKey.QX_CAT, startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allServiceOpenExpire(ServiceKey.QX_CAT, startTime, endTime);
         Collection userIds = Transform.getIds(recordList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");
@@ -369,7 +369,7 @@ public class ScheduledTask {
     public void catUseExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 10);
-        List<UserOrderRecord> recordList = userOrderRecordService.allServiceUseExpire(ServiceKey.QX_CAT, startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allServiceUseExpire(ServiceKey.QX_CAT, startTime, endTime);
         Collection userIds = Transform.getIds(recordList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");
@@ -384,7 +384,7 @@ public class ScheduledTask {
     public void textbookOpenExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 30);
-        List<UserOrderRecord> recordList = userOrderRecordService.allServiceOpenExpire(ServiceKey.TEXTBOOK, startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allServiceOpenExpire(ServiceKey.TEXTBOOK, startTime, endTime);
         Collection userIds = Transform.getIds(recordList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");
@@ -399,7 +399,7 @@ public class ScheduledTask {
     public void textbookUseExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 30);
-        List<UserOrderRecord> recordList = userOrderRecordService.allServiceUseExpire(ServiceKey.TEXTBOOK, startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allServiceUseExpire(ServiceKey.TEXTBOOK, startTime, endTime);
         Collection userIds = Transform.getIds(recordList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");
@@ -414,7 +414,7 @@ public class ScheduledTask {
     public void courseOpenExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 30);
-        List<UserOrderRecord> recordList = userOrderRecordService.allCourseOpenExpire(startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allCourseOpenExpire(startTime, endTime);
         Collection userIds = Transform.getIds(recordList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");
@@ -429,7 +429,7 @@ public class ScheduledTask {
     public void courseUseExpire() {
         Date endTime = Tools.today();
         Date startTime = Tools.addDate(endTime, 10);
-        List<UserOrderRecord> recordList = userOrderRecordService.allCourseUseExpire(startTime.toString(), endTime.toString());
+        List<UserOrderRecord> recordList = userOrderRecordService.allCourseUseExpire(startTime, endTime);
         Collection userIds = Transform.getIds(recordList, UserOrderRecord.class, "userId");
         List<User> userList = usersService.select(userIds);
         Map userMap = Transform.getMap(userList, User.class, "id");

+ 26 - 1
server/tools/src/main/java/com/nuliji/tools/Tools.java

@@ -16,6 +16,7 @@ import java.io.UnsupportedEncodingException;
 import java.security.InvalidKeyException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Matcher;
@@ -248,11 +249,35 @@ public class Tools {
         return ipAddress;
     }
 
-    public static String baseDate(Date date){
+    public static String baseTime(Date date){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         return sdf.format(date);
     }
 
+    public static String baseDate(Date date){
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(date);
+    }
+
+    public static Date baseDate(String date){
+        return baseTime(date, "yyyy-MM-dd");
+    }
+
+
+    public static Date baseTime(String date){
+        return baseTime(date, "yyyy-MM-dd HH:mm:ss");
+    }
+
+    public static Date baseTime(String date, String format){
+        if (date == null || date.isEmpty()) return null;
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        try {
+            return sdf.parse(date);
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
     public static Date today(){
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());

+ 7 - 0
server/tools/src/main/java/com/nuliji/tools/exception/AllExceptionHandler.java

@@ -61,4 +61,11 @@ public class AllExceptionHandler implements HandlerExceptionResolver {
         ObjectError objectError = fieldErrors.get(0);
         return new Response(400, objectError.getDefaultMessage(), null);
     }
+
+    @ExceptionHandler({AuthException.class})
+    @ResponseStatus(HttpStatus.OK)
+    @ResponseBody
+    public Object HandleAuthException(AuthException e){
+        return new Response(401, e.getMessage(), null);
+    }
 }