فهرست منبع

前端工程专业结构修改

zhangweicheng 7 سال پیش
والد
کامیت
0eb4767f19

+ 0 - 22
modules/all_models/bills_template.js

@@ -1,22 +0,0 @@
-/**
- * Created by zhang on 2018/3/22.
- */
-
-var mongoose = require('mongoose');
-var Schema = mongoose.Schema;
-var deleteSchema = require('../all_schemas/delete_schema');
-var BillsTemplateSchema = new Schema({
-    ID: Number,
-    ParentID: Number,
-    NextSiblingID: Number,
-    code: String,
-    name: String,
-    unit: String,
-    deleteInfo: deleteSchema,
-    tempType: Number,
-    //计算基数
-    calcBase: String,
-    //费率ID
-    feeRateID:Number
-});
-//mongoose.model('temp_bills', BillsTemplateSchema);  之后删除

+ 41 - 0
modules/all_models/bills_template_items.js

@@ -0,0 +1,41 @@
+/**
+ * Created by zhang on 2018/7/13.
+ */
+import mongoose from "mongoose";
+let Schema = mongoose.Schema;
+
+let collectionName = 'std_bills_template_items';
+
+// 标记字段
+let flagsSchema = new Schema({
+    fieldName: String,
+    flag: Number
+});
+let BillsTemplateSchema = {
+    // 树结构所需ID
+    ID: Number,
+    ParentID: Number,
+    NextSiblingID: Number,
+    // 编号
+    code: String,
+    // 名称
+    name: String,
+    // 单位
+    unit: String,
+    // 类别
+    type: Number,
+    // 标记
+    flags:{
+        type: [flagsSchema],
+        default: []
+    },
+    // 所属模板库ID
+    libID: {type:String,index:true},
+    //计算基数
+    calcBase: String,
+    //费率ID
+    feeRateID:Number
+};
+
+mongoose.model(collectionName, new Schema(BillsTemplateSchema, {versionKey: false, collection: collectionName}));
+

+ 2 - 22
modules/all_models/compilation.js

@@ -9,23 +9,14 @@ import mongoose from "mongoose";
 
 let Schema = mongoose.Schema;
 let collectionName = 'compilation';
-let engineeringListSchema = new Schema({
-    // 工程专业id
-    engineering: {
-        type: Number
-    },
-    engineering_id: {
-        type: Schema.Types.Mixed,
-        default: []
-    }
-}, {_id: false});
+
 let childrenSchema = new Schema({
     id:String,
     // 计价名称
     name: String,
     // 工程专业列表
     engineering_list: {
-        type: [engineeringListSchema],
+        type: Schema.Types.Mixed,
         default: []
     },
     // 是否启用
@@ -36,17 +27,6 @@ let childrenSchema = new Schema({
     // 类型
     type: {
         type: Number
-    },
-    // 列设置
-    main_tree_col: {
-        type: Schema.Types.Mixed,
-        default: {
-            "emptyRows":3,
-            "headRows":0,
-            "treeCol": 0,
-            "headRowHeight":[],
-            "cols":[]
-        }
     }
 },{_id: false});
 let modelSchema = {

+ 30 - 10
modules/all_models/engineering_lib.js

@@ -9,6 +9,13 @@ import mongoose from "mongoose";
 
 let Schema = mongoose.Schema;
 let collectionName = 'engineering_lib';
+let taxGroupSchema = new  Schema({
+    taxType: String,//计税方式
+    program_lib: { type: Schema.Types.Mixed,default:{}},// 计算程序标准库
+    template_lib:{ type: Schema.Types.Mixed,default:{}},//清单模板库
+    col_lib:{ type: Schema.Types.Mixed,default:{}}
+},{_id: false});
+
 let modelSchema = {
     // 标准清单
     bill_lib: {
@@ -25,26 +32,39 @@ let modelSchema = {
         type: Schema.Types.Mixed,
         default: []
     },
-    // 列设置
-    main_tree_col: {
+    //清单指引库
+    billsGuidance_lib: {
         type: Schema.Types.Mixed,
-        default: {
-            "emptyRows":3,
-            "headRows":0,
-            "treeCol": 0,
-            "headRowHeight":[],
-            "cols":[]
-        }
+        default: []
+    },
+    tax_group :{
+        type: [taxGroupSchema],
+        default: []
     },
     // 费率标准库
     fee_lib: {
         type: Schema.Types.Mixed,
         default: []
     },
+    // 人工系数标准库
+    artificial_lib: {
+        type: Schema.Types.Mixed,
+        default: []
+    },
     //设置人材机显示列
     glj_col:{
         showAdjustPrice:Boolean//是否显示调整价列
-    }
+    },
+    //清单或定额计价规则ID
+    valuationID:{type:String,index: true},
+    //工程专业名称
+    name:String,
+    //前端是否显示
+    visible:{
+        type: Boolean,
+        default: false
+    },
+    engineering:Number
 };
 mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
 

+ 31 - 0
modules/all_models/main_col_lib.js

@@ -0,0 +1,31 @@
+/**
+ * Created by zhang on 2018/7/14.
+ */
+
+//列设置库
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+const oprSchema = require('../all_schemas/opr_schema');
+const main_col_lib = new Schema({
+        ID:{type:String,index:true},
+            main_tree_col: {
+                type: Schema.Types.Mixed,
+                default: {
+                    emptyRows: 3,
+                    headRows: 0,
+                    treeCol: 0,
+                    headRowHeight: [],
+                    cols:[]
+                }
+            },
+        creator: String,
+        createDate: Number,
+        recentOpr: [oprSchema],
+        name: String,
+        compilationId: String,
+        compilationName: String,
+        deleted: Boolean
+    }, {versionKey: false}
+);
+
+mongoose.model("std_main_col_lib", main_col_lib,"std_main_col_lib");

+ 5 - 5
modules/pm/controllers/new_proj_controller.js

@@ -7,6 +7,8 @@ let projCounter = require('../../main/models/proj_counter_model');
 let projSetting = require('../../main/models/proj_setting_model');
 let async = require('async');
 const uuidV1 = require('uuid/v1');
+const mongoose = require('mongoose');
+let mainColLibModel = mongoose.model('std_main_col_lib');
 
 import BillsTemplateModel from "../models/templates/bills_template_model";
 import EngineeringLibModel from "../../users/models/engineering_lib_model";
@@ -17,7 +19,7 @@ module.exports = {
             async function (cb) {
                 // 获取清单模板数据
                 let billsTemplateModel = new BillsTemplateModel();
-                let templateData = JSON.stringify(await billsTemplateModel.getTemplateDataForNewProj(property.valuation, property.engineering));
+                let templateData = JSON.stringify(await billsTemplateModel.getTemplateDataForNewProj(property.templateLibID));
                 let billsDatas = JSON.parse(templateData);
                 let uuidMaping = Object.create(null);
                 uuidMaping['-1'] = -1;
@@ -33,13 +35,11 @@ module.exports = {
                 });
                 billsData.insertData(billsDatas, callback);
             },
-           /* function (cb) {//这个计数器换了
-                projCounter.insertData({"projectID": newProjID}, cb);//这个计数器没什么用了
-            },*/
             async function (cb) {
                 let engineeringModel = new EngineeringLibModel();
                 let engineering = await engineeringModel.getEngineering(property.engineering_id);
-                projSetting.insertData({"projectID": newProjID, main_tree_col: engineering.main_tree_col,glj_col:engineering.glj_col}, cb);
+                let mainTreeCol = await mainColLibModel.findOne({'ID':property.colLibID});
+                projSetting.insertData({"projectID": newProjID, main_tree_col: mainTreeCol.main_tree_col,glj_col:engineering.glj_col}, cb);
             }
         ], (err) => callback(err));
     }

+ 7 - 2
modules/pm/models/project_model.js

@@ -26,6 +26,7 @@ let calcProgramFacade = require('../../main/facade/calc_program_facade');
 let installationFacade = require('../../main/facade/installation_facade');
 let logger = require("../../../logs/log_helper").logger;
 let BillsModel = require("../../main/models/bills").model;
+let _ = require('lodash');
 
 let Projects = mongoose.model('projects');
 let projectType = {
@@ -85,7 +86,7 @@ ProjectsDAO.prototype.getUserProject = function (userId, ProjId, callback) {
 }
 
 ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId, datas, callback) {
-    let data, project, updateLength = 0, hasError = false, deleteInfo = null, i, newProject;
+    let data, project, updateLength = 0, hasError = false, deleteInfo = null, i, newProject,original_property = null;
     let updateAll = function (err) {
         if (!err) {
             updateLength += 1;
@@ -159,7 +160,11 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                     data.updateData.property.lockBills = false;
                     //工料机单价调整系数
                     data.updateData.property.tenderSetting = tenderSetting;
+                    original_property = _.cloneDeep(data.updateData.property);
+                    delete data.updateData.property.templateLibID;
+                    delete data.updateData.property.colLibID;
                 }
+
                 newProject = new Projects(data.updateData);
                 // 查找同级是否存在同名数据
                 let exist = await this.isExist(userId, compilationId, data.updateData.name, data.updateData.ParentID);
@@ -180,7 +185,7 @@ ProjectsDAO.prototype.updateUserProjects = async function (userId, compilationId
                 }
                 newProject.save(async function (err, result) {
                     if (!err && result._doc.projType === projectType.tender) {
-                        newProjController.copyTemplateData(result._doc.property, newProject.ID, updateAll);
+                        newProjController.copyTemplateData(original_property, newProject.ID, updateAll);
                     } else {
                         updateAll(err);
                     }

+ 7 - 8
modules/pm/models/templates/bills_template_model.js

@@ -4,7 +4,7 @@
  */
 import BaseModel from "../../../common/base/base_model";
 const mongoose = require('mongoose');
-const BillsTemplateSchema = mongoose.model('temp_bills');
+const BillsTemplateSchema = mongoose.model('std_bills_template_items');
 
 class BillsTemplateModel extends BaseModel {
     /**
@@ -19,12 +19,11 @@ class BillsTemplateModel extends BaseModel {
     }
 
     /**
-     * 获取计价类别对应的清单模板
-     * @param valuationId
-     * @param engineering
+     * 获取模板库对应的清单模板
+     * @param libID
      * @returns {*}
      */
-    async getTemplateData (valuationId, engineering) {
+    async getTemplateData (libID) {
         // 筛选字段
         let field = {_id: 1, valuationId: 1, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1, calcBase: 1};
         let data = await this.findDataByCondition({valuationId: valuationId, engineering: engineering}, field, false);
@@ -33,15 +32,15 @@ class BillsTemplateModel extends BaseModel {
     }
 
     /**
-     * 新建项目时,获取计价类别对应的清单模板
+     * 新建项目时,获取模板库对应的清单模板
      * @param valuationId
      * @param engineering
      * @returns {*}
      */
-    async getTemplateDataForNewProj (valuationId, engineering) {
+    async getTemplateDataForNewProj (libID) {
         // 筛选字段
         let field = {_id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1,type:1, calcBase: 1,feeRateID:1};
-        let data = await this.findDataByCondition({valuationId: valuationId, engineering: engineering}, field, false);
+        let data = await this.findDataByCondition({libID: libID}, field, false);
 
         return data === null ? [] : data;
     }

+ 19 - 36
modules/users/models/engineering_lib_model.js

@@ -30,44 +30,33 @@ class EngineeringLibModel extends BaseModel {
         if (data.length <= 0) {
             return data;
         }
-
-        let engineeringTemp = {};
-        let engineeringLibIdList = [];
+        let valuationIDs = [];
         // 整理出数据库需要查找的id,一次查找
         for(let valuation of data) {
             if (valuation === null) {
                 continue;
             }
-            for(let engineering of valuation.engineering_list) {
-                if (engineeringTemp[valuation.id] === undefined) {
-                    engineeringTemp[valuation.id] = [engineering.engineering_id];
-                }else {
-                    engineeringTemp[valuation.id].push(engineering.engineering_id);
-                }
-                engineeringLibIdList.push(engineering.engineering_id);
+            if(valuation.id){
+                valuationIDs.push(valuation.id);
             }
         }
 
-
         // 查找对应的id数据
-        let condition = {_id: {"$in": engineeringLibIdList}};
-        let engineeringLibList = await this.findDataByCondition(condition, null, false, '_id');
-
+        let condition = {visible:true,valuationID: {"$in": valuationIDs}};
+        let engineeringLibList = await this.findDataByCondition(condition,null,false);
+        engineeringLibList = JSON.parse(JSON.stringify(engineeringLibList));
         // 组合计价规则id对应专业工程标准库数据
         let engineeringLib = {};
-        for(let index in engineeringTemp) {
-            if (engineeringTemp[index].length <= 0) {
-                continue;
-            }
-            for(let libId of engineeringTemp[index]) {
-                if (engineeringLibList[libId] === undefined) {
-                    continue;
-                }
-                if (engineeringLib[index] === undefined) {
-                    engineeringLib[index] = [engineeringLibList[libId] ];
-                }else {
-                    engineeringLib[index].push(engineeringLibList[libId] );
-                }
+        for(let engineering of engineeringLibList){
+            let tem = {//做一下转换,和原来的结构一致
+                engineering_id:engineering._id.toString(),
+                engineering:engineering.engineering,
+                lib:engineering
+            };
+            if(engineeringLib[engineering.valuationID] === undefined){
+                engineeringLib[engineering.valuationID] = [tem];
+            }else {
+                engineeringLib[engineering.valuationID].push(tem);
             }
         }
 
@@ -78,15 +67,9 @@ class EngineeringLibModel extends BaseModel {
             if (valuation === null) {
                 continue;
             }
-            for(let engineering of valuation.engineering_list) {
-                if (engineering === null || engineeringLib[valuation.id] === undefined) {
-                    continue;
-                }
-                for (let tmp of engineeringLib[valuation.id]) {
-                    if (tmp._id.toString() === engineering.engineering_id.toString()) {
-                        engineering.lib = tmp;
-                    }
-                }
+            valuation.engineering_list = [];
+            if(engineeringLib[valuation.id]){
+                valuation.engineering_list = engineeringLib[valuation.id]
             }
         }
         return valuationData;

+ 8 - 0
web/building_saas/pm/html/project-management.html

@@ -327,9 +327,17 @@
                     </div>
                     <span class="form-text text-danger" id="engineering-info" style="display: none;">请选择工程专业</span>
                     <div style="margin-top: 15px;" class="input-group">
+                        <label style="margin-top: 8px;">计税方式</label>
+                        <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="taxType">
+                            <option value="1">一般计税</option>
+                            <option value="2">简易计税</option>
+                        </select>
+                    </div>
+                    <div style="margin-top: 15px;" class="input-group">
                         <label style="margin-top: 8px;">计算程序</label>
                         <select style="margin-left: 5px; border-radius: .25rem;" class="form-control" id="tender-calcProgram"><option value="">请选择计算程序</option></select>
                     </div>
+
                     <span class="form-text text-danger" id="calcProgram-info" style="display: none;">请选择计算程序</span>
                 </form>
             </div>

+ 82 - 46
web/building_saas/pm/js/pm_newMain.js

@@ -1084,6 +1084,13 @@ $(document).ready(function() {
         changeEngineering();
     });
 
+    //选择计税方式
+    $("#taxType").change(function () {
+        $('#valuation-info').hide();
+        changeEngineering();
+    });
+
+
     // 新增单项项目点击
    /* $("#add-engineering-btn").click(function() {
         let selectedItem = projTreeObj.tree.selected;
@@ -1394,46 +1401,52 @@ $(document).ready(function() {
     function changeEngineering(){
         $('#engineering-info').hide();
         let engineeringList = getEngineeringList();
-        if(engineeringList.length === 0){
-            return false;
-        }
-        let selectedEngineering = $("#tender-engineering").val();
-        selectedEngineering = parseInt(selectedEngineering);
-        let currentLib = {};
-        for(let engineering of engineeringList) {
-            if (engineering.engineering === selectedEngineering) {
-                currentLib = engineering.lib;
+        if(engineeringList.length > 0){
+            let selectedEngineering = $("#tender-engineering").val();
+            let currentLib = {};
+            for(let engineering of engineeringList) {
+                if (engineering.engineering_id === selectedEngineering) {
+                    currentLib = engineering.lib;
+                }
             }
-        }
 
-        if (Object.keys(currentLib).length <= 0) {
-            return false;
-        }
-        // 输出数据到页面
-        if (currentLib.fee_lib !== undefined && currentLib.fee_lib.length > 0) {
-            $("#tender-fee-rate").children("option").first().val("newFeeRate-"+currentLib.fee_lib[0].id);
+            if (Object.keys(currentLib).length <= 0) {
+                return false;
+            }
+            // 输出数据到页面
+            if (currentLib.fee_lib !== undefined && currentLib.fee_lib.length > 0) {
+                $("#tender-fee-rate").children("option").first().val("newFeeRate-"+currentLib.fee_lib[0].id);
+            }
+            $("#tender-engineering").parent().siblings('.hidden-area').slideDown('fast');
         }
-        $("#tender-engineering").parent().siblings('.hidden-area').slideDown('fast');
+        getStdCalcProgramFiles();
+    }
 
-        function getStdCalcProgramFiles(){
-            function getStdCPFilesHtml(stdCPLibs) {
-                let result = '<option value="">请选择计算程序</option>';
-                if (stdCPLibs.length <= 0) {
-                    return result;
-                };
 
-                for (let lib of stdCPLibs){
-                    result += '<option value='+ lib.id +'>'+ lib.name +'</option>';
-                };
+
+    function getStdCalcProgramFiles(){
+        function getStdCPFilesHtml(taxGroups) {
+            let result = '<option value="">请选择计算程序</option>';
+            if (taxGroups.length <= 0) {
                 return result;
             };
-            let stdCPHtml = getStdCPFilesHtml(getcalcProgramList());
-            $("#tender-calcProgram").html(stdCPHtml);
-            if ($("#tender-calcProgram")[0].options.length > 1)
-                $("#tender-calcProgram")[0].selectedIndex = 1;
+
+            for (let group of taxGroups){
+                let groupString = ""; //把计算程序、清单模板、列设置的ID生成一个组合的值
+                let p_id = group.program_lib?group.program_lib.id:"";
+                let t_id = group.template_lib?group.template_lib.id:"";
+                let c_id = group.col_lib?group.col_lib.id:"";
+                groupString = p_id + "|-|" +t_id+"|-|"+c_id;
+                result += '<option value='+ groupString +'>'+ group.program_lib.name +'</option>';
+            };
+            return result;
         };
-        getStdCalcProgramFiles();
+        let stdCPHtml = getStdCPFilesHtml(getTaxGroupList());
+        $("#tender-calcProgram").html(stdCPHtml);
+        if ($("#tender-calcProgram")[0].options.length > 1)
+            $("#tender-calcProgram")[0].selectedIndex = 1;
     }
+
     // 选择工程专业后动态更改费率文件等数据
     $("#tender-engineering").change(function() {
         changeEngineering()
@@ -1810,17 +1823,22 @@ function getEngineeringList(){
     return engineeringList;
 }
 
-function getcalcProgramList(){
+function getTaxGroupList(){//getcalcProgramList
     let egrs = getEngineeringList();
-    let calcProgramList = [];
+    let groupList = [];
     let egrID = $("#tender-engineering").val();
+    let taxType = $("#taxType").val();
     for(let egr of egrs) {
-        if (egr.engineering == egrID) {
-            calcProgramList = egr.lib.program_lib;
+        if (egr.engineering_id == egrID && egr.lib) {
+            for(let group of egr.lib.tax_group){
+                if(group.taxType == taxType && group.program_lib){
+                    groupList.push(group);
+                }
+            }
             break;
         }
     }
-    return calcProgramList;
+    return groupList;
 }
 
 function getNodeByName(name, nodes){
@@ -2100,22 +2118,36 @@ function AddTender() {
             return false;
         }
 
-        let engineering = $("#tender-engineering").val();
-        if (engineering === '') {
+        let engineering_id = $("#tender-engineering").val();
+        if (engineering_id === '') {
             setDangerInfo($('#engineering-info'), '请选择工程专业');
             return false;
         }
 
-        let calcProgram = $("#tender-calcProgram").val();
-        if (calcProgram === '') {
+        let taxType = $("#taxType").val();
+        if(taxType ===""){
+            return false;
+        }
+
+        let IDGroup = $("#tender-calcProgram").val();
+        if (IDGroup === '') {
             setDangerInfo($('#calcProgram-info'), '请选择计算程序');
             return false;
         }
+        IDGroup = IDGroup.split("|-|");
+
+        let calcProgram = isNaN(parseInt(IDGroup[0]))?IDGroup[0]:parseInt(IDGroup[0]);//转换成整数
+        let templateLibID = IDGroup[1];
+        let colLibID = IDGroup[2];
+        if(templateLibID == ''|| colLibID ==''){
+            alert("工程专业配置有误!");
+            return false;
+        }
 
         let valuationName = $("#valuation").children("option:selected").text();
         let valuationType = $("input[name='valuation_type']:checked").val();
 
-        let engineering_id = undefined;
+        let engineering = undefined;
         let valuationData = valuationType === 'bill' ? JSON.parse(billValuation) : JSON.parse(rationValuation);
         let engineeringList = [];
         for(let tmp of valuationData) {
@@ -2126,8 +2158,8 @@ function AddTender() {
         }
         let libs = null;
         for(let tmp of engineeringList) {
-            if (tmp.engineering == engineering) {
-                engineering_id = tmp.engineering_id;
+            if (tmp.engineering_id == engineering_id) {
+                engineering = tmp.engineering;
                 libs = tmp.lib;
                 break;
             }
@@ -2162,7 +2194,10 @@ function AddTender() {
             engineeringName: engineeringName,
             unitPriceFile: {name: unitPriceFileObj.name, id: unitPriceFileObj.id},
             feeFile: {name: feeFileObj.name, id: feeFileObj.id},
-            calcProgram: {name: calcProgramName, id: calcProgram}
+            calcProgram: {name: calcProgramName, id: calcProgram},
+            taxType:taxType,
+            templateLibID:templateLibID,
+            colLibID:colLibID
         };
         AddTenderItems(selectedItem, projName, engName, tenderName, tenderInfo, callback);
 
@@ -2495,9 +2530,10 @@ function getEngineeringHtml(engineeringList) {
 
     for(let i = 0; i < engineeringList.length; i++){
         let tmp = engineeringList[i];
-        if (engineeringObject[tmp.engineering] !== undefined) {
+        result += `<option ${i === 0 ? 'selected' : ''} value="${tmp.engineering_id}">${tmp.lib.name}</option>`;
+        /*if (engineeringObject[tmp.engineering] !== undefined) {
             result += `<option ${i === 0 ? 'selected' : ''} value="${tmp.engineering}">${engineeringObject[tmp.engineering]}</option>`;
-        }
+        }*/
     }
 
     /*for(let tmp of engineeringList) {