소스 검색

feat: 更新weapp控制器,调整用户信息获取逻辑,优化审计数据查询,新增标段信息详情接口

lanjianrong 2 달 전
부모
커밋
82d79e21f1
5개의 변경된 파일106개의 추가작업 그리고 39개의 파일을 삭제
  1. 4 4
      app/controller/weapp_controller.js
  2. 17 17
      app/controller/weapp_dashboard_controller.js
  3. 81 15
      app/controller/weapp_subp_controller.js
  4. 3 3
      app/middleware/weapp_auth.js
  5. 1 0
      app/router.js

+ 4 - 4
app/controller/weapp_controller.js

@@ -93,11 +93,11 @@ module.exports = app => {
         // 获取用户信息
         async getUserInfo(ctx) {
             try {
-                const mobile = ctx.projectAccount.auth_mobile || ctx.projectAccount.mobile;
+                const mobile = ctx.session.sessionUser.auth_mobile || ctx.session.sessionUser.mobile;
                 const projectAccount = {
-                    code: ctx.project.code,
-                    name: ctx.project.name,
-                    userName: ctx.projectAccount.name,
+                    code: ctx.session.sessionProject.code,
+                    name: ctx.session.sessionProject.name,
+                    userName: ctx.session.sessionUser.name,
                     mobile: mobile.slice(0, 3) + '****' + mobile.slice(-4),
                 };
                 ctx.body = {

+ 17 - 17
app/controller/weapp_dashboard_controller.js

@@ -7,22 +7,22 @@ module.exports = app => {
     class WeappDashboardController extends app.BaseController {
         async workspace(ctx) {
             try {
-                // const allAuditTenders = await ctx.service.ledgerAudit.getAuditTender(ctx.projectAccount.id);
-                const allAuditStages = await ctx.service.stageAudit.getAuditStage(ctx.projectAccount.id);
-                const allAuditChanges = await ctx.service.changeAudit.getAuditChange(ctx.projectAccount.id);
-                // const allAuditRevise = await ctx.service.reviseAudit.getAuditRevise(ctx.projectAccount.id);
-                const allAuditMaterial = await ctx.service.materialAudit.getAuditMaterial(ctx.projectAccount.id);
-                const allAuditAdvance = await ctx.service.advanceAudit.getAuditAdvance(ctx.projectAccount.id);
-                const allAuditChangeProject = await ctx.service.changeProjectAudit.getAuditChangeProject(ctx.projectAccount.id);
-                const allAuditChangeApply = await ctx.service.changeApplyAudit.getAuditChangeApply(ctx.projectAccount.id);
-                const allAuditChangePlan = await ctx.service.changePlanAudit.getAuditChangePlan(ctx.projectAccount.id);
-                // const allAuditPayments = await ctx.service.paymentDetailAudit.getAuditPayment(ctx.projectAccount.id);
-                // const allAuditStageAss = await ctx.service.stageAuditAss.getAuditStageAss(ctx.projectAccount.id);
-                // const allAuditFinancials = await ctx.service.financialPayAudit.getAuditFinancial(ctx.projectAccount.id);
-                const allAuditQualityInspections = await ctx.service.qualityInspectionAudit.getAuditInspection(ctx.projectAccount.id);
-                const allAuditSafeInspections = await ctx.service.safeInspectionAudit.getAuditInspection(ctx.projectAccount.id);
-                // const allAuditSafeStage = await ctx.service.safeStageAudit.getAuditStage(ctx.projectAccount.id);
-                // const allAuditPhasePay = await ctx.service.phasePayAudit.getAuditStage(ctx.projectAccount.id);
+                // const allAuditTenders = await ctx.service.ledgerAudit.getAuditTender(ctx.session.sessionUser.id);
+                const allAuditStages = await ctx.service.stageAudit.getAuditStage(ctx.session.sessionUser.id);
+                const allAuditChanges = await ctx.service.changeAudit.getAuditChange(ctx.session.sessionUser.id);
+                // const allAuditRevise = await ctx.service.reviseAudit.getAuditRevise(ctx.session.sessionUser.id);
+                const allAuditMaterial = await ctx.service.materialAudit.getAuditMaterial(ctx.session.sessionUser.id);
+                const allAuditAdvance = await ctx.service.advanceAudit.getAuditAdvance(ctx.session.sessionUser.id);
+                const allAuditChangeProject = await ctx.service.changeProjectAudit.getAuditChangeProject(ctx.session.sessionUser.id);
+                const allAuditChangeApply = await ctx.service.changeApplyAudit.getAuditChangeApply(ctx.session.sessionUser.id);
+                const allAuditChangePlan = await ctx.service.changePlanAudit.getAuditChangePlan(ctx.session.sessionUser.id);
+                // const allAuditPayments = await ctx.service.paymentDetailAudit.getAuditPayment(ctx.session.sessionUser.id);
+                // const allAuditStageAss = await ctx.service.stageAuditAss.getAuditStageAss(ctx.session.sessionUser.id);
+                // const allAuditFinancials = await ctx.service.financialPayAudit.getAuditFinancial(ctx.session.sessionUser.id);
+                const allAuditQualityInspections = await ctx.service.qualityInspectionAudit.getAuditInspection(ctx.session.sessionUser.id);
+                const allAuditSafeInspections = await ctx.service.safeInspectionAudit.getAuditInspection(ctx.session.sessionUser.id);
+                // const allAuditSafeStage = await ctx.service.safeStageAudit.getAuditStage(ctx.session.sessionUser.id);
+                // const allAuditPhasePay = await ctx.service.phasePayAudit.getAuditStage(ctx.session.sessionUser.id);
 
                 const dashboardStatus = {
                     all: 0,
@@ -47,7 +47,7 @@ module.exports = app => {
                         phasePay: 0,
                     },
                 };
-                const subProjects = await ctx.service.subProject.getSubProject(ctx.projectAccount.project_id, ctx.projectAccount.id, ctx.projectAccount.is_admin, true);
+                const subProjects = await ctx.service.subProject.getSubProject(ctx.session.sessionUser.project_id, ctx.session.sessionUser.id, ctx.session.sessionUser.is_admin, true);
                 for (const subProject of subProjects) {
                     subProject.page_show = ctx.service.subProject.getPageShow(subProject.page_show);
                 }

+ 81 - 15
app/controller/weapp_subp_controller.js

@@ -8,13 +8,15 @@
  * @version
  */
 
+const auditConst = require('../const/audit');
+const measureType = require('../const/tender').measureType;
 
 module.exports = app => {
     class WeappSubpController extends app.BaseController {
 
         async subProjectList(ctx) {
             try {
-                const list = await ctx.service.subProject.getSubProject(ctx.project.id, ctx.projectAccount.id, ctx.projectAccount.is_admin);
+                const list = await ctx.service.subProject.getSubProject(ctx.session.sessionProject.id, ctx.session.sessionUser.id, ctx.session.sessionUser.is_admin);
                 ctx.body = {
                     code: 0, msg: '', data: {
                         list,
@@ -42,57 +44,55 @@ module.exports = app => {
                 const pageShow = subProject.page_show ? JSON.parse(subProject.page_show) : {};
                 const auditList = [];
                 // 获取待审批的计量期列表
-                const auditStages = await ctx.service.stageAudit.getAuditStageByWap(ctx.projectAccount.id, subProjectId);
+                const auditStages = await ctx.service.stageAudit.getAuditStageByWap(ctx.session.sessionUser.id, subProjectId);
                 auditList.push(...(auditStages.map(item => ({ ...item, type: 'stage', subType: 'stage' }))));
                 // 获取待审批的变更期
-                const auditChanges = await ctx.service.changeAudit.getAuditChangeByWap(ctx.projectAccount.id, subProjectId);
+                const auditChanges = await ctx.service.changeAudit.getAuditChangeByWap(ctx.session.sessionUser.id, subProjectId);
 
                 auditList.push(...(auditChanges.map(item => ({ ...item, type: 'change', subType: 'change' }))));
 
                 // 获取待审批的变更立项
                 if (pageShow.openChangeProject) {
-                    const changeProjects = await ctx.service.changeProjectAudit.getAuditChangeProjectByWap(ctx.projectAccount.id, subProjectId);
+                    const changeProjects = await ctx.service.changeProjectAudit.getAuditChangeProjectByWap(ctx.session.sessionUser.id, subProjectId);
                     auditList.push(...(changeProjects.map(item => ({ ...item, type: 'change', subType: 'changeProject' }))));
                 }
                 // 获取待审批的变更申请
                 if (pageShow.openChangeApply) {
-                    const changeApplys = await ctx.service.changeApplyAudit.getAuditChangeApplyByWap(ctx.projectAccount.id, subProjectId);
+                    const changeApplys = await ctx.service.changeApplyAudit.getAuditChangeApplyByWap(ctx.session.sessionUser.id, subProjectId);
                     auditList.push(...(changeApplys.map(item => ({ ...item, type: 'change', subType: 'changeApply' }))));
                 }
                 // 获取待审批的变更方案
                 if (pageShow.openChangePlan) {
-                    const changePlans = await ctx.service.changePlanAudit.getAuditChangePlanByWap(ctx.projectAccount.id, subProjectId);
+                    const changePlans = await ctx.service.changePlanAudit.getAuditChangePlanByWap(ctx.session.sessionUser.id, subProjectId);
                     auditList.push(...(changePlans.map(item => ({ ...item, type: 'change', subType: 'changePlan' }))));
                 }
                 // 获取待审批的台账修订
-                const ledgerRevises = await ctx.service.reviseAudit.getAuditReviseByWap(ctx.projectAccount.id, subProjectId);
+                const ledgerRevises = await ctx.service.reviseAudit.getAuditReviseByWap(ctx.session.sessionUser.id, subProjectId);
                 auditList.push(...(ledgerRevises.map(item => ({ ...item, type: 'revise', subType: 'revise' }))));
                 // 获取待审批的预付款
-                const auditAdvance = await ctx.service.advanceAudit.getAuditAdvanceByWap(ctx.projectAccount.id, subProjectId);
+                const auditAdvance = await ctx.service.advanceAudit.getAuditAdvanceByWap(ctx.session.sessionUser.id, subProjectId);
                 auditList.push(...(auditAdvance.map(item => ({ ...item, type: 'advance', subType: 'advance' }))));
                 // 获取待审批的材料调差
                 if (pageShow.openMaterial) {
-                    const materialList = await ctx.service.materialAudit.getAuditMaterialByWap(ctx.projectAccount.id, subProjectId);
+                    const materialList = await ctx.service.materialAudit.getAuditMaterialByWap(ctx.session.sessionUser.id, subProjectId);
                     auditList.push(...(materialList.map(item => ({ ...item, type: 'material', subType: 'material' }))));
                 }
                 // 获取待审批的质量巡检单
                 if (pageShow.qualityInspection) {
-                    const qualityInspectionList = await ctx.service.qualityInspectionAudit.getAuditInspectionByWap(ctx.projectAccount.id, subProjectId);
+                    const qualityInspectionList = await ctx.service.qualityInspectionAudit.getAuditInspectionByWap(ctx.session.sessionUser.id, subProjectId);
                     auditList.push(...(qualityInspectionList.map(item => ({ ...item, type: 'qualityInspection', subType: 'qualityInspection' }))));
                 }
                 // 获取待审批的安全巡检
                 if (pageShow.safeInspection) {
-                    const safeInspectionList = await ctx.service.safeInspectionAudit.getAuditInspectionByWap(ctx.projectAccount.id, subProjectId);
+                    const safeInspectionList = await ctx.service.safeInspectionAudit.getAuditInspectionByWap(ctx.session.sessionUser.id, subProjectId);
                     auditList.push(...(safeInspectionList.map(item => ({ ...item, type: 'safeInspection', subType: 'safeInspection' }))));
                 }
-                // 按照审批时间倒序排序
-                auditList.sort((a, b) => new Date(b.begin_time).getTime() - new Date(a.begin_time).getTime());
                 // 获取消息列表
-                const msgList = await ctx.service.message.getMsgList(ctx.project.id, subProjectId, 1);
+                const msgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, subProjectId, 1);
 
                 ctx.body = {
                     code: 0, msg: '', data: {
-                      auditList,
+                      auditList: ctx.helper._.orderBy(auditList, ['begin_time'], ['desc', 'asc']),
                       msgList,
                     },
                 };
@@ -101,6 +101,72 @@ module.exports = app => {
                 ctx.body = { code: -1, msg: '', data: null };
             }
         }
+
+        async tenderInfoDetail(ctx) {
+          try {
+            const { id: tenderId } = ctx.query;
+            const tender = await this.service.tender.getTender(tenderId);
+            const tenderInfo = await this.service.tenderInfo.getTenderInfo(tenderId);
+            if (!tender || !tenderInfo) {
+                throw '标段信息不存在'
+            }
+            let bCalcTp = tender.user_id === ctx.session.sessionUser.accountId && (
+                tender.ledger_status === auditConst.ledger.status.checkNo || tender.ledger_status === auditConst.ledger.status.uncheck);
+            const stages = await ctx.service.stage.getValidStages(tenderId, false, ctx.session.sessionUser);
+            const lastStage = stages.length > 0 ? stages[0] : null; // await ctx.service.stage.getLastestStage(ctx.tender.id);
+            const [change_tp, change_p_tp, change_n_tp, change_valuation_tp, change_unvaluation_tp] = await ctx.service.change.getChangeTp(tenderId);
+            tender.change_tp = change_tp;
+            tender.change_p_tp = change_p_tp;
+            tender.change_n_tp = change_n_tp;
+            tender.change_valuation_tp = change_valuation_tp;
+            tender.change_unvaluation_tp = change_unvaluation_tp;
+            if (lastStage) {
+                await this.ctx.service.stage.checkStageGatherData(lastStage, ctx.session.sessionUser.is_admin);
+                if ((!bCalcTp) && tender.measure_type === measureType.gcl.value) {
+                    bCalcTp = lastStage.status !== auditConst.stage.status.checked && !lastStage.readOnly;
+                }
+                if (bCalcTp) {
+                    const sum = await this.ctx.service.ledger.addUp({ tender_id: tenderId/* , is_leaf: true*/ });
+                    tender.total_price = sum.total_price;
+                    tender.deal_tp = sum.deal_tp;
+                }
+                tender.sum = tenderInfo.calc_type === 'tp' ? ctx.helper.add(tender.total_price, tender.change_valuation_tp) : ctx.helper.add(tender.total_price, tender.change_tp);
+                tender.gather_tp = ctx.helper.sum([lastStage.contract_tp, lastStage.qc_tp, lastStage.pc_tp]);
+                tender.end_contract_tp = ctx.helper.sum([lastStage.contract_tp, lastStage.pre_contract_tp, lastStage.contract_pc_tp]);
+                tender.end_qc_tp = ctx.helper.sum([lastStage.qc_tp, lastStage.pre_qc_tp, lastStage.qc_pc_tp]);
+                tender.end_positive_qc_tp = ctx.helper.sum([lastStage.positive_qc_tp, lastStage.pre_positive_qc_tp, lastStage.positive_qc_pc_tp]);
+                tender.end_negative_qc_tp = ctx.helper.sum([lastStage.negative_qc_tp, lastStage.pre_negative_qc_tp, lastStage.negative_qc_pc_tp]);
+                tender.end_gather_tp = ctx.helper.add(tender.end_contract_tp, tender.end_qc_tp);
+                tender.pre_gather_tp = ctx.helper.add(lastStage.pre_contract_tp, lastStage.pre_qc_tp);
+                tender.yf_tp = lastStage.yf_tp;
+                tender.sf_tp = lastStage.sf_tp;
+                tender.qc_ratio = ctx.helper.mul(ctx.helper.div(tender.end_qc_tp, tenderInfo.deal_param.contractPrice, 2), 100);
+                tender.pre_ratio = ctx.helper.mul(ctx.helper.div(tender.pre_gather_tp, tender.sum, 2), 100);
+                tender.cur_ratio = ctx.helper.mul(ctx.helper.div(tender.gather_tp, tender.sum, 2), 100);
+                tender.other_tp = ctx.helper.sub(ctx.helper.sub(tender.sum, tender.pre_gather_tp), tender.gather_tp);
+                tender.other_ratio = Math.max(0, 100 - tender.pre_ratio - tender.cur_ratio);
+                tender.end_yf_tp = ctx.helper.add(lastStage.yf_tp, lastStage.pre_yf_tp);
+                tender.end_sf_tp = ctx.helper.add(lastStage.sf_tp, lastStage.pre_sf_tp);
+                tender.undone_tp = ctx.helper.sub(ctx.helper.sub(ctx.helper.add(tender.total_price, change_tp), tender.end_contract_tp), tender.end_qc_tp);
+            } else {
+                if (bCalcTp) {
+                    const sum = await this.ctx.service.ledger.addUp({ tender_id: tenderId/* , is_leaf: true*/ });
+                    tender.total_price = sum.total_price;
+                    tender.deal_tp = sum.deal_tp;
+                }
+                tender.sum = ctx.helper.add(tender.total_price, tender.change_tp);
+            }
+            ctx.body = {
+              code : 0, msg : '', data : {
+                tender
+              }
+            }
+          } catch (error) {
+            this.log(error);
+                ctx.body = { code: -1, msg: error.toString(), data: null };
+          }
+
+        }
     }
 
     return WeappSubpController;

+ 3 - 3
app/middleware/weapp_auth.js

@@ -28,11 +28,11 @@ module.exports = (options, app) => {
             if (!projectAccount) {
                 throw '账号不存在或未启用';
             }
-            ctx.projectAccount = projectAccount;
-            ctx.project = projectData;
+            ctx.session.sessionUser = projectAccount;
+            ctx.session.sessionProject = projectData;
         } catch (error) {
             if (error.name === 'TokenExpiredError') {
-                ctx.body = { code: 2, msg: '', data: null };
+                ctx.body = { code: 2, msg: '登陆凭证过期,请重新登陆', data: null };
                 return;
             }
             ctx.body = { code: -1, msg: error.toString() || '请登录', data: null };

+ 1 - 0
app/router.js

@@ -1247,4 +1247,5 @@ module.exports = app => {
     app.post('/wx/weapp/attention/unfollow', weappAuth, 'weappAttentionController.unfollow');
     app.get('/wx/weapp/attention/list', weappAuth, 'weappAttentionController.followedList');
     app.get('/wx/weapp/attention/check', weappAuth, 'weappAttentionController.checkFollowing');
+    app.get('/wx/weapp/tender/info', weappAuth, 'weappSubpController.tenderInfoDetail');
 };