123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- 'use strict';
- /**
- * 指标库控制器
- *
- * @author Mai
- * @data 2018/4/19
- * @version
- */
- const fs = require('fs');
- const path = require('path');
- const awaitWriteStream = require('await-stream-ready').write;
- const sendToWormhole = require('stream-wormhole');
- const libConst = require('../const/lib');
- module.exports = app => {
- class LibController extends app.BaseController {
- /**
- * 指标库页面
- *
- * @param {object} ctx - egg全局context
- * @return {void}
- */
- async index (ctx) {
- let status = ctx.query.status;
- const libList = await ctx.service.quotaLib.getList(status);
- //获取指标源状态数量
- const libStatus = await ctx.service.quotaLib.getStatusNum();
- const renderData = {
- status,
- libList,
- libConst,
- libStatus
- };
- await this.layout('lib/index.ejs', renderData, 'lib/modal.ejs');
- }
- /**
- * 上传指标源
- *
- * @param {object} ctx - egg全局context
- * @return {void}
- */
- async upload(ctx) {
- const parts = ctx.multipart({ autoFields: true });
- let addData = {};
- let stream;
- while ((stream = await parts()) != null) {
- const filename = stream.filename.toLowerCase();
- if(filename === ''){
- throw '请上传文件';
- ctx.redirect('/lib');
- }
- const fileInfo = path.parse(filename);
- let create_time = Date.parse( new Date())/1000;
- if(!fs.existsSync(libConst.quotaLibDir)) {
- fs.mkdirSync(libConst.quotaLibDir);
- }
- let filepath = libConst.quotaLibDir + create_time + fileInfo.ext;
- addData = {
- name: fileInfo.name,
- path: filepath,
- create_time: create_time
- };
- const target = path.join(filepath);
- const writeStream = fs.createWriteStream(target);
- try {
- await awaitWriteStream(stream.pipe(writeStream));
- } catch (err) {
- await sendToWormhole(stream);
- throw err;
- }
- }
- if(addData !== {}){
- let fileStram = fs.readFileSync(addData.path, 'utf8');
- try {
- const fileResult = JSON.parse(fileStram);
- //插入数据到数据库
- const result = await ctx.service.quotaLib.batchAdd(addData,fileResult);
- // const result = await ctx.service.quotaLib.add(addData);
- if (!result) {
- //插入失败则删除文件;
- fs.unlinkSync(addData.path);
- throw '新增指标源数据失败';
- }
- ctx.redirect('/lib');
- } catch (err) {
- //插入失败则删除文件;
- fs.unlinkSync(addData.path);
- throw err;
- }
- }else{
- throw '请上传文件';
- }
- }
- /**
- * 指标源全局参数页面
- *
- * @param {object} ctx - egg全局context
- * @return {void}
- */
- async global (ctx) {
- let lid = ctx.params.id;
- lid = parseInt(lid);
- try{
- if(isNaN(lid) || lid < 0){
- throw '参数有误';
- }
- //获取指标源数据
- const libInfo = await ctx.service.quotaLib.getLibDataById(lid);
- //获取全局指标参数
- const condition = {
- where: {
- lib_id: lid,
- node_id: 0,
- }
- }
- const globalParams = await ctx.service.tenderParam.getAllDataByCondition(condition);
- const renderData = {
- libInfo,
- libConst,
- globalParams,
- };
- await this.layout('lib/global.ejs', renderData);
- } catch (error) {
- console.log(error);
- ctx.redirect('/lib');
- }
- }
- /**
- * 指标源详细页面
- *
- * @param {object} ctx - egg全局context
- * @return {void}
- */
- async detail (ctx) {
- let lid = ctx.params.id;
- lid = parseInt(lid);
- try{
- if(isNaN(lid) || lid < 0){
- throw '参数有误';
- }
- //获取指标源数据
- const libInfo = await ctx.service.quotaLib.getLibDataById(lid);
- const billsData = await ctx.service.bills.getDataByLibId(lid);
- // if(libInfo.status === libConst.status.enter){
- // throw '指标源已入库';
- // }
- //获取项目节编号
- // const billsList = await ctx.service.bills.getListById(lid);
- const renderData = {
- libInfo,
- libConst,
- billsData: JSON.stringify(billsData),
- };
- await this.layout('lib/detail.ejs', renderData, 'lib/detail-modal.ejs');
- } catch (error) {
- console.log(error);
- ctx.redirect('/lib');
- }
- }
- async getChildren(ctx) {
- const responseData = {
- err: 0,
- msg: '',
- data: [],
- };
- try {
- const data = JSON.parse(ctx.request.body.data);
- const libId = data.lib_id;
- if (!libId) {
- throw '当前未打开指标源';
- }
- const id = data.n_id;
- if (isNaN(id) || id <= 0) {
- throw '参数错误';
- }
- responseData.data = await ctx.service.bills.getChildrenByParentId(libId, id);
- } catch (err) {
- responseData.err = 1;
- responseData.msg = err.toString();
- }
- ctx.body = responseData;
- }
- /**
- * 删除指标源
- *
- * @param {Object} ctx -egg全局变量
- * @return {void}
- */
- async delete(ctx) {
- let id = ctx.request.body.del_lib_id;
- let text = ctx.request.body.del_lib_text;
- id = parseInt(id);
- try {
- if (isNaN(id) || id <= 0) {
- throw '参数错误';
- }
- if(text === undefined || text !== '确认删除'){
- throw '参数错误';
- }
- //获取指标源数据
- const libInfo = await ctx.service.quotaLib.getLibDataById(id);
- if(!libInfo){
- throw '不存在该标段';
- }
- //删清指标源和清单数据
- const result = ctx.service.quotaLib.deleteLibById(id);
- if (!result) {
- throw '删除标段失败';
- }
- fs.unlinkSync(libInfo.filepath);
- ctx.redirect('/lib');
- } catch (error) {
- console.log(error);
- ctx.redirect(ctx.request.headers.referer);
- }
- }
- /**
- * 指标源入库
- *
- * @param {Object} ctx -egg全局变量
- * @return {void}
- */
- async enter(ctx) {
- let id = ctx.request.body.enter_lib_id;
- id = parseInt(id);
- try {
- if (isNaN(id) || id <= 0) {
- throw '参数错误';
- }
- const result = ctx.service.quotaLib.enterLibById(id);
- if (!result) {
- throw '指标入库失败';
- }
- ctx.redirect('/lib');
- } catch (error) {
- console.log(error);
- ctx.redirect(ctx.request.headers.referer);
- }
- }
- }
- return LibController;
- }
|