| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617 | /** * 编办控制控制器 * * @author CaiAoLin * @date 2017/7/28 * @compilation */import BaseController from "../../common/base/base_controller";import CompilationModel from "../models/compilation_model";import STDRationLibMapModel from "../../common/std/std_ration_lib_map_model";import STDBillLibListsModel from "../../common/std/std_bills_lib_lists_model";import STDGLJLibMapModel from "../../common/std/std_glj_lib_map_model";import STDFeeRateLibsModel from "../../common/std/std_fee_rate_libs_model";import {default as EngineeringConst, List as EngineeringList} from "../../common/const/engineering";import BillsTemplateModel from "../models/bills_template_model";import {default as BillsFixedFlagConst, List as BillsFixedFlagList} from "../../common/const/bills_fixed.js";import {default as BillsTypeFlagConst, List as BillsTypeFlagList} from "../../common/const/bills_type.js";import EngineeringLibModel from "../models/engineering_lib_model";import STDLabourCoesModel from "../../common/std/std_labour_coes_model";import STDCalcProgramModel from "../../common/std/std_calc_program_model";const billsGuidanceFc = require('../../std_billsGuidance_lib/facade/facades');import mainColFacade from "../../main_col_lib/facade/main_col_facade";import billTemplateFacade from "../../bills_template_lib/facade/bills_template_facade";let config = require("../../../config/config.js");class CompilationController extends BaseController {    /**     * 编办管理控制页面     *     * @param {object} request     * @param {object} response     * @return {void}     */    async index(request, response) {        let id = request.query.id;        let compilationList = [];        let selectedCompilation = {};        try {            let compilationModel = new CompilationModel();            compilationList = await compilationModel.getCompilationList();            if (compilationList.length <= 0) {                throw '没有数据';            }            // 循环查找数据            for (let tmp of compilationList) {                if (tmp._id.toString() === id) {                    selectedCompilation = tmp;                    break;                }            }            selectedCompilation = Object.keys(selectedCompilation).length <= 0 ? compilationList[0] : selectedCompilation;            request.session.selectedCompilation = selectedCompilation;        } catch (error) {            console.log(error);        }        let renderData = {            id: id,            compilationList: compilationList,            selectedCompilation: selectedCompilation,            layout: 'users/views/layout/layout',            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)        };        response.render('users/views/compilation/index', renderData);    }    /**     * 新增计价页面     *     * @param {object} request     * @param {object} response     * @return {void}     */    async addValuation(request, response) {        let name = request.body.name;        let id = request.body.id;        let section = request.body.section;        let responseData = {            err: 0,            msg: ''        };        try {            if (id === undefined || id === '') {                throw '参数错误';            }            let insertData = {                name: name,            };            let compilationModel = new CompilationModel();            let valuationId = await compilationModel.addValuation(id, section, insertData);            if (!valuationId) {                throw '新增计价规则失败';            }            //添加标准工程专业  2018-08-24 不自动添加标准工程了            /*let engineeringLibModel = new EngineeringLibModel();            let stdEngs = await engineeringLibModel.addStdLib(valuationId);            console.log(stdEngs);*/        } catch (error) {            console.log(error);            responseData.err = 1;            responseData.msg = error;        }        response.json(responseData);    }    /**     * 修改计价规则页面     *     * @param {object} request     * @param {object} response     * @return {void}     */    async editValuation(request, response) {        let selectedCompilation = request.session.selectedCompilation;        let valuationId = request.params.id;        let section = request.params.section;        let compilationList = [];        let engineeringList = [];        let valuationData = {};        let valuationList = {};        try {            let compilationModel = new CompilationModel();            compilationList = await compilationModel.getCompilationList();            // 获取对应的计价规则数据            [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);            if (Object.keys(valuationData).length <= 0) {                throw '不存在数据';            }            // 获取计价规则中对应的标准库数据            let engineeringLibModel = new EngineeringLibModel();            engineeringList = await engineeringLibModel.getLibsByValuationID(valuationId);        } catch (error) {            console.log(error);        }        let renderData = {            compilationList: compilationList,            engineeringList: engineeringList,            selectedCompilation: selectedCompilation,            valuationData: valuationData,            valuationList: valuationList,            valuationId: valuationId,            section: section,            layout: 'users/views/layout/layout',            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)        };        response.render('users/views/compilation/add', renderData);    }    /**     * 编辑工程专业页面     *     * @param {object} request     * @param {object} response     * @return {void}     */    async editEngineering(request, response) {        let engineerID = request.params.engineerID;        let valuationId = request.params.id;        let section = request.params.section;        let selectedCompilation = request.session.selectedCompilation;        let compilationList = [],billList = [], rationList = [], gljList = [],feeRateList = [], libData = {}, billsTemplateData = [];        let valuationData = {}, valuationList = {}, artificialCoefficientList = [], calculationList = [], billsGuidanceList = [], mainTreeColList = [];        let billTemplateList = [];        try {            let compilationModel = new CompilationModel();            compilationList = await compilationModel.getCompilationList();            // 获取标准清单,不绑定编办            let stdBillLibListsModel = new STDBillLibListsModel();            billList = await stdBillLibListsModel.getBillList();            // 获取定额库            let stdRationLibMapModel = new STDRationLibMapModel();            rationList = await stdRationLibMapModel.getRationLib(selectedCompilation._id);            // 获取工料机库            let stdGLJLibMapModel = new STDGLJLibMapModel();            gljList = await stdGLJLibMapModel.getGLJLibList(selectedCompilation._id);            // 获取费率标准库            let stdFeeRateLibsModel = new STDFeeRateLibsModel();            feeRateList = await stdFeeRateLibsModel.getFeeRateList(selectedCompilation._id);            // 获取人工系数标准库            let stdLabourCoesModel = new STDLabourCoesModel();            artificialCoefficientList = await stdLabourCoesModel.getLabourCoesList();            // 获取计算程序库            let stdCalcProgramModel = new STDCalcProgramModel();            calculationList = await stdCalcProgramModel.getProgramList(selectedCompilation._id);            //获取列设置库             mainTreeColList = await mainColFacade.getColLibsByCompilationID(selectedCompilation._id);             //获取清单模板库            billTemplateList = await billTemplateFacade.getTemplateLibByCompilationID(selectedCompilation._id);            // 获取对应的计价规则数据            [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);            if (Object.keys(valuationData).length <= 0) {                throw '不存在数据';            }            // 获取对应专业工程下的标准库数据            let engineeringLibModel = new EngineeringLibModel();            libData = await engineeringLibModel.findDataByCondition({_id:engineerID});            // 获取清单模板数据            let billsTemplateModel = new BillsTemplateModel();            billsTemplateData = await billsTemplateModel.getTemplateData(valuationId, libData.engineering);            //获取清单指引数据            billsGuidanceList = await billsGuidanceFc.getBillsGuideLibs({compilationId: selectedCompilation._id, $or: [{deleted: null}, {deleted: false}]});        } catch (error) {            console.log(error);        }        let renderData = {            section: section,            valuationId: valuationId,            compilationList: compilationList,            selectedCompilation: selectedCompilation,            libData: libData,            billList: JSON.stringify(billList),            rationList: JSON.stringify(rationList),            gljList: JSON.stringify(gljList),            artificialCoefficientList: JSON.stringify(artificialCoefficientList),            feeRateList: JSON.stringify(feeRateList),            billsTemplateData: JSON.stringify(billsTemplateData),            billTemplateList:JSON.stringify(billTemplateList),            mainTreeColList: JSON.stringify(mainTreeColList),            gljCol:JSON.stringify(libData.glj_col),            calculationList: JSON.stringify(calculationList),            billsGuidanceList: JSON.stringify(billsGuidanceList),            layout: 'users/views/layout/layout',            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)        };        response.render('users/views/compilation/engineering', renderData);    }    /**     * 保存工程专业标准库     *     * @param {object} request     * @param {object} response     * @return {void}     */    async saveEngineering(request, response) {        let engineerId = request.body.id;        try {            if (engineerId === '') {                throw 'id参数错误';            }            // 先存入工程专业标准库表            let engineeringLibModel = new EngineeringLibModel();            let result = await engineeringLibModel.addLib(engineerId, request.body);            if (!result) {                throw '保存失败';            }        } catch (error) {            console.log(error);        }        response.redirect(request.headers.referer);    }    /**     * 通过工程专业ID删除工程专业     * @param request     * @param response     * @returns {Promise.<void>}     */    async deleteEngineer(request,response){        let result={            error:0        };        try {            let data = request.body.data;            data = JSON.parse(data);            if(data.id ){                let engineeringLibModel = new EngineeringLibModel();                result.data = await engineeringLibModel.deleteById(data.id,true);            }else {                throw new Error("提交数据有误");            }        }catch (err){            console.log(err);            result.error=1;            result.message = err.message;        }        response.json(result);    }    /**     * 修改保存工程专业信息-用于异步操作     * @param request     * @param response     * @returns {Promise.<void>}     */    async updateEngineer(request,response){        let result={            error:0        };        try {            let data = request.body.data;            data = JSON.parse(data);            if(data.id && data.updateData){                let engineeringLibModel = new EngineeringLibModel();                result.data = await engineeringLibModel.updateById(data.id,data.updateData);            }else {                throw new Error("提交数据有误");            }        }catch (err){            console.log(err);            result.error=1;            result.message = err.message;        }        response.json(result);    }    /**     * 保存计价规则     *     * @param {object} request     * @param {object} response     * @return {void}     */    async saveValuation(request, response) {        let valuationId = request.body.id;        try {            if (valuationId === '') {                throw 'id参数错误';            }            let compilationModel = new CompilationModel();            let result = await compilationModel.saveValuation(valuationId, request.body);            if (!result) {                throw '保存失败';            }        } catch (error) {            console.log(error);        }        response.redirect(request.headers.referer);    }    /**     * 删除计价规则     *     * @param {object} request     * @param {object} response     * @return {void}     */    async deleteValuation(request, response) {        let id = request.params.id;        let section = request.params.section;        let selectedCompilation = request.session.selectedCompilation;        try {            if (id === undefined || id === '' || section === undefined || section === '') {                throw '参数错误';            }            //先删除对应的工程专业            let engineeringLibModel = new EngineeringLibModel();            await engineeringLibModel.deleteByValuationID(id);            //删除计价规则            let compilationModel = new CompilationModel();            let result = compilationModel.deleteValuation(selectedCompilation._id, id, section);            if (!result) {                throw '删除失败';            }        } catch (error) {            console.log(error);        }        response.redirect(request.headers.referer);    }    /**     * 快速切换启用/禁用     *     * @param {object} request     * @param {object} response     * @return {void}     */    async enableSwitch(request, response) {        let id = request.body.id;        let section = request.params.section;        let enable = request.body.enable;        let responseData = {            err: 0,            msg: ''        };        try {            let compilationModel = new CompilationModel();            let result = await compilationModel.switchEnable(id, section, enable);            if (!result) {                throw '新增编办失败';            }        } catch (error) {            console.log(error);            responseData.err = 1;            responseData.msg = error;        }        response.json(responseData);    }    /**     * 发布/取消编办     *     * @param {object} request     * @param {object} response     * @return {void}     */    async release(request, response) {        let id = request.body.id;        let release = request.body.status;        release = parseInt(release);        let responseData = {            err: 0,            msg: ''        };        try {            let compilationModel = new CompilationModel();            let result = await compilationModel.release(id, release);            if (!result) {                throw '发布编办失败';            }        } catch (error) {            console.log(error);            responseData.err = 1;            responseData.msg = error;        }        response.json(responseData);    }    /**     * 新增编办操作     *     * @param {object} request     * @param {object} response     * @return {void}     */    async addCompilation(request, response) {        let name = request.body.name;        let responseData = {            err: 0,            msg: ''        };        try {            let sessionManager = request.session.managerData;            let insertData = {                name: name,                creator: sessionManager.userID            };            let compilationModel = new CompilationModel();            let result = await compilationModel.add(insertData);            if (!result) {                throw '新增编办失败';            }        } catch (error) {            console.log(error);            responseData.err = 1;            responseData.msg = error;        }        response.json(responseData);    }    async setDescription(request, response){        let compilationId = request.body.id;        let description = request.body.description;        try{            let compilationModel = new CompilationModel();            await compilationModel.setDescription(compilationId, description);            response.json({err: 0, msg: '', data: null});        }        catch (err){            response.json({err: 1, msg: err, data: null});        }    }    async setOverWriteUrl(request, response){        let compilationId = request.body.id;        let overWriteUrl = request.body.overWriteUrl;        try{            let compilationModel = new CompilationModel();            await compilationModel.setOverWriteUrl(compilationId, overWriteUrl);            response.json({err: 0, msg: '', data: null});        }        catch (err){            response.json({err: 1, msg: err, data: null});        }    }    /**     * 模板设置页面     *     * @param {object} request     * @param {object} response     * @return {void}     */    async billsTemplate(request, response) {        let billList = {};        let valuationList = {};        let valuationData = {};        let compilationList = [];        let billsTemplateData = [];        let selectedCompilation = request.session.selectedCompilation;        let engineering = request.params.engineering;        let valuationId = request.params.id;        let section = request.params.section;        try {            let compilationModel = new CompilationModel;            // 获取对应的计价规则数据            [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);            compilationList = await compilationModel.getCompilationList();            // 获取标准清单            let stdBillLibListsModel = new STDBillLibListsModel();            billList = await stdBillLibListsModel.getBillList(selectedCompilation._id);            // 获取清单模板数据            let billsTemplateModel = new BillsTemplateModel();            billsTemplateData = await billsTemplateModel.getTemplateData(valuationId, engineering);        } catch (error) {            console.log(error);        }        let renderData = {            engineering: engineering,            billList: JSON.stringify(billList),            billsTemplateData: JSON.stringify(billsTemplateData),            billsFixedFlagList: JSON.stringify(BillsFixedFlagList),            billsTypeFlagList: JSON.stringify(BillsTypeFlagList),            valuationData: valuationData,            valuationList: valuationList,            selectedCompilation: selectedCompilation,            compilationList: compilationList,            valuationId: valuationId,            section: section,            layout: 'users/views/layout/layout',            LicenseKey:config.getLicenseKey(process.env.NODE_ENV)        };        response.render('users/views/compilation/template', renderData);    }    /**     * 清单模板,更新数据操作     *     * @param request     * @param response     */    async updateBillsTemplate(request, response) {        let engineering = request.params.engineering;        let valuationId = request.params.id;        let section = request.params.section;        let data = JSON.parse(request.body.data);        let billsTemplateModel = new BillsTemplateModel();        let result = await billsTemplateModel.updateTemplate(valuationId, engineering, data);        if (result) {            response.json({error: 0, message: '', data: data});        } else {            response.json({error: 1, message: '更新数据错误', data: null});        }    }    async addEngineer(request,response){        let engineeringLibModel = new EngineeringLibModel();        try {            await engineeringLibModel.addEngineer(request.body);        }catch (error) {            console.log(error);        }        response.redirect(request.headers.referer);    }}export default CompilationController;
 |