123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- 'use strict';
- /**
- * 决策大屏用户查看权限-数据模型
- *
- * @author ellisran
- * @date 2021/09/23
- * @version
- */
- const accountGroup = require('../const/account_group').group;
- const paymentConst = require('../const/payment');
- const auditConst = require('../const/audit').stage;
- module.exports = app => {
- class paymentTender extends app.BaseService {
- constructor(ctx) {
- super(ctx);
- this.tableName = 'payment_tender';
- }
- async getList(uid, auditPermission) {
- if (auditPermission.view_all) {
- const sql1 = 'SELECT pt.*, pa.name as user_name FROM ?? as pt LEFT JOIN ?? as pa ON pt.`uid` = pa.`id` WHERE pid = ?';
- const params1 = [this.tableName, this.ctx.service.projectAccount.tableName, this.ctx.session.sessionProject.id];
- return await this.db.query(sql1, params1);
- }
- const typeValues = [];
- const projectInfo = await this.ctx.service.project.getDataById(this.ctx.session.sessionProject.id);
- const modes = projectInfo.payment_setting ? JSON.parse(projectInfo.payment_setting) : this._.cloneDeep(paymentConst.setting_modes);
- for (const m in paymentConst.setting_modes) {
- if (!modes[m]) modes[m] = this._.cloneDeep(paymentConst.setting_modes[m]);
- if (modes[m].checked) {
- typeValues.push(modes[m].value);
- }
- }
- if (typeValues.length === 0) {
- return -1;
- }
- const sql = 'SELECT pt.*, pa.name as user_name FROM ?? as pt LEFT JOIN ?? as pa ON pt.`uid` = pa.`id` WHERE pid = ? AND (pt.`uid` = ? ' +
- 'OR pt.`id` in (SELECT pr.`tender_id` FROM ?? as pr WHERE pr.`uid` = ? AND pr.`type` IN (' + this.ctx.helper.getInArrStrSqlFilter(typeValues) + '))' +
- 'OR pt.`id` in (SELECT pd.`tender_id` FROM ?? as pd WHERE pd.`uid` = ?)' +
- 'OR pt.`id` in (SELECT pda.`tender_id` FROM ?? as pda LEFT JOIN ?? as pd ON pda.`tender_id` = pd.`tender_id` ' +
- 'WHERE pd.`status` != ' + auditConst.status.uncheck + ' AND pda.`aid` = ?)' +
- 'OR pt.`id` in (SELECT pra.`tender_id` FROM ?? as pra LEFT JOIN ?? as pd ON pra.`tender_id` = pd.`tender_id` ' +
- 'WHERE pd.`status` != ' + auditConst.status.uncheck + ' AND pd.`status` !=' + auditConst.status.checkNo + ' AND pra.`uid` = ?))';
- const params = [this.tableName, this.ctx.service.projectAccount.tableName, this.ctx.session.sessionProject.id, uid,
- this.ctx.service.paymentTenderRpt.tableName, uid,
- this.ctx.service.paymentDetail.tableName, uid,
- this.ctx.service.paymentDetailAudit.tableName, this.ctx.service.paymentDetail.tableName, uid,
- this.ctx.service.paymentRptAudit.tableName, this.ctx.service.paymentDetail.tableName, uid];
- return await this.db.query(sql, params);
- }
- async addTender(projectId, uid, folderId, name) {
- const transaction = await this.db.beginTransaction();
- try {
- const folderInfo = await this.ctx.service.paymentFolder.getDataById(folderId);
- if (!folderInfo || folderInfo.is_leaf === 0) {
- throw '文件夹不存在或存在子目录不能新建标段';
- }
- const insertData = {
- pid: projectId,
- uid,
- name,
- folder_id: folderId,
- in_time: new Date(),
- };
- const result = await transaction.insert(this.tableName, insertData);
- const updateData = [
- { id: folderInfo.id, had_tender: 1 },
- ];
- // 更新父节点had_tender值
- if (folderInfo.parent_path) {
- const parentFolderIds = folderInfo.parent_path.split('-');
- for (const pf of parentFolderIds) {
- updateData.push({
- id: parseInt(pf),
- had_tender: 1,
- });
- }
- }
- await transaction.updateRows(this.ctx.service.paymentFolder.tableName, updateData);
- // 同时生成固定的报表表单
- await this.ctx.service.paymentTenderRpt.setConstRpt(transaction, result.insertId, uid);
- await transaction.commit();
- } catch (err) {
- await transaction.rollback();
- throw err;
- }
- }
- async deleteTender(id) {
- const transaction = await this.db.beginTransaction();
- try {
- const tenderInfo = await this.getDataById(id);
- if (!tenderInfo) {
- throw '标段不存在';
- }
- if (tenderInfo.uid !== this.ctx.session.sessionUser.accountId && !this.ctx.session.sessionUser.is_admin) {
- throw '您没有权限删除此标段';
- }
- const had_detail = await this.ctx.service.paymentDetail.haveDetail2Tender(id);
- if (had_detail) {
- throw '请先删除所有报表表单详情';
- }
- const folderInfo = await this.ctx.service.paymentFolder.getDataById(tenderInfo.folder_id);
- if (!folderInfo) {
- throw '文件夹不存在';
- }
- // 判断folderInfo下是否还存在tender,不存在则把had_tender为0,并判断父节点是否需要也为0
- const leafTenderCount = await transaction.count(this.tableName, { folder_id: folderInfo.id });
- if (leafTenderCount === 1) {
- const updateDatas = [{
- id: folderInfo.id,
- had_tender: 0,
- }];
- if (folderInfo.parent_path) {
- const parentFolderIds = folderInfo.parent_path.split('-').reverse();
- for (const pfid of parentFolderIds) {
- const parentFolderId = parseInt(pfid);
- const leafFolderCount = await transaction.count(this.ctx.service.paymentFolder.tableName, { parent_id: parentFolderId, had_tender: 1 });
- if (leafFolderCount === 1) {
- updateDatas.push({
- id: parentFolderId,
- had_tender: 0,
- });
- } else {
- break;
- }
- }
- }
- await transaction.updateRows(this.ctx.service.paymentFolder.tableName, updateDatas);
- }
- await transaction.delete(this.ctx.service.paymentTenderRpt.tableName, { tender_id: id });
- await transaction.delete(this.ctx.service.paymentShenpiAudit.tableName, { tid: id });
- await transaction.delete(this.tableName, { id });
- await transaction.commit();
- } catch (err) {
- await transaction.rollback();
- throw err;
- }
- }
- // async getChildrenByParentId(parentId, transaction = null) {
- // const list = await this.getAllDataByCondition({ where: { parent_id: parentId } });
- // }
- }
- return paymentTender;
- };
|