patenttrans.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. 'use strict';
  2. const assert = require('assert');
  3. const moment = require('moment');
  4. const Excel = require('exceljs');
  5. const Path = require('path');
  6. const _ = require('lodash');
  7. const { sep } = require('path');
  8. const fs = require('fs');
  9. const { CrudService } = require('naf-framework-mongoose/lib/service');
  10. const { BusinessError, ErrorCode } = require('naf-core').Error;
  11. const { trimData } = require('naf-core').Util;
  12. const { ObjectId } = require('mongoose').Types;
  13. const { has } = require('lodash');
  14. // 专利交易
  15. class Patent_transService extends CrudService {
  16. constructor(ctx) {
  17. super(ctx, 'patenttrans');
  18. this.model = this.ctx.model.Patent.Patenttrans;
  19. this.notice = this.ctx.model.Patent.Patentexamine;
  20. this.domain = 'http://127.0.0.1';
  21. if (process.env.NODE_ENV === 'development') {
  22. this.domain = 'http://127.0.0.1:9999';
  23. }
  24. }
  25. /**
  26. * 专利交易审核
  27. * @param {body} body 参数
  28. * @property id 数据id
  29. * @property status 交底书要改变成的状态
  30. * @property transfer_date 专利权转移时间
  31. * @property info 其他数据,当做多个备注,记录使用
  32. */
  33. async check({ id, status, remark, transfer_date }) {
  34. await this.model.updateOne(
  35. { _id: ObjectId(id) },
  36. { status, transfer_date }
  37. );
  38. // 换成对应的状态码,record在下面
  39. return await this.record({ id, method: status, remark });
  40. }
  41. async record({ id, method, remark }) {
  42. let word = '';
  43. switch (`${method}`) {
  44. case 'create':
  45. word = '已申请';
  46. break;
  47. case 'update':
  48. word = '修改';
  49. break;
  50. case '1':
  51. word = '审核通过';
  52. break;
  53. case '-1':
  54. word = '审核拒绝';
  55. break;
  56. case '2':
  57. word = '合同审核';
  58. break;
  59. case '3':
  60. word = '合同审核通过,用户确认';
  61. break;
  62. case '-3':
  63. word = '合同审核拒绝';
  64. break;
  65. case '4':
  66. word = '用户确认,待归档';
  67. break;
  68. case '5':
  69. word = '归档完成,交易完成';
  70. break;
  71. default:
  72. word = '未知状态';
  73. break;
  74. }
  75. const data = await this.model.findById(id);
  76. if (!data) {
  77. throw new BusinessError(
  78. ErrorCode.DATA_NOT_EXIST,
  79. '添加记录----未找到数据'
  80. );
  81. }
  82. const obj = {
  83. time: moment().format('YYYY-MM-DD HH:mm:ss'),
  84. word,
  85. remark,
  86. };
  87. data.record.push(obj);
  88. const res = await data.save();
  89. this.toNotice(id, method);
  90. return res;
  91. }
  92. async toNotice(id, code) {
  93. const data = await this.model.findById(id);
  94. if (!data) return;
  95. const { user_id, mech_id, status, patent_name } = data;
  96. const arr = [];
  97. let content = '';
  98. let to = '';
  99. switch (code) {
  100. case 'create':
  101. content = `用户的【${patent_name}】发起了专利交易,请机构及时查看并处理`;
  102. to = mech_id;
  103. break;
  104. case 'update':
  105. if (status === '0') {
  106. content = `用户的【${patent_name}】修改了专利交易,请及时查看处理`;
  107. to = mech_id;
  108. } else if (status === '2') {
  109. content = `用户的【${patent_name}】专利交易提交了交易合同,请及时查看处理`;
  110. to = mech_id;
  111. } else if (status === '4') {
  112. content = `用户的【${patent_name}】专利交易已确认,请及时查看处理`;
  113. to = mech_id;
  114. }
  115. break;
  116. case '-1':
  117. content = `用户的【${patent_name}】未通过机构的审核,请您及时修改,重新填写专利交易`;
  118. to = user_id;
  119. break;
  120. case '1':
  121. content = `用户的【${patent_name}】专利交易通过了机构审核,系统可查询`;
  122. to = user_id;
  123. break;
  124. case '2':
  125. content = `用户的【${patent_name}】专利结束交易,请机构用户及时查看并进行合同审核`;
  126. to = mech_id;
  127. break;
  128. case '3':
  129. content = `用户的【${patent_name}】专利交易合同审核通过,请您及时点击确认结束交易`;
  130. to = user_id;
  131. break;
  132. case '-3':
  133. content = `用户的【${patent_name}】专利交易合同审核未通过,请您及时查看审核结果,并进行修改`;
  134. to = user_id;
  135. break;
  136. case '4':
  137. content = `用户的【${patent_name}】专利结束交易已确认,请机构用户进行专利交易归档`;
  138. to = mech_id;
  139. break;
  140. case '5':
  141. content = `用户的【${patent_name}】专利交易归档完成,交易完成`;
  142. to = user_id;
  143. break;
  144. default:
  145. break;
  146. }
  147. if (arr.length > 0) {
  148. await this.notice.insertMany(arr);
  149. } else {
  150. const obj = { to, content };
  151. await this.notice.create(obj);
  152. }
  153. }
  154. async toImport({ uri }) {
  155. assert(uri, '未获取到文件地址');
  156. const file = await this.ctx.curl(`${this.domain}${uri}`);
  157. if (!(file && file.data)) {
  158. throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定文件');
  159. }
  160. const workbook = new Excel.Workbook();
  161. await workbook.xlsx.load(file.data);
  162. const sheet = workbook.getWorksheet(1);
  163. const arr = [];
  164. const allNotice = [];
  165. sheet.eachRow(async (row, rindex) => {
  166. if (rindex !== 1) {
  167. // 组织数据
  168. const create_number = row.getCell(3).value || undefined,
  169. patent_name = row.getCell(2).value || undefined,
  170. on_obligee = row.getCell(4).value || undefined,
  171. transfer_date = moment(row.getCell(5).value).format('YYYY-MM-DD') || undefined,
  172. on_afterobligee = row.getCell(6).value || undefined,
  173. status = row.getCell(7).value || undefined,
  174. const has_data = await this.model.count({ create_number });
  175. if (!has_data) {
  176. const obj = {patent_name,create_number,on_obligee,transfer_date,on_afterobligee,status };
  177. // 此处添加判断条件,不限制则不需要加,直接放过即可
  178. const { result, notice } = this.tocheckData(obj);
  179. if (result) {
  180. arr.push(obj);
  181. } else {
  182. allNotice.push(notice);
  183. }
  184. }
  185. }
  186. });
  187. if (allNotice.length > 0) return allNotice;
  188. const res = await this.model.insertMany(arr);
  189. return res;
  190. }
  191. }
  192. module.exports = Patent_transService;