diff --git a/api/controller_front/apply.js b/api/controller_front/apply.js index bf6d58a..204a0dc 100644 --- a/api/controller_front/apply.js +++ b/api/controller_front/apply.js @@ -71,6 +71,19 @@ module.exports = { where.feedbackStatus = seachOption.feedbackStatus; } + // 时间范围筛选 + if (seachOption.startTime || seachOption.endTime) { + where.applyTime = {}; + if (seachOption.startTime) { + where.applyTime[op.gte] = new Date(seachOption.startTime); + } + if (seachOption.endTime) { + const endTime = new Date(seachOption.endTime); + endTime.setHours(23, 59, 59, 999); // 设置为当天的最后一刻 + where.applyTime[op.lte] = endTime; + } + } + // 搜索:岗位名称、公司名称 if (seachOption.key && seachOption.value) { const key = seachOption.key; @@ -109,7 +122,7 @@ module.exports = { * /api/apply/statistics: * get: * summary: 获取投递统计 - * description: 根据设备SN码获取投递统计数据(包含今日、本周、本月统计) + * description: 根据设备SN码获取投递统计数据(包含今日、本周、本月统计),支持时间范围筛选 * tags: [前端-投递管理] * parameters: * - in: query @@ -118,6 +131,18 @@ module.exports = { * schema: * type: string * description: 设备SN码 + * - in: query + * name: startTime + * schema: + * type: string + * format: date-time + * description: 开始时间(可选) + * - in: query + * name: endTime + * schema: + * type: string + * format: date-time + * description: 结束时间(可选) * responses: * 200: * description: 获取成功 @@ -125,14 +150,30 @@ module.exports = { 'GET /apply/statistics': async (ctx) => { const models = Framework.getModels(); const { apply_records, op } = models; - const { sn_code } = ctx.query; + const { sn_code, startTime, endTime } = ctx.query; const final_sn_code = sn_code; if (!final_sn_code) { return ctx.fail('请提供设备SN码'); } - // 计算时间范围 + // 构建基础查询条件 + const baseWhere = { sn_code: final_sn_code }; + + // 如果提供了时间范围,则添加到查询条件中 + if (startTime || endTime) { + baseWhere.applyTime = {}; + if (startTime) { + baseWhere.applyTime[op.gte] = new Date(startTime); + } + if (endTime) { + const endTimeDate = new Date(endTime); + endTimeDate.setHours(23, 59, 59, 999); // 设置为当天的最后一刻 + baseWhere.applyTime[op.lte] = endTimeDate; + } + } + + // 计算时间范围(如果未提供时间范围,则使用默认的今日、本周、本月) const now = new Date(); // 今天的开始时间(00:00:00) @@ -150,6 +191,16 @@ module.exports = { const monthStart = new Date(now.getFullYear(), now.getMonth(), 1); monthStart.setHours(0, 0, 0, 0); + // 构建统计查询条件 + const buildWhereWithTime = (additionalWhere = {}) => { + const where = { ...baseWhere, ...additionalWhere }; + // 如果提供了时间范围,则不再使用默认的今日、本周、本月时间 + if (startTime || endTime) { + return where; + } + return where; + }; + const [ totalCount, successCount, @@ -160,28 +211,28 @@ module.exports = { weekCount, monthCount ] = await Promise.all([ - // 总计 - apply_records.count({ where: { sn_code: final_sn_code } }), - apply_records.count({ where: { sn_code: final_sn_code, applyStatus: 'success' } }), - apply_records.count({ where: { sn_code: final_sn_code, applyStatus: 'failed' } }), - apply_records.count({ where: { sn_code: final_sn_code, applyStatus: 'pending' } }), - apply_records.count({ where: { sn_code: final_sn_code, feedbackStatus: 'interview' } }), - // 今日 - apply_records.count({ + // 总计(如果提供了时间范围,则只统计该范围内的) + apply_records.count({ where: baseWhere }), + apply_records.count({ where: { ...baseWhere, applyStatus: 'success' } }), + apply_records.count({ where: { ...baseWhere, applyStatus: 'failed' } }), + apply_records.count({ where: { ...baseWhere, applyStatus: 'pending' } }), + apply_records.count({ where: { ...baseWhere, feedbackStatus: 'interview' } }), + // 今日(如果提供了时间范围,则返回0,否则统计今日) + startTime || endTime ? 0 : apply_records.count({ where: { sn_code: final_sn_code, applyTime: { [op.gte]: todayStart } } }), - // 本周 - apply_records.count({ + // 本周(如果提供了时间范围,则返回0,否则统计本周) + startTime || endTime ? 0 : apply_records.count({ where: { sn_code: final_sn_code, applyTime: { [op.gte]: weekStart } } }), - // 本月 - apply_records.count({ + // 本月(如果提供了时间范围,则返回0,否则统计本月) + startTime || endTime ? 0 : apply_records.count({ where: { sn_code: final_sn_code, applyTime: { [op.gte]: monthStart }