|
|
@ -3,7 +3,7 @@ const { QueryTypes } = require('sequelize'); |
|
|
|
const moment = require('moment'); |
|
|
|
const xlsxDownload = require('../../../../utils/xlsxDownload.js'); |
|
|
|
const fs = require('fs'); |
|
|
|
async function reportList (ctx) { |
|
|
|
async function reportList(ctx) { |
|
|
|
try { |
|
|
|
const models = ctx.fs.dc.models; |
|
|
|
const { limit, page, startTime, endTime, keyword, userId, reportType, isTop, asc, projectType, handleState = '', performerId = '', codeRoad } = ctx.query |
|
|
@ -149,7 +149,7 @@ async function reportList (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function reportPosition (ctx) { |
|
|
|
async function reportPosition(ctx) { |
|
|
|
try { |
|
|
|
const models = ctx.fs.dc.models; |
|
|
|
const { startTime, endTime, userId, reportType } = ctx.query |
|
|
@ -199,7 +199,7 @@ async function reportPosition (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function reportDetail (ctx) { |
|
|
|
async function reportDetail(ctx) { |
|
|
|
try { |
|
|
|
const models = ctx.fs.dc.models; |
|
|
|
const { reportId } = ctx.params |
|
|
@ -228,7 +228,7 @@ async function reportDetail (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function reportHandle (ctx) { |
|
|
|
async function reportHandle(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
|
|
|
@ -258,7 +258,7 @@ async function reportHandle (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function createReport (ctx) { |
|
|
|
async function createReport(ctx) { |
|
|
|
try { |
|
|
|
const { userId } = ctx.fs.api |
|
|
|
const models = ctx.fs.dc.models; |
|
|
@ -280,7 +280,7 @@ async function createReport (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function deleteReport (ctx) { |
|
|
|
async function deleteReport(ctx) { |
|
|
|
try { |
|
|
|
const models = ctx.fs.dc.models; |
|
|
|
const { reportId } = ctx.params; |
|
|
@ -303,7 +303,7 @@ async function deleteReport (ctx) { |
|
|
|
|
|
|
|
// TODO 小程序填写道路名称的时候的道路筛选 是一起都返回 还是不断传关键字搜索返回
|
|
|
|
|
|
|
|
async function spotPrepare (ctx) { |
|
|
|
async function spotPrepare(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const sequelize = ctx.fs.dc.orm; |
|
|
@ -375,7 +375,7 @@ async function spotPrepare (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function spotCheck (ctx) { |
|
|
|
async function spotCheck(ctx) { |
|
|
|
const transaction = await ctx.fs.dc.orm.transaction(); |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
@ -477,7 +477,7 @@ async function spotCheck (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
async function spotCheckDetail (ctx) { |
|
|
|
async function spotCheckDetail(ctx) { |
|
|
|
const { models } = ctx.fs.dc |
|
|
|
const { startTime, endTime } = ctx.query |
|
|
|
try { |
|
|
@ -516,7 +516,7 @@ async function spotCheckDetail (ctx) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
async function roadSpotPrepare (ctx) { |
|
|
|
async function roadSpotPrepare(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const sequelize = ctx.fs.dc.orm; |
|
|
@ -594,7 +594,7 @@ async function roadSpotPrepare (ctx) { |
|
|
|
'乡': `route_code LIKE 'Y%'`, |
|
|
|
'村': `route_code LIKE 'C%'` |
|
|
|
} |
|
|
|
async function getRoadTotalMileage (key, otherWhere = []) { |
|
|
|
async function getRoadTotalMileage(key, otherWhere = []) { |
|
|
|
let res = await sequelize.query(` |
|
|
|
SELECT |
|
|
|
SUM(COALESCE(CAST(chainage_mileage AS DOUBLE PRECISION), 0)) AS total_mileage |
|
|
@ -606,7 +606,7 @@ async function roadSpotPrepare (ctx) { |
|
|
|
return res[0][0].total_mileage |
|
|
|
} |
|
|
|
|
|
|
|
async function getRoadSpot (key, lastRoadIds = [], inOrNot, otherWhere = []) { |
|
|
|
async function getRoadSpot(key, lastRoadIds = [], inOrNot, otherWhere = []) { |
|
|
|
if (!lastRoadIds.length && !inOrNot) { |
|
|
|
return [] |
|
|
|
} |
|
|
@ -625,11 +625,11 @@ async function roadSpotPrepare (ctx) { |
|
|
|
`, { type: QueryTypes.SELECT });
|
|
|
|
} |
|
|
|
|
|
|
|
async function spotRoadId (key, lastRoadIds, targetMileage, otherWhere = [], villageIdList = []) { |
|
|
|
async function spotRoadId(key, lastRoadIds, targetMileage, otherWhere = [], villageIdList = []) { |
|
|
|
let spotRoadIds = [] |
|
|
|
let accumulationMileage = 0 |
|
|
|
|
|
|
|
async function filterRoad (otherWhere, getRepeat = true) { |
|
|
|
async function filterRoad(otherWhere, getRepeat = true) { |
|
|
|
|
|
|
|
if (key == '村' && getRepeat == true) { |
|
|
|
|
|
|
@ -657,6 +657,7 @@ async function roadSpotPrepare (ctx) { |
|
|
|
spotRoadIds.push(r.id) |
|
|
|
accumulationMileage += parseFloat(r.chainage_mileage) |
|
|
|
if (accumulationMileage >= targetMileage) { |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
@ -684,13 +685,17 @@ async function roadSpotPrepare (ctx) { |
|
|
|
await filterRoad(otherWhere, true) |
|
|
|
} |
|
|
|
|
|
|
|
return spotRoadIds |
|
|
|
return [spotRoadIds, accumulationMileage] |
|
|
|
} |
|
|
|
let villageMil = 0, townMil = 0, countryMil = 0; |
|
|
|
|
|
|
|
// 抽县
|
|
|
|
const countryRoadTotalMileage = await getRoadTotalMileage('县') |
|
|
|
const countryRoadNeedMileage = countryRoadTotalMileage * countyPercentage / 100 |
|
|
|
let spotCountyRoadIds = await spotRoadId('县', lastCountyRoadIds, countryRoadNeedMileage, []) |
|
|
|
let spotCountyRoadIdsArr = await spotRoadId('县', lastCountyRoadIds, countryRoadNeedMileage, []) |
|
|
|
let spotCountyRoadIds = spotCountyRoadIdsArr[0] |
|
|
|
let countryMil_ = spotCountyRoadIdsArr[1] |
|
|
|
if (countryMil_) countryMil += countryMil_; |
|
|
|
|
|
|
|
// 抽乡
|
|
|
|
const allTownCodeRes = await sequelize.query(` |
|
|
@ -705,15 +710,18 @@ async function roadSpotPrepare (ctx) { |
|
|
|
let spotTownRoadIds = [] |
|
|
|
let spotVillageRoadIds = [] |
|
|
|
let spotVillageIds = [] |
|
|
|
|
|
|
|
for await (let t of allTownCodeRes) { |
|
|
|
// 遍历每个乡镇并抽取
|
|
|
|
let otherWhere = [`township_code='${t.township_code}'`] |
|
|
|
const townRoadTotalMileage = await getRoadTotalMileage('乡', otherWhere) |
|
|
|
const townRoadNeedMileage = townRoadTotalMileage * 25 / 100 |
|
|
|
|
|
|
|
let spotTownRoadIds_ = await spotRoadId('乡', lastTownRoadIds, townRoadNeedMileage, otherWhere) |
|
|
|
let spotTownRoadIdsArr = await spotRoadId('乡', lastTownRoadIds, townRoadNeedMileage, otherWhere) |
|
|
|
let spotTownRoadIds_ = spotTownRoadIdsArr[0] |
|
|
|
let townMil_ = spotTownRoadIdsArr[1] |
|
|
|
spotTownRoadIds = spotTownRoadIds.concat(spotTownRoadIds_) |
|
|
|
|
|
|
|
if (townMil_) townMil += townMil_ |
|
|
|
// 抽村
|
|
|
|
const villageRoadTotalMileage = await getRoadTotalMileage('村', otherWhere) |
|
|
|
const villageRoadNeedMileage = villageRoadTotalMileage * 10 / 100 |
|
|
@ -755,8 +763,11 @@ async function roadSpotPrepare (ctx) { |
|
|
|
villageCheckIdList.unshift(spotFirstVillageId) |
|
|
|
villageCheckIdList = [...(new Set(villageCheckIdList))] |
|
|
|
|
|
|
|
let spotVillageRoadIds_ = await spotRoadId('村', lastVillageRoadRoadIds, villageRoadNeedMileage, otherWhere, villageCheckIdList) |
|
|
|
let spotVillageRoadIdsArr = await spotRoadId('村', lastVillageRoadRoadIds, villageRoadNeedMileage, otherWhere, villageCheckIdList) |
|
|
|
let spotVillageRoadIds_ = spotVillageRoadIdsArr[0] |
|
|
|
let villageMil_ = spotVillageRoadIdsArr[1] |
|
|
|
spotVillageRoadIds = spotVillageRoadIds.concat(spotVillageRoadIds_) |
|
|
|
if (villageMil_) villageMil += villageMil_ |
|
|
|
} |
|
|
|
|
|
|
|
const previewRes = await models.RoadSpotCheckPreview.create({ |
|
|
@ -766,7 +777,10 @@ async function roadSpotPrepare (ctx) { |
|
|
|
townshipRoadId: spotTownRoadIds, |
|
|
|
villageRoadId: spotVillageRoadIds, |
|
|
|
villageId: spotVillageIds, |
|
|
|
checked: false |
|
|
|
checked: false, |
|
|
|
villageMil, |
|
|
|
townMil, |
|
|
|
countryMil |
|
|
|
}) |
|
|
|
|
|
|
|
ctx.status = 200; |
|
|
@ -775,6 +789,10 @@ async function roadSpotPrepare (ctx) { |
|
|
|
spotCountyRoadCount: spotCountyRoadIds.length, |
|
|
|
spotTownRoadCount: spotTownRoadIds.length, |
|
|
|
spotVillageRoadCount: spotVillageRoadIds.length, |
|
|
|
villageMil, |
|
|
|
townMil, |
|
|
|
countryMil |
|
|
|
|
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); |
|
|
@ -785,7 +803,7 @@ async function roadSpotPrepare (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function confirmRoadSpot (ctx) { |
|
|
|
async function confirmRoadSpot(ctx) { |
|
|
|
const transaction = await ctx.fs.dc.orm.transaction(); |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
@ -845,7 +863,7 @@ async function confirmRoadSpot (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function roadSpotList (ctx) { |
|
|
|
async function roadSpotList(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { startTime, endTime, page, limit } = ctx.query |
|
|
@ -896,7 +914,7 @@ async function roadSpotList (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function roadSpotDetail (ctx) { |
|
|
|
async function roadSpotDetail(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { previewId, keyword } = ctx.query |
|
|
@ -933,7 +951,7 @@ async function roadSpotDetail (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function roadSpotChange (ctx) { |
|
|
|
async function roadSpotChange(ctx) { |
|
|
|
const transaction = await ctx.fs.dc.orm.transaction(); |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
@ -955,7 +973,7 @@ async function roadSpotChange (ctx) { |
|
|
|
} |
|
|
|
|
|
|
|
let previewUpdated = false |
|
|
|
async function updatePreview (key) { |
|
|
|
async function updatePreview(key) { |
|
|
|
if (previewUpdated) return |
|
|
|
|
|
|
|
if (previewRes[key] && previewRes[key].includes(originRoadId)) { |
|
|
@ -1040,7 +1058,7 @@ async function roadSpotChange (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function roadSpotChangList (ctx) { |
|
|
|
async function roadSpotChangList(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { startTime, endTime, page, limit } = ctx.query |
|
|
@ -1093,7 +1111,7 @@ async function roadSpotChangList (ctx) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function exportSpotRode (ctx) { |
|
|
|
async function exportSpotRode(ctx) { |
|
|
|
try { |
|
|
|
const { models } = ctx.fs.dc; |
|
|
|
const { previewId } = ctx.query |
|
|
@ -1143,7 +1161,7 @@ async function exportSpotRode (ctx) { |
|
|
|
title: '养护次数(次)', |
|
|
|
},] |
|
|
|
|
|
|
|
function judgeLevel (routeCode) { |
|
|
|
function judgeLevel(routeCode) { |
|
|
|
if (routeCode) { |
|
|
|
if (routeCode.startsWith('X')) { |
|
|
|
return '县道' |
|
|
|