Jelajahi Sumber

产业集群申请联系

lrf 1 bulan lalu
induk
melakukan
43db934a3b

+ 8 - 6
src/controller/users/contactApply.controller.ts

@@ -24,7 +24,7 @@ export class ContactApplyController {
   @Post('/examine', { routerName: `审核${namePrefix}` })
   @ApiTags('信息审核')
   @ApiQuery({ name: 'examine' })
-  async examine(@Body('id') id: number, @Body('status') status: string) {
+  async examine(@Body('id') id: number, @Body('status') status: string, @Body('contacts') inputContacts: object) {
     if (!id || !status) throw new ServiceError(ErrorCode.BODY_ERROR);
     const originData = await this.service.fetch({ id });
     if (!originData) throw new ServiceError(ErrorCode.DATA_NOT_FOUND); // 抛出异常,未找到要审核的数据
@@ -39,7 +39,7 @@ export class ContactApplyController {
     if (status === '1') {
       try {
         // 审核成功的发送通知, 生成message,然后发送消息
-        const messageData = await this.service.successMessage(id);
+        const messageData = await this.service.successMessage(id, inputContacts);
         /**创建消息数据 */
         const messageResult = await this.msgService.create(messageData);
         const msgId = get(messageResult, 'id');
@@ -69,6 +69,7 @@ export class ContactApplyController {
   @ApiTags('创建数据')
   @Validate()
   async create(@Body() data: object) {
+    const skipCheckList = this.service.skipCheckList;
     /**
      * 根据keyword去查询 来源数据 与 当前用户 填写的数据 是否有达到4星匹配度的数据,没有直接拒绝
      * 因为词库很少,所以很简单就能达到.要是没达到,那就说是真的差太多了
@@ -83,16 +84,16 @@ export class ContactApplyController {
     if (user_id === source_user) throw new ServiceError(ErrorCode.CONTACTAPPLY_IS_THIS_USER_DATA); // 抛出异常: 来源数据是当前用户的数据
     /**组织数据,填充联系方式申请表:将被申请方的id填充 */
     const userData = get(otherData, 'userData');
-    // 如果是孵化器的申请,则不需要target_user.直接由管理员审核
-    if (source !== 'incubator'){
+    // 如果是在跳过检查列表中的申请,则不需要target_user.直接由管理员审核
+    if (!skipCheckList.includes(source)) {
       if (!userData) throw new ServiceError(ErrorCode.CONTACTAPPLY_TARGET_USER_NOT_FOUND);
       const target_user = get(userData, 'id');
       data['target_user'] = target_user;
     }
     // 检查是否有未审核的申请
     await this.service.checkHasApply(data);
-    // 判断是否是 孵化基地 数据,如果是孵化基地,则不需要计算匹配度,就是单纯要信息
-    if (source !== 'incubator') {
+    // 判断是否是 跳过检查列表 中的数据,如果在跳过检查列表,则不需要计算匹配度,就是单纯要信息
+    if (!skipCheckList.includes(source)) {
       // 需求,供给,项目,成果都是用name去查询匹配度
       const keyword = get(sourceData, 'name');
       // 没有keyword,无法计算匹配度,不用继续往下了.
@@ -107,6 +108,7 @@ export class ContactApplyController {
      * 1.找到 管该类型数据的部门下的管理员id
      */
     const adminIds = await this.service.getSourceDept(source);
+    // TODO: 需要确认,超级管理员是否需要处理这个问题,或者指定管理员兜底. 如果出现指定部门下没有人员的情况.没有兜底管理员则此数据不会有任何通知
     if (!adminIds) return; // 部门下无管理人员,请联系平台维护人员
     try {
       /**给这些管理员发送消息,通知他们去个人审核这个信息 */

+ 50 - 6
src/service/users/contactApply.service.ts

@@ -13,6 +13,7 @@ import { MessageUserType } from '../../public/var';
 import { Admin } from '../../entity/system/admin.entity';
 import { Design } from '../../entity/platform/design.entity';
 import { Incubator } from '../../entity/users/incubator.entity';
+import { Sector } from '../../entity/platform/sector.entity';
 
 @Provide()
 export class ContactApplyService extends BaseServiceV2 {
@@ -41,10 +42,17 @@ export class ContactApplyService extends BaseServiceV2 {
   @InjectEntityModel(Incubator)
   incubator: Repository<Incubator>;
 
+  @InjectEntityModel(Sector)
+  sector: Repository<Sector>;
+
+  /**不需要对象用户和匹配度计算数据类型:孵化基地,产业集群 */
+  skipCheckList = ['incubator', 'sector'];
   /**
    * 审核成功后,返回给申请人申请的 联系方式
+   * @param {number} id 申请id
+   * @param {object} inputContacts 产业集群需要填写的联系人和联系电话
    */
-  async successMessage(id) {
+  async successMessage(id, inputContacts) {
     const apply = await this.model.createQueryBuilder().where(`id =:id`, { id }).getOne();
     // 抛异常,未找到数据
     if (!apply) throw new ServiceError(ErrorCode.DATA_NOT_FOUND);
@@ -57,7 +65,9 @@ export class ContactApplyService extends BaseServiceV2 {
     const otherData = await this.searchCompleteData(source, source_id);
     const sourceData = get(otherData, 'sourceData');
     const sourcePropValue = get(sourceData, 'name');
-    const contacts = this.getContactObject(otherData, source);
+    let contacts = {};
+    if (source === 'sector') contacts = inputContacts;
+    else contacts = this.getContactObject(otherData, source);
     let msgStr = `您通过 ${sourceStr}数据 ${sourcePropValue ? `- ${sourcePropValue}` : ''} 获取对方联系方式的申请已通过.`;
     // 拼接联系方式
     const person = get(contacts, 'person');
@@ -103,7 +113,8 @@ export class ContactApplyService extends BaseServiceV2 {
       obj.source_id = get(i, 'source_id');
       const otherData = await this.searchCompleteData(get(i, 'source'), get(i, 'source_id'));
       const sourceData = get(otherData, 'sourceData');
-      const sourcePropValue = get(sourceData, 'name');
+      const propName = this.getSourceProp(get(i, 'source'));
+      const sourcePropValue = get(sourceData, propName);
       if (sourcePropValue) obj.source_name = sourcePropValue;
       // exam_admin
       if (get(i, 'exam_admin')) {
@@ -135,7 +146,7 @@ export class ContactApplyService extends BaseServiceV2 {
     const setting = get(config, 'contactApplyConfig', {});
     // 超级管理员都查
     if (is_super === '0') {
-      const keys = Object.keys(setting)
+      const keys = Object.keys(setting);
       return keys;
     }
     // 接下来取出部门
@@ -211,9 +222,13 @@ export class ContactApplyService extends BaseServiceV2 {
     const apply_user = get(data, 'apply_user');
     const target_user = get(data, 'target_user');
     const source = get(data, 'source');
+    const source_id = get(data, 'source_id');
     const builder = this.model.createQueryBuilder().where(`"apply_user" = :apply_user`, { apply_user });
-    if (source !== 'incubator') builder.andWhere(`"target_user" = :target_user`, { target_user });
-    else builder.andWhere(`"source" =:source`, { source });
+    if (!this.skipCheckList.includes(source)) builder.andWhere(`"target_user" = :target_user`, { target_user });
+    else {
+      builder.andWhere(`"source" =:source`, { source });
+      builder.andWhere(`"source_id" =:source_id`, { source_id });
+    }
     // const apply = await builder.andWhere(`"status" = :status`, { status: '1' }).getOne();
     // 查询是不是有其他状态的申请: 未审核,已拒绝,如果有,就根据状态返回提示语
     const othersApply = await builder.getOne();
@@ -293,6 +308,35 @@ export class ContactApplyService extends BaseServiceV2 {
       case 'incubator':
         str = '孵化基地';
         break;
+      case 'sector':
+        str = '产业集群';
+        break;
+      default:
+        break;
+    }
+    return str;
+  }
+  getSourceProp(source: string) {
+    let str;
+    switch (source) {
+      case 'demand':
+        str = 'name';
+        break;
+      case 'supply':
+        str = 'name';
+        break;
+      case 'project':
+        str = 'name';
+        break;
+      case 'achievement':
+        str = 'name';
+        break;
+      case 'incubator':
+        str = 'name';
+        break;
+      case 'sector':
+        str = 'title';
+        break;
       default:
         break;
     }