فهرست منبع

专利信息导入处理警告

lrf 3 سال پیش
والد
کامیت
6e41f5862a
2فایلهای تغییر یافته به همراه83 افزوده شده و 100 حذف شده
  1. 78 67
      app/service/patent/patentearly.js
  2. 5 33
      app/service/patent/patentinfo.js

+ 78 - 67
app/service/patent/patentearly.js

@@ -17,8 +17,7 @@ class PatentearlyService extends CrudService {
   }
   async query(query, { skip = 0, limit = 0 }) {
     const newquery = await this.resetCode(query);
-    const res = await this.model.find(newquery).skip(parseInt(skip)).limit(parseInt(limit))
-      .sort({ 'meta.createdAt': -1 });
+    const res = await this.model.find(newquery).skip(parseInt(skip)).limit(parseInt(limit)).sort({ 'meta.createdAt': -1 });
     return res;
   }
   async count(query) {
@@ -34,13 +33,13 @@ class PatentearlyService extends CrudService {
     let ids = [];
     if (code) {
       const plist = await this.personalModel.find({ code });
-      ids = plist.map(i => i._id);
+      ids = plist.map((i) => i._id);
       if (ids.length > 0) {
         newquery.user_id = { $elemMatch: { $in: ids } };
         delete newquery.code;
       }
     } else if (user_id) {
-      newquery.user_id = { $elemMatch: { $in: [ ObjectId(user_id) ] } };
+      newquery.user_id = { $elemMatch: { $in: [ObjectId(user_id)] } };
     }
 
     return newquery;
@@ -50,10 +49,9 @@ class PatentearlyService extends CrudService {
     assert(code, '缺少机构信息');
     let pids = await this.personalModel.find({ code }, { _id: 1 });
     if (pids.length <= 0) return { data: [], total: 0 };
-    pids = pids.map(i => i._id);
+    pids = pids.map((i) => i._id);
     const query = { user_id: { $elemMatch: { $in: pids } } };
-    const data = await this.model.find(query).skip(parseInt(skip)).limit(parseInt(limit))
-      .sort({ 'meta.createdAt': -1 });
+    const data = await this.model.find(query).skip(parseInt(skip)).limit(parseInt(limit)).sort({ 'meta.createdAt': -1 });
     const total = await this.model.count(query);
     return { data, total };
   }
@@ -72,77 +70,90 @@ class PatentearlyService extends CrudService {
       skip += limit;
     }
   }
-
+  /**
+   * 查找并处理
+   * @param {Number} skip 开始位置
+   * @param {Number} limit 结束位置
+   */
   async searchAndDeal(skip, limit) {
     let total = 0;
     let data = await this.patentinfo.find({ term: '有效' }, { name: 1, user_id: 1, create_date: 1 }).skip(skip).limit(limit);
     if (data.length > 0) data = JSON.parse(JSON.stringify(data));
+    total = data.length || 0;
+    await this.dealData(data);
+    return total;
+  }
+
+  /**
+   * 
+   * @param {Array} data 处理数据
+   */
+  async dealData(data) {
     // 取出今天是不是在失效时间的前${limitMonth}个月范围内
     const limitMonth = 3;
     for (const i of data) {
-      const { create_date } = i;
-      // 取专利日期
-      const month = moment(create_date).format('MM-DD');
-      // // 取得当前年份
-      const nowYear = moment(new Date()).format('YYYY');
-      // // 当前年份+一年
-      const afterYear = moment(nowYear).add(1, 'year').format('YYYY');
-      // // 开始时间(先组合日期,减去三个月)
-      const nowDate = afterYear + '-' + month;
-      const start = moment(nowDate).subtract(limitMonth, 'months').format('YYYY-MM-DD');
-      // 结束时间
-      const end = afterYear + '-' + month;
-      const endbeforeone = moment(end).subtract(1, 'd').format('YYYY-MM-DD');
-      const r = moment().isBetween(start, end, null, '[]');
-      if (r) {
-        total++;
-        // 2021-11-08 第一天/最后一天/相差天数被10整出的天数(并不算是严格的每隔10天) 发送消息
-        // 是否发送的变量
-        let dr = false;
-        if (
-          moment().format('YYYY-MM-DD') === start ||
-          moment().format('YYYY-MM-DD') === endbeforeone
-        ) {
-          // 第一天/最后一天发送
-          dr = true;
-        } else {
-          // 差10天就发
-          const dur = 10;
-          const subDay = moment(end).diff(moment(), 'days');
-          // 判断是不是整数.整数就发送
-          dr = _.isInteger(_.floor(_.divide(subDay, dur)));
-        }
-        // 不发就继续
-        if (!dr) continue;
-        const { user_id, name } = i;
-        // 2021-11-04 修改,因为inventor修改为发明人[Object],所以发明人需要处理成字符串
-        const users = user_id.map(i => i.user_id);
-        // // const inventorNameString = inventor.map(i => i.name).join(';');
-        // // const content = `发明人 【${inventorNameString}】 的已授权专利 【${name}】 即将失效,避免专利失效过期,请用户及时查看消息并处理! `;
-        const content = '您可能需缴年费了,具体以缴费通知书为准 ';
-        const nobj = {
-          ..._.omit(i, [ '_id', 'id', 'users' ]),
-          content,
-          parent_id: i._id,
-          user_id: users,
-        };
-        this.model.create(nobj);
-        // 2021-11-04添加 向 patentexamine 表中添加数据
-        const patentexamineArray = [];
-        for (const i of user_id) {
-          const { user_id } = i;
-          // const peContent = `【${name}】 专利即将过期,请用户及时到相应功能模块中处理专利信息!`;
-          const peContent = '您可能需缴年费了,具体以缴费通知书为准';
-          const patentexamineObject = {
-            to: user_id,
-            content: peContent,
+      try {
+        const { create_date } = i;
+        // 取专利日期
+        const month = moment(create_date).format('MM-DD');
+        // // 取得当前年份
+        const nowYear = moment(new Date()).format('YYYY');
+        // // 当前年份+一年
+        const afterYear = moment(nowYear).add(1, 'year').format('YYYY');
+        // // 开始时间(先组合日期,减去三个月)
+        const nowDate = afterYear + '-' + month;
+        const start = moment(nowDate).subtract(limitMonth, 'months').format('YYYY-MM-DD');
+        // 结束时间
+        const end = afterYear + '-' + month;
+        const endbeforeone = moment(end).subtract(1, 'd').format('YYYY-MM-DD');
+        const r = moment().isBetween(start, end, null, '[]');
+        if (r) {
+          // 2021-11-08 第一天/最后一天/相差天数被10整出的天数(并不算是严格的每隔10天) 发送消息
+          // 是否发送的变量
+          let dr = false;
+          if (moment().format('YYYY-MM-DD') === start || moment().format('YYYY-MM-DD') === endbeforeone) {
+            // 第一天/最后一天发送
+            dr = true;
+          } else {
+            // 差10天就发
+            const dur = 10;
+            const subDay = moment(end).diff(moment(), 'days');
+            // 判断是不是整数.整数就发送
+            dr = _.isInteger(_.floor(_.divide(subDay, dur)));
+          }
+          // 不发就继续
+          if (!dr) continue;
+          const { user_id, name } = i;
+          // 2021-11-04 修改,因为inventor修改为发明人[Object],所以发明人需要处理成字符串
+          const users = user_id.map((i) => i.user_id);
+          // // const inventorNameString = inventor.map(i => i.name).join(';');
+          // // const content = `发明人 【${inventorNameString}】 的已授权专利 【${name}】 即将失效,避免专利失效过期,请用户及时查看消息并处理! `;
+          const content = '您可能需缴年费了,具体以缴费通知书为准 ';
+          const nobj = {
+            ..._.omit(i, ['_id', 'id', 'users']),
+            content,
+            parent_id: i._id,
+            user_id: users,
           };
-          patentexamineArray.push(patentexamineObject);
+          this.model.create(nobj);
+          // 2021-11-04添加 向 patentexamine 表中添加数据
+          const patentexamineArray = [];
+          for (const i of user_id) {
+            const { user_id } = i;
+            // const peContent = `【${name}】 专利即将过期,请用户及时到相应功能模块中处理专利信息!`;
+            const peContent = '您可能需缴年费了,具体以缴费通知书为准';
+            const patentexamineObject = {
+              to: user_id,
+              content: peContent,
+            };
+            patentexamineArray.push(patentexamineObject);
+          }
+          this.patentexamineModel.insertMany(patentexamineArray);
         }
-        this.patentexamineModel.insertMany(patentexamineArray);
+      } catch (error) {
+        continue;
       }
     }
-    return total;
   }
 }
 

+ 5 - 33
app/service/patent/patentinfo.js

@@ -183,49 +183,21 @@ class PatentinfoService extends CrudService {
       }
     }
     if (allNotice.length > 0) return allNotice;
-    // 发明人处理,暂不需要了
-    // let nameList = [];
-    // for (const i of arr) {
-    //   const { inventor } = i;
-    //   if (inventor) {
-    //     const midList = inventor.split(/[,;/]/);
-    //     nameList = [...nameList, ...midList];
-    //   }
-    // }
-    // nameList = nameList.map((i) => _.trim(i));
-    // const l1 = await this.personalModel.find({ name: nameList });
-    // // 查出来的所有人
-    // const nList = [...l1];
-    // for (const i of arr) {
-    //   const { inventor } = i;
-    //   if (inventor) {
-    //     let midNameList = inventor.split(/[,;/]/);
-    //     midNameList = midNameList.map((i) => _.trim(i));
-    //     const iList = [];
-    //     if (!_.isArray(i.user_id)) i.inventor = iList;
-    //     for (const name of midNameList) {
-    //       const r = nList.find((f) => f.name === name);
-    //       if (r) {
-    //         iList.push({ user_id: r._id, name: r.name, phone: r.phone });
-    //       } else {
-    //         // 2021-11-09 修改:如果导入的人,没有账号信息.则不填写id,将姓名添加进去
-    //         iList.push({ name });
-    //       }
-    //     }
-    //     i.inventor = iList;
-    //   }
-    // }
     // 根据申请号做添加/修改
     for (const obj of arr) {
       try {
         const has_data = await this.model.count({
           create_number: obj.create_number,
         });
+        let res;
         if (!has_data) {
-          await this.model.create(obj);
+          res = await this.model.create(obj);
         } else {
           await this.model.updateOne({ create_number: obj.create_number }, obj);
+          res = await this.model.find({ create_number: obj.create_number });
         }
+        // 处理警告
+        this.ctx.service.patent.patentearly.dealData(res);
       } catch (error) {
         allNotice.push(`申请号 为${create_number} 的 专利信息 创建失败!`);
         continue;