Преглед изворни кода

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhangweicheng пре 7 година
родитељ
комит
f026da90f9

+ 7 - 0
modules/complementary_ration_lib/controllers/compleRationController.js

@@ -78,6 +78,13 @@ class CompleRationController extends BaseController{
         });
     }
 
+    getRationGljItemsBySection(req, res){
+        let data = JSON.parse(req.body.data);
+        compleRationDao.getRationGljItemsBySection(req.session.sessionUser.ssoId, data.sectionId, function (err, data) {
+            callback(req, res, err, '', data);
+        });
+    }
+
     getCoeList(req, res){
         let data = JSON.parse(req.body.data);
         coeListDAO.getCoesByLibID(data.libID, function (err, data) {

+ 2 - 1
modules/complementary_ration_lib/controllers/compleViewController.js

@@ -44,7 +44,8 @@ class CompleViewController extends BaseController{
     }
 
     getRationLibs(req, res){
-        compleViewModel.getRationLibs(req.session.sessionCompilation._id, function (err, data) {
+        let data = JSON.parse(req.body.data);
+        compleViewModel.getRationLibs(req.session.sessionCompilation._id, data.ids, function (err, data) {
             callback(req, res, err, '', data);
         });
     }

+ 29 - 0
modules/complementary_ration_lib/controllers/searchController.js

@@ -0,0 +1,29 @@
+/**
+ * Created by Zhong on 2018/1/9.
+ */
+
+import BaseController from '../../common/base/base_controller';
+import SearchDao from '../models/searchModel';
+
+let searchDao = new SearchDao();
+let callback = function (req, res, err, message, data) {
+    res.json({error: err, message: message, data: data});
+};
+
+class SearchController extends BaseController{
+    getRationItem(req, res){
+        let data = JSON.parse(req.body.data);
+        searchDao.getRationItem(req.session.sessionUser.ssoId, data.rationRepId, data.code, function (err, data) {
+            callback(req, res, err, '', data);
+        });
+    }
+
+    findRation(req, res){
+        let data = JSON.parse(req.body.data);
+        searchDao.findRation(req.session.sessionUser.ssoId, data.rationRepId, data.keyword, function (err, data) {
+            callback(req, res, err, '', data);
+        });
+    }
+}
+
+export default SearchController;

+ 49 - 0
modules/complementary_ration_lib/models/compleRationModel.js

@@ -134,6 +134,51 @@ class CompleRatoinDao {
             callback(err, null);
         }
     }
+    //造价书定额库
+    async getRationGljItemsBySection(userId, sectionId, callback){
+        try{
+            let stdRations = await stdRationModel.find({sectionId: sectionId, $or: [{isDeleted: null}, {isDeleted: false}]});
+            for(let ration of stdRations){
+                ration._doc.type = 'std';
+            }
+            let compleRations = await compleRationModel.find({userId: userId, sectionId: sectionId, deleteInfo: null});
+            for(let ration of compleRations){
+                ration._doc.type = 'complementary';
+            }
+            let rations = stdRations.concat(compleRations);
+            rations.sort(function (a, b) {
+                let rst = 0;
+                if(a.code > b.code){
+                    rst = 1;
+                }
+                else if(a.code < b.code){
+                    rst = -1;
+                }
+                return rst;
+            });
+            for(let ration of rations){
+                let hint = '';
+                for(let rationGlj of ration.rationGljList){
+                    let glj;
+                    if(!isDef(rationGlj.type) || rationGlj.type === 'std'){
+                         glj = await stdGljModel.findOne({ID: rationGlj.gljId});
+                    }
+                    else {
+                         glj = await complementaryGljModel.findOne({uesrId: userId, ID: rationGlj.gljId});
+                    }
+                    if(isDef(glj)){
+                        let unitHint = '' + glj.code + ' ' + glj.name + ' ' + glj.unit + ' ' + rationGlj.consumeAmt + '</br>';
+                        hint += unitHint;
+                    }
+                }
+                ration._doc.hint = hint;
+            }
+            callback(0, rations);
+        }
+        catch(err){
+            callback(err, null);
+        }
+    }
 
     updateRationBasePrc(userID, basePrcArr, callback){
         let me  = this;
@@ -387,4 +432,8 @@ class CompleRatoinDao {
     }
 }
 
+function isDef(v){
+    return v !== undefined && v !== null;
+}
+
 export default CompleRatoinDao;

+ 2 - 2
modules/complementary_ration_lib/models/compleViewModel.js

@@ -15,9 +15,9 @@ class CompleViewModel {
         }
     }
 
-    async getRationLibs(compilationId, callback){
+    async getRationLibs(compilationId, ids, callback){
         try{
-            let rationLibs = await rationRepositoryModel.find({compilationId: compilationId, $or: [{deleted: null}, {deleted: false}]});
+            let rationLibs = await rationRepositoryModel.find({compilationId: compilationId, ID: {$in: ids}, $or: [{deleted: null}, {deleted: false}]});
             callback(0, rationLibs);
         }
         catch(err) {

+ 76 - 0
modules/complementary_ration_lib/models/searchModel.js

@@ -0,0 +1,76 @@
+/**
+ * Created by Zhong on 2018/1/9.
+ */
+
+import {compleRationModel} from './schemas';
+import {complementaryGljModel, stdGljModel} from '../../complementary_glj_lib/models/schemas';
+import {compleRationSectionTreeModel} from './schemas';
+let stdSectionTreeModel = require ('../../ration_repository/models/ration_section_tree').Model;
+let stdRationModel = require ('../../ration_repository/models/ration_item').Model;
+
+class SearchDao{
+    async getRationItem(userId, rationRepId, code, callback){
+        try{
+            let ration = null;
+            let stdRation = await stdRationModel.findOne({rationRepId: rationRepId, code: code, $or: [{isDeleted: null}, {isDeleted: false}]});
+            if(isDef(stdRation)){
+                ration = stdRation._doc;
+                ration.type = 'std';
+            }
+            else{
+                let compleRation = await compleRationModel.findOne({userId: userId, rationRepId: rationRepId, code: code, deleteInfo: null});
+                if(isDef(compleRation)){
+                    ration = compleRation._doc;
+                    ration.type = 'complementary';
+                }
+            }
+            if(isDef(ration)){
+                let stdChapter = await stdSectionTreeModel.findOne({rationRepId: ration.rationRepId, ID: ration.sectionId, $or: [{isDeleted: null}, {isDeleted: false}]});
+                if(isDef(stdChapter)){
+                    ration.chapter = stdChapter._doc;
+                }
+                else{
+                    let compleChapter = await compleRationSectionTreeModel.findOne({userId: userId, ID: ration.sectionId, deleteInfo: null});
+                    if(isDef(compleChapter)){
+                        ration.chapter = compleChapter._doc;
+                    }
+                }
+            }
+            callback(0, ration);
+        }
+        catch(err){
+            callback(err, null);
+        }
+    }
+
+    async findRation(userId, rationRepId, keyword, callback){
+        try{
+            let filter = {
+                'rationRepId': rationRepId,
+                '$and': [{
+                    '$or': [{'code': {'$regex': keyword, $options: '$i'}}, {'name': {'$regex': keyword, $options: '$i'}}]
+                }, {
+                    '$or': [{'isDeleted': {"$exists":false}}, {'isDeleted': null}, {'isDeleted': false}, {deleteInfo: null}]
+                }]
+            };
+            let stdRations = await stdRationModel.find(filter);
+            for(let i = 0, len = stdRations.length; i < len; i++){
+                stdRations[i]._doc.type = 'std';
+            }
+            let compleRations = await compleRationModel.find(filter);
+            for(let i = 0, len = compleRations.length; i <len; i++){
+                compleRations[i]._doc.type = 'complementary';
+            }
+            callback(0, stdRations.concat(compleRations));
+        }
+        catch(err){
+            callback(err, null);
+        }
+    }
+}
+
+function isDef(v){
+    return v !== undefined && v !== null;
+}
+
+export default SearchDao;

+ 7 - 0
modules/complementary_ration_lib/routes/routes.js

@@ -7,12 +7,14 @@ import CompleViewController from '../controllers/compleViewController';
 import CompleSectionTreeController from '../controllers/compleSectionTreeController';
 import CompleRationController from '../controllers/compleRationController';
 import GljController from '../../complementary_glj_lib/controllers/gljController';
+import SearchController from '../controllers/searchController'
 
 let router = express.Router();
 let compleViewController = new CompleViewController();
 let compleSectionTreeController = new CompleSectionTreeController();
 let compleRationController = new CompleRationController();
 let gljController = new GljController();
+let searchController = new SearchController();
 
 module.exports = function (app) {
     //app.get('/complementaryRation/main', compleViewController.init, compleViewController.redirectMain);
@@ -42,5 +44,10 @@ module.exports = function (app) {
     router.post('/getCoeItemsByIDs', compleRationController.init, compleRationController.getCoeItemsByIDs);
     router.post('/getCoeItemsByNos', compleRationController.init, compleRationController.getCoeItemsByNos);
 
+    //造价书定额库
+    router.post('/getRationItem', searchController.init, searchController.getRationItem);
+    router.post('/findRation', searchController.init, searchController.findRation);
+    router.post('/getRationGljItemsBySection', compleRationController.init, compleRationController.getRationGljItemsBySection);
+
     app.use('/complementaryRation/api', router);
 };

+ 2 - 2
modules/main/models/ration.js

@@ -46,6 +46,7 @@ let rationSchema = new Schema({
     deleteInfo: deleteSchema,
     type: Number,                               // 1 定额、2 量价、3 工料机定额
     subType: Number,                            // 子类型:1人工、201材料、301机械、4主材、5设备
+    from:{type: String,default:'std'},//std, cpt  来自标准、补充
 
     // 定额特有属性:
     libID: Number,
@@ -67,8 +68,7 @@ let rationSchema = new Schema({
     specs:String,//规格型号
     shortName:String,//缩写
     customQuantity:String,//自定义消耗
-    adjCoe:Number,
-    from:{type: String,default:'std'}//std, cpt  来自标准工料机库、补充工料机库
+    adjCoe:Number
 
 });
 

+ 6 - 1
web/building_saas/complementary_ration_lib/js/main.js

@@ -22,7 +22,12 @@ let compleRationMain = {
                 }
             }
         };
-        CommonAjax.post('/complementaryRation/api/getRationLibs', {user_id: userID}, scFunc);
+        let ration_lib = projectInfoObj.projectInfo.engineeringInfo.ration_lib;
+        let ids = [];
+        for(lib of ration_lib){
+            ids.push(parseInt(lib.id));
+        }
+        CommonAjax.post('/complementaryRation/api/getRationLibs', {user_id: userID, ids: ids}, scFunc);
     }
 };
 

+ 2 - 1
web/building_saas/main/js/controllers/project_controller.js

@@ -182,6 +182,7 @@ ProjectController = {
             newNode.data = newSource;
 
             this.syncDisplayNewNode(sheetController, newNode);
+
         }
     },
     replaceRation: function (project, sheetController, std) {
@@ -190,7 +191,7 @@ ProjectController = {
         let selected = project.mainTree.selected, newSource = null, newNode = null;
         if (selected === null) { return; }
 
-        if (selected.sourceType === project.Ration.getSourceType()) {
+        if (  selected.sourceType === project.Ration.getSourceType()) {
             project.Ration.replaceRation(selected.source, std);
             project.ration_glj.addRationGLJ(selected.source, std);
             sheetController.refreshTreeNode([selected], false);

+ 2 - 0
web/building_saas/main/js/models/ration.js

@@ -213,6 +213,7 @@ var Ration = {
                         data.updateData.comments = std.chapter.explanation;
                         data.updateData.ruleText = std.chapter.ruleText;
                     }
+                    data.updateData.from = std.type === 'complementary' ? 'cpt' : 'std';
                     data.updateData.programID = std.feeType;
                     data.updateData.rationAssList =  projectObj.project.ration_ass.CreateNewAss(std);
                     // calculate ration Quantity
@@ -374,6 +375,7 @@ var Ration = {
                 ration.comments = std.chapter.explanation;
                 ration.ruleText = std.chapter.ruleText;
             }
+            ration.from = std.type === 'complementary' ? 'cpt' : 'std';
             ration.programID = std.feeType;
             ration.rationAssList = projectObj.project.ration_ass.CreateNewAss(std);
             // calculate ration Quantity

+ 8 - 0
web/building_saas/main/js/views/main_tree_col.js

@@ -38,6 +38,14 @@ let MainTreeCol = {
             if (node.data.calcBase && node.data.calcBase != ""){
                 return cbParser.toFExpr(node.data.calcBase);
             }
+        },
+        code: function (node) {
+            if(node.sourceType === projectObj.project.Ration.getSourceType() && isDef(node.data.code) && isDef(node.data.from) && node.data.from === 'cpt'){
+                return '补' +  node.data.code.replace(new RegExp('补'), '');
+            }
+            else {
+                return isDef(node.data.code) ? node.data.code : '';
+            }
         }
     },
     readOnly: {

+ 23 - 18
web/building_saas/main/js/views/project_view.js

@@ -230,25 +230,20 @@ var projectObj = {
         } 
     },
     updateRationCode: function (node, value) {
-        if (/[\w]{2}[\d]{4}/.test(value)) {
-            if (projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0) {
-                alert('当前项目无定额库,请添加定额库。');
-                this.mainController.refreshTreeNode([node], false);
-            } else {
-                let libId = projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id;
-                CommonAjax.postRationLib('/rationRepository/api/matchRation', {user_id: userID, rationLibId: libId, code: value}, function (data) {
-                    if (data) {
-                        projectObj.project.Ration.replaceRation(node.source, data);
-                        projectObj.project.ration_glj.addRationGLJ(node.source, data);
-                    } else {
-                        alert('当前库中找不到定额"' + value + '"');
-                    }
-                    projectObj.mainController.refreshTreeNode([node], false);
-                });
-            }
-        } else {
-            alert('输入的定额编码有误,请检查。');
+        if (projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0) {
+            alert('当前项目无定额库,请添加定额库。');
             this.mainController.refreshTreeNode([node], false);
+        } else {
+            let libId = projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id;
+            CommonAjax.post('/complementaryRation/api/getRationItem', {user_id: userID, rationRepId: libId, code: value}, function (data) {
+                if (data) {
+                    projectObj.project.Ration.replaceRation(node.source, data);
+                    projectObj.project.ration_glj.addRationGLJ(node.source, data);
+                } else {
+                    alert('当前库中找不到定额"' + value + '"');
+                }
+                projectObj.mainController.refreshTreeNode([node], false);
+            });
         }
     },
     updateCode: function (node, value) {
@@ -349,6 +344,15 @@ var projectObj = {
             info.sheet.repaint();
         }
     },
+    mainSpreadEditStarting: function (sender, info) {
+        let project = projectObj.project;
+        let node = project.mainTree.items[info.row];
+        if(isDef(node) && node.sourceType === project.Ration.getSourceType() && isDef(node.data.code) && isDef(node.data.from) && node.data.from === 'cpt'){
+            let orgV = info.sheet.getValue(info.row, info.col);
+            let newV = orgV.replace(new RegExp('补'), '');
+            info.sheet.setValue(info.row, info.col, newV);
+        }
+    },
     mainSpreadEditEnded: function (sender, info) {
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
@@ -465,6 +469,7 @@ var projectObj = {
 
                 that.mainSpread.bind(GC.Spread.Sheets.Events.LeaveCell, that.mainSpreadLeaveCell);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.EnterCell, that.mainSpreadEnterCell);
+                that.mainSpread.bind(GC.Spread.Sheets.Events.EditStarting, that.mainSpreadEditStarting);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.RangeChanged, that.mainSpreadRangeChanged);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, that.amountAreaNumber);

+ 6 - 6
web/building_saas/main/js/views/std_ration_lib.js

@@ -61,7 +61,7 @@ var rationLibObj = {
             };
         };
 
-        CommonAjax.postRationLib('/rationRepository/api/getRationTree', {userId: userID, rationRepositoryId: rationLibID}, function (datas) {
+        CommonAjax.post('/complementaryRation/api/getRationTree', {userId: userID, rationRepId: rationLibID}, function (datas) {
             showRationChapterTree(datas);
         }, function () {
             showRationChapterTree([]);
@@ -87,7 +87,7 @@ var rationLibObj = {
             rationLibObj.setTagForHint(datas);
         };
         if (sectionID) {
-            CommonAjax.postRationLib('/rationRepository/api/getRationGljItems', {userId: userID, sectionID: sectionID}, function (datas) {
+            CommonAjax.post('/complementaryRation/api/getRationGljItemsBySection', {user_Id: userID, sectionId: sectionID}, function (datas) {
                 showDatas(datas, rationLibObj.sectionRationsSetting);
             }, function () {
                 showDatas([], rationLibObj.sectionRationsSetting);
@@ -99,7 +99,7 @@ var rationLibObj = {
     onRationSpreadCellDoubleClick: function (sender, args) {
         var select = $('#stdRationLibSelect'), rationCode = args.sheet.getText(args.row, 0);
         if (rationCode !== '') {
-            CommonAjax.postRationLib('/rationRepository/api/getRationItem', {user_id: userID, rationLibId: select.val(), code: rationCode}, function (data) {
+            CommonAjax.post('/complementaryRation/api/getRationItem', {user_id: userID, rationRepId: select.val(), code: rationCode}, function (data) {
                 ProjectController.addRation(projectObj.project, projectObj.mainController, rationType.ration, data);
             });
         }
@@ -120,7 +120,7 @@ var rationLibObj = {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();
                         let rationCode = rationSelect.length > 0 ? rationSheet.getText(rationSelect[0].row, 0) : '';
                         if (rationCode !== '') {
-                            CommonAjax.postRationLib('/rationRepository/api/getRationItem', {user_id: userID, rationLibId: select.val(), code: rationCode}, function (data) {
+                            CommonAjax.post('/complementaryRation/api/getRationItem', {user_id: userID, rationRepId: select.val(), code: rationCode}, function (data) {
                                 ProjectController.addRation(projectObj.project, projectObj.mainController, rationType.ration, data);
                             });
                         }
@@ -133,7 +133,7 @@ var rationLibObj = {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();
                         let rationCode = rationSelect.length > 0 ? rationSheet.getText(rationSelect[0].row, 0) : '';
                         if (rationCode !== '') {
-                            CommonAjax.postRationLib('/rationRepository/api/getRationItem', {user_id: userID, rationLibId: select.val(), code: rationCode}, function (data) {
+                            CommonAjax.post('/complementaryRation/api/getRationItem', {user_id: userID, rationRepId: select.val(), code: rationCode}, function (data) {
                                 ProjectController.replaceRation(projectObj.project, projectObj.mainController, data);
                             });
                         }
@@ -286,7 +286,7 @@ $('#rationSearch').click(function () {
 
         resultSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, rationLibObj.onRationSpreadCellDoubleClick);
     };
-    CommonAjax.postRationLib('/rationRepository/api/findRation', {'user_id': userID, 'rationLibId': rationLibID, 'keyword': keyword}, function (result) {
+    CommonAjax.post('/complementaryRation/api/findRation', {'user_id': userID, 'rationRepId': rationLibID, 'keyword': keyword}, function (result) {
         var resultObj = $('#rationSearchResult'), resultSpread = null;
         resultObj.empty();
         resultObj.append(getResultHtml(result));