{"id":10006588,"date":"2022-09-23T19:02:25","date_gmt":"2022-09-23T11:02:25","guid":{"rendered":"https:\/\/ityet.com\/?p=10006588"},"modified":"2022-09-23T19:02:25","modified_gmt":"2022-09-23T11:02:25","slug":"%e5%9f%ba%e4%ba%8e%e5%be%ae%e4%bf%a1%e5%b0%8f%e7%a8%8b%e5%ba%8f%e7%9a%84%e4%bc%9a%e8%ae%ae%e5%ae%a4%e9%a2%84%e5%ae%9a%e5%b9%b3%e5%8f%b0%e5%bc%80%e5%8f%91%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10006588","title":{"rendered":"\u57fa\u4e8e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u7684\u4f1a\u8bae\u5ba4\u9884\u5b9a\u5e73\u53f0\u5f00\u53d1\u7b14\u8bb0"},"content":{"rendered":"<h2>\u4e1a\u52a1\u80cc\u666f<\/h2>\n<p>\u4f1a\u8bae\u5ba4\u662f\u4e00\u4e2a\u5355\u4f4d\u6216\u90e8\u95e8\u7684\u5171\u7528\u8d44\u6e90,\u4f46\u5728\u4f7f\u7528\u7684\u65f6\u5019\u5f80\u5f80\u4f1a\u9047\u5230\u65f6\u95f4\u51b2\u7a81\u3001\u9884\u7ea6\u56f0\u96be\u3001\u4e0d\u65b9\u4fbf\u534f\u8c03\u7b49\u95ee\u9898\u3002\u76ee\u524d\u5927\u90e8\u5206\u516c\u53f8\u662f\u7edf\u4e00\u5728\u516c\u53f8\u7fa4\u804a\u4e2d\u9884\u7ea6\uff0c\u6bcf\u6b21\u9884\u7ea6\u65f6\uff0c\u90fd\u9700\u8981\u7ffb\u4e00\u4e0b\u804a\u5929\u8bb0\u5f55\uff0c\u4e86\u89e3\u662f\u5426\u6709\u4eba\u9884\u5b9a\u4ee5\u53ca\u9884\u5b9a\u65f6\u95f4\u7b49\u3002\u5982\u679c\u51b2\u7a81\u5219\u9700\u8981\u627e\u5230\u76f8\u5173\u8054\u7cfb\u4eba\u8fdb\u884c\u6c9f\u901a\u3002\u67e5\u627e\u5386\u53f2\u9884\u7ea6\u8bb0\u5f55\u9ebb\u70e6\u3002\u800c\u73b0\u5728\u5458\u5de5\u4eba\u4eba\u90fd\u6709\u5fae\u4fe1\uff0c\u57fa\u4e8e\u5fae\u4fe1\u73af\u5883\u4e0b\u7684\u5c0f\u7a0b\u5e8f\uff0c\u4e0d\u7528\u5b89\u88c5\u72ec\u7acbAPP\uff0c\u8bbf\u95ee\u65b9\u4fbf\u3002\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u57fa\u4e8e\u5c0f\u7a0b\u5e8f\uff0c\u501f\u52a9\u4e8e\u4f1a\u8bae\u5ba4\u9884\u7ea6\u7cfb\u7edf\u6539\u5584\u8fd9\u79cd\u60c5\u51b5\uff0c\u5b9e\u73b0\u4f1a\u8bae\u5ba4\u8d44\u6e90\u7684\u6700\u4f18\u4f7f\u7528<\/p>\n<h2>\u9700\u6c42\u5206\u6790<\/h2>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dge\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<h2>\u6570\u636e\u5e93\u8bbe\u8ba1<\/h2>\n<pre><code class=\"c\">EnrollModel.DB_STRUCTURE = {\n    _pid: 'string|true',\n    ENROLL_ID: 'string|true',\n\n    ENROLL_TITLE: 'string|true|comment=\u6807\u9898',\n    ENROLL_STATUS: 'int|true|default=1|comment=\u72b6\u6001 0=\u672a\u542f\u7528,1=\u4f7f\u7528\u4e2d',\n\n    ENROLL_CATE_ID: 'string|true|default=0|comment=\u5206\u7c7b',\n    ENROLL_CATE_NAME: 'string|false|comment=\u5206\u7c7b\u5197\u4f59',\n\n    ENROLL_CANCEL_SET: 'int|true|default=1|comment=\u53d6\u6d88\u8bbe\u7f6e 0=\u4e0d\u5141,1=\u5141\u8bb8,2=\u4ec5\u622a\u6b62\u524d\u53ef\u53d6\u6d88,3=\u5ba1\u6838\u540e\u4e0d\u53ef\u53d6\u6d88',\n    ENROLL_EDIT_SET: 'int|true|default=1|comment=\u4fee\u6539 0=\u4e0d\u5141,1=\u5141\u8bb8,2=\u4ec5\u622a\u6b62\u524d\u53ef,3=\u5ba1\u6838\u540e\u4e0d\u53ef\u4fee\u6539',\n    ENROLL_CHECK_SET: 'int|true|default=0|comment=\u5ba1\u6838 0=\u4e0d\u9700\u8981\u5ba1\u6838,1=\u9700\u8981\u5ba1\u6838',\n\n \n\n    ENROLL_ORDER: 'int|true|default=9999',\n    ENROLL_VOUCH: 'int|true|default=0',\n\n    ENROLL_FORMS: 'array|true|default=[]',\n    ENROLL_OBJ: 'object|true|default={}',\n\n    ENROLL_JOIN_FORMS: 'array|true|default=[]',\n\n    ENROLL_QR: 'string|false',\n    ENROLL_VIEW_CNT: 'int|true|default=0',\n    ENROLL_JOIN_CNT: 'int|true|default=0',\n\n    ENROLL_ADD_TIME: 'int|true',\n    ENROLL_EDIT_TIME: 'int|true',\n    ENROLL_ADD_IP: 'string|false',\n    ENROLL_EDIT_IP: 'string|false',\n};\n\nEnrollJoinModel.DB_STRUCTURE = {\n    _pid: 'string|true',\n    ENROLL_JOIN_ID: 'string|true',\n    ENROLL_JOIN_ENROLL_ID: 'string|true|comment=\u62a5\u540dPK',\n\n    ENROLL_JOIN_IS_ADMIN: 'int|true|default=0|comment=\u662f\u5426\u7ba1\u7406\u5458\u6dfb\u52a0 0\/1',\n\n    ENROLL_JOIN_DAY: 'string|false|comment=\u9884\u7ea6\u65e5\u671f',\n    ENROLL_JOIN_START: 'string|false|comment=\u5f00\u59cb\u65f6\u95f4',\n    ENROLL_JOIN_END: 'string|false|comment=\u7ed3\u675f\u65f6\u95f4',\n    ENROLL_JOIN_END_POINT: 'string|false|comment=\u7ed3\u675f\u65f6\u95f4\u672b\u5c3e',\n\n    ENROLL_JOIN_USER_ID: 'string|true|comment=\u7528\u6237ID', \n    ENROLL_JOIN_FORMS: 'array|true|default=[]|comment=\u8868\u5355',\n    ENROLL_JOIN_OBJ: 'object|true|default={}',\n\n    ENROLL_JOIN_STATUS: 'int|true|default=1|comment=\u72b6\u6001 0=\u5f85\u5ba1\u6838 1=\u62a5\u540d\u6210\u529f, 99=\u5ba1\u6838\u672a\u8fc7',\n    ENROLL_JOIN_REASON: 'string|false|comment=\u5ba1\u6838\u62d2\u7edd\u6216\u8005\u53d6\u6d88\u7406\u7531',\n\n    ENROLL_JOIN_LAST_TIME: 'int|true|default=0', \n    \n    ENROLL_JOIN_ADD_TIME: 'int|true',\n    ENROLL_JOIN_EDIT_TIME: 'int|true',\n    ENROLL_JOIN_ADD_IP: 'string|false',\n    ENROLL_JOIN_EDIT_IP: 'string|false',\n};<\/code><\/pre>\n<h2>UI\u8bbe\u8ba1<\/h2>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgf\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgg\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgh\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgi\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgj\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgk\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<h2>\u6838\u5fc3\u4ee3\u7801<\/h2>\n<pre><code class=\"c\">class EnrollService extends BaseProjectService {\n\n    \/\/ \u83b7\u53d6\u5f53\u524d\u767b\u8bb0\u72b6\u6001\n    getJoinStatusDesc(enroll) {\n\n        return '\u8fdb\u884c\u4e2d';\n    }\n\n    \/** \u6d4f\u89c8\u4fe1\u606f *\/\n    async viewEnroll(userId, id) {\n\n        let fields = '*';\n\n        let where = {\n            _id: id,\n            ENROLL_STATUS: EnrollModel.STATUS.COMM\n        }\n        let enroll = await EnrollModel.getOne(where, fields);\n        if (!enroll) return null;\n\n        EnrollModel.inc(id, 'ENROLL_VIEW_CNT', 1);\n\n        \/\/ \u5224\u65ad\u662f\u5426\u6709\u767b\u8bb0\n        let whereJoin = {\n            ENROLL_JOIN_USER_ID: userId,\n            ENROLL_JOIN_ENROLL_ID: id,\n            ENROLL_JOIN_STATUS: ['in', [EnrollJoinModel.STATUS.WAIT, EnrollJoinModel.STATUS.SUCC]]\n        }\n        let enrollJoin = await EnrollJoinModel.getOne(whereJoin);\n        if (enrollJoin) {\n            enroll.myEnrollJoinId = enrollJoin._id;\n            enroll.myEnrollJoinTag = (enrollJoin.ENROLL_JOIN_STATUS == EnrollJoinModel.STATUS.WAIT) ? '\u5f85\u5ba1\u6838' : '\u5df2\u9884\u7ea6';\n        }\n        else {\n            enroll.myEnrollJoinId = '';\n            enroll.myEnrollJoinTag = '';\n        }\n\n        return enroll;\n    }\n\n\n    \/** \u53d6\u5f97\u5206\u9875\u5217\u8868 *\/\n    async getEnrollList({\n        search, \/\/ \u641c\u7d22\u6761\u4ef6\n        sortType, \/\/ \u641c\u7d22\u83dc\u5355\n        sortVal, \/\/ \u641c\u7d22\u83dc\u5355\n        orderBy, \/\/ \u6392\u5e8f \n        page,\n        size,\n        isTotal = true,\n        oldTotal\n    }) {\n\n        orderBy = orderBy || {\n            'ENROLL_ORDER': 'asc',\n            'ENROLL_ADD_TIME': 'desc'\n        };\n        let fields = 'ENROLL_STOP,ENROLL_JOIN_CNT,ENROLL_OBJ,ENROLL_VIEW_CNT,ENROLL_TITLE,ENROLL_ORDER,ENROLL_STATUS,ENROLL_CATE_NAME';\n\n        let where = {};\n        where.and = {\n            _pid: this.getProjectId() \/\/\u590d\u6742\u7684\u67e5\u8be2\u5728\u6b64\u5904\u6807\u6ce8PID\n        };\n\n        where.and.ENROLL_STATUS = EnrollModel.STATUS.COMM; \/\/ \u72b6\u6001  \n\n        if (util.isDefined(search) &amp;&amp; search) {\n            where.or = [{\n                ENROLL_TITLE: ['like', search]\n            },];\n        } else if (sortType &amp;&amp; util.isDefined(sortVal)) {\n            \/\/ \u641c\u7d22\u83dc\u5355\n            switch (sortType) {\n                case 'cateId': {\n                    if (sortVal) where.and.ENROLL_CATE_ID = String(sortVal);\n                    break;\n                }\n                case 'sort': {\n                    orderBy = this.fmtOrderBySort(sortVal, 'ENROLL_ADD_TIME');\n                    break;\n                }\n\n            }\n        }\n\n        return await EnrollModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);\n    }\n\n    \/\/ \u83b7\u53d6\u67d0\u5929\u67d0\u4f1a\u8bae\u5ba4\u9884\u7ea6\u60c5\u51b5\n    async getEnrollJoinByDay(enrollId, day) {\n        let where = {\n            ENROLL_JOIN_DAY: day,\n            ENROLL_JOIN_ENROLL_ID: enrollId,\n        };\n        return EnrollJoinModel.getAll(where);\n    }\n\n\n    \/** \u53d6\u5f97\u6211\u7684\u767b\u8bb0\u5206\u9875\u5217\u8868 *\/\n    async getMyEnrollJoinList(userId, {\n        search, \/\/ \u641c\u7d22\u6761\u4ef6\n        sortType, \/\/ \u641c\u7d22\u83dc\u5355\n        sortVal, \/\/ \u641c\u7d22\u83dc\u5355\n        orderBy, \/\/ \u6392\u5e8f \n        page,\n        size,\n        isTotal = true,\n        oldTotal\n    }) {\n        orderBy = orderBy || {\n            'ENROLL_JOIN_ADD_TIME': 'desc'\n        };\n        let fields = 'ENROLL_JOIN_OBJ,ENROLL_JOIN_DAY,ENROLL_JOIN_START,ENROLL_JOIN_END,ENROLL_JOIN_END_POINT,ENROLL_JOIN_LAST_TIME,ENROLL_JOIN_REASON,ENROLL_JOIN_ENROLL_ID,ENROLL_JOIN_STATUS,ENROLL_JOIN_ADD_TIME,enroll.ENROLL_TITLE,enroll.ENROLL_EDIT_SET,enroll.ENROLL_CANCEL_SET';\n\n        let where = {\n            ENROLL_JOIN_USER_ID: userId\n        };\n\n        if (util.isDefined(search) &amp;&amp; search) {\n            where['enroll.ENROLL_TITLE'] = {\n                $regex: '.*' + search,\n                $options: 'i'\n            };\n        } else if (sortType) {\n            \/\/ \u641c\u7d22\u83dc\u5355\n            switch (sortType) {\n                case 'timedesc': { \/\/\u6309\u65f6\u95f4\u5012\u5e8f\n                    orderBy = {\n                        'ENROLL_JOIN_ADD_TIME': 'desc'\n                    };\n                    break;\n                }\n                case 'timeasc': { \/\/\u6309\u65f6\u95f4\u6b63\u5e8f\n                    orderBy = {\n                        'ENROLL_JOIN_ADD_TIME': 'asc'\n                    };\n                    break;\n                }\n                case 'succ': {\n                    where.ENROLL_JOIN_STATUS = EnrollJoinModel.STATUS.SUCC;\n                    break;\n                }\n                case 'wait': {\n                    where.ENROLL_JOIN_STATUS = EnrollJoinModel.STATUS.WAIT;\n                    break;\n                }\n                case 'cancel': {\n                    where.ENROLL_JOIN_STATUS = EnrollJoinModel.STATUS.ADMIN_CANCEL;\n                    break;\n                }\n            }\n        }\n\n        let joinParams = {\n            from: EnrollModel.CL,\n            localField: 'ENROLL_JOIN_ENROLL_ID',\n            foreignField: '_id',\n            as: 'enroll',\n        };\n\n        let result = await EnrollJoinModel.getListJoin(joinParams, where, fields, orderBy, page, size, isTotal, oldTotal);\n\n        return result;\n    }\n\n    \/**\n     * \u83b7\u53d6\u4ece\u67d0\u5929\u5f00\u59cb\u6709\u9884\u7ea6\u7684\u65e5\u671f\n     * @param {*} fromDay  \u65e5\u671f Y-M-D\n     *\/\n    async getEnrollJoinHasDaysFromDay(fromDay) {\n        let where = {\n            ENROLL_JOIN_DAY: ['&gt;=', fromDay],\n        };\n\n        let fields = 'ENROLL_JOIN_DAY';\n        let list = await EnrollJoinModel.distinct(where, fields);\n \n        return list;\n    }\n\n    \/** \u6309\u5929\u83b7\u53d6\u6240\u6709\u9884\u5b9a\u9879\u76ee *\/\n    async getEnrollJoinAllListByDay(day) {\n        let where = {\n            ENROLL_JOIN_STATUS: EnrollJoinModel.STATUS.SUCC,\n            ENROLL_JOIN_DAY: day,\n        };\n\n        let orderBy = {\n            'ENROLL_JOIN_START': 'asc',\n            'ENROLL_JOIN_ADD_TIME': 'desc'\n        };\n\n        let fields = 'ENROLL_JOIN_START,ENROLL_JOIN_END_POINT,ENROLL_JOIN_OBJ';\n\n        let list = await EnrollJoinModel.getAll(where, fields, orderBy);\n\n        let retList = [];\n\n        for (let k = 0; k &lt; list.length; k++) {\n            console.log(list[k])\n            let node = {};\n            node.timeDesc = list[k].ENROLL_JOIN_START;\n            node.title = list[k].ENROLL_JOIN_OBJ.name; \n            node._id = list[k]._id;\n            retList.push(node);\n\n        }\n        return retList;\n    }\n\n    \/** \u53d6\u5f97\u6211\u7684\u767b\u8bb0\u8be6\u60c5 *\/\n    async getMyEnrollJoinDetail(enrollJoinId) {\n\n        let fields = '*';\n\n        let where = {\n            _id: enrollJoinId\n        };\n        let enrollJoin = await EnrollJoinModel.getOne(where, fields);\n        if (enrollJoin) {\n            enrollJoin.enroll = await EnrollModel.getOne(enrollJoin.ENROLL_JOIN_ENROLL_ID, 'ENROLL_TITLE');\n        }\n\n        return enrollJoin;\n    }\n\n    \/\/################## \u767b\u8bb0 \n    \/\/ \u767b\u8bb0 \n    async enrollJoin(userId, enrollId, start, end, endPoint, day, forms) {\n\n        \/\/ \u767b\u8bb0\u662f\u5426\u7ed3\u675f\n        let whereEnroll = {\n            _id: enrollId,\n            ENROLL_STATUS: EnrollModel.STATUS.COMM\n        }\n        let enroll = await EnrollModel.getOne(whereEnroll);\n        if (!enroll)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u4e0d\u5b58\u5728\u6216\u8005\u5df2\u7ecf\u505c\u6b62');\n\n\n\n        \/\/ \u65f6\u6bb5\u662f\u5426\u51b2\u7a81 TODO\n\n\n        \/\/ \u5165\u5e93\n        let data = {\n            ENROLL_JOIN_USER_ID: userId,\n            ENROLL_JOIN_ENROLL_ID: enrollId,\n\n            ENROLL_JOIN_START: start,\n            ENROLL_JOIN_END: end,\n            ENROLL_JOIN_END_POINT: endPoint,\n            ENROLL_JOIN_DAY: day,\n\n            ENROLL_JOIN_STATUS: (enroll.ENROLL_CHECK_SET == 0) ? EnrollJoinModel.STATUS.SUCC : EnrollJoinModel.STATUS.WAIT,\n\n            ENROLL_JOIN_FORMS: forms,\n            ENROLL_JOIN_OBJ: dataUtil.dbForms2Obj(forms),\n        }\n\n        let enrollJoinId = await EnrollJoinModel.insert(data);\n\n        \/\/ \u7edf\u8ba1\u6570\u91cf\n        this.statEnrollJoin(enrollId);\n\n        let check = enroll.ENROLL_CHECK_SET;\n\n        return { enrollJoinId, check }\n\n    }\n\n\n    \/\/ \u4fee\u6539\u767b\u8bb0 \n    async enrollJoinEdit(userId, enrollId, enrollJoinId, forms) {\n        let whereJoin = {\n            _id: enrollJoinId,\n            ENROLL_JOIN_USER_ID: userId,\n            ENROLL_JOIN_ENROLL_ID: enrollId,\n            ENROLL_JOIN_STATUS: ['in', [EnrollJoinModel.STATUS.WAIT, EnrollJoinModel.STATUS.SUCC]],\n        }\n        let enrollJoin = await EnrollJoinModel.getOne(whereJoin);\n        if (!enrollJoin)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u8bb0\u5f55\u4e0d\u5b58\u5728\u6216\u8005\u5df2\u7ecf\u88ab\u7cfb\u7edf\u53d6\u6d88');\n\n        \/\/ \u767b\u8bb0\u662f\u5426\u7ed3\u675f\n        let whereEnroll = {\n            _id: enrollId,\n            ENROLL_STATUS: EnrollModel.STATUS.COMM\n        }\n        let enroll = await EnrollModel.getOne(whereEnroll);\n        if (!enroll)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u4e0d\u5b58\u5728\u6216\u8005\u5df2\u7ecf\u505c\u6b62');\n\n\n        if (enroll.ENROLL_EDIT_SET == 0)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u4e0d\u5141\u8bb8\u4fee\u6539\u8d44\u6599');\n\n\n        if (enroll.ENROLL_EDIT_SET == 3\n            &amp;&amp; enroll.ENROLL_CHECK_SET == 1\n            &amp;&amp; enrollJoin.ENROLL_JOIN_STATUS == EnrollJoinModel.STATUS.SUCC\n        )\n            this.AppError('\u8be5' + ENROLL_NAME + '\u5df2\u901a\u8fc7\u5ba1\u6838\uff0c\u4e0d\u80fd\u4fee\u6539\u8d44\u6599');\n\n\n        let data = {\n            ENROLL_JOIN_FORMS: forms,\n            ENROLL_JOIN_OBJ: dataUtil.dbForms2Obj(forms),\n            ENROLL_JOIN_LAST_TIME: this._timestamp,\n        }\n        await EnrollJoinModel.edit(whereJoin, data);\n\n    }\n\n    async statEnrollJoin(id) {\n        let where = {\n            ENROLL_JOIN_ENROLL_ID: id,\n            ENROLL_JOIN_STATUS: ['in', [EnrollJoinModel.STATUS.WAIT, EnrollJoinModel.STATUS.SUCC]]\n        }\n        let cnt = await EnrollJoinModel.count(where);\n\n        await EnrollModel.edit(id, { ENROLL_JOIN_CNT: cnt });\n    }\n\n    \/**  \u767b\u8bb0\u524d\u83b7\u53d6\u5173\u952e\u4fe1\u606f *\/\n    async detailForEnrollJoin(userId, enrollId, enrollJoinId = '') {\n        let fields = 'ENROLL_JOIN_FORMS, ENROLL_TITLE';\n\n        let where = {\n            _id: enrollId,\n            ENROLL_STATUS: EnrollModel.STATUS.COMM\n        }\n        let enroll = await EnrollModel.getOne(where, fields);\n        if (!enroll)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u4e0d\u5b58\u5728');\n\n\n\n        let joinMy = null;\n        if (enrollJoinId) {\n            \/\/ \u7f16\u8f91\n            let whereMy = {\n                ENROLL_JOIN_USER_ID: userId,\n                _id: enrollJoinId\n            }\n            joinMy = await EnrollJoinModel.getOne(whereMy);\n            enroll.join = {\n                start: joinMy.ENROLL_JOIN_START,\n                end: joinMy.ENROLL_JOIN_END,\n                endPoint: joinMy.ENROLL_JOIN_END_POINT,\n                day: joinMy.ENROLL_JOIN_DAY,\n            }\n        }\n        else {\n            \/\/ \u53d6\u51fa\u672c\u4eba\u6700\u8fd1\u4e00\u6b21\u7684\u586b\u5199\u8868\u5355 \n            \/*\n            let whereMy = {\n                ENROLL_JOIN_USER_ID: userId,\n            }\n            let orderByMy = {\n                ENROLL_JOIN_ADD_TIME: 'desc'\n            }\n            joinMy = await EnrollJoinModel.getOne(whereMy, 'ENROLL_JOIN_FORMS', orderByMy);*\/\n        }\n\n        let myForms = joinMy ? joinMy.ENROLL_JOIN_FORMS : [];\n        enroll.myForms = myForms;\n\n        return enroll;\n    }\n\n    \/** \u53d6\u6d88\u6211\u7684\u767b\u8bb0 \u53ea\u6709\u6210\u529f\u548c\u5f85\u5ba1\u6838\u53ef\u4ee5\u53d6\u6d88 \u53d6\u6d88\u5373\u4e3a\u5220\u9664\u8bb0\u5f55 *\/\n    async cancelMyEnrollJoin(userId, enrollJoinId) {\n        let where = {\n            ENROLL_JOIN_USER_ID: userId,\n            _id: enrollJoinId,\n            ENROLL_JOIN_STATUS: ['in', [EnrollJoinModel.STATUS.WAIT, EnrollJoinModel.STATUS.SUCC]]\n        };\n        let enrollJoin = await EnrollJoinModel.getOne(where);\n\n        if (!enrollJoin) {\n            this.AppError('\u672a\u627e\u5230\u53ef\u53d6\u6d88\u7684\u8bb0\u5f55');\n        }\n\n        let enroll = await EnrollModel.getOne(enrollJoin.ENROLL_JOIN_ENROLL_ID);\n        if (!enroll)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u4e0d\u5b58\u5728');\n\n        if (enroll.ENROLL_CANCEL_SET == 0)\n            this.AppError('\u8be5' + ENROLL_NAME + '\u4e0d\u80fd\u53d6\u6d88');\n\n\n        if (enroll.ENROLL_CANCEL_SET == 3\n            &amp;&amp; enroll.ENROLL_CHECK_SET == 1\n            &amp;&amp; enrollJoin.ENROLL_JOIN_STATUS == EnrollJoinModel.STATUS.SUCC\n        )\n            this.AppError('\u8be5' + ENROLL_NAME + '\u5df2\u901a\u8fc7\u5ba1\u6838\uff0c\u4e0d\u80fd\u53d6\u6d88');\n\n        await EnrollJoinModel.del(where);\n\n        this.statEnrollJoin(enrollJoin.ENROLL_JOIN_ENROLL_ID);\n\n    }\n\n}<\/code><\/pre>\n<h2>\u540e\u53f0\u7ba1\u7406<\/h2>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgl\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgm\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgn\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVc2Dgo\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<h2>git\u4ee3\u7801<\/h2>\n<p><a href=\"https:\/\/link.segmentfault.com\/?enc=elVhEOpBBVK68fTUBVg8fQ%3D%3D.NWAVW%2BPrfDA30JhjXTPnrAwdTfD4aBCsHKYywM%2BLiZQVo%2F2uKl5YRWBYuBQXJ%2FxX\" rel=\"nofollow\">git\u4ee3\u7801<\/a><\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000042534247\">https:\/\/segmentfault.com\/a\/1190000042534247<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e1a\u52a1\u80cc\u666f \u4f1a\u8bae\u5ba4\u662f\u4e00\u4e2a\u5355\u4f4d\u6216\u90e8\u95e8\u7684\u5171\u7528\u8d44\u6e90,\u4f46\u5728\u4f7f\u7528\u7684\u65f6\u5019\u5f80\u5f80\u4f1a\u9047\u5230\u65f6\u95f4\u51b2\u7a81\u3001\u9884\u7ea6\u56f0\u96be\u3001\u4e0d\u65b9\u4fbf\u534f\u8c03\u7b49\u95ee\u9898\u3002\u76ee\u524d [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-10006588","post","type-post","status-publish","format-standard","hentry"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10006588","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10006588"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10006588\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10006588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10006588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10006588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}