weapp_subp_controller.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. 'use strict';
  2. /**
  3. * weapp控制器
  4. *
  5. * @author Lan
  6. * @date 2025/12/22
  7. * @version
  8. */
  9. const auditConst = require('../const/audit');
  10. const measureType = require('../const/tender').measureType;
  11. module.exports = app => {
  12. class WeappSubpController extends app.BaseController {
  13. async subProjectList(ctx) {
  14. try {
  15. const list = await ctx.service.subProject.getSubProject(ctx.session.sessionProject.id, ctx.session.sessionUser.id, ctx.session.sessionUser.is_admin);
  16. ctx.body = {
  17. code: 0, msg: '', data: {
  18. list,
  19. },
  20. };
  21. } catch (error) {
  22. this.log(error);
  23. ctx.body = { code: -1, msg: '', data: null };
  24. }
  25. }
  26. async subProjectDetail(ctx) {
  27. try {
  28. const { id: subProjectId } = ctx.query;
  29. if (!subProjectId) {
  30. ctx.body = { code: -1, msg: '子项目ID不能为空', data: null };
  31. return;
  32. }
  33. const subProject = await ctx.service.subProject.getDataById(subProjectId);
  34. if (!subProject) {
  35. ctx.body = { code: -1, msg: '子项目不存在', data: null };
  36. return;
  37. }
  38. const pageShow = subProject.page_show ? JSON.parse(subProject.page_show) : {};
  39. const auditList = [];
  40. // 获取待审批的计量期列表
  41. const auditStages = await ctx.service.stageAudit.getAuditStageByWap(ctx.session.sessionUser.id, subProjectId);
  42. auditList.push(...(auditStages.map(item => ({ ...item, type: 'stage', subType: 'stage' }))));
  43. // 获取待审批的变更期
  44. const auditChanges = await ctx.service.changeAudit.getAuditChangeByWap(ctx.session.sessionUser.id, subProjectId);
  45. auditList.push(...(auditChanges.map(item => ({ ...item, type: 'change', subType: 'change' }))));
  46. // 获取待审批的变更立项
  47. if (pageShow.openChangeProject) {
  48. const changeProjects = await ctx.service.changeProjectAudit.getAuditChangeProjectByWap(ctx.session.sessionUser.id, subProjectId);
  49. auditList.push(...(changeProjects.map(item => ({ ...item, type: 'change', subType: 'changeProject' }))));
  50. }
  51. // 获取待审批的变更申请
  52. if (pageShow.openChangeApply) {
  53. const changeApplys = await ctx.service.changeApplyAudit.getAuditChangeApplyByWap(ctx.session.sessionUser.id, subProjectId);
  54. auditList.push(...(changeApplys.map(item => ({ ...item, type: 'change', subType: 'changeApply' }))));
  55. }
  56. // 获取待审批的变更方案
  57. if (pageShow.openChangePlan) {
  58. const changePlans = await ctx.service.changePlanAudit.getAuditChangePlanByWap(ctx.session.sessionUser.id, subProjectId);
  59. auditList.push(...(changePlans.map(item => ({ ...item, type: 'change', subType: 'changePlan' }))));
  60. }
  61. // 获取待审批的台账修订
  62. const ledgerRevises = await ctx.service.reviseAudit.getAuditReviseByWap(ctx.session.sessionUser.id, subProjectId);
  63. auditList.push(...(ledgerRevises.map(item => ({ ...item, type: 'revise', subType: 'revise' }))));
  64. // 获取待审批的预付款
  65. const auditAdvance = await ctx.service.advanceAudit.getAuditAdvanceByWap(ctx.session.sessionUser.id, subProjectId);
  66. auditList.push(...(auditAdvance.map(item => ({ ...item, type: 'advance', subType: 'advance' }))));
  67. // 获取待审批的材料调差
  68. if (pageShow.openMaterial) {
  69. const materialList = await ctx.service.materialAudit.getAuditMaterialByWap(ctx.session.sessionUser.id, subProjectId);
  70. auditList.push(...(materialList.map(item => ({ ...item, type: 'material', subType: 'material' }))));
  71. }
  72. // 获取待审批的质量巡检单
  73. if (pageShow.qualityInspection) {
  74. const qualityInspectionList = await ctx.service.qualityInspectionAudit.getAuditInspectionByWap(ctx.session.sessionUser.id, subProjectId);
  75. auditList.push(...(qualityInspectionList.map(item => ({ ...item, type: 'qualityInspection', subType: 'qualityInspection' }))));
  76. }
  77. // 获取待审批的安全巡检
  78. if (pageShow.safeInspection) {
  79. const safeInspectionList = await ctx.service.safeInspectionAudit.getAuditInspectionByWap(ctx.session.sessionUser.id, subProjectId);
  80. auditList.push(...(safeInspectionList.map(item => ({ ...item, type: 'safeInspection', subType: 'safeInspection' }))));
  81. }
  82. // 获取消息列表
  83. const msgList = await ctx.service.message.getMsgList(ctx.session.sessionProject.id, subProjectId, 1);
  84. ctx.body = {
  85. code: 0, msg: '', data: {
  86. auditList: ctx.helper._.orderBy(auditList, ['begin_time'], ['desc', 'asc']),
  87. msgList,
  88. },
  89. };
  90. } catch (error) {
  91. this.log(error);
  92. ctx.body = { code: -1, msg: '', data: null };
  93. }
  94. }
  95. async tenderInfoDetail(ctx) {
  96. try {
  97. const { id: tenderId } = ctx.query;
  98. const tender = await this.service.tender.getTender(tenderId);
  99. const tenderInfo = await this.service.tenderInfo.getTenderInfo(tenderId);
  100. if (!tender || !tenderInfo) {
  101. throw '标段信息不存在'
  102. }
  103. let bCalcTp = tender.user_id === ctx.session.sessionUser.accountId && (
  104. tender.ledger_status === auditConst.ledger.status.checkNo || tender.ledger_status === auditConst.ledger.status.uncheck);
  105. const stages = await ctx.service.stage.getValidStages(tenderId, false, ctx.session.sessionUser);
  106. const lastStage = stages.length > 0 ? stages[0] : null; // await ctx.service.stage.getLastestStage(ctx.tender.id);
  107. const [change_tp, change_p_tp, change_n_tp, change_valuation_tp, change_unvaluation_tp] = await ctx.service.change.getChangeTp(tenderId);
  108. tender.change_tp = change_tp;
  109. tender.change_p_tp = change_p_tp;
  110. tender.change_n_tp = change_n_tp;
  111. tender.change_valuation_tp = change_valuation_tp;
  112. tender.change_unvaluation_tp = change_unvaluation_tp;
  113. if (lastStage) {
  114. await this.ctx.service.stage.checkStageGatherData(lastStage, ctx.session.sessionUser.is_admin);
  115. if ((!bCalcTp) && tender.measure_type === measureType.gcl.value) {
  116. bCalcTp = lastStage.status !== auditConst.stage.status.checked && !lastStage.readOnly;
  117. }
  118. if (bCalcTp) {
  119. const sum = await this.ctx.service.ledger.addUp({ tender_id: tenderId/* , is_leaf: true*/ });
  120. tender.total_price = sum.total_price;
  121. tender.deal_tp = sum.deal_tp;
  122. }
  123. 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);
  124. tender.gather_tp = ctx.helper.sum([lastStage.contract_tp, lastStage.qc_tp, lastStage.pc_tp]);
  125. tender.end_contract_tp = ctx.helper.sum([lastStage.contract_tp, lastStage.pre_contract_tp, lastStage.contract_pc_tp]);
  126. tender.end_qc_tp = ctx.helper.sum([lastStage.qc_tp, lastStage.pre_qc_tp, lastStage.qc_pc_tp]);
  127. tender.end_positive_qc_tp = ctx.helper.sum([lastStage.positive_qc_tp, lastStage.pre_positive_qc_tp, lastStage.positive_qc_pc_tp]);
  128. tender.end_negative_qc_tp = ctx.helper.sum([lastStage.negative_qc_tp, lastStage.pre_negative_qc_tp, lastStage.negative_qc_pc_tp]);
  129. tender.end_gather_tp = ctx.helper.add(tender.end_contract_tp, tender.end_qc_tp);
  130. tender.pre_gather_tp = ctx.helper.add(lastStage.pre_contract_tp, lastStage.pre_qc_tp);
  131. tender.yf_tp = lastStage.yf_tp;
  132. tender.sf_tp = lastStage.sf_tp;
  133. tender.qc_ratio = ctx.helper.mul(ctx.helper.div(tender.end_qc_tp, tenderInfo.deal_param.contractPrice, 2), 100);
  134. tender.pre_ratio = ctx.helper.mul(ctx.helper.div(tender.pre_gather_tp, tender.sum, 2), 100);
  135. tender.cur_ratio = ctx.helper.mul(ctx.helper.div(tender.gather_tp, tender.sum, 2), 100);
  136. tender.other_tp = ctx.helper.sub(ctx.helper.sub(tender.sum, tender.pre_gather_tp), tender.gather_tp);
  137. tender.other_ratio = Math.max(0, 100 - tender.pre_ratio - tender.cur_ratio);
  138. tender.end_yf_tp = ctx.helper.add(lastStage.yf_tp, lastStage.pre_yf_tp);
  139. tender.end_sf_tp = ctx.helper.add(lastStage.sf_tp, lastStage.pre_sf_tp);
  140. 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);
  141. } else {
  142. if (bCalcTp) {
  143. const sum = await this.ctx.service.ledger.addUp({ tender_id: tenderId/* , is_leaf: true*/ });
  144. tender.total_price = sum.total_price;
  145. tender.deal_tp = sum.deal_tp;
  146. }
  147. tender.sum = ctx.helper.add(tender.total_price, tender.change_tp);
  148. }
  149. ctx.body = {
  150. code : 0, msg : '', data : {
  151. tender
  152. }
  153. }
  154. } catch (error) {
  155. this.log(error);
  156. ctx.body = { code: -1, msg: error.toString(), data: null };
  157. }
  158. }
  159. }
  160. return WeappSubpController;
  161. };