|  | @@ -15,98 +15,97 @@ class ShenpiAgain extends Subscription {
 | 
	
		
			
				|  |  |      static get schedule() {
 | 
	
		
			
				|  |  |          return {
 | 
	
		
			
				|  |  |              interval: '1m',
 | 
	
		
			
				|  |  | -            type: 'all',
 | 
	
		
			
				|  |  | +            type: 'worker',
 | 
	
		
			
				|  |  |              env: ['prod'],
 | 
	
		
			
				|  |  | +            disable: process.env.NODE_ENV !== 'production',
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      async subscribe() {
 | 
	
		
			
				|  |  | -        // const ctx = this.ctx;
 | 
	
		
			
				|  |  | -        // console.log('hello');
 | 
	
		
			
				|  |  | -        // const list = await ctx.service.noticeAgain.getAllDataByCondition({ where: { status: 1 } });
 | 
	
		
			
				|  |  | -        // if (list.length === 0) return;
 | 
	
		
			
				|  |  | -        // const pidList = ctx.helper._.uniq(ctx.helper._.map(list, 'pid'));
 | 
	
		
			
				|  |  | -        // const projectsNoticeSetting = await ctx.service.project.getAllDataByCondition({
 | 
	
		
			
				|  |  | -        //     columns: ['id', 'notice_setting'],
 | 
	
		
			
				|  |  | -        //     where: { id: pidList },
 | 
	
		
			
				|  |  | -        // });
 | 
	
		
			
				|  |  | -        // const uidList = ctx.helper._.uniq(ctx.helper._.map(list, 'uid'));
 | 
	
		
			
				|  |  | -        // const usersNoticeSetting = await ctx.service.projectAccount.getAllDataByCondition({
 | 
	
		
			
				|  |  | -        //     columns: ['id', 'project_id', 'notice_again'],
 | 
	
		
			
				|  |  | -        //     where: { id: uidList },
 | 
	
		
			
				|  |  | -        // });
 | 
	
		
			
				|  |  | -        // const tidList = ctx.helper._.uniq(ctx.helper._.map(list, 'tid'));
 | 
	
		
			
				|  |  | -        // const tenderList = await ctx.service.tender.getAllDataByCondition({ columns: ['id', 'name'], where: { id: tidList } });
 | 
	
		
			
				|  |  | -        // const tenderInfoList = await ctx.service.tenderInfo.getAllDataByCondition({ columns: ['id', 'tid', 'deal_info'], where: { tid: tidList } });
 | 
	
		
			
				|  |  | -        // const updateData = [];
 | 
	
		
			
				|  |  | -        // const deleteData = [];
 | 
	
		
			
				|  |  | -        // const sendData = [];
 | 
	
		
			
				|  |  | -        // for (const i of list) {
 | 
	
		
			
				|  |  | -        //     if (i.times > 10) continue;// 发超过10次就不发了吧
 | 
	
		
			
				|  |  | -        //     const uinfo = ctx.helper._.find(usersNoticeSetting, { id: i.uid });
 | 
	
		
			
				|  |  | -        //     const notice_again = uinfo.notice_again ? JSON.parse(uinfo.notice_again) : null;
 | 
	
		
			
				|  |  | -        //     if (!notice_again) continue;
 | 
	
		
			
				|  |  | -        //     const pinfo = ctx.helper._.find(projectsNoticeSetting, { id: i.pid });
 | 
	
		
			
				|  |  | -        //     const notice_setting = pinfo.notice_setting ? JSON.parse(pinfo.notice_setting) : ctx.helper._.cloneDeep(projectSettingConst.noticeSetting);
 | 
	
		
			
				|  |  | -        //     const interval = notice_setting.mode === 'fixed' ? notice_setting.fixed : (i.times === 0 ? notice_setting.activity.first : (i.times === 1 ? notice_setting.activity.second : notice_setting.activity.later));
 | 
	
		
			
				|  |  | -        //     const send_time = ctx.helper.calculateNextSendTime(i.last_time, interval, notice_setting.shield_times.start, notice_setting.shield_times.end);
 | 
	
		
			
				|  |  | -        //     console.log(i.id, new Date(), send_time);
 | 
	
		
			
				|  |  | -        //     if (new Date() > send_time) {
 | 
	
		
			
				|  |  | -        //         // 判断是否已经sp_type的sp_id已经完成审批或者是否存在,如果已经审批或不存在则需要删除
 | 
	
		
			
				|  |  | -        //         const spInfo = await ctx.service.noticeAgain.getSpResult(i.table_name, i.sp_id);
 | 
	
		
			
				|  |  | -        //         if (!spInfo) {
 | 
	
		
			
				|  |  | -        //             deleteData.push(i.id);
 | 
	
		
			
				|  |  | -        //             continue;
 | 
	
		
			
				|  |  | -        //         } else {
 | 
	
		
			
				|  |  | -        //             const status = spInfo.status || spInfo.audit_status;
 | 
	
		
			
				|  |  | -        //             if (status !== 2) {
 | 
	
		
			
				|  |  | -        //                 updateData.push({
 | 
	
		
			
				|  |  | -        //                     id: i.id,
 | 
	
		
			
				|  |  | -        //                     status: 2,
 | 
	
		
			
				|  |  | -        //                 });
 | 
	
		
			
				|  |  | -        //                 continue;
 | 
	
		
			
				|  |  | -        //             }
 | 
	
		
			
				|  |  | -        //         }
 | 
	
		
			
				|  |  | -        //         // 重发信息并记录到更新表里数据
 | 
	
		
			
				|  |  | -        //         const t = ctx.helper._.find(tenderList, { id: i.tid });
 | 
	
		
			
				|  |  | -        //         const tenderInfo = ctx.helper._.find(tenderInfoList, { tid: i.tid });
 | 
	
		
			
				|  |  | -        //         const newTenderInfo = {
 | 
	
		
			
				|  |  | -        //             deal_info: { buildName: '' },
 | 
	
		
			
				|  |  | -        //         };
 | 
	
		
			
				|  |  | -        //         if (tenderInfo) {
 | 
	
		
			
				|  |  | -        //             newTenderInfo.deal_info = JSON.parse(tenderInfo.deal_info);
 | 
	
		
			
				|  |  | -        //         }
 | 
	
		
			
				|  |  | -        //         i.origin_url = JSON.parse(i.origin_url);
 | 
	
		
			
				|  |  | -        //         const tender = {
 | 
	
		
			
				|  |  | -        //             data: t,
 | 
	
		
			
				|  |  | -        //             info: newTenderInfo,
 | 
	
		
			
				|  |  | -        //         };
 | 
	
		
			
				|  |  | -        //         // 可能会重复发送,未知原因
 | 
	
		
			
				|  |  | -        //         // await ctx.helper.sendWechat(i.uid, i.sms_type, smsTypeConst.judge.approval.toString(), i.template, JSON.parse(i.wx_data), tender, { protocol: i.origin_url.protocol, host: i.origin_url.host });
 | 
	
		
			
				|  |  | -        //         updateData.push({
 | 
	
		
			
				|  |  | -        //             id: i.id,
 | 
	
		
			
				|  |  | -        //             times: i.times + 1,
 | 
	
		
			
				|  |  | -        //             last_time: ctx.helper.dateTran(new Date(), 'YYYY-MM-DD HH:mm'),
 | 
	
		
			
				|  |  | -        //         });
 | 
	
		
			
				|  |  | -        //         sendData.push({
 | 
	
		
			
				|  |  | -        //             uid: i.uid,
 | 
	
		
			
				|  |  | -        //             sms_type: i.sms_type,
 | 
	
		
			
				|  |  | -        //             sp_type: smsTypeConst.judge.approval.toString(),
 | 
	
		
			
				|  |  | -        //             template: i.template,
 | 
	
		
			
				|  |  | -        //             wx_data: JSON.parse(i.wx_data),
 | 
	
		
			
				|  |  | -        //             tender,
 | 
	
		
			
				|  |  | -        //             origin_url: i.origin_url,
 | 
	
		
			
				|  |  | -        //         });
 | 
	
		
			
				|  |  | -        //     }
 | 
	
		
			
				|  |  | -        // }
 | 
	
		
			
				|  |  | -        // if (updateData.length > 0) await ctx.service.noticeAgain.defaultUpdateRows(updateData);
 | 
	
		
			
				|  |  | -        // if (deleteData.length > 0) await ctx.service.noticeAgain.deleteById(deleteData);
 | 
	
		
			
				|  |  | -        // if (sendData.length > 0) {
 | 
	
		
			
				|  |  | -        //     for (const s of sendData) {
 | 
	
		
			
				|  |  | -        //         await ctx.helper.sendWechat(s.uid, s.sms_type, s.sp_type, s.template, s.wx_data, s.tender, { protocol: s.origin_url.protocol, host: s.origin_url.host });
 | 
	
		
			
				|  |  | -        //     }
 | 
	
		
			
				|  |  | -        // }
 | 
	
		
			
				|  |  | +        const ctx = this.ctx;
 | 
	
		
			
				|  |  | +        const list = await ctx.service.noticeAgain.getAllDataByCondition({ where: { status: 1 } });
 | 
	
		
			
				|  |  | +        if (list.length === 0) return;
 | 
	
		
			
				|  |  | +        const pidList = ctx.helper._.uniq(ctx.helper._.map(list, 'pid'));
 | 
	
		
			
				|  |  | +        const projectsNoticeSetting = await ctx.service.project.getAllDataByCondition({
 | 
	
		
			
				|  |  | +            columns: ['id', 'notice_setting'],
 | 
	
		
			
				|  |  | +            where: { id: pidList },
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        const uidList = ctx.helper._.uniq(ctx.helper._.map(list, 'uid'));
 | 
	
		
			
				|  |  | +        const usersNoticeSetting = await ctx.service.projectAccount.getAllDataByCondition({
 | 
	
		
			
				|  |  | +            columns: ['id', 'project_id', 'notice_again'],
 | 
	
		
			
				|  |  | +            where: { id: uidList },
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        const tidList = ctx.helper._.uniq(ctx.helper._.map(list, 'tid'));
 | 
	
		
			
				|  |  | +        const tenderList = await ctx.service.tender.getAllDataByCondition({ columns: ['id', 'name'], where: { id: tidList } });
 | 
	
		
			
				|  |  | +        const tenderInfoList = await ctx.service.tenderInfo.getAllDataByCondition({ columns: ['id', 'tid', 'deal_info'], where: { tid: tidList } });
 | 
	
		
			
				|  |  | +        const updateData = [];
 | 
	
		
			
				|  |  | +        const deleteData = [];
 | 
	
		
			
				|  |  | +        const sendData = [];
 | 
	
		
			
				|  |  | +        for (const i of list) {
 | 
	
		
			
				|  |  | +            if (i.times > 10) continue;// 发超过10次就不发了吧
 | 
	
		
			
				|  |  | +            const uinfo = ctx.helper._.find(usersNoticeSetting, { id: i.uid });
 | 
	
		
			
				|  |  | +            const notice_again = uinfo.notice_again ? JSON.parse(uinfo.notice_again) : null;
 | 
	
		
			
				|  |  | +            if (!notice_again) continue;
 | 
	
		
			
				|  |  | +            const pinfo = ctx.helper._.find(projectsNoticeSetting, { id: i.pid });
 | 
	
		
			
				|  |  | +            const notice_setting = pinfo.notice_setting ? JSON.parse(pinfo.notice_setting) : ctx.helper._.cloneDeep(projectSettingConst.noticeSetting);
 | 
	
		
			
				|  |  | +            const interval = notice_setting.mode === 'fixed' ? notice_setting.fixed : (i.times === 0 ? notice_setting.activity.first : (i.times === 1 ? notice_setting.activity.second : notice_setting.activity.later));
 | 
	
		
			
				|  |  | +            const send_time = ctx.helper.calculateNextSendTime(i.last_time, interval, notice_setting.shield_times.start, notice_setting.shield_times.end);
 | 
	
		
			
				|  |  | +            console.log(i.id, new Date(), send_time);
 | 
	
		
			
				|  |  | +            if (new Date() > send_time) {
 | 
	
		
			
				|  |  | +                // 判断是否已经sp_type的sp_id已经完成审批或者是否存在,如果已经审批或不存在则需要删除
 | 
	
		
			
				|  |  | +                const spInfo = await ctx.service.noticeAgain.getSpResult(i.table_name, i.sp_id);
 | 
	
		
			
				|  |  | +                if (!spInfo) {
 | 
	
		
			
				|  |  | +                    deleteData.push(i.id);
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    const status = spInfo.status || spInfo.audit_status;
 | 
	
		
			
				|  |  | +                    if (status !== 2) {
 | 
	
		
			
				|  |  | +                        updateData.push({
 | 
	
		
			
				|  |  | +                            id: i.id,
 | 
	
		
			
				|  |  | +                            status: 2,
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                        continue;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                // 重发信息并记录到更新表里数据
 | 
	
		
			
				|  |  | +                const t = ctx.helper._.find(tenderList, { id: i.tid });
 | 
	
		
			
				|  |  | +                const tenderInfo = ctx.helper._.find(tenderInfoList, { tid: i.tid });
 | 
	
		
			
				|  |  | +                const newTenderInfo = {
 | 
	
		
			
				|  |  | +                    deal_info: { buildName: '' },
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +                if (tenderInfo) {
 | 
	
		
			
				|  |  | +                    newTenderInfo.deal_info = JSON.parse(tenderInfo.deal_info);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                i.origin_url = JSON.parse(i.origin_url);
 | 
	
		
			
				|  |  | +                const tender = {
 | 
	
		
			
				|  |  | +                    data: t,
 | 
	
		
			
				|  |  | +                    info: newTenderInfo,
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +                // 可能会重复发送,未知原因
 | 
	
		
			
				|  |  | +                // await ctx.helper.sendWechat(i.uid, i.sms_type, smsTypeConst.judge.approval.toString(), i.template, JSON.parse(i.wx_data), tender, { protocol: i.origin_url.protocol, host: i.origin_url.host });
 | 
	
		
			
				|  |  | +                updateData.push({
 | 
	
		
			
				|  |  | +                    id: i.id,
 | 
	
		
			
				|  |  | +                    times: i.times + 1,
 | 
	
		
			
				|  |  | +                    last_time: ctx.helper.dateTran(new Date(), 'YYYY-MM-DD HH:mm'),
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +                sendData.push({
 | 
	
		
			
				|  |  | +                    uid: i.uid,
 | 
	
		
			
				|  |  | +                    sms_type: i.sms_type,
 | 
	
		
			
				|  |  | +                    sp_type: smsTypeConst.judge.approval.toString(),
 | 
	
		
			
				|  |  | +                    template: i.template,
 | 
	
		
			
				|  |  | +                    wx_data: JSON.parse(i.wx_data),
 | 
	
		
			
				|  |  | +                    tender,
 | 
	
		
			
				|  |  | +                    origin_url: i.origin_url,
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (updateData.length > 0) await ctx.service.noticeAgain.defaultUpdateRows(updateData);
 | 
	
		
			
				|  |  | +        if (deleteData.length > 0) await ctx.service.noticeAgain.deleteById(deleteData);
 | 
	
		
			
				|  |  | +        if (sendData.length > 0) {
 | 
	
		
			
				|  |  | +            for (const s of sendData) {
 | 
	
		
			
				|  |  | +                await ctx.helper.sendWechat(s.uid, s.sms_type, s.sp_type, s.template, s.wx_data, s.tender, { protocol: s.origin_url.protocol, host: s.origin_url.host });
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  module.exports = ShenpiAgain;
 |