wq 4 년 전
부모
커밋
8717dc7449
3개의 변경된 파일125개의 추가작업 그리고 0개의 파일을 삭제
  1. 78 0
      app/controller/visitController.js
  2. 2 0
      app/router/logic.js
  3. 45 0
      app/service/visitService.js

+ 78 - 0
app/controller/visitController.js

@@ -6,6 +6,7 @@ const path = require('path');
 const fs = require('fs');
 const url = require('url');
 const faceUtils = require('../util/faceUtils');
+const excelUtils = require('../util/excelUtils');
 
 class VisitController extends Controller {
   tag() {
@@ -106,6 +107,83 @@ class VisitController extends Controller {
     ctx.success(result);
   }
 
+  //导出
+  async exportExcelByVisit() {
+    const { ctx, service } = this;
+    const query = ctx.query;
+    const user = ctx.user;
+    const level = user.dept.level;
+    delete query.sessionId;
+
+    // 区级以上管理员
+    if (level == '1' || level == '2' ) {
+      ctx.logger.info('区及以上');
+      if (!ctx.query.dept1 || !ctx.query.dept2 || !ctx.query.dept3 ) {
+        delete ctx.query.dept1;
+        delete ctx.query.dept2;
+        delete ctx.query.dept3;
+        this.ctx.error('请选择要导出的市、区乡镇村级地区');
+        return;
+      }
+    } else {
+      ctx.logger.info('区以下管理员');
+      // 登录人的地区
+      if (user.dept5) {
+        query.dept5 = user.dept5;
+      } else if (user.dept4) {
+        query.dept4 = user.dept4;
+      }else if (user.dept3) {
+        query.dept3 = user.dept3;
+      }
+    }
+
+    const result = await service.visitService.visitExportData(ctx.query);
+
+
+
+    const config = [{
+      sheetOptions: { pageSetup: { orientation: 'landscape', fitToHeight: true } },
+      sheetHeader: [
+        {
+          headerName:
+              '吉林省民政厅居家老年人巡视关爱探访系统探访信息',
+          headerConfig: { height: 40 },
+        },
+      ],
+      sheetKey: [
+        { label: '序号', key: 'num', letter: 'A', width: 6 },
+        { label: '老人姓名', key: 'oldInfo', letter: 'B', width: 10 },
+        { label: '身份证号', key: 'oldIdNumber', letter: 'C', width: 20 },
+        { label: '探访者', key: 'userid.loginName', letter: 'D', width: 20 },
+        { label: '探访备注说明', key: 'visitMessage', letter: 'E', width: 50 },
+        { label: '探访位置', key: 'visitLocation', letter: 'F', width: 50 },
+        { label: '健康状况', key: 'health', letter: 'G', width: 10 },
+        { label: '精神状况', key: 'mind', letter: 'H', width: 10 },
+        { label: '安全状况', key: 'security', letter: 'I', width: 10 },
+        { label: '卫生环境', key: 'hygiene', letter: 'J', width: 10 },
+        { label: '居住环境', key: 'live', letter: 'K', width: 10 },
+        { label: '老人需求说明', key: 'demand', letter: 'L', width: 50 },
+
+      ],
+      sheetData: result,
+    }];
+    const workbook = excelUtils.getExcel(config);
+    if (!workbook) {
+      this.ctx.error();
+      return;
+    }
+
+    this.ctx.set('Content-Type', 'application/vnd.openxmlformats');
+    this.ctx.set('Content-Disposition', "attachment;filename*=UTF-8' '" + encodeURIComponent(new Date().getTime()) + '.xlsx');
+    this.ctx.body = await workbook.xlsx.writeBuffer();
+    // const finalfilename = encodeURIComponent(new Date().getTime());
+    // const path = this.app.config.defaultUploadPath + finalfilename + '.xlsx';
+    // await workbook.xlsx.writeFile(path);
+    // this.ctx.body = this.app.config.defaultUrl+this.app.config.defaultWritePathPre + finalfilename + '.xlsx'+new Date().getTime()+"生成文件时间"+
+    //     ";开始时间="+begintime+";结束时间="+endtime;
+
+  }
+
   // 百度人脸对比----图片url
   async doFace3() {
     const { ctx } = this;

+ 2 - 0
app/router/logic.js

@@ -34,6 +34,8 @@ module.exports = app => {
   router.get('/visit/delete', controller.visitController.delete);
   router.get('/visit/list', controller.visitController.list);
   router.get('/visit/listForPage', controller.visitController.listForPageWithDept);
+  router.get('/visit/exportExcelByVisit', controller.visitController.exportExcelByVisit);
+
 
   //   积分管理
   // router.post('/value/add', controller.valueController.add);

+ 45 - 0
app/service/visitService.js

@@ -182,6 +182,51 @@ class VisitService extends Service {
     return await model.VisitModel.find(data).sort({ visitTime: -1 }).limit(15);
   }
 
+  async visitExportData(data) {
+    const { model } = this.ctx;
+    const where = {};
+    if (data.dept1) {
+      where.dept1 = data.dept1;// 省
+    }
+    if (data.dept2) {
+      where.dept2 = data.dept2; // 市
+    }
+    if (data.dept3) {
+      where.dept3 = data.dept3; // 区
+    }
+    if (data.dept4) {
+      where.dept4 = data.dept4; // 乡
+    }
+    if (data.dept5) {
+      where.dept5 = data.dept5; // 社区
+    }
+    const queryName = data.queryName;
+    delete data.queryName;
+    if (queryName) {
+      const userInfo = await this.ctx.model.SysUserModel.find({ loginName: { $regex: queryName } });
+      if (userInfo.length > 0) {
+        where.userid = userInfo[0]._id;
+      }
+    }
+    // 老人姓名
+    if (data.oldName) {
+      where.oldInfo = { $regex: data.oldName };
+    }
+
+    this.ctx.logger.info('条件', where);
+    const pop = [
+      {
+        path: 'userid',
+        select: 'loginName',
+      }
+    ];
+    const result = await model.VisitModel.find(where,{"dept1":1,"dept2":1,"dept3":1,"dept4":1,"dept5":1, "visitTime":1,"visitLocation":1,"oldInfo":1,"oldIdNumber":1,
+      "health":1,"mind":1,"security":1,"hygiene":1,"live":1,
+      "demand":1,"visitMessage":1,"userid":1}).populate(pop);
+
+    return result;
+  }
+
 }
 
 module.exports = VisitService;