'use strict'; const assert = require('assert'); const _ = require('lodash'); const {ObjectId} = require('mongoose').Types; const {CrudService} = require('naf-framework-mongoose/lib/service'); const {BusinessError, ErrorCode} = require('naf-core').Error; class TPolicyDeclarationService extends CrudService { constructor(ctx) { super(ctx, 't_policy_declaration'); this.model = this.ctx.model.TPolicyDeclaration; this.oModel = this.ctx.model.Otheruser; this.dModel = this.ctx.model.TDeclarationApproval; } // 重写创建方法 async create(data) { if (data.type == '2' && !data.link) { assert(false, '缺少链接字段'); } let approval = await this.oModel.findById({_id: ObjectId(data.current_approval_id)}); let approvalInfo = []; let time = new Date().getTime(); approvalInfo.push({ state: '0', state_description: '未审核', result_description: '', state_time: time, approval_id: data.current_approval_id, approval: approval.name }); data.approval_info = approvalInfo; //data.current_approval_id = ''; //data.current_state_time = time; const res = await this.model.create(data); return res; } // 重写删除方法 async delete(data) { let temp = await this.dModel.findOne({policy_declaration_id: data.id}); if (temp) { throw new BusinessError(ErrorCode.DATA_EXISTED, '已有企业申报该政策,禁止删除!'); } await this.model.deleteOne({_id: ObjectId(data.id)}); return 'deleted'; } // 修改状态方法 async state(data) { let approval = await this.oModel.findById({_id: ObjectId(data.current_approval_id)}); let policyDeclaration = await this.model.findById({_id: ObjectId(data.id)}); let time = new Date().getTime(); policyDeclaration.current_state = data.state; policyDeclaration.current_state_description = data.state_description; policyDeclaration.current_result_description = data.result_description; policyDeclaration.current_state_time = time; policyDeclaration.current_approval_id = data.current_approval_id; policyDeclaration.current_approval = approval.name; policyDeclaration.approval_info.push({ state: data.state, state_description: data.state_description, result_description: data.result_description, state_time: time, approval_id: data.current_approval_id, approval: approval.name }); if (data.state == '1') { policyDeclaration.publish_time = time; } return await policyDeclaration.save(); } // 条件查询 async select(payload) { let {skip = 0, limit = 10} = payload; let match = {}; if (payload.start_time && payload.end_time) { match.create_time = {$gte: Number(payload.start_time), $lt: Number(payload.end_time)}; } if (payload.title) { match.title = {$regex: payload.title, $options: '$i'}; } if (payload.subject_classification) { match.subject_classification = payload.subject_classification; } if (payload.subject_headings) { match.subject_headings = payload.subject_headings; } if (payload.current_state) { match.current_state = payload.current_state; } if (payload.type) { match.type = payload.type; } let sort = {}; if (payload.sort && payload.asc) { sort[payload.sort] = Number.parseInt(payload.asc); } else { sort = {'create_time': -1}; } const total = await this.model.find(match).countDocuments(); const data = await this.model.find(match).sort(sort).skip(Number.parseInt(skip)).limit(Number.parseInt(limit)); return { data, total, }; } } module.exports = TPolicyDeclarationService;