Tony Kang před 3 roky
rodič
revize
f88c462aaf

+ 1 - 1
modules/users/controllers/user_controller.js

@@ -396,7 +396,7 @@ class UserController extends BaseController {
         try {
             const sessionVersion = req.session.compilationVersion;
             const userModel = new UserModel();
-            const isFree = userModel.isFreeFromSession(sessionVersion);
+            const isFree = userModel.isFreeFromSession(sessionVersion) && !(req.session.sessionUser.mobile === '13823093010');
             res.json({ error: 0, msg: 'success', data: { isFree } });
         } catch (err) {
             res.json({ error: 1, msg: String(err), data: null });

+ 8 - 3
package.json

@@ -62,12 +62,17 @@
     "socket": "node socket.js",
     "import": "pm2-docker pm2_import.json",
     "dev_server": "SET NODE_ENV=qa&& node server.js",
-    "yh_uat_server": "SET NODE_ENV=pp&& node server.js",
-    "yh_uat_import_server": "SET NODE_ENV=pp_out&& node importserver.js",
     "dev_socket": "SET NODE_ENV=qa&& node socket.js",
     "dev_import": "SET NODE_ENV=qa&& node importserver.js",
+    "uat_server": "SET NODE_ENV=pp&& node server.js",
+    "uat_import_server": "SET NODE_ENV=pp&& node importserver.js",
+    "prod_server": "SET NODE_ENV=prod_s&& node server.js",
+    "prod_import_server": "SET NODE_ENV=prod_s&& node importserver.js",
     "dev_server_sc": "SET NODE_ENV=qa_sc&& node server.js",
     "dev_socket_sc": "SET NODE_ENV=qa_sc&& node socket.js",
-    "dev_import_sc": "SET NODE_ENV=qa_sc&& node importserver.js"
+    "dev_import_sc": "SET NODE_ENV=qa_sc&& node importserver.js",
+    "uat_server_sc": "SET NODE_ENV=pp_sc&& node server.js",
+    "uat_import_sc": "SET NODE_ENV=pp_sc&& node importserver.js",
+    "prod_server_sc": "SET NODE_ENV=sc_prod&& node server.js"
   }
 }

+ 8 - 0
web/building_saas/standard_interface/config.js

@@ -111,6 +111,14 @@ const INTERFACE_CONFIG = (() => {
         [CONTROL]: '.XML',
       },
     },
+    '山东@山东': {
+      scriptName: 'shandong_common.js',
+      fileSuffix: {
+        [BID_INVITATION]: '.XML',
+        [BID_SUBMISSION]: '.XML',
+        [CONTROL]: '.XML',
+      },
+    },
     '新疆@新疆': {
       scriptName: 'anhui_maanshan.js',
       fileSuffix: {

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1716 - 0
web/building_saas/standard_interface/export/guangxi_common.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2586 - 0
web/building_saas/standard_interface/export/shandong_common.js


+ 186 - 0
web/building_saas/standard_interface/import/guangxi_common.js

@@ -0,0 +1,186 @@
+/*
+ * @Descripttion: 广西导入接口(参考广东-中山)
+ * @Author: Tony
+ * @Date: 2022-09-23
+ */
+
+// INTERFACE_EXPORT =,必须这么写,这样才能在导入时动态加载脚本后,覆盖前端代码
+INTERFACE_IMPORT = (() => {
+    'use strict';
+    /**
+     * 
+     * @param {String} areaKey - 地区标识,如:'安徽@马鞍山',有些地区的接口只是取值上有不同,共有一个接口脚本, 需要通过地区标识确定一些特殊处理
+     * @param {Object} xmlObj - xml经过x2js转换后的xml对象
+     * @return {Object} - 返回的格式需要统一,具体参考函数内返回的内容。返回的内容会经过一系列的统一处理形成可入库的数据。
+     */
+    const RoadGradeMap = {
+      "0": "高速公路",
+      "1": "一级公路",
+      "2": "二级公路",
+      "3": "三级公路",
+      "4": "四级公路",
+      "5": "等外公路",
+      "6": "独立桥梁",
+      "7":"独立隧道"
+    }
+    
+    function formateDataString(dstring) { 
+      if (!dstring || dstring == "") return "";
+      const strArr = dstring.split("T");
+      return strArr[0]
+    }
+  
+    async function entry(areaKey, xmlObj) {
+      const {
+        UTIL: {
+          getValue,
+          arrayValue,
+          getBool,
+          extractItemsRecur,
+        }
+      } = INTERFACE_EXPORT_BASE;
+      let info = [];
+      let tenders = [];
+      let CprjInfo = getValue(xmlObj, ['CprjInfo']);
+      let EprjInfos = arrayValue(CprjInfo, ["EprjInfo"]);
+      if (EprjInfos.length > 0) { 
+        let MakeInfo = EprjInfos[0].MakeInfo;
+        let Params = EprjInfos[0].Params;
+        let BuildType = getValue(Params, ['_BuildType']);
+        let natureConstruction = "";
+        if (BuildType == "0") natureConstruction = "新建";
+        if (BuildType == "1") natureConstruction = "改扩建";
+  
+        let terrainCategory = "";
+        let Terrain = getValue(Params, ['_Terrain']);
+        if (Terrain == "0") terrainCategory = "平原微丘";
+        if (Terrain == "1") terrainCategory = "山岭重丘";
+        let RoadGrade = getValue(Params, ['_RoadGrade']);
+        let roadGrade = "";
+        if (RoadGradeMap[RoadGrade]) roadGrade = RoadGradeMap[RoadGrade];
+  
+  
+  
+        info = [
+          { key: 'constructingUnit', value: getValue(MakeInfo, ['_Manage']) },
+          { key: 'designUnit', value: getValue(MakeInfo, ['_Designer']) },
+          { key: 'compileUnit', value: getValue(MakeInfo, ['_Compile']) },
+          { key: 'compileApprover', value: getValue(MakeInfo, ['_CompileApprover']) },
+          { key: 'compileCertNo', value: getValue(MakeInfo, ['_CompileCertNo']) },
+          { key: 'compileDate', value: formateDataString(getValue(MakeInfo, ['_CompileDate'])) },
+          { key: 'reviewUnit', value: getValue(MakeInfo, ['_Review']) },
+          { key: 'reviewApprover', value: getValue(MakeInfo, ['_ReviewApprover']) },
+          { key: 'reviewCertNo', value: getValue(MakeInfo, ['_ReviewCertNo']) },
+          { key: 'reviewDate', value: formateDataString(getValue(MakeInfo, ['_ReviewDate'])) },
+          { key: 'startChainages', value: getValue(Params, ['_StartPileNo'])},
+          { key: 'endChainages', value: getValue(Params, ['_EndPileNo']) },  
+          { key: 'location', value: getValue(Params, ['_PrjArea']) },  
+          { key: 'natureConstruction', value: natureConstruction },  
+          { key: 'terrainCategory', value: terrainCategory },  
+          { key: 'roadGrade', value: roadGrade },  
+          { key: 'makeDate', value: getValue(CprjInfo, ['SystemInfo','_MakeDate']) },  
+  
+        ]
+        for (let t of EprjInfos) { 
+          tenders.push(setupTender(t))
+        }
+  
+  
+      }
+  
+      function setupTender(EprjInfo) { 
+        let tender = {};
+        let Params = EprjInfo.Params;
+        let SummaryOfCost = EprjInfo.SummaryOfCost;
+        tender.name = EprjInfo._Name;
+        tender.bills = [];
+        tender.bidEvaluationList = [];
+        tender.evaluationList = [];
+        let ProvisionalSums = getValue(SummaryOfCost, ['_ProvisionalSums']);
+        let Structure = getValue(Params, ['_Structure']);
+        let pavementStructure = "";
+        if (Structure == "0") pavementStructure = "沥青路面";
+        if (Structure == "1") pavementStructure = "水泥混凝土路面";
+        if (Structure == "2") pavementStructure = "其他类型路面";
+        tender.feature = [
+          { key: 'tenderSumLimit', value: getValue(SummaryOfCost, ['_TenderSumLimit'])},//招标控制价
+          { key: 'designSpeed', value: getValue(Params, ['_DesignSpeed']) },// --todo
+          { key: 'pavementStructure', value: pavementStructure},// --todo
+          { key: 'subgradeWidth', value: getValue(Params, ['_SubgradeWidth']) },
+          { key: 'roadLength', value: getValue(Params, ['_RoadLength']) },// --todo
+          { key: 'bridgeLength', value: getValue(Params, ['_BridgeLength']) },
+          { key: 'tunnelLength', value: getValue(Params, ['_TunnelLength']) },// --todo
+          { key: 'briTunRate', value: getValue(Params, ['_BriTunRate']) },// --todo
+          { key: 'interchangeNum', value: getValue(Params, ['_InterchangeNum']) },// --todo
+          { key: 'stubLengths', value: getValue(Params, ['_StubLengths']) },// --todo
+          { key: 'laneLength', value: getValue(Params, ['_LaneLength']) },// --todo
+        ]
+        const items = arrayValue(EprjInfo, ['Items', 'Item']);
+        for (let i of items) {
+          let bill = setupBills(i);
+          if (bill.name == "暂列金额(不含计日工总额)") { 
+            bill.fees = [{ fieldName: "common",tenderTotalFee:ProvisionalSums, tenderUnitFee: "0", totalFee: ProvisionalSums, unitFee: "0" }];
+            bill.calcBase = ProvisionalSums;
+            bill.calcFlag = 1;
+          } 
+          tender.bills.push(bill);
+        }
+        const BidEvaluationMainMaterial = arrayValue(EprjInfo, ['BidEvaluationMainMaterial']);
+        for (let b of BidEvaluationMainMaterial) { 
+          tender.bidEvaluationList.push(setUpBidEvaluation(b))
+        }
+        
+        return tender;
+      }
+  
+  
+      function setupBills(item) { 
+        let bill = {
+          code: item._ListCode,
+          name: item._ListName,
+          unit: item._Unit,
+          quantity: item._Num,
+          remark: item._Remarks,
+          jobContentText: item._Content,
+          specialProvisional: '',
+          children: []
+        }
+        if (item._ProvisionalType == '0') bill.specialProvisional = '材料';
+        if (item._ProvisionalType == '1') bill.specialProvisional = '工程设备';
+        if (item._ProvisionalType == '2') bill.specialProvisional = '工程设备';
+        let subItems = arrayValue(item, ['Item']);
+        if (subItems && subItems.length > 0) { 
+          for (let i of subItems) { 
+            bill.children.push(setupBills(i))
+          }
+        }
+        return bill;
+      }
+  
+      function setUpBidEvaluation(b) { 
+        return {
+          seq: b._Code,
+          code: b._Number,
+          name: b._Name,
+          specs: b._Specification,
+          unit: b._Unit,
+          market_price: b._Price,
+          quantity: b._Quantity,
+          remark:b._Remark
+        }
+      }
+      
+  
+      return {
+        name: CprjInfo._CprjName,
+        info,
+        tenders,
+      };
+  
+    }
+  
+    return {
+      entry
+    };
+  
+  })();

+ 185 - 0
web/building_saas/standard_interface/import/shandong_common.js

@@ -0,0 +1,185 @@
+/*
+ * @Descripttion: 山东导入接口(原始内容参考中山)
+ * @Author: Tony
+ * @Date: 2022-10-09
+ */
+
+INTERFACE_IMPORT = (() => {
+    'use strict';
+    /**
+     * 
+     * @param {String} areaKey - 地区标识,如:'安徽@马鞍山',有些地区的接口只是取值上有不同,共有一个接口脚本, 需要通过地区标识确定一些特殊处理
+     * @param {Object} xmlObj - xml经过x2js转换后的xml对象
+     * @return {Object} - 返回的格式需要统一,具体参考函数内返回的内容。返回的内容会经过一系列的统一处理形成可入库的数据。
+     */
+    const RoadGradeMap = {
+      "0": "高速公路",
+      "1": "一级公路",
+      "2": "二级公路",
+      "3": "三级公路",
+      "4": "四级公路",
+      "5": "等外公路",
+      "6": "独立桥梁",
+      "7":"独立隧道"
+    }
+    
+    function formateDataString(dstring) { 
+      if (!dstring || dstring == "") return "";
+      const strArr = dstring.split("T");
+      return strArr[0]
+    }
+  
+    async function entry(areaKey, xmlObj) {
+      const {
+        UTIL: {
+          getValue,
+          arrayValue,
+          getBool,
+          extractItemsRecur,
+        }
+      } = INTERFACE_EXPORT_BASE;
+      let info = [];
+      let tenders = [];
+      let CprjInfo = getValue(xmlObj, ['CprjInfo']);
+      let EprjInfos = arrayValue(CprjInfo, ["EprjInfo"]);
+      if (EprjInfos.length > 0) { 
+        let MakeInfo = EprjInfos[0].MakeInfo;
+        let Params = EprjInfos[0].Params;
+        let BuildType = getValue(Params, ['_BuildType']);
+        let natureConstruction = "";
+        if (BuildType == "0") natureConstruction = "新建";
+        if (BuildType == "1") natureConstruction = "改扩建";
+  
+        let terrainCategory = "";
+        let Terrain = getValue(Params, ['_Terrain']);
+        if (Terrain == "0") terrainCategory = "平原微丘";
+        if (Terrain == "1") terrainCategory = "山岭重丘";
+        let RoadGrade = getValue(Params, ['_RoadGrade']);
+        let roadGrade = "";
+        if (RoadGradeMap[RoadGrade]) roadGrade = RoadGradeMap[RoadGrade];
+  
+  
+  
+        info = [
+          { key: 'constructingUnit', value: getValue(MakeInfo, ['_Manage']) },
+          { key: 'designUnit', value: getValue(MakeInfo, ['_Designer']) },
+          { key: 'compileUnit', value: getValue(MakeInfo, ['_Compile']) },
+          { key: 'compileApprover', value: getValue(MakeInfo, ['_CompileApprover']) },
+          { key: 'compileCertNo', value: getValue(MakeInfo, ['_CompileCertNo']) },
+          { key: 'compileDate', value: formateDataString(getValue(MakeInfo, ['_CompileDate'])) },
+          { key: 'reviewUnit', value: getValue(MakeInfo, ['_Review']) },
+          { key: 'reviewApprover', value: getValue(MakeInfo, ['_ReviewApprover']) },
+          { key: 'reviewCertNo', value: getValue(MakeInfo, ['_ReviewCertNo']) },
+          { key: 'reviewDate', value: formateDataString(getValue(MakeInfo, ['_ReviewDate'])) },
+          { key: 'startChainages', value: getValue(Params, ['_StartPileNo'])},
+          { key: 'endChainages', value: getValue(Params, ['_EndPileNo']) },  
+          { key: 'location', value: getValue(Params, ['_PrjArea']) },  
+          { key: 'natureConstruction', value: natureConstruction },  
+          { key: 'terrainCategory', value: terrainCategory },  
+          { key: 'roadGrade', value: roadGrade },  
+          { key: 'makeDate', value: getValue(CprjInfo, ['SystemInfo','_MakeDate']) },  
+  
+        ]
+        for (let t of EprjInfos) { 
+          tenders.push(setupTender(t))
+        }
+  
+  
+      }
+  
+      function setupTender(EprjInfo) { 
+        let tender = {};
+        let Params = EprjInfo.Params;
+        let SummaryOfCost = EprjInfo.SummaryOfCost;
+        tender.name = EprjInfo._Name;
+        tender.bills = [];
+        tender.bidEvaluationList = [];
+        tender.evaluationList = [];
+        let ProvisionalSums = getValue(SummaryOfCost, ['_ProvisionalSums']);
+        let Structure = getValue(Params, ['_Structure']);
+        let pavementStructure = "";
+        if (Structure == "0") pavementStructure = "沥青路面";
+        if (Structure == "1") pavementStructure = "水泥混凝土路面";
+        if (Structure == "2") pavementStructure = "其他类型路面";
+        tender.feature = [
+          { key: 'tenderSumLimit', value: getValue(SummaryOfCost, ['_TenderSumLimit'])},//招标控制价
+          { key: 'designSpeed', value: getValue(Params, ['_DesignSpeed']) },// --todo
+          { key: 'pavementStructure', value: pavementStructure},// --todo
+          { key: 'subgradeWidth', value: getValue(Params, ['_SubgradeWidth']) },
+          { key: 'roadLength', value: getValue(Params, ['_RoadLength']) },// --todo
+          { key: 'bridgeLength', value: getValue(Params, ['_BridgeLength']) },
+          { key: 'tunnelLength', value: getValue(Params, ['_TunnelLength']) },// --todo
+          { key: 'briTunRate', value: getValue(Params, ['_BriTunRate']) },// --todo
+          { key: 'interchangeNum', value: getValue(Params, ['_InterchangeNum']) },// --todo
+          { key: 'stubLengths', value: getValue(Params, ['_StubLengths']) },// --todo
+          { key: 'laneLength', value: getValue(Params, ['_LaneLength']) },// --todo
+        ]
+        const items = arrayValue(EprjInfo, ['Items', 'Item']);
+        for (let i of items) {
+          let bill = setupBills(i);
+          if (bill.name == "暂列金额(不含计日工总额)") { 
+            bill.fees = [{ fieldName: "common",tenderTotalFee:ProvisionalSums, tenderUnitFee: "0", totalFee: ProvisionalSums, unitFee: "0" }];
+            bill.calcBase = ProvisionalSums;
+            bill.calcFlag = 1;
+          } 
+          tender.bills.push(bill);
+        }
+        const BidEvaluationMainMaterial = arrayValue(EprjInfo, ['BidEvaluationMainMaterial']);
+        for (let b of BidEvaluationMainMaterial) { 
+          tender.bidEvaluationList.push(setUpBidEvaluation(b))
+        }
+        
+        return tender;
+      }
+  
+  
+      function setupBills(item) { 
+        let bill = {
+          code: item._ListCode,
+          name: item._ListName,
+          unit: item._Unit,
+          quantity: item._Num,
+          remark: item._Remarks,
+          jobContentText: item._Content,
+          specialProvisional: '',
+          children: []
+        }
+        if (item._ProvisionalType == '0') bill.specialProvisional = '材料';
+        if (item._ProvisionalType == '1') bill.specialProvisional = '工程设备';
+        if (item._ProvisionalType == '2') bill.specialProvisional = '工程设备';
+        let subItems = arrayValue(item, ['Item']);
+        if (subItems && subItems.length > 0) { 
+          for (let i of subItems) { 
+            bill.children.push(setupBills(i))
+          }
+        }
+        return bill;
+      }
+  
+      function setUpBidEvaluation(b) { 
+        return {
+          seq: b._Code,
+          code: b._Number,
+          name: b._Name,
+          specs: b._Specification,
+          unit: b._Unit,
+          market_price: b._Price,
+          quantity: b._Quantity,
+          remark:b._Remark
+        }
+      }
+      
+  
+      return {
+        name: CprjInfo._CprjName,
+        info,
+        tenders,
+      };
+  
+    }
+  
+    return {
+      entry
+    };
+  
+  })();