Przeglądaj źródła

巡检bug修复及调整

ellisran 3 dni temu
rodzic
commit
83638deedf

+ 2 - 0
app/const/audit.js

@@ -1503,6 +1503,7 @@ const inspection = (function() {
     statusButton[status.checking] = '审批';
     statusButton[status.checked] = '';
     statusButton[status.checkNo] = '重新上报';
+    statusButton[status.rectification] = '整改';
     // statusButton[status.revise] = '修订';
 
     // 按钮样式
@@ -1511,6 +1512,7 @@ const inspection = (function() {
     statusButtonClass[status.checking] = 'btn-success';
     statusButtonClass[status.checked] = '';
     statusButtonClass[status.checkNo] = 'btn-warning';
+    statusButtonClass[status.rectification] = 'btn-success';
     // statusButtonClass[status.revise] = 'btn-warning';
     return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass, filter, statusButton, statusButtonClass };
 })();

+ 1 - 1
app/controller/dashboard_controller.js

@@ -107,7 +107,7 @@ module.exports = app => {
                 const spInspection = subProject.page_show.qualityInspection ? ctx.helper._.filter(auditShenpiInspection, { spid: subProject.id }) : [];
                 noticeList.push(...ctx.helper.addKeyValue4ObjArray(spInspection, 'shenpi_type', 'inspection'));
                 const spSafeInspection = subProject.page_show.safeInspection ? ctx.helper._.filter(auditShenpiSafeInspection, { spid: subProject.id }) : [];
-                noticeList.push(...ctx.helper.addKeyValue4ObjArray(spInspection, 'shenpi_type', 'safe_inspection'));
+                noticeList.push(...ctx.helper.addKeyValue4ObjArray(spSafeInspection, 'shenpi_type', 'safeInspection'));
             }
             const noticeDayList = [];
             noticeList = ctx.helper._.orderBy(noticeList, ['shenpi_time'], ['desc']);

+ 8 - 4
app/controller/quality_controller.js

@@ -608,8 +608,12 @@ module.exports = app => {
                 const inspectionList = await ctx.service.qualityInspection.getListByStatus(ctx.tender.id, status, 1, sorts, orders);
                 const total = await ctx.service.qualityInspection.getCountByStatus(ctx.tender.id, status);
                 const allAttList = inspectionList.length > 0 ? await ctx.service.qualityInspectionAtt.getAllAtt(ctx.tender.id, ctx.helper._.map(inspectionList, 'id')) : [];
-                for (const item of inspectionList) {
-                    item.attList = ctx.helper._.filter(allAttList, { qiid: item.id });
+                for (const c of inspectionList) {
+                    c.attList = ctx.helper._.filter(allAttList, { qiid: c.id });
+                    c.curAuditors = await ctx.service.qualityInspectionAudit.getAuditorsByStatus(c.id, c.status, c.times);
+                    if (c.status === auditConst.inspection.status.checkNoPre) {
+                        c.curAuditors2 = await ctx.service.qualityInspectionAudit.getAuditorsByStatus(c.id, auditConst.inspection.status.checking, c.times);
+                    }
                 }
                 // 分页相关
                 const page = ctx.page;
@@ -676,8 +680,8 @@ module.exports = app => {
                 await this.layout('quality/inspection.ejs', renderData, 'quality/inspection_modal.ejs');
             } catch (err) {
                 ctx.log(err);
-                ctx.postError(err, '无法查看质量管理数据');
-                ctx.redirect(`/sp/${ctx.subProject.id}/quality/tender`);
+                ctx.postError(err, '无法查看质量巡检数据');
+                ctx.redirect(`/sp/${ctx.subProject.id}/quality/inspection`);
             }
         }
 

+ 6 - 2
app/controller/safe_controller.js

@@ -145,8 +145,12 @@ module.exports = app => {
                 const inspectionList = await ctx.service.safeInspection.getListByStatus(ctx.tender.id, status, 1, sorts, orders);
                 const total = await ctx.service.safeInspection.getCountByStatus(ctx.tender.id, status);
                 const allAttList = inspectionList.length > 0 ? await ctx.service.safeInspectionAtt.getAllAtt(ctx.tender.id, ctx.helper._.map(inspectionList, 'id')) : [];
-                for (const item of inspectionList) {
-                    item.attList = ctx.helper._.filter(allAttList, { qiid: item.id });
+                for (const c of inspectionList) {
+                    c.attList = ctx.helper._.filter(allAttList, { qiid: c.id });
+                    c.curAuditors = await ctx.service.safeInspectionAudit.getAuditorsByStatus(c.id, c.status, c.times);
+                    if (c.status === auditConst.inspection.status.checkNoPre) {
+                        c.curAuditors2 = await ctx.service.safeInspectionAudit.getAuditorsByStatus(c.id, auditConst.inspection.status.checking, c.times);
+                    }
                 }
                 // 分页相关
                 const page = ctx.page;

+ 36 - 0
app/service/quality_inspection_audit.js

@@ -57,6 +57,42 @@ module.exports = app => {
             return await this.db.query(sql, sqlParam);
         }
 
+        async getAuditorsByStatus(qiId, status, times = 1) {
+            let auditor = [];
+            let sql = '';
+            let sqlParam = '';
+            let cur;
+            switch (status) {
+                case auditConst.status.checking :
+                case auditConst.status.checked :
+                case auditConst.status.checkNoPre :
+                case auditConst.status.rectification :
+                    cur = await this.db.queryOne('SELECT * From ?? where qiid = ? AND times = ? AND status = ? ORDER By times DESC, `order` DESC', [this.tableName, qiId, times, status]);
+                    if (!cur) return [];
+
+                    sql = 'SELECT la.`aid`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`qiid`, la.`order`, la.`status`, la.`audit_order`, la.`audit_type` ' +
+                        '  FROM ?? AS la Left Join ?? AS pa On la.`aid` = pa.`id` ' +
+                        '  WHERE la.`qiid` = ? and la.`order` = ? and times = ?';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, qiId, cur.order, times];
+                    auditor = await this.db.query(sql, sqlParam);
+                    break;
+                case auditConst.status.checkNo :
+                    cur = await this.db.queryOne('SELECT * From ?? where qiid = ? AND times = ? AND status = ? ORDER By times DESC, `order` DESC', [this.tableName, qiId, parseInt(times) - 1, status]);
+                    if (!cur) return [];
+
+                    sql = 'SELECT la.`aid`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`qiid`, la.`order`, la.`status`, la.`audit_order`, la.`audit_type` ' +
+                        '  FROM ?? AS la Left Join ?? AS pa On la.`aid` = pa.`id` ' +
+                        '  WHERE la.`qiid` = ? and la.`order` = ? and la.`times` = ?';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, qiId, cur.order, parseInt(times) - 1];
+                    auditor = await this.db.query(sql, sqlParam);
+                    break;
+                case auditConst.status.uncheck:
+                default:
+                    break;
+            }
+            return auditor;
+        }
+
         /**
          * 获取 最新审核顺序
          *

+ 39 - 3
app/service/safe_inspection_audit.js

@@ -57,6 +57,42 @@ module.exports = app => {
             return await this.db.query(sql, sqlParam);
         }
 
+        async getAuditorsByStatus(qiId, status, times = 1) {
+            let auditor = [];
+            let sql = '';
+            let sqlParam = '';
+            let cur;
+            switch (status) {
+                case auditConst.status.checking :
+                case auditConst.status.checked :
+                case auditConst.status.checkNoPre :
+                case auditConst.status.rectification :
+                    cur = await this.db.queryOne('SELECT * From ?? where qiid = ? AND times = ? AND status = ? ORDER By times DESC, `order` DESC', [this.tableName, qiId, times, status]);
+                    if (!cur) return [];
+
+                    sql = 'SELECT la.`aid`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`qiid`, la.`order`, la.`status`, la.`audit_order`, la.`audit_type` ' +
+                        '  FROM ?? AS la Left Join ?? AS pa On la.`aid` = pa.`id` ' +
+                        '  WHERE la.`qiid` = ? and la.`order` = ? and times = ?';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, qiId, cur.order, times];
+                    auditor = await this.db.query(sql, sqlParam);
+                    break;
+                case auditConst.status.checkNo :
+                    cur = await this.db.queryOne('SELECT * From ?? where qiid = ? AND times = ? AND status = ? ORDER By times DESC, `order` DESC', [this.tableName, qiId, parseInt(times) - 1, status]);
+                    if (!cur) return [];
+
+                    sql = 'SELECT la.`aid`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`qiid`, la.`order`, la.`status`, la.`audit_order`, la.`audit_type` ' +
+                        '  FROM ?? AS la Left Join ?? AS pa On la.`aid` = pa.`id` ' +
+                        '  WHERE la.`qiid` = ? and la.`order` = ? and la.`times` = ?';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, qiId, cur.order, parseInt(times) - 1];
+                    auditor = await this.db.query(sql, sqlParam);
+                    break;
+                case auditConst.status.uncheck:
+                default:
+                    break;
+            }
+            return auditor;
+        }
+
         /**
          * 获取 最新审核顺序
          *
@@ -102,7 +138,7 @@ module.exports = app => {
                 if (!addAid) {
                     const insert_members = [{
                         uid: auditorId,
-                        inspection: ['1'],
+                        safe_inspection: ['1'],
                     }];
                     await this.ctx.service.tenderPermission.saveOnePermission(this.ctx.tender.id, [auditorId], insert_members, ['safe_inspection'], transaction);
                 }
@@ -684,9 +720,9 @@ module.exports = app => {
                         if (!addAid) {
                             const insert_members = [{
                                 uid: checkData.rectification_uid,
-                                inspection: ['1'],
+                                safe_inspection: ['1'],
                             }];
-                            await this.ctx.service.tenderPermission.saveOnePermission(inspection.tid, [checkData.rectification_uid], insert_members, ['inspection'], transaction);
+                            await this.ctx.service.tenderPermission.saveOnePermission(inspection.tid, [checkData.rectification_uid], insert_members, ['safe_inspection'], transaction);
                         }
                         await transaction.update(this.ctx.service.safeInspection.tableName, {
                             id: inspection.id, status: auditConst.status.rectification, rectification_uid: checkData.rectification_uid,

+ 21 - 1
app/view/quality/inspection.ejs

@@ -84,7 +84,27 @@
                                 <a class="show-files" href="#file" data-toggle="modal" data-target="#file" data-id="<%- c.id %>"><i class="fa fa-paperclip"></i> <%- c.attList.length > 0 ? c.attList.length : '' %></a>
                             </td>
                             <td class="text-center">
-                                <span class="<%- auditConst.auditStringClass[c.status] %>"><% if (c.status !== auditConst.status.uncheck) { %><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <% } %><%- auditConst.auditString[c.status] %></span>
+                                <% if (c.status === auditConst.status.uncheck && c.uid === ctx.session.sessionUser.accountId) { %>
+                                    <a href="/sp/<%- ctx.subProject.id %>/quality/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                <% } else if ((c.status === auditConst.status.checkNo) && c.curAuditors && c.uid === ctx.session.sessionUser.accountId) { %>
+                                    <a href="/sp/<%- ctx.subProject.id %>/quality/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                <% } else if ((c.status === auditConst.status.checking || c.status === auditConst.status.rectification) && c.curAuditors && c.curAuditors.findIndex(x => { return x.aid === ctx.session.sessionUser.accountId; }) >= 0) { %>
+                                    <% const curAudit = c.curAuditors.find(x => { return x.aid === ctx.session.sessionUser.accountId; }); %>
+                                    <% if (curAudit.status === auditConst.status.checking || curAudit.status === auditConst.status.rectification) { %>
+                                        <a href="/sp/<%- ctx.subProject.id %>/quality/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                    <% } else { %>
+                                        <span class="<%- auditConst.auditStringClass[c.status] %>"><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <%- auditConst.auditString[c.status] %></span>
+                                    <% } %>
+                                <% } else if (c.status === auditConst.status.checkNoPre && c.curAuditor2 && c.curAuditor2.findIndex(x => { return x.aid === ctx.session.sessionUser.accountId; }) >= 0) { %>
+                                    <% const curAudit = c.curAuditors2.find(x => { return x.aid === ctx.session.sessionUser.accountId; }); %>
+                                    <% if (curAudit.status === auditConst.status.checking) { %>
+                                        <a href="/sp/<%- ctx.subProject.id %>/quality/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                    <% } else { %>
+                                        <span class="<%- auditConst.auditStringClass[curAudit.status] %>"><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <%- auditConst.auditString[curAudit.status] %></span>
+                                    <% } %>
+                                <% } else { %>
+                                    <span class="<%- auditConst.auditStringClass[c.status] %>"><% if (c.status !== auditConst.status.uncheck) { %><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <% } %><%- auditConst.auditString[c.status] %></span>
+                                <% } %>
                             </td>
                         </tr>
                     <% } %>

+ 21 - 1
app/view/safe/inspection.ejs

@@ -84,7 +84,27 @@
                                 <a class="show-files" href="#file" data-toggle="modal" data-target="#file" data-id="<%- c.id %>"><i class="fa fa-paperclip"></i> <%- c.attList.length > 0 ? c.attList.length : '' %></a>
                             </td>
                             <td class="text-center">
-                                <span class="<%- auditConst.auditStringClass[c.status] %>"><% if (c.status !== auditConst.status.uncheck) { %><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <% } %><%- auditConst.auditString[c.status] %></span>
+                                <% if (c.status === auditConst.status.uncheck && c.uid === ctx.session.sessionUser.accountId) { %>
+                                    <a href="/sp/<%- ctx.subProject.id %>/safe/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                <% } else if ((c.status === auditConst.status.checkNo) && c.curAuditors && c.uid === ctx.session.sessionUser.accountId) { %>
+                                    <a href="/sp/<%- ctx.subProject.id %>/safe/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                <% } else if ((c.status === auditConst.status.checking || c.status === auditConst.status.rectification) && c.curAuditors && c.curAuditors.findIndex(x => { return x.aid === ctx.session.sessionUser.accountId; }) >= 0) { %>
+                                    <% const curAudit = c.curAuditors.find(x => { return x.aid === ctx.session.sessionUser.accountId; }); %>
+                                    <% if (curAudit.status === auditConst.status.checking || curAudit.status === auditConst.status.rectification) { %>
+                                        <a href="/sp/<%- ctx.subProject.id %>/safe/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                    <% } else { %>
+                                        <span class="<%- auditConst.auditStringClass[c.status] %>"><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <%- auditConst.auditString[c.status] %></span>
+                                    <% } %>
+                                <% } else if (c.status === auditConst.status.checkNoPre && c.curAuditor2 && c.curAuditor2.findIndex(x => { return x.aid === ctx.session.sessionUser.accountId; }) >= 0) { %>
+                                    <% const curAudit = c.curAuditors2.find(x => { return x.aid === ctx.session.sessionUser.accountId; }); %>
+                                    <% if (curAudit.status === auditConst.status.checking) { %>
+                                        <a href="/sp/<%- ctx.subProject.id %>/safe/tender/<%- ctx.tender.id %>/inspection/<%- c.id %>/information" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm"><%- auditConst.statusButton[c.status] %></a>
+                                    <% } else { %>
+                                        <span class="<%- auditConst.auditStringClass[curAudit.status] %>"><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <%- auditConst.auditString[curAudit.status] %></span>
+                                    <% } %>
+                                <% } else { %>
+                                    <span class="<%- auditConst.auditStringClass[c.status] %>"><% if (c.status !== auditConst.status.uncheck) { %><i class="fa fa-circle <%- auditConst.auditStringClass[c.status] %>"></i> <% } %><%- auditConst.auditString[c.status] %></span>
+                                <% } %>
                             </td>
                         </tr>
                     <% } %>