Browse Source

新增单价文件数据表控制单价数据

caiaolin 8 years ago
parent
commit
3d1f2acab8

+ 21 - 14
modules/glj/controllers/glj_controller.js

@@ -8,6 +8,7 @@
 import BaseController from "../../common/base/base_controller";
 import BaseController from "../../common/base/base_controller";
 import GLJListModel from "../models/glj_list_model";
 import GLJListModel from "../models/glj_list_model";
 import UnitPriceModel from "../models/unit_price_model";
 import UnitPriceModel from "../models/unit_price_model";
+import UnitPriceFileModel from "../models/unit_price_file_model";
 
 
 class GLJController extends BaseController {
 class GLJController extends BaseController {
 
 
@@ -29,17 +30,17 @@ class GLJController extends BaseController {
      * @return {void}
      * @return {void}
      */
      */
     async index(request, response) {
     async index(request, response) {
-        let tenderId = request.query.tender;
-        tenderId = parseInt(tenderId);
+        // 标段id
+        let projectId = request.query.project;
+        projectId = parseInt(projectId);
         try {
         try {
-            if (isNaN(tenderId) || tenderId <= 0) {
+            if (isNaN(projectId) || projectId <= 0) {
                 throw '标段id有误';
                 throw '标段id有误';
             }
             }
             // 先获取对应标段的项目工料机数据
             // 先获取对应标段的项目工料机数据
             let gljListModel = new GLJListModel();
             let gljListModel = new GLJListModel();
-            // 获取指定标段的单价文件  @todo 后续需要在标段属性中加入该标段绑定的标段id
-            let unitPriceTenderId = 1;
-            let gljList = await gljListModel.getListByTenderId(tenderId, unitPriceTenderId);
+            let gljList = await gljListModel.getListByProjectId(projectId);
+            console.log(gljList);
 
 
             let renderData = {
             let renderData = {
                 gljList: JSON.stringify(gljList),
                 gljList: JSON.stringify(gljList),
@@ -126,7 +127,6 @@ class GLJController extends BaseController {
         let data = {
         let data = {
             glj_repository_id: 3,
             glj_repository_id: 3,
             project_id: 1,
             project_id: 1,
-            tender_id: 1,
             code: '01010101',
             code: '01010101',
             name: '水泥',
             name: '水泥',
             specs: '32.5',
             specs: '32.5',
@@ -156,19 +156,26 @@ class GLJController extends BaseController {
      * @return {void}
      * @return {void}
      */
      */
     async testModify(request, response) {
     async testModify(request, response) {
-        let tenderId = request.query.tender;
+        let projectId = request.query.project;
         // 修改数据
         // 修改数据
         let updateData = {
         let updateData = {
-            code: '00010201',
+            code: '01010101',
             market_price: '40',
             market_price: '40',
-            name: '土石方综合工日',
-            tender_id: tenderId,
-            project_id: 1
+            name: '水泥',
+            project_id: projectId
         };
         };
-        let unitPriceTenderId = 1;
+
         try {
         try {
+            // 获取标段对应的单价文件id
+            let unitPriceFileModel = new UnitPriceFileModel();
+            let unitPriceFile = await unitPriceFileModel.getDataByProject(projectId);
+            if (!unitPriceFile) {
+                throw '没有对应的单价文件';
+            }
+            let unitPriceFileId = unitPriceFile.id;
+
             let unitPriceModel = new UnitPriceModel();
             let unitPriceModel = new UnitPriceModel();
-            let result = await unitPriceModel.updateUnitPrice(updateData, unitPriceTenderId);
+            let result = await unitPriceModel.updateUnitPrice(updateData, unitPriceFileId);
 
 
             console.log(result);
             console.log(result);
         } catch (error) {
         } catch (error) {

+ 24 - 11
modules/glj/models/glj_list_model.js

@@ -9,6 +9,7 @@ import BaseModel from "../../common/base/base_model";
 import {default as GLJSchemas, collectionName as gljCollectionName} from "./schemas/glj";
 import {default as GLJSchemas, collectionName as gljCollectionName} from "./schemas/glj";
 import CounterModel from "./counter_model";
 import CounterModel from "./counter_model";
 import UnitPriceModel from "./unit_price_model";
 import UnitPriceModel from "./unit_price_model";
+import UnitPriceFileModel from "./unit_price_file_model";
 
 
 class GLJListModel extends BaseModel {
 class GLJListModel extends BaseModel {
 
 
@@ -42,7 +43,6 @@ class GLJListModel extends BaseModel {
             case 'add':
             case 'add':
                 this.model.schema.path('glj_repository_id').required(true);
                 this.model.schema.path('glj_repository_id').required(true);
                 this.model.schema.path('project_id').required(true);
                 this.model.schema.path('project_id').required(true);
-                this.model.schema.path('tender_id').required(true);
                 this.model.schema.path('code').required(true);
                 this.model.schema.path('code').required(true);
                 this.model.schema.path('name').required(true);
                 this.model.schema.path('name').required(true);
                 this.model.schema.path('type_of_work').required(true);
                 this.model.schema.path('type_of_work').required(true);
@@ -53,15 +53,14 @@ class GLJListModel extends BaseModel {
     /**
     /**
      * 根据标段对应工料机数据
      * 根据标段对应工料机数据
      *
      *
-     * @param {Number} tenderId
-     * @param {Number} unitPriceTenderId
+     * @param {Number} projectId
      * @return {Promise}
      * @return {Promise}
      */
      */
-    async getListByTenderId(tenderId, unitPriceTenderId) {
+    async getListByProjectId(projectId) {
         let gljData = null;
         let gljData = null;
         try {
         try {
             // 首先获取对应标段下所有的项目工料机数据
             // 首先获取对应标段下所有的项目工料机数据
-            let condition = {tender_id: tenderId};
+            let condition = {project_id: projectId};
             let fields = {_id: 0};
             let fields = {_id: 0};
             gljData = await this.db.find(condition, fields);
             gljData = await this.db.find(condition, fields);
 
 
@@ -70,14 +69,23 @@ class GLJListModel extends BaseModel {
                 throw '无数据';
                 throw '无数据';
             }
             }
 
 
+            // 获取标段对应的单价文件id
+            let unitPriceFileModel = new UnitPriceFileModel();
+            let unitPriceFile = await unitPriceFileModel.getDataByProject(projectId);
+            if (!unitPriceFile) {
+                throw '没有对应的单价文件';
+            }
+            let unitPriceFileId = unitPriceFile.id;
+
             // 获取标段设置的单价文件数据
             // 获取标段设置的单价文件数据
             let unitPriceModel = new UnitPriceModel();
             let unitPriceModel = new UnitPriceModel();
-            let unitPriceList = await unitPriceModel.getDataByTenderId(unitPriceTenderId);
+            let unitPriceList = await unitPriceModel.getDataByFileId(unitPriceFileId);
 
 
             // 组合数据
             // 组合数据
             this.combineUnitPrice(gljData, unitPriceList);
             this.combineUnitPrice(gljData, unitPriceList);
 
 
         } catch (error) {
         } catch (error) {
+            console.log("glj_list_model:" + error);
             gljData = [];
             gljData = [];
         }
         }
 
 
@@ -115,24 +123,29 @@ class GLJListModel extends BaseModel {
                 throw '新增数据为空';
                 throw '新增数据为空';
             }
             }
             // 首先查找是否有同编码同名称的工料机数据
             // 首先查找是否有同编码同名称的工料机数据
-            let projectGljData = await this.findDataByCondition({code: data.code, tender_id: data.tender_id});
+            let projectGljData = await this.findDataByCondition({code: data.code, project_id: data.project_id});
             if (projectGljData && projectGljData.id > 0) {
             if (projectGljData && projectGljData.id > 0) {
                 // 如果找到数据则直接返回
                 // 如果找到数据则直接返回
                 return projectGljData;
                 return projectGljData;
             }
             }
 
 
+            // 获取标段对应的单价文件id
+            let unitPriceFileModel = new UnitPriceFileModel();
+            let unitPriceFile = await unitPriceFileModel.getDataByProject(data.project_id);
+            if (!unitPriceFile) {
+                throw '没有对应的单价文件';
+            }
+            let unitPriceFileId = unitPriceFile.id;
+
             // 新增单条记录 (两个操作本来应该是事务操作,然而mongodb事务支持比较弱,就当作是都可以顺利执行)
             // 新增单条记录 (两个操作本来应该是事务操作,然而mongodb事务支持比较弱,就当作是都可以顺利执行)
             let gljInsertData = await this.add(data);
             let gljInsertData = await this.add(data);
             if (!gljInsertData) {
             if (!gljInsertData) {
                 throw '新增项目工料机失败!';
                 throw '新增项目工料机失败!';
             }
             }
 
 
-            // 获取标段属性中的单价文件关联标段id @todo
-            let unitPriceTenderId = 1;
-
             // 新增单价文件
             // 新增单价文件
             let unitPriceModel = new UnitPriceModel();
             let unitPriceModel = new UnitPriceModel();
-            let unitPriceInsertData = await unitPriceModel.updateUnitPrice(data, unitPriceTenderId);
+            let unitPriceInsertData = await unitPriceModel.updateUnitPrice(data, unitPriceFileId);
 
 
             if (!unitPriceInsertData) {
             if (!unitPriceInsertData) {
                 throw '新增单价失败!';
                 throw '新增单价失败!';

+ 1 - 3
modules/glj/models/schemas/glj.js

@@ -14,10 +14,8 @@ let modelSchema = {
     id: Number,
     id: Number,
     // 工料机总库ID
     // 工料机总库ID
     glj_repository_id: Number,
     glj_repository_id: Number,
-    // 项目ID
-    project_id: Number,
     // 标段ID
     // 标段ID
-    tender_id: Number,
+    project_id: Number,
     // 编码
     // 编码
     code: String,
     code: String,
     // 名称
     // 名称

+ 21 - 0
modules/glj/models/schemas/unit_prce_file.js

@@ -0,0 +1,21 @@
+/**
+ * 具体单价数据结构
+ *
+ * @author CaiAoLin
+ * @date 2017/6/29
+ * @version
+ */
+import mongoose from "mongoose";
+
+let Schema = mongoose.Schema;
+let collectionName = 'unit_price_file';
+let modelSchema = {
+    // 自增id
+    id: Number,
+    // 标段id
+    project_id: Number,
+    // 显示名称
+    name: String,
+};
+let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
+export {model as default, collectionName as collectionName};

+ 3 - 6
modules/glj/models/schemas/unit_price.js

@@ -1,5 +1,5 @@
 /**
 /**
- * 单价文件数据结构
+ * 具体单价数据结构
  *
  *
  * @author CaiAoLin
  * @author CaiAoLin
  * @date 2017/6/29
  * @date 2017/6/29
@@ -12,10 +12,6 @@ let collectionName = 'unit_price';
 let modelSchema = {
 let modelSchema = {
     // 自增ID
     // 自增ID
     id: Number,
     id: Number,
-    // 项目id
-    project_id: Number,
-    // 标段id
-    tender_id: Number,
     // 基价单价
     // 基价单价
     base_price: String,
     base_price: String,
     // 市场单价
     // 市场单价
@@ -33,7 +29,8 @@ let modelSchema = {
     unit: String,
     unit: String,
     // 类型
     // 类型
     type: Number,
     type: Number,
-
+    // 单价文件表id
+    unit_price_file_id: Number,
 };
 };
 let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
 let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
 export {model as default, collectionName as collectionName};
 export {model as default, collectionName as collectionName};

+ 112 - 0
modules/glj/models/unit_price_file_model.js

@@ -0,0 +1,112 @@
+/**
+ * 单价文件显示业务模型(用于选择单价文件操作)
+ *
+ * @author CaiAoLin
+ * @date 2017/7/5
+ * @version
+ */
+import BaseModel from "../../common/base/base_model";
+import CounterModel from "./counter_model";
+import {default as UnitPriceFileSchema, collectionName as collectionName} from "./schemas/unit_prce_file";
+
+class UnitPriceFileModel extends BaseModel {
+
+    /**
+     * 构造函数
+     *
+     * @return {void}
+     */
+    constructor() {
+        let parent = super();
+        parent.model = UnitPriceFileSchema;
+        parent.init();
+    }
+
+    /**
+     * 设置场景
+     *
+     * @param {string} scene
+     * @return {void}
+     */
+    setScene(scene = '') {
+        switch (scene) {
+            // 新增数据的验证规则
+            case 'add':
+                this.model.schema.path('name').required(true);
+                this.model.schema.path('project_id').required(true);
+                break;
+        }
+    }
+
+    /**
+     * 新增单价文件
+     *
+     * @param {object} data
+     * @return {Promise}
+     */
+    async add(data) {
+        let result = false;
+        try {
+            if (Object.keys(data).length <= 0) {
+                throw '数据为空';
+            }
+            result = await this.db.create(data);
+        } catch (error) {
+            result = false;
+        }
+
+        return result;
+    }
+
+    /**
+     * 根据项目id获取单价文件数据
+     *
+     * @param {Number} projectId
+     * @return {Promise}
+     */
+    async getDataByProject(projectId) {
+        let result = null;
+        projectId = parseInt(projectId);
+        try {
+            if (isNaN(projectId) || projectId <= 0) {
+                throw '标段id有误';
+            }
+            result = await this.findDataByCondition({project_id: projectId});
+
+            // 如果没有找到则新增一条记录
+            if (!result) {
+                let data = {
+                    // @todo 后续再项目中获取
+                    name: 'projectName',
+                    project_id: projectId
+                };
+                result = await this.add(data);
+            }
+        } catch (error) {
+            console.log('error:' + error);
+        }
+
+        return result;
+    }
+
+    /**
+     * 新增单条工料机数据
+     *
+     * @param {object} data
+     * @return {Promise}
+     */
+    async add(data) {
+        if (Object.keys(data).length <= 0) {
+            throw '新增数据为空';
+        }
+
+        let counterModel = new CounterModel();
+        data.id = await counterModel.getId(collectionName);
+
+        this.setScene('add');
+        let result = await this.db.create(data);
+        return result;
+    }
+}
+
+export default UnitPriceFileModel;

+ 26 - 27
modules/glj/models/unit_price_model.js

@@ -1,5 +1,5 @@
 /**
 /**
- * 单价文件业务模型
+ * 单价业务模型
  *
  *
  * @author CaiAoLin
  * @author CaiAoLin
  * @date 2017/6/30
  * @date 2017/6/30
@@ -24,18 +24,18 @@ class UnitPriceModel extends BaseModel {
     }
     }
 
 
     /**
     /**
-     * 根据标段获取对应单价数据
+     * 根据单价文件id获取单价数据
      *
      *
-     * @param {Number} tenderId
+     * @param {Number} fileId
      * @return {Promise}
      * @return {Promise}
      */
      */
-    async getDataByTenderId(tenderId) {
-        tenderId = parseInt(tenderId);
-        if (isNaN(tenderId) || tenderId <= 0) {
+    async getDataByFileId(fileId) {
+        fileId = parseInt(fileId);
+        if (isNaN(fileId) || fileId <= 0) {
             return null;
             return null;
         }
         }
 
 
-        let unitPriceList = await this.db.model.find({tender_id: tenderId});
+        let unitPriceList = await this.db.model.find({unit_price_file_id: fileId});
         if (unitPriceList.length <= 0) {
         if (unitPriceList.length <= 0) {
             return null;
             return null;
         }
         }
@@ -59,37 +59,37 @@ class UnitPriceModel extends BaseModel {
         switch (scene) {
         switch (scene) {
             // 新增数据的验证规则
             // 新增数据的验证规则
             case 'add':
             case 'add':
-                this.model.schema.path('project_id').required(true);
-                this.model.schema.path('tender_id').required(true);
                 this.model.schema.path('base_price').required(true);
                 this.model.schema.path('base_price').required(true);
                 this.model.schema.path('market_price').required(true);
                 this.model.schema.path('market_price').required(true);
                 this.model.schema.path('name').required(true);
                 this.model.schema.path('name').required(true);
                 this.model.schema.path('code').required(true);
                 this.model.schema.path('code').required(true);
                 this.model.schema.path('unit').required(true);
                 this.model.schema.path('unit').required(true);
                 this.model.schema.path('type').required(true);
                 this.model.schema.path('type').required(true);
+                this.model.schema.path('unit_price_file_id').required(true);
         }
         }
     }
     }
 
 
     /**
     /**
-     * 更新单价文件(定额中修改价格时调用)
+     * 更新单价数据(定额中修改价格时调用)
      *
      *
      * @param {Object} data
      * @param {Object} data
-     * @param {Number} unitPriceTenderId
+     * @param {Number} unitPriceFileId
      * @return {Promise}
      * @return {Promise}
      */
      */
-    async updateUnitPrice(data, unitPriceTenderId) {
-        if (data.code === undefined || data.tender_id === undefined || data.name === undefined
+    async updateUnitPrice(data, unitPriceFileId) {
+        if (data.code === undefined || data.project_id === undefined || data.name === undefined
             || data.market_price === undefined) {
             || data.market_price === undefined) {
             return null;
             return null;
         }
         }
         let marketPrice = data.market_price !== undefined ? data.market_price : data.base_price;
         let marketPrice = data.market_price !== undefined ? data.market_price : data.base_price;
 
 
         // 先查找是否有同code的单价记录 @todo 后续可能会加入单位这个字段进一步确定唯一性
         // 先查找是否有同code的单价记录 @todo 后续可能会加入单位这个字段进一步确定唯一性
-        let unitPriceData = await this.findDataByCondition({code: data.code, tender_id: unitPriceTenderId}, null, false);
+        let unitPriceData = await this.findDataByCondition({code: data.code, unit_price_file_id: unitPriceFileId}, null, false);
 
 
         // 如果有记录,判断是否存在一样的市场单价,有则直接返回数据
         // 如果有记录,判断是否存在一样的市场单价,有则直接返回数据
-        if (unitPriceData && this.isPriceIncluded(unitPriceData, data.market_price)) {
-            return unitPriceData;
+        let unitPriceIndex = this.isPriceIncluded(unitPriceData, data.market_price);
+        if (unitPriceData && unitPriceIndex > 0) {
+            return unitPriceData[unitPriceIndex];
         }
         }
 
 
         // 如果不存在基价单价,则在数据源中获取
         // 如果不存在基价单价,则在数据源中获取
@@ -104,8 +104,7 @@ class UnitPriceModel extends BaseModel {
             code: data.code,
             code: data.code,
             base_price: data.base_price,
             base_price: data.base_price,
             market_price: marketPrice,
             market_price: marketPrice,
-            project_id: data.project_id,
-            tender_id: unitPriceTenderId,
+            unit_price_file_id: unitPriceFileId,
             name: data.name,
             name: data.name,
             type: data.type,
             type: data.type,
             unit: data.unit
             unit: data.unit
@@ -124,7 +123,7 @@ class UnitPriceModel extends BaseModel {
             // 然后再插入一条项目工料机数据
             // 然后再插入一条项目工料机数据
             let gljListModel = new GLJListModel();
             let gljListModel = new GLJListModel();
             // 首先先查找原有数据
             // 首先先查找原有数据
-            let originalData = await gljListModel.findDataByCondition({code: data.code, tender_id: data.tender_id}, {_id: 0});
+            let originalData = await gljListModel.findDataByCondition({code: data.code, project_id: data.project_id}, {_id: 0});
 
 
             // 查不到数据直接抛出错误
             // 查不到数据直接抛出错误
             if(!originalData) {
             if(!originalData) {
@@ -164,21 +163,21 @@ class UnitPriceModel extends BaseModel {
      *
      *
      * @param {Array} data
      * @param {Array} data
      * @param {Number} price
      * @param {Number} price
-     * @return boolean
+     * @return {Number}
      */
      */
     isPriceIncluded(data, price) {
     isPriceIncluded(data, price) {
-        let result = false;
+        let index = -1;
         if (data.length <= 0) {
         if (data.length <= 0) {
-            return result;
+            return index;
         }
         }
-
-        for(let tmp of data) {
-            if (tmp.market_price === price) {
-                return true;
+        for(let tmp in data) {
+            if (data[tmp].market_price === price) {
+                index = tmp;
+                break;
             }
             }
         }
         }
 
 
-        return result;
+        return index;
     }
     }
 
 
 }
 }