Browse Source

抽查导出修改

dev
wenlele 1 year ago
parent
commit
c9f65660c2
  1. 378
      api/app/lib/controllers/data/road.js
  2. 2
      api/app/lib/controllers/data/task.js
  3. 81
      api/app/lib/controllers/report/index.js
  4. 1
      api/utils/xlsxDownload.js

378
api/app/lib/controllers/data/road.js

@ -2,211 +2,211 @@
const roadKeyMap = require('./road.json') const roadKeyMap = require('./road.json')
async function importIn (ctx) { async function importIn (ctx) {
// 数据导入 // 数据导入
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { level, } = ctx.query; const { level, } = ctx.query;
const data = ctx.request.body; const data = ctx.request.body;
const roadRes = await models.Road.findAll({ const roadRes = await models.Road.findAll({
where: { where: {
level, level,
del: false del: false
} }
}) })
let preCreateArr = [] let preCreateArr = []
for (let d of data) { for (let d of data) {
if (roadRes.some(r => r.routeCode + r.sectionNo == d['路线代码'] + d['路段序号'])) { if (roadRes.some(r => r.routeCode + r.sectionNo == d['路线代码'] + d['路段序号'])) {
//repeat //repeat
} else { } else {
// await models.Road.create(d); // await models.Road.create(d);
} }
} }
ctx.status = 204 ctx.status = 204
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
message: typeof error == 'string' ? error : undefined message: typeof error == 'string' ? error : undefined
} }
} }
} }
async function get (ctx) { async function get (ctx) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { codePrefix, level, road, sectionStart, sectionEnd, alterId } = ctx.query; const { codePrefix, level, road, sectionStart, sectionEnd, alterId } = ctx.query;
let findOption = { let findOption = {
where: { where: {
del: false del: false
}, },
order: [['id', 'DESC']], order: [['id', 'DESC']],
} }
if (level == '村') { if (level == '村') {
findOption.include = [{ model: models.Village, }] findOption.include = [{ model: models.Village, }]
} }
if (alterId) { if (alterId) {
findOption.where.id = { $notIn: alterId } findOption.where.id = { $notIn: alterId }
} }
if (codePrefix) { if (codePrefix) {
findOption.where.routeCode = { $like: `${codePrefix}%` } findOption.where.routeCode = { $like: `${codePrefix}%` }
} }
if (level) { if (level) {
findOption.where.level = level findOption.where.level = level
} }
if (road || sectionStart || sectionEnd) { if (road || sectionStart || sectionEnd) {
findOption.where['$or'] = {} findOption.where['$or'] = {}
if (road) { if (road) {
findOption.where['$or']. findOption.where['$or'].
routeName = { $like: `%${road}%` } routeName = { $like: `%${road}%` }
} }
if (sectionStart) { if (sectionStart) {
findOption.where['$or']. findOption.where['$or'].
startingPlaceName = { $like: `%${sectionStart}%` } startingPlaceName = { $like: `%${sectionStart}%` }
} }
if (sectionEnd) { if (sectionEnd) {
findOption.where['$or']. findOption.where['$or'].
stopPlaceName = { $like: `%${sectionEnd}%` } stopPlaceName = { $like: `%${sectionEnd}%` }
} }
} }
const roadRes = await models.Road.findAll(findOption) const roadRes = await models.Road.findAll(findOption)
ctx.status = 200; ctx.status = 200;
ctx.body = roadRes ctx.body = roadRes
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
message: typeof error == 'string' ? error : undefined message: typeof error == 'string' ? error : undefined
} }
} }
} }
async function getRoadSection (ctx) { async function getRoadSection (ctx) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { level, road, sectionStart, sectionEnd } = ctx.query; const { level, road, sectionStart, sectionEnd } = ctx.query;
let findOption = { let findOption = {
where: {}, where: { del: false },
order: [['id', 'DESC']], order: [['id', 'DESC']],
attributes: ['id', 'routeName', 'startingPlaceName', 'stopPlaceName', 'routeCode', 'sectionNo', 'level'] attributes: ['id', 'routeName', 'startingPlaceName', 'stopPlaceName', 'routeCode', 'sectionNo', 'level']
} }
if (level) { if (level) {
findOption.where.level = level findOption.where.level = level
} }
if (road || sectionStart || sectionEnd) { if (road || sectionStart || sectionEnd) {
findOption.where['$or'] = {} findOption.where['$or'] = {}
if (road) { if (road) {
findOption.where['$or']. findOption.where['$or'].
routeName = { $like: `%${road}%` } routeName = { $like: `%${road}%` }
} }
if (sectionStart) { if (sectionStart) {
findOption.where['$or']. findOption.where['$or'].
startingPlaceName = { $like: `%${sectionStart}%` } startingPlaceName = { $like: `%${sectionStart}%` }
} }
if (sectionEnd) { if (sectionEnd) {
findOption.where['$or']. findOption.where['$or'].
stopPlaceName = { $like: `%${sectionEnd}%` } stopPlaceName = { $like: `%${sectionEnd}%` }
} }
} }
const roadRes = await models.Road.findAll(findOption) const roadRes = await models.Road.findAll(findOption)
ctx.status = 200; ctx.status = 200;
ctx.body = roadRes ctx.body = roadRes
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
message: typeof error == 'string' ? error : undefined message: typeof error == 'string' ? error : undefined
} }
} }
} }
async function edit (ctx) { async function edit (ctx) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const data = ctx.request.body; const data = ctx.request.body;
if (!data.roadId) { if (!data.roadId) {
await models.Road.create(data) await models.Road.create(data)
} else { } else {
await models.Road.update( await models.Road.update(
data, { data, {
where: { where: {
id: data.roadId id: data.roadId
} }
}) })
} }
ctx.status = 204 ctx.status = 204
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
message: typeof error == 'string' ? error : undefined message: typeof error == 'string' ? error : undefined
} }
} }
} }
async function del (ctx) { async function del (ctx) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { roadId } = ctx.params; const { roadId } = ctx.params;
// await models.Road.destroy({ // await models.Road.destroy({
// where: { // where: {
// id: roadId // id: roadId
// } // }
// }) // })
await models.Road.update({ await models.Road.update({
del: true del: true
}, { }, {
where: { where: {
id: roadId id: roadId
} }
}) })
ctx.status = 204 ctx.status = 204
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
message: typeof error == 'string' ? error : undefined message: typeof error == 'string' ? error : undefined
} }
} }
} }
async function getVillageList (ctx) { async function getVillageList (ctx) {
try { try {
const models = ctx.fs.dc.models; const models = ctx.fs.dc.models;
const { } = ctx.query; const { } = ctx.query;
const res = await models.Village.findAll() const res = await models.Village.findAll()
ctx.status = 200; ctx.status = 200;
ctx.body = res ctx.body = res
} catch (error) { } catch (error) {
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`);
ctx.status = 400; ctx.status = 400;
ctx.body = { ctx.body = {
message: typeof error == 'string' ? error : undefined message: typeof error == 'string' ? error : undefined
} }
} }
} }
module.exports = { module.exports = {
importIn, importIn,
getRoadSection, getRoadSection,
get, edit, del, get, edit, del,
getVillageList, getVillageList,
}; };

2
api/app/lib/controllers/data/task.js

@ -18,7 +18,7 @@ async function getTask (ctx) {
{ {
attributes: ['id', 'routeName', 'routeCode'], attributes: ['id', 'routeName', 'routeCode'],
model: models.Road, model: models.Road,
where: query.id == undefined ? {} : whereRoadOpt where: query.id == undefined ? {del: false} : whereRoadOpt
}, },
{ {

81
api/app/lib/controllers/report/index.js

@ -1194,58 +1194,75 @@ async function exportSpotRode (ctx) {
}] }]
}) })
let town = await models.Town.findAll({}) || []
let village = await models.Village.findAll({ attributes: ['id', 'name'] }) || []
const header = [{ const header = [{
key: 'level', key: 'townshipCode',
title: '道路类型', title: '所属乡镇',
}, {
key: 'villageId',
title: '所属行政村',
}, { }, {
key: 'routeName', key: 'routeName',
title: '路线名称', title: '路名称',
}, { }, {
key: 'routeCode', key: 'routeCode',
title: '路线代码', title: '道路代码',
}, {
key: 'startStation',
title: '起点桩号',
}, {
key: 'stopStation',
title: '止点桩号',
}, {
key: 'technicalLevel',
title: '技术等级',
}, { }, {
key: 'sectionNo', key: 'pavementType',
title: '路段序号', title: '路面类型',
}, { }, {
key: 'startingPlaceName', key: 'pavementWidth',
title: '起点名称', title: '路面宽度',
}, { }, {
key: 'stopPlaceName', key: 'subgradeWidth',
title: '止点名称', title: '路基宽度',
}, { }, {
key: 'chainageMileage', key: 'chainageMileage',
title: '里程', title: '桩号里程',
}, { }, {
key: 'maintenanceCount', key: 'maintenanceCount',
title: '养护次数(次)', title: '养护次数(次)',
},] },]
function judgeLevel (routeCode) { // function judgeLevel (routeCode) {
if (routeCode) { // if (routeCode) {
if (routeCode.startsWith('X')) { // if (routeCode.startsWith('X')) {
return '县道' // return '县道'
} else if (routeCode.startsWith('Y')) { // } else if (routeCode.startsWith('Y')) {
return '乡道' // return '乡道'
} else if (routeCode.startsWith('C')) { // } else if (routeCode.startsWith('C')) {
return '村道' // return '村道'
} // }
return '' // return ''
} else { // } else {
return '' // return ''
} // }
} // }
let exportData = listRes.map(({ dataValues: item }) => { let exportData = listRes.map(({ dataValues: item }) => {
let road = item.road && item.road.dataValues || {} let road = item.road && item.road.dataValues || {}
return { return {
level: townshipCode: (town.find(d => d.code == road.townshipCode) || {}).name || '--',
judgeLevel(road.routeCode) villageId: (village.find(d => road.villageId == d.id) || {}).name || '--',
,
routeName: road.routeName, routeName: road.routeName,
routeCode: road.routeCode, routeCode: road.routeCode,
sectionNo: road.sectionNo, startStation: road.startStation,
startingPlaceName: road.startingPlaceName, stopStation: road.stopStation,
stopPlaceName: road.stopPlaceName, technicalLevel: road.technicalLevel,
pavementType: road.pavementType,
pavementWidth: road.pavementWidth,
subgradeWidth: road.subgradeWidth,
chainageMileage: road.chainageMileage, chainageMileage: road.chainageMileage,
maintenanceCount: item.maintenanceCount, maintenanceCount: item.maintenanceCount,
} }
@ -1253,8 +1270,8 @@ async function exportSpotRode (ctx) {
const fileName = `${moment(previewRes.date).format('YYYY年MM月DD日HH时mm分')}道路抽查记录` + '.csv' const fileName = `${moment(previewRes.date).format('YYYY年MM月DD日HH时mm分')}道路抽查记录` + '.csv'
const filePath = await xlsxDownload.simpleExcelDown({ const filePath = await xlsxDownload.simpleExcelDown({
data: exportData, header, fileName: fileName
// data: exportData, header, fileName: fileName, gather: { data: previewRes.gather || [] } // data: exportData, header, fileName: fileName, gather: { data: previewRes.gather || [] }
data: exportData, header, fileName: fileName,
}) })
const fileData = fs.readFileSync(filePath); const fileData = fs.readFileSync(filePath);

1
api/utils/xlsxDownload.js

@ -108,6 +108,7 @@ async function gatherSheet ({ sheet_2, data = [] }) {
style.border.bottom = 'thin'; style.border.bottom = 'thin';
style.border.bottomColor = '#000000'; style.border.bottomColor = '#000000';
for (let i = 0; i < data.length; i++) { for (let i = 0; i < data.length; i++) {
const row = sheet_2.addRow(); const row = sheet_2.addRow();
for (let h of header) { for (let h of header) {

Loading…
Cancel
Save